o
    
j                     @   s   d dl Z d dlmZ d dlZd dlmZ d dlmZ d dlm	Z	 e
ddZG dd	 d	eZed
krxeddZee  ee  eej ee  ee  edddZeded d  edddZeded d  dS dS )    N)List)IPA)BasePhonemizer)Punctuationgu   ɡc                       s   e Zd ZdZe dddfdef fddZedd Z	dd
ededefddZ
dd Zdd ZedefddZdd Zedd Z  ZS )Gruutu]  Gruut wrapper for G2P

    Args:
        language (str):
            Valid language code for the used backend.

        punctuations (str):
            Characters to be treated as punctuation. Defaults to `Punctuation.default_puncs()`.

        keep_puncs (bool):
            If true, keep the punctuations after phonemization. Defaults to True.

        use_espeak_phonemes (bool):
            If true, use espeak lexicons instead of default Gruut lexicons. Defaults to False.

        keep_stress (bool):
            If true, keep the stress characters after phonemization. Defaults to False.

    Example:

        >>> from TTS.tts.utils.text.phonemizers.gruut_wrapper import Gruut
        >>> phonemizer = Gruut('en-us')
        >>> phonemizer.phonemize("Be a voice, not an! echo?", separator="|")
        'b|i| ə| v|ɔ|ɪ|s, n|ɑ|t| ə|n! ɛ|k|o|ʊ?'
    TFlanguagec                    s"   t  j|||d || _|| _d S )N)punctuations
keep_puncs)super__init__use_espeak_phonemeskeep_stress)selfr   r	   r
   r   r   	__class__ _/home/kuhnn/.local/lib/python3.10/site-packages/TTS/tts/utils/text/phonemizers/gruut_wrapper.pyr   )   s   
zGruut.__init__c                   C   s   dS )Ngruutr   r   r   r   r   name5   s   z
Gruut.name|text	separatorreturnc                    s   g }t j|| j| jdD ]C}|D ]>}|jr(|r |d |j q||jg q|jrNg }|jD ]}| js:t	
|}|t}|rF|| q0|rN|| qq fdd|D }	  d|	}
|
S )u  Convert input text to phonemes.

        Gruut phonemizes the given `str` by seperating each phoneme character with `separator`, even for characters
        that constitude a single sound.

        It doesn't affect 🐸TTS since it individually converts each character to token IDs.

        Examples::
            "hello how are you today?" -> `h|ɛ|l|o|ʊ| h|a|ʊ| ɑ|ɹ| j|u| t|ə|d|e|ɪ`

        Args:
            text (str):
                Text to be converted to phonemes.

            tie (bool, optional) : When True use a '͡' character between
                consecutive characters of a single phoneme. Else separate phoneme
                with '_'. This option requires espeak>=1.49. Default to False.
        )langespeakc                    s   g | ]}  |qS r   )join).0word_phonemesr   r   r   
<listcomp>i   s    z)Gruut.phonemize_gruut.<locals>.<listcomp> )r   	sentencesr   r   is_breakappendr   phonemesr   r   without_stress	translateGRUUT_TRANS_TABLEextendr   )r   r   r   tieph_listsentencewordr   word_phonemeph_wordsphr   r    r   phonemize_gruut9   s.   




zGruut.phonemize_gruutc                 C   s   | j ||ddS )NF)r+   )r2   )r   r   r   r   r   r   
_phonemizem   s   zGruut._phonemizec                 C   s
   t |S )z6Returns True if `language` is supported by the backend)r   is_language_supported)r   r   r   r   r   is_supported_languagep   s   
zGruut.is_supported_languagec                   C   s   t t S )zmGet a dictionary of supported languages.

        Returns:
            List: List of language codes.
        )listr   get_supported_languagesr   r   r   r   supported_languagest   s   zGruut.supported_languagesc                 C   s   t jS )zmGet the version of the used backend.

        Returns:
            str: Version of the used backend.
        )r   __version__)r   r   r   r   version}   s   zGruut.versionc                 C   s   t jdduS )z-Return true if ESpeak is available else falser   N)	importlibutil	find_spec)clsr   r   r   is_available   s   zGruut.is_available)r   F)__name__
__module____qualname____doc__r   default_puncsstrr   staticmethodr   r2   r3   r5   r   r8   r:   classmethodr?   __classcell__r   r   r   r   r      s&    
4r   __main__zen-us)r   F)r   r
   `zhello how are you today?Tzhello how, are you today?)r;   typingr   r   	gruut_ipar   #TTS.tts.utils.text.phonemizers.baser   TTS.tts.utils.text.punctuationr   rE   	maketransr)   r   r@   eprintr8   r:   r   r   r?   	phonemizer   r   r   r   <module>   s(    }

