a
    jCi‚j  ã                   @   sˆ  d Z ddlZddlZddlZg d¢Zej ejdd¡Ze 	dej
ejB ¡Zdd„ Zd	d
„ ZdZdd„ eedƒD ƒZddddœZdGdd„Zdd„ Zdd„ Zdd„ ZG dd„ dƒZG dd„ deƒZdHd!d"„Zi Zd#gZdddd efd$d%„Zdedfd&d'„Zi ai ad(adId)d*„Z dJd+d,„Z!dKd-d.„Z"d/d0„ Z#d1d2„ Z$d3d4„ Z%d5d6„ Z&d7d8„ Z'd9d:„ Z(d;d<„ Z)d=d>„ Z*d?d@„ Z+dAdB„ Z,dCdD„ Z-dEdF„ Z.eZ/dS )Laª  Internationalization and localization support.

This module provides internationalization (I18N) and localization (L10N)
support for your Python programs by providing an interface to the GNU gettext
message catalog library.

I18N refers to the operation by which a program is made aware of multiple
languages.  L10N refers to the adaptation of your program, once
internationalized, to the local language and cultural habits.

é    N)ÚNullTranslationsÚGNUTranslationsÚCatalogÚfindÚtranslationÚinstallÚ
textdomainÚbindtextdomainÚbind_textdomain_codesetÚdgettextÚ	dngettextÚgettextÚlgettextÚ	ldgettextÚ
ldngettextÚ	lngettextÚngettextÚpgettextÚ	dpgettextÚ	npgettextÚ
dnpgettextÚshareÚlocaleaÊ  
        (?P<WHITESPACES>[ \t]+)                    | # spaces and horizontal tabs
        (?P<NUMBER>[0-9]+\b)                       | # decimal integer
        (?P<NAME>n\b)                              | # only n is allowed
        (?P<PARENTHESIS>[()])                      |
        (?P<OPERATOR>[-*/%+?:]|[><!]=?|==|&&|\|\|) | # !, *, /, %, +, -, <, >,
                                                     # <=, >=, ==, !=, &&, ||,
                                                     # ? :
                                                     # unary and bitwise ops
                                                     # not allowed
        (?P<INVALID>\w+|.)                           # invalid token
    c                 c   sP   t  t| ¡D ]8}|j}|dkr q| |¡}|dkr>td| ƒ‚|V  qdV  d S )NZWHITESPACESZINVALIDz invalid token in plural form: %sÚ )ÚreÚfinditerÚ_token_patternÚ	lastgroupÚgroupÚ
ValueError)ÚpluralÚmoÚkindÚvalue© r$   ú#/usr/local/lib/python3.9/gettext.pyÚ	_tokenizeV   s    
r&   c                 C   s   | rt d|  ƒS t dƒS d S )Nz#unexpected token in plural form: %szunexpected end of plural form)r   )r#   r$   r$   r%   Ú_errora   s    r'   ))ú||)ú&&)z==z!=)ú<ú>z<=z>=)ú+ú-)Ú*ú/ú%c                 C   s    i | ]\}}|D ]
}||“qqS r$   r$   )Ú.0ÚiÚopsÚopr$   r$   r%   Ú
<dictcomp>o   ó    r5   é   ÚorÚandz//)r(   r)   r/   éÿÿÿÿc                 C   s¦  d}t | ƒ}|dkr&|d7 }t | ƒ}q|dkrXt| ƒ\}}d||f }|dkr¦tdƒ‚nN|dkrnd	||f }n8zt|d
ƒ}W n ty˜   t|ƒd ‚Y n0 d||f }t | ƒ}d}|tv �rt| }||k rÐ�q|dv rè|dv rèd| }t ||¡}t| |d ƒ\}	}d|||	f }|}q²||  k�r2dk�r>n nd| }|dk�rž|dk�ržt| dƒ\}
}|dk�rrt|ƒ‚t| ƒ\}}d|
||f }|dk�ržd| }||fS )Nr   ú!znot ú(z%s(%s)ú)z%unbalanced parenthesis in plural formÚnz%s%sé
   z%s%déd   )é   é   z(%s)r7   z%s %s %srB   ú?r   ú:z%s if %s else %s)ÚnextÚ_parser   Úintr'   Ú_binary_opsÚ	_c2py_opsÚget)ZtokensZpriorityÚresultÚnexttokÚsubr#   Újr2   r4   ÚrightZif_trueZif_falser$   r$   r%   rF   r   sP    




