o
    Xεi\#                     @   s   d Z ddlZddlZddlZddlZddlZddlZddlm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Ze
ejZG d	d
 d
eeZdd ZG dd deZdejfddZedkrle  dS dS )zCommand-line interface to gruut    N)Enum)Path)KNOWN_LANGS)TextProcessor)print_graphgruutc                   @   s    e Zd ZdZdZ	 dZ	 dZdS )StdinFormatzFormat of standard inputautolinesdocumentN)__name__
__module____qualname____doc__AUTOLINESDOCUMENT r   r   B/home/ubuntu/.local/lib/python3.10/site-packages/gruut/__main__.pyr      s    r   c                     sd  t tjdk rtdgtttR   td ntjd dkr/ddlm	}  t|  td t
   jr=tjtjd ntjtjd t   jrOd _t j jd	} jr`t|j  jrg j}n-tj} jtjkrv jrvtj}|tjkrtj g}ntj}t tj! rtd
tj"d  j#rt#j$tj% j&d} fdd}d fdd	}nt'j(tj%dd}dd }ddd}||D ]l\}}zG|| j j)  j*oԈ j+  j,  j-  j.  j/  j0 d	\}	}
 jrt1|	|
dd d t|j2|	|
 j3  j4  j5 d}|||| W q t6y/ } zt7|  j8s%t9||W Y d}~qd}~ww dS )zMain entry point   z
Languages:r      z	--version)__version__)levelespeak)default_langmodel_prefixzReading input from stdin...)file	delimiterc                 3   s2    t j|  jd}|D ]}|d }||fV  qd S )Nr   r   )csvreadercsv_delimiter)r
   r    rowtextargsr   r   
input_textc   s   zmain.<locals>.input_textNc                    sZ   t |}| j fdd| D   fdd| D }| j| || d S )Nc                 3   s&    | ]} j d d |D V  qdS )c                 s   s    | ]	}|j r|jV  qd S N)	is_spokenr#   ).0wr   r   r   	<genexpr>m   s    z;main.<locals>.output_sentences.<locals>.<genexpr>.<genexpr>N)word_separatorjoin)r)   sentencer$   r   r   r+   l   s
    
z1main.<locals>.output_sentences.<locals>.<genexpr>c                    s*   g | ]}|D ]}|j r j|j qqS r   )phonemesphoneme_separatorr-   )r)   r.   r*   r$   r   r   
<listcomp>r   s    z2main.<locals>.output_sentences.<locals>.<listcomp>)listappendsentence_separatorr-   phoneme_word_separatorwriterow)	sentenceswriter	text_datar"   r/   r$   r   r   output_sentencesi   s   
zmain.<locals>.output_sentencesT)flushc                 s   s    | D ]}|d fV  qd S r'   r   )r
   liner   r   r   r&      s   c                 S   s"   | D ]}t |}|| qd S r'   )dataclassesasdictwrite)r7   r8   r9   r.   sentence_dictr   r   r   r:      s   
)ssmlpos	phonemizepost_processverbalize_numbersverbalize_currencyverbalize_datesverbalize_timesc                  W   s   t ddd | D S )N c                 s   s    | ]}t |V  qd S r'   )str)r)   ar   r   r   r+      s    z)main.<locals>.<lambda>.<locals>.<genexpr>)_LOGGERdebugr-   )
print_argsr   r   r   <lambda>   s    zmain.<locals>.<lambda>)
print_func)major_breaksminor_breakspunctuationsr'   ):lensysargvprintsortedr2   r   exitr   r   get_argsrM   loggingbasicConfigDEBUGINFOrL   r   r   r   languagesettingsr#   r   r   stdin_formatr   rA   r   stdinreadosisattyfilenostderrr   r8   stdoutr!   	jsonlinesWriterno_pos
no_lexiconno_g2pno_post_process
no_numbersno_currencyno_datesno_timesr   r7   no_major_breaksno_minor_breaksno_punctuation	Exception	exceptionno_failTextProcessingError)r   text_processorr
   ra   r8   r&   r:   r#   r9   graphrootr7   er   r$   r   main*   s   




	


r~   c                   @   s   e Zd ZdZdS )ry   z3Raised when a line of input results in an exceptionN)r   r   r   r   r   r   r   r   ry      s    ry   returnc                  C   s  t jdd} | jddddd | jdd	d
d | jdddd | jddd tD tjdd | jdddd | jdddd | jdddd | jdddd | jdddd | jddd d | jd!dd"d | jd#dd$d | jd%dd&d | jd'dd(d | jd)dd*d | jd+dd,d | jd-dd.d | jd/d0d1 | jd2dd3d | jd4d5d6d | jd7d8d9d | jd:d;d<d | jd=d>d?d | jd@d;dAd | jdBddCd |  S )DzParse command-line argumentsr   )progz-lz
--languagezen-usz&Default language code (default: en-us))defaulthelpr#   *z!Text to tokenize (default: stdin))nargsr   z--ssml
store_truezInput text is SSML)actionr   z--stdin-formatc                 S   s   g | ]}t |jqS r   )rJ   value)r)   vr   r   r   r1      s    zget_args.<locals>.<listcomp>z$Format of stdin text (default: auto))choicesr   r   z--no-numbersz%Disable number replacement (1 -> one)z--no-currencyz/Disable currency replacement ($1 -> one dollar)z
--no-dateszDDisable date replacement (4/1/2021 -> April first twenty twenty one)z
--no-timesz4Disable time replacement (4:01pm -> four oh one P M)z--no-poszDisable part of speech taggerz--no-lexiconz Disable phoneme lexicon databasez--no-g2pz#Disable grapheme to phoneme guesserz--no-punctuationz2Don't output punctuations (quotes, brackets, etc.)z--no-major-breaksz9Don't output major breaks (periods, question marks, etc.)z--no-minor-breaksz4Don't output minor breaks (commas, semicolons, etc.)z--no-post-processz4Disable post-processing of sentences (e.g., liasons)z	--no-failz Skip lines that result in errorsz--espeakz:Use eSpeak versions of lexicons (overrides --model-prefix)z--model-prefixzVSub-directory of gruut language data files with different lexicon, etc. (e.g., espeak))r   z--csvz+Input text is id|text (see --csv-delimiter)z--csv-delimiter|z#Delimiter for input text with --csvz--sentence-separatorz. z/String used to separate sentences in CSV outputz--word-separatorrI   z+String used to separate words in CSV outputz--phoneme-word-separator#z.String used to separate phonemes in CSV outputz--phoneme-separatorz4String used to separate words in CSV output phonemesz--debugzPrint DEBUG messages to console)argparseArgumentParseradd_argumentr   r   
parse_args)parserr   r   r   rZ      s   rZ   __main__)r   r   r   r=   r[   rd   rU   enumr   pathlibr   ri   gruut.constr   gruut.text_processorr   gruut.utilsr   	getLoggerrL   __file__parent_DIRrJ   r   r~   rv   ry   	NamespacerZ   r   r   r   r   r   <module>   s.   

 	y
