o
    Pε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Zddlm	Z	 e
dZe	ejZed Zdd Zdd	 Zd
d Zdd Zdd Zdd ZdejfddZedkr[e  dS dS )z#Command-line interface to gruut-ipa    N)Path	gruut_ipadatac                  C   sB   t  } | jrtjtjd ntjtjd t|  | |  dS )zMain entry point)levelN)get_argsdebugloggingbasicConfigDEBUGINFO_LOGGERfunc)args r   F/home/ubuntu/.local/lib/python3.10/site-packages/gruut_ipa/__main__.pymain   s   
r   c                 C   s  ddl m}m}m}m}m} ddlm} ddlm	} t
 }| jrSt| j d }	td|	 t|	ddd	}
||
}W d
   n1 sDw   Y  |dd |D  tt|||D ]s}||}|rj|j|vrjq\d}|jr|j}|jjd |jj d |jrdnd d }n(|jr|j}|jrdndd |jj d |jj }n|jr|j}|j rd}nd}|! }||d< |||d< |||d< t"j#|dd}t$| q\d
S )zPrint known IPA phonesr   )
CONSONANTSSCHWASVOWELSPhonemePhonemes)ipa_to_espeak)ipa_to_sampaphonemes.txtLoading phonemes from %srutf-8encodingNc                 s       | ]}|j V  qd S Ntext.0pr   r   r   	<genexpr>8   s    zdo_print.<locals>.<genexpr>  rounded	unroundedz vowelvoiced	voicelesszr-coloured schwaschwadescriptionespeaksampaFensure_ascii)%r   r   r   r   r   r   gruut_ipa.espeakr   gruut_ipa.sampar   setlanguage	_DATA_DIRr   r   open	from_textupdatesorted	itertoolschainr"   vowelheightvalue	placementr)   	consonantr+   placetyper-   
r_colouredto_dictjsondumpsprint)r   r   r   r   r   r   r   r   allowed_phonemesphonemes_pathphonemes_filephonemes	phone_strphoner.   vcs
phone_dictphone_dict_strr   r   r   do_print(   sl   
rU   c                 C   s   ddl m} | jr| j}ntj}ttj rtdtj	d |D ]}|
 }|r@||d}tj| dd}t| tj  q!dS )	zDescribe IPA phonesr   )r   zReading phones from stdin...filer!   Fr1   N)r   r   rO   sysstdinosisattyfilenorI   stderrstriprG   rH   rF   stdoutflush)r   r   phonesline
line_phonerN   r   r   r   do_describej   s   

rd   c                 C   s   ddl m} | jr| j}ntj}ttj rtdtj	d |D ]!}|
 }|rB||}| jdd |D }t| tj  q!dS )!Group phones in IPA pronunciationr   )Pronunciation$Reading pronunciations from stdin...rV   c                 s       | ]	}|j r|j V  qd S r    r!   r#   r   r   r   r&          zdo_phones.<locals>.<genexpr>N)r   rf   pronunciationrX   rY   rZ   r[   r\   rI   r]   r^   from_string	separatorjoinr_   r`   )r   rf   pronunciationsrb   	line_pron
phones_strr   r   r   	do_phones   s   

rq   c           
      C   s6  ddl m} | jr| j}ntj}ttj rtdtj	d | j
r(t| j
}n&t| j d }| sNdd t D }td| j td	| td
 td| t|ddd}||}W d   n1 skw   Y  |D ]&}| }|r|j|| j| jd}| jdd |D }	t|	 tj  qrdS )z?Group phones in IPA pronuncation according to language phonemesr   )r   rg   rV   r   c                 S   s   g | ]	}|  r|jqS r   )is_dirname)r$   dr   r   r   