rF   c                 C   sX   zt | ƒ}W n& ty2   td| jjf ƒd ‚Y n0 dd l}| d| jjf td¡ | S )Nz'Plural value must be an integer, got %sr   rB   )ÚroundÚ	TypeErrorÚ	__class__Ú__name__ÚwarningsÚwarnÚDeprecationWarning)r>   r2   rT   r$   r$   r%   Ú_as_int£   s    ÿÿÿþrW   c                 C   s°   t | ƒdkrtdƒ‚z|tt| ƒƒ\}}|r2t|ƒ‚d}|D ]6}|dkr`|d7 }|dkrptdƒ‚q:|dkr:|d8 }q:d	ti}td
| |ƒ |d W S  tyª   tdƒ‚Y n0 dS )z‰Gets a C expression as used in PO files for plural forms and returns a
    Python function that implements an equivalent expression.
    iè  z"plural form expression is too longr   r<   r7   é   z%plural form expression is too complexr=   rW   z›if True:
            def func(n):
                if not isinstance(n, int):
                    n = _as_int(n)
                return int(%s)
            ÚfuncN)Úlenr   rF   r&   r'   rW   ÚexecÚRecursionError)r    rK   rL   ZdepthÚcÚnsr$   r$   r%   Úc2py¯   s.    

ûû
r_   c                 C   s>  dd l }| | ¡} d}d}d}d}|  d¡}|dkrV| |d … }| d |… } ||O }nd}|  d¡}|dkrŽ| |d … }| d |… } ||O }nd}|  d¡}|dkrÆ| |d … }	| d |… } ||O }nd}	| }
g }t|d ƒD ]R}|| @ sÞ|
}||@ �r||	7 }||@ �r||7 }||@ �r&||7 }| |¡ qÞ| ¡  |S )	Nr   r7   é   rB   ú@r   Ú.Ú_)r   Ú	normalizer   ÚrangeÚappendÚreverse)Zlocr   ZCOMPONENT_CODESETZCOMPONENT_TERRITORYZCOMPONENT_MODIFIERÚmaskÚposÚmodifierÚcodesetZ	territoryÚlanguageZretr2   Úvalr$   r$   r%   Ú_expand_langÓ   sF    







rn   c                   @   s€   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zddd„ZdS ) r   Nc                 C   s.   i | _ d | _d | _d | _|d ur*|  |¡ d S ©N)Ú_infoÚ_charsetÚ_output_charsetÚ	_fallbackrF   ©ÚselfÚfpr$   r$   r%   Ú__init__ÿ   s    zNullTranslations.__init__c                 C   s   d S ro   r$   rt   r$   r$   r%   rF     s    zNullTranslations._parsec                 C   s   | j r| j  |¡ n|| _ d S ro   )rs   Úadd_fallback)ru   Úfallbackr$   r$   r%   rx   
  s    zNullTranslations.add_fallbackc                 C   s   | j r| j  |¡S |S ro   )rs   r   )ru   Úmessager$   r$   r%   r     s    zNullTranslations.gettextc                 C   s†   dd l }| dtd¡ dd l}| jrf| ¡ �* | ddt¡ | j |¡W  d   ƒ S 1 s\0    Y  | jrx| 	| j¡S | 	| 
¡ ¡S )Nr   ú/lgettext() is deprecated, use gettext() insteadr`   Úignoreú.*\blgettext\b.*)rT   rU   rV   r   rs   Úcatch_warningsÚfilterwarningsr   rr   ÚencodeÚgetpreferredencoding)ru   rz   rT   r   r$   r$   r%   r     s    ÿ
ÿ*zNullTranslations.lgettextc                 C   s*   | j r| j  |||¡S |dkr"|S |S d S ©Nr7   )rs   r   )ru   Úmsgid1Úmsgid2r>   r$   r$   r%   r   #  s
    zNullTranslations.ngettextc                 C   sœ   dd l }| dtd¡ dd l}| jrj| ¡ �. | ddt¡ | j |||¡W  d   ƒ S 1 s`0    Y  |dkrx|}n|}| jrŽ| 	| j¡S | 	| 
¡ ¡S )Nr   ú1lngettext() is deprecated, use ngettext() insteadr`   r|   ú.*\blngettext\b.*r7   )rT   rU   rV   r   rs   r~   r   r   rr   r€   r�   ©ru   rƒ   r„   r>   rT   r   Útmsgr$   r$   r%   r   +  s"    ÿ
ÿ.zNullTranslations.lngettextc                 C   s   | j r| j  ||¡S |S ro   )rs   r   )ru   Úcontextrz   r$   r$   r%   r   =  s    zNullTranslations.pgettextc                 C   s,   | j r| j  ||||¡S |dkr$|S |S d S r‚   )rs   r   )ru   r‰   rƒ   r„   r>   r$   r$   r%   r   B  s
    zNullTranslations.npgettextc                 C   s   | j S ro   )rp   ©ru   r$   r$   r%   ÚinfoJ  s    zNullTranslations.infoc                 C   s   | j S ro   )rq   rŠ   r$   r$   r%   ÚcharsetM  s    zNullTranslations.charsetc                 C   s   dd l }| dtd¡ | jS )Nr   zoutput_charset() is deprecatedr`   ©rT   rU   rV   rr   )ru   rT   r$   r$   r%   Úoutput_charsetP  s
    ÿzNullTranslations.output_charsetc                 C   s    dd l }| dtd¡ || _d S )Nr   z"set_output_charset() is deprecatedr`   r�   )ru   rŒ   rT   r$   r$   r%   Úset_output_charsetV  s
    ÿz#NullTranslations.set_output_charsetc                 C   sJ   dd l }| j|jd< |d urFh d£}|t|ƒ@ D ]}t| |ƒ|j|< q0d S )Nr   rc   >   r   r   r   r   r   r   )Úbuiltinsr   Ú__dict__ÚsetÚgetattr)ru   Únamesr�   ZallowedÚnamer$   r$   r%   r   \  s    zNullTranslations.install)N)N)rS   Ú
__module__Ú__qualname__rw   rF   rx   r   r   r   r   r   r   r‹   rŒ   rŽ   r�   r   r$   r$   r$   r%   r   þ   s   
r   c                   @   s\   e Zd ZdZdZdZdZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )r   l   Þ* l   •$< z%s%s)r   r7   c                 C   s   |d? |d@ fS )z/Returns a tuple of major version, minor versioné   iÿÿ  r$   )ru   Úversionr$   r$   r%   Ú_get_versionsr  s    zGNUTranslations._get_versionsc           "      C   sö  ddl m} t|ddƒ}i  | _}dd„ | _| ¡ }t|ƒ}|d|dd	… ƒd }|| jkr||d
|d	d… ƒ\}}	}
}d}n6|| jkr¦|d|d	d… ƒ\}}	}
}d}nt	dd|ƒ‚|  
|¡\}}|| jvrÞt	ddt|ƒ |ƒ‚td|	ƒD �]}||||
|
d … ƒ\}}|| }|||||d … ƒ\}}|| }||k �r`||k �r`|||… }|||… }nt	dd|ƒ‚|dk�rld}| d¡D ]æ}| ¡  ¡ }|�sž�q„| d¡�rº| d¡�rº�q„d }}d|v �r | dd¡\}}| ¡  ¡ }| ¡ }|| j|< |}n|�r| j|  d| 7  < |dk�r8| d¡d | _n0|dk�r„| d¡}|d  d¡d }t|ƒ| _�q„| j�pvd}d|v �rÌ| d¡\}} | d¡}t||ƒ}t|ƒD ]\}}!t|!|ƒ|||f< �q¬nt||ƒ|t||ƒ< |
d7 }
|d7 }qèdS )z8Override this method to support alternative .mo formats.r   )Úunpackr•   r   c                 S   s   t | dkƒS r‚   )rG   )r>   r$   r$   r%   Ú<lambda>  r6   z(GNUTranslations._parse.<locals>.<lambda>z<INrB   z<4IrX   z<IIz>4Iz>IIzBad magic numberzBad version number é   zFile is corruptó   
z	#-#-#-#-#rD   r7   Ú
zcontent-typezcharset=zplural-formsú;zplural=Úasciió    )Ústructr›   r“   Ú_catalogr    ÚreadrZ   ÚLE_MAGICÚBE_MAGICÚOSErrorrš   ÚVERSIONSÚstrre   ÚsplitÚdecodeÚstripÚ
startswithÚendswithÚlowerrp   rq   r_   Ú	enumerate)"ru   rv   r›   ÚfilenameZcatalogÚbufÚbuflenÚmagicr™   ZmsgcountZ	masteridxZtransidxZiiZmajor_versionZminor_versionr2   ZmlenZmoffZmendZtlenZtoffZtendÚmsgrˆ   ZlastkZb_itemÚitemÚkÚvr    rŒ   rƒ   r„   Úxr$   r$   r%   rF   v  sv    