<listcomp>   s    zdo_phonemes.<locals>.<listcomp>zUnsupported language: %szSupported languages: %s   r   r   r   r   N)keep_stress
drop_tonesc                 s   rh   r    r!   r#   r   r   r   r&      ri   zdo_phonemes.<locals>.<genexpr>)r   r   rj   rX   rY   rZ   r[   r\   rI   r]   rL   r   r7   r6   is_fileiterdirr   fatalexitr   r8   r9   r^   splitrw   rx   rl   rm   r_   r`   )
r   r   rn   rK   supported_languagesrL   rM   rb   line_phonemesphonemes_strr   r   r   do_phonemes   s:   


r   c                    s  ddl m}m} ddlm}m} ddlm}m} h d}d d}| j	|vr+|
| j	 | j|vr\|
| jj}	| }|	 D ]\}
}||jv rHq>|j||
dd |
|j|< q>|  | jrc| j}ntj}ttj rutd	tjd
 |D ]y}| }|r| j	dkr|}n*| j	dkr||}n | j	dkr||}n dusJ | j fdd |D }| jdkr|}n.| jdkrd|| d }n | jdkr||}n|dusJ | jdd |j|ddD }t| tj  qwdS )z8Convert pronunciations between different representationsr   )r   r   )espeak_to_ipar   )r   sampa_to_ipa>   ipar0   r/   NF)r"   is_iparg   rV   r   r/   r0   c                 3   s"    | ]} j |j|jV  qd S r    )gruut_ipa_mapgetr"   r#   src_phonemesr   r   r&      s
    
zdo_convert.<locals>.<genexpr>z[[z]]c                 s   r   r    r!   r#   r   r   r   r&   	  s    
)r   ) r   r   r   r3   r   r   r4   r   r   srcfrom_languagedestr   itemsrM   appendipa_mapr:   rj   rX   rY   rZ   r[   r\   rI   r]   r^   rl   rm   r}   r_   r`   )r   r   r   r   r   r   r   fixed_src_destdest_phonemesdest_phoneme_mapkrP   rn   rb   src_ipa	dest_pronr   r   r   
do_convert   sb   












r   returnc                  C   s  t jdd} |  }d|_d|_|jddd}|jdd	d |jtd
 |jddd}|jt	d
 |jdddd |jddd}|jt
d
 |jdddd |jdddd |jddd}|jtd
 |j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 |jd&d'd}|jtd
 |jd(d)d |jd*d+d |jddd,d |jddd-d |||||fD ]
}|jd.dd/d! q|  S )0zParse command-line argumentsr   )progTcommandrI   zPrint all known IPA phones)helpz
--languagez:Only print phones from a specific language or language/set)r   describezDescribe IPA phone(s)rO   *z,IPA phones (read from stdin if not provided))nargsr   ra   re   rj   z4IPA pronunciations (read from stdin if not provided)z--separatorr(   z:Separator to add between phones in output (default: space))defaultr   rM   z@Group phones in IPA pronunciation according to language phonemesr6   zLanguage code (e.g., en-us)z<Separator to add between phonemes in output (default: space)z--keep-stress
store_truez%Keep primary/secondary stress markers)actionr   z--drop-toneszRemove tone numbers/lettersz--phonemes-filez6Load phonemes from file instead of using language codeconvertz5Convert pronunciations between ipa, espeak, and sampar   z:Source format (language, language/set, ipa, espeak, sampa)r   z?Destination format (language, language/set, ipa, espeak, sampa)z0Pronunciations (read from stdin if not provided)z+Separator between phonemes (default: space)z--debugzPrint DEBUG messages to console)argparseArgumentParseradd_subparsersrequiredr   
add_parseradd_argumentset_defaultsrU   rd   rq   r   r   
parse_args)parsersub_parsersprint_parserdescribe_parserphones_parserphonemes_parserconvert_parser
sub_parserr   r   r   r     s   	r   __main__)__doc__r   r<   rG   r   rZ   rX   typingpathlibr   	getLoggerr   __file__parent_DIRr7   r   rU   rd   rq   r   r   	Namespacer   __name__r   r   r   r   <module>   s,   

B.Ht