zGNUTranslations._parsec                 C   sp   dd l }| dtd¡ dd l}tƒ }| j ||¡}||u rP| jrL| j |¡S |}| j	rb| 
| j	¡S | 
| ¡ ¡S )Nr   r{   r`   )rT   rU   rV   r   Úobjectr¤   rJ   rs   r   rr   r€   r�   )ru   rz   rT   r   Úmissingrˆ   r$   r$   r%   r   Ï  s    ÿzGNUTranslations.lgettextc                 C   s–   dd l }| dtd¡ dd l}z| j||  |¡f }W n> tyt   | jr^| j |||¡ Y S |dkrl|}n|}Y n0 | j	rˆ| 
| j	¡S | 
| ¡ ¡S )Nr   r…   r`   r7   )rT   rU   rV   r   r¤   r    ÚKeyErrorrs   r   rr   r€   r�   r‡   r$   r$   r%   r   Þ  s     ÿ
zGNUTranslations.lngettextc                 C   s6   t ƒ }| j ||¡}||u r2| jr.| j |¡S |S |S ro   )r»   r¤   rJ   rs   r   )ru   rz   r¼   rˆ   r$   r$   r%   r   ð  s    zGNUTranslations.gettextc                 C   s\   z| j ||  |¡f }W n> tyV   | jr@| j |||¡ Y S |dkrN|}n|}Y n0 |S r‚   )r¤   r    r½   rs   r   )ru   rƒ   r„   r>   rˆ   r$   r$   r%   r   ù  s    
zGNUTranslations.ngettextc                 C   sF   | j ||f }tƒ }| j ||¡}||u rB| jr>| j ||¡S |S |S ro   )ÚCONTEXTr»   r¤   rJ   rs   r   )ru   r‰   rz   Úctxt_msg_idr¼   rˆ   r$   r$   r%   r     s    zGNUTranslations.pgettextc              	   C   sl   | j ||f }z| j||  |¡f }W n@ tyf   | jrP| j ||||¡ Y S |dkr^|}n|}Y n0 |S r‚   )r¾   r¤   r    r½   rs   r   )ru   r‰   rƒ   r„   r>   r¿   rˆ   r$   r$   r%   r     s    
zGNUTranslations.npgettextN)rS   r–   r—   r¦   r§   r¾   r©   rš   rF   r   r   r   r   r   r   r$   r$   r$   r%   r   f  s   Y	
r   Fc                 C   sâ   |d u rt }|d u rRg }dD ]"}tj |¡}|r| d¡} q@qd|vrR| d¡ g }|D ]$}t|ƒD ]}||vrf| |¡ qfqZ|rŠg }	nd }	|D ]J}|dkr¢ qÞtj ||dd|  ¡}
tj 	|
¡r’|rÔ|	 |
¡ q’|
  S q’|	S )N)ÚLANGUAGEÚLC_ALLÚLC_MESSAGESÚLANGrD   ÚCrÂ   z%s.mo)
Ú_default_localedirÚosÚenvironrJ   r«   rf   rn   ÚpathÚjoinÚexists)ÚdomainÚ	localedirÚ	languagesÚallZenvarrm   ZnelangsÚlangZnelangrK   Úmofiler$   r$   r%   r     s8    


r   Zunspecifiedc              	   C   sD  |d u rt }t| ||dd�}|sB|r*tƒ S ddlm} t|d| ƒ‚d }|D ]ô}	|tj |	¡f}
t	 
|
¡}|d u rªt|	dƒ� }t	 |
||ƒ¡}W d   ƒ n1 s 0    Y  dd l}| |¡}|tu�r$dd l}| dtd¡ |�r$| ¡ �( | d	d
t¡ | |¡ W d   ƒ n1 �s0    Y  |d u �r4|}qJ| |¡ qJ|S )NT)rÎ   r   )ÚENOENTz$No translation file found for domainÚrbzparameter codeset is deprecatedr`   r|   z.*\bset_output_charset\b.*)r   r   r   ÚerrnorÑ   ÚFileNotFoundErrorrÆ   rÈ   ÚabspathÚ_translationsrJ   ÚopenÚ
setdefaultÚcopyÚ_unspecifiedrT   rU   rV   r~   r   r�   rx   )rË   rÌ   rÍ   Zclass_ry   rk   ZmofilesrÑ   rK   rÐ   ÚkeyÚtrv   rÙ   rT   r$   r$   r%   r   G  sD    ÿ
.

ÿ
ÿ*
r   c                 C   s   t | |d|d�}| |¡ d S )NT)ry   rk   )r   r   )rË   rÌ   rk   r”   rÜ   r$   r$   r%   r   r  s    r   Zmessagesc                 C   s   | d ur| a t S ro   )Ú_current_domain)rË   r$   r$   r%   r   €  s    r   c                 C   s   |d ur|t | < t  | t¡S ro   )Ú_localedirsrJ   rÅ   )rË   rÌ   r$   r$   r%   r	   ‡  s    r	   c                 C   s0   dd l }| dtd¡ |d ur&|t| < t | ¡S )Nr   z'bind_textdomain_codeset() is deprecatedr`   )rT   rU   rV   Ú_localecodesetsrJ   )rË   rk   rT   r$   r$   r%   r
   Ž  s    ÿr
   c                 C   s8   zt | t | d ¡ƒ}W n ty,   | Y S 0 | |¡S ro   )r   rÞ   rJ   r¨   r   )rË   rz   rÜ   r$   r$   r%   r   ˜  s
    
r   c                 C   sâ   dd l }| dtd¡ dd l}t | ¡}zP| ¡ �4 | ddt¡ t| t	 | d ¡|d�}W d   ƒ n1 sl0    Y  W n$ t
yœ   | |p”| ¡ ¡ Y S 0 | ¡ �( | ddt¡ | |¡W  d   ƒ S 1 sÔ0    Y  d S )Nr   z1ldgettext() is deprecated, use dgettext() insteadr`   r|   ú.*\bparameter codeset\b.*©rk   r}   )rT   rU   rV   r   rß   rJ   r~   r   r   rÞ   r¨   r€   r�   r   )rË   rz   rT   r   rk   rÜ   r$   r$   r%   r   Ÿ  s&    ÿ

ÿ8
ÿr   c                 C   sP   zt | t | d ¡ƒ}W n* ty@   |dkr4| Y S | Y S Y n0 | |||¡S r‚   )r   rÞ   rJ   r¨   r   )rË   rƒ   r„   r>   rÜ   r$   r$   r%   r   ±  s    r   c           	      C   sø   dd l }| dtd¡ dd l}t | ¡}zP| ¡ �4 | ddt¡ t| t	 | d ¡|d�}W d   ƒ n1 sl0    Y  W n6 t
y®   |dkr”|}n|}| |p¦| ¡ ¡ Y S 0 | ¡ �, | ddt¡ | |||¡W  d   ƒ S 1 sê0    Y  d S )	Nr   z3ldngettext() is deprecated, use dngettext() insteadr`   r|   rà   rá   r7   r†   )rT   rU   rV   r   rß   rJ   r~   r   r   rÞ   r¨   r€   r�   r   )	rË   rƒ   r„   r>   rT   r   rk   rÜ   rˆ   r$   r$   r%   r   »  s,    ÿ

ÿ8
ÿr   c                 C   s:   zt | t | d ¡ƒ}W n ty,   | Y S 0 | ||¡S ro   )r   rÞ   rJ   r¨   r   )rË   r‰   rz   rÜ   r$   r$   r%   r   Ò  s
    
r   c                 C   sR   zt | t | d ¡ƒ}W n* ty@   |dkr4| Y S | Y S Y n0 | ||||¡S r‚   )r   rÞ   rJ   r¨   r   )rË   r‰   rƒ   r„   r>   rÜ   r$   r$   r%   r   Ú  s    r   c                 C   s
   t t| ƒS ro   )r   rÝ   )rz   r$   r$   r%   r   å  s    r   c                 C   sZ   dd l }| dtd¡ | ¡ �( | ddt¡ tt| ƒW  d   ƒ S 1 sL0    Y  d S )Nr   r{   r`   r|   z.*\bldgettext\b.*)rT   rU   rV   r~   r   r   rÝ   )rz   rT   r$   r$   r%   r   è  s    ÿ
ÿr   c                 C   s   t t| ||ƒS ro   )r   rÝ   )rƒ   r„   r>   r$   r$   r%   r   ñ  s    r   c                 C   s^   dd l }| dtd¡ | ¡ �, | ddt¡ tt| ||ƒW  d   ƒ S 1 sP0    Y  d S )Nr   r…   r`   r|   z.*\bldngettext\b.*)rT   rU   rV   r~   r   r   rÝ   )rƒ   r„   r>   rT   r$   r$   r%   r   ô  s    ÿ
ÿr   c                 C   s   t t| |ƒS ro   )r   rÝ   )r‰   rz   r$   r$   r%   r   þ  s    r   c                 C   s   t t| |||ƒS ro   )r   rÝ   )r‰   rƒ   r„   r>   r$   r$   r%   r     s    r   )r:   )NNF)N)N)N)0Ú__doc__rÆ   r   ÚsysÚ__all__rÈ   rÉ   Úbase_prefixrÅ   ÚcompileÚVERBOSEÚDOTALLr   r&   r'   rH   r±   rI   rF   rW   r_   rn   r   r   r   rÖ   rÚ   r   r   rÞ   rß   rÝ   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r$   r$   r%   Ú<module>   s\   0
õ
1$+h 9
&ÿ
+




	
