U
    ¼Ê¦i­k  ã                   @   s¶  d Z ddlZddlZddlZddlZddddddd	d
dddddddddddddg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 d0d„ dƒZG d1d„ deƒZdHd3d„Zi Zd4gZdddd2efd5d„Zdedfd6d„Zi ai ad7a dId8d	„Z!dJd9d
„Z"dKd:d„Z#d;d„ Z$d<d„ Z%d=d„ Z&d>d„ Z'd?d„ Z(d@d„ Z)dAd„ Z*dBd„ Z+dCd„ Z,dDd„ Z-dEd„ Z.dFd„ Z/eZ0d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Ú
dnpgettextZ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)ÚpluralZmoZkindÚvalue© r!   ú/usr/lib/python3.8/gettext.pyÚ	_tokenizeW   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"   Ú_errorb   s    r$   ))ú||)ú&&)z==z!=)ú<ú>z<=z>=)ú+ú-)Ú*ú/ú%c                 C   s    i | ]\}}|D ]
}||“qqS r!   r!   )Ú.0ÚiZopsÚopr!   r!   r"   Ú
<dictcomp>p   s
        r1   é   Ú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ƒ‚nP|dkrnd	||f }n:zt|d
ƒ}W n tk
rš   t|ƒd ‚Y nX d||f }t | ƒ}d}|tk�rt| }||k rÒ�q|dkrê|dkrêd| }t ||¡}t| |d ƒ\}	}d|||	f }|}q´||  k�r4dk�r@n nd| }|dk�r |dk�r t| dƒ\}
}|dk�rtt|ƒ‚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)r2   z%s %s %sr=   ú?r   ú:z%s if %s else %s)ÚnextÚ_parser   Úintr$   Ú_binary_opsÚ	_c2py_opsÚget)ÚtokensZpriorityÚresultÚnexttokÚsubr    Újr/   r0   ÚrightZif_trueZif_falser!   r!   r"   rA   s   sP    




rA   c                 C   sZ   zt | ƒ}W n( tk
r4   td| jjf ƒd ‚Y nX dd l}| d| jjf td¡ | S )Nz'Plural value must be an integer, got %sr   r=   )ÚroundÚ	TypeErrorÚ	__class__Ú__name__ÚwarningsÚwarnÚDeprecationWarning)r9   r/   rP   r!   r!   r"   Ú_as_int¤   s     ÿÿÿ þrS   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k
r¬   tdƒ‚Y nX 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   r7   r2   é   z%plural form expression is too complexr8   rS   z›if True:
            def func(n):
                if not isinstance(n, int):
                    n = _as_int(n)
                return int(%s)
            ÚfuncN)Úlenr   rA   r#   r$   rS   ÚexecÚRecursionError)r   rG   rH   ZdepthÚcÚnsr!   r!   r"   Úc2py°   s.    

ûû
r[   c                 C   s4  t  | ¡} d}d}d}d}|  d¡}|dkrN| |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 ]P}|| @ sÖ|	}||@ rø||7 }||@ �r
||7 }||@ �r||7 }|
 |¡ qÖ|
 ¡  |
S )	Nr2   é   r=   r   ú@r   Ú.Ú_)r   Z	normalizer   ÚrangeÚappendÚreverse)ZlocZCOMPONENT_CODESETZCOMPONENT_TERRITORYZCOMPONENT_MODIFIERÚmaskÚposZmodifierÚcodesetZ	territoryZlanguageZretr/   Úvalr!   r!   r"   Ú_expand_langÔ   sJ    







 
 
 rg   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 k	r*|  |¡ d S ©N)Ú_infoÚ_charsetÚ_output_charsetÚ	_fallbackrA   ©ÚselfÚfpr!   r!   r"   Ú__init__ÿ   s    zNullTranslations.__init__c                 C   s   d S rh   r!   rm   r!   r!   r"   rA     s    zNullTranslations._parsec                 C   s   | j r| j  |¡ n|| _ d S rh   )rl   Úadd_fallback)rn   Úfallbackr!   r!   r"   rq   
  s    zNullTranslations.add_fallbackc                 C   s   | j r| j  |¡S |S rh   )rl   r   )rn   Úmessager!   r!   r"   r     s    zNullTranslations.gettextc              
   C   sr   dd l }| dtd¡ | jrR| ¡ �( | ddt¡ | j |¡W  5 Q R £ S Q R X | jrd| | j¡S | t	 
¡ ¡S )Nr   ú/lgettext() is deprecated, use gettext() insteadr\   Úignoreú.*\blgettext\b.*)rP   rQ   rR   rl   Úcatch_warningsÚfilterwarningsr   rk   Úencoder   Úgetpreferredencoding)rn   rs   rP   r!   r!   r"   r     s     ÿ
ÿzNullTranslations.lgettextc                 C   s*   | j r| j  |||¡S |dkr"|S |S d S ©Nr2   )rl   r   )rn   Úmsgid1Úmsgid2r9   r!   r!   r"   r   "  s
    zNullTranslations.ngettextc              
   C   sˆ   dd l }| dtd¡ | jrV| ¡ �, | ddt¡ | j |||¡W  5 Q R £ S Q R X |dkrd|}n|}| jrz| | j¡S | t	 
¡ ¡S )Nr   ú1lngettext() is deprecated, use ngettext() insteadr\   ru   ú.*\blngettext\b.*r2   )rP   rQ   rR   rl   rw   rx   r   rk   ry   r   rz   ©rn   r|   r}   r9   rP   Útmsgr!   r!   r"   r   *  s"     ÿ
ÿ"zNullTranslations.lngettextc                 C   s   | j r| j  ||¡S |S rh   )rl   r   )rn   Úcontextrs   r!   r!   r"   r   ;  s    zNullTranslations.pgettextc                 C   s,   | j r| j  ||||¡S |dkr$|S |S d S r{   )rl   r   )rn   r‚   r|   r}   r9   r!   r!   r"   r   @  s
    zNullTranslations.npgettextc                 C   s   | j S rh   )ri   ©rn   r!   r!   r"   ÚinfoH  s    zNullTranslations.infoc                 C   s   | j S rh   )rj   rƒ   r!   r!   r"   ÚcharsetK  s    zNullTranslations.charsetc                 C   s   dd l }| dtd¡ | jS )Nr   zoutput_charset() is deprecatedr\   ©rP   rQ   rR   rk   )rn   rP   r!   r!   r"   Úoutput_charsetN  s     ÿzNullTranslations.output_charsetc                 C   s    dd l }| dtd¡ || _d S )Nr   z"set_output_charset() is deprecatedr\   r†   )rn   r…   rP   r!   r!   r"   Úset_output_charsetT  s     ÿz#NullTranslations.set_output_charsetc                 C   sR   dd l }| j|jd< |d k	rNddddddh}|t|ƒ@ D ]}t| |ƒ|j|< q8d S )	Nr   r_   r   r   r   r   r   r   )Úbuiltinsr   Ú__dict__ÚsetÚgetattr)rn   Únamesr‰   ZallowedÚnamer!   r!   r"   r   Z  s      ÿzNullTranslations.install)N)N)rO   Ú
__module__Ú__qualname__rp   rA   rq   r   r   r   r   r   r   r„   r…   r‡   rˆ   r   r!   r!   r!   r"   r   þ   s   
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   r2   c                 C   s   |d? |d@ fS )z/Returns a tuple of major version, minor versioné   iÿÿ  r!   )rn   Úversionr!   r!   r"   Ú_get_versionsp  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k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|k�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|k�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{   )rB   )r9   r!   r!   r"   Ú<lambda>}  ó    z(GNUTranslations._parse.<locals>.<lambda>z<INr=   z<4IrT   z<IIz>4Iz>IIzBad magic numberzBad version number é   zFile is corruptó   
z	#-#-#-#-#r?   r2   Ú
zcontent-typezcharset=zplural-formsú;zplural=Úasciió    )Zstructr”   rŒ   Ú_catalogr   ÚreadrV   ÚLE_MAGICÚBE_MAGICÚOSErrorr“   ÚVERSIONSÚstrr`   ÚsplitÚdecodeÚstripÚ
startswithÚendswithÚlowerri   rj   r[   Ú	enumerate)"rn   ro   r”   ÚfilenameZcatalogZbufZbuflenÚmagicr’   ZmsgcountZ	masteridxZtransidxZiiZmajor_versionZminor_versionr/   ZmlenZmoffZmendZtlenZtoffZtendÚmsgr�   ZlastkZb_itemÚitemÚkÚvr   r…   r|   r}   Úxr!   r!   r"   rA   t  sv    














zGNUTranslations._parsec                 C   sh   dd l }| dtd¡ tƒ }| j ||¡}||krH| jrD| j |¡S |}| jrZ| 	| j¡S | 	t
 ¡ ¡S )Nr   rt   r\   )rP   rQ   rR   Úobjectr�   rE   rl   r   rk   ry   r   rz   )rn   rs   rP   Úmissingr�   r!   r!   r"   r   Í  s     ÿzGNUTranslations.lgettextc                 C   s�   dd l }| dtd¡ z| j||  |¡f }W n@ tk
rn   | jrX| j |||¡ Y S |dkrf|}n|}Y nX | jr‚| 	| j¡S | 	t
 ¡ ¡S )Nr   r~   r\   r2   )rP   rQ   rR   r�   r   ÚKeyErrorrl   r   rk   ry   r   rz   r€   r!   r!   r"   r   Û  s      ÿ
zGNUTranslations.lngettextc                 C   s6   t ƒ }| j ||¡}||kr2| jr.| j |¡S |S |S rh   )r²   r�   rE   rl   r   )rn   rs   r³   r�   r!   r!   r"   r   ì  s    zGNUTranslations.gettextc                 C   s^   z| j ||  |¡f }W n@ tk
rX   | jrB| j |||¡ Y S |dkrP|}n|}Y nX |S r{   )r�   r   r´   rl   r   )rn   r|   r}   r9   r�   r!   r!   r"   r   õ  s    
zGNUTranslations.ngettextc                 C   sF   | j ||f }tƒ }| j ||¡}||krB| jr>| j ||¡S |S |S rh   )ÚCONTEXTr²   r�   rE   rl   r   )rn   r‚   rs   Úctxt_msg_idr³   r�   r!   r!   r"   r     s    zGNUTranslations.pgettextc              	   C   sn   | j ||f }z| j||  |¡f }W nB tk
rh   | jrR| j ||||¡ Y S |dkr`|}n|}Y nX |S r{   )rµ   r�   r   r´   rl   r   )rn   r‚   r|   r}   r9   r¶   r�   r!   r!   r"   r     s    
zGNUTranslations.npgettextN)rO   r�   r�   rŸ   r    rµ   r¢   r“   rA   r   r   r   r   r   r   r!   r!   r!   r"   r   d  s   Y	
Fc                 C   s   |d krt }|d krRg }dD ]"}tj |¡}|r| d¡} q@qd|krR| d¡ g }|D ]$}t|ƒD ]}||krf| |¡ qfqZ|rŠg }	nd }	|D ]ˆ}|dkr¤ �qtj ||dd|  ¡}
tj d|dd|  ¡}tj 	|
¡rô|rì|	 |
¡ n|
  S tj 	|¡r’|�r|	 |¡ q’|  S q’|	S )N)ZLANGUAGEÚLC_ALLÚLC_MESSAGESZLANGr?   ÚCr¸   z%s.moz/usr/share/locale-langpack)
Ú_default_localedirÚosÚenvironrE   r¤   ra   rg   ÚpathÚjoinÚexists)ÚdomainÚ	localedirÚ	languagesÚallZenvarrf   ZnelangsZlangZnelangrG   ÚmofileZ	mofile_lpr!   r!   r"   r     sH    


 ÿ
Zunspecifiedc              
   C   s  |d krt }t| ||dd�}|sB|r*tƒ S ddlm} t|d| ƒ‚d }|D ]Æ}	|tj |	¡f}
t	 
|
¡}|d kr–t|	dƒ�}t	 |
||ƒ¡}W 5 Q R X dd l}| |¡}|tk	rödd l}| dtd¡ |rö| ¡ � | d	d
t¡ | |¡ W 5 Q R X |d k�r|}qJ| |¡ qJ|S )NT)rÃ   r   )ÚENOENTz$No translation file found for domainÚrbzparameter codeset is deprecatedr\   ru   z.*\bset_output_charset\b.*)r   r   r   ÚerrnorÅ   ÚFileNotFoundErrorr»   r½   ÚabspathÚ_translationsrE   ÚopenÚ
setdefaultÚcopyÚ_unspecifiedrP   rQ   rR   rw   rx   rˆ   rq   )rÀ   rÁ   rÂ   Zclass_rr   re   ZmofilesrÅ   rG   rÄ   ÚkeyÚtro   rÍ   rP   r!   r!   r"   r   R  sH     ÿ

 ÿ
ÿ
c                 C   s   t | |d|d�}| |¡ d S )NT)rr   re   )r   r   )rÀ   rÁ   re   r�   rÐ   r!   r!   r"   r   }  s    Zmessagesc                 C   s   | d k	r| a t S rh   )Ú_current_domain)rÀ   r!   r!   r"   r   ‹  s    c                 C   s   |d k	r|t | < t  | t¡S rh   )Ú_localedirsrE   rº   )rÀ   rÁ   r!   r!   r"   r	   ’  s    c                 C   s0   dd l }| dtd¡ |d k	r&|t| < t | ¡S )Nr   z'bind_textdomain_codeset() is deprecatedr\   )rP   rQ   rR   Ú_localecodesetsrE   )rÀ   re   rP   r!   r!   r"   r
   ™  s     ÿc                 C   s:   zt | t | d ¡ƒ}W n tk
r.   | Y S X | |¡S rh   )r   rÒ   rE   r¡   r   )rÀ   rs   rÐ   r!   r!   r"   r   £  s
    
c              
   C   s¼   dd l }| dtd¡ t | ¡}z<| ¡ �* | ddt¡ t| t | d ¡|d�}W 5 Q R X W n& t	k
r‚   | 
|pzt ¡ ¡ Y S X | ¡ �& | ddt¡ | |¡W  5 Q R £ S Q R X d S )Nr   z1ldgettext() is deprecated, use dgettext() insteadr\   ru   ú.*\bparameter codeset\b.*©re   rv   )rP   rQ   rR   rÓ   rE   rw   rx   r   rÒ   r¡   ry   r   rz   r   )rÀ   rs   rP   re   rÐ   r!   r!   r"   r   ª  s&     ÿ

ÿ$
ÿc                 C   sR   zt | t | d ¡ƒ}W n, tk
rB   |dkr6| Y S | Y S Y nX | |||¡S r{   )r   rÒ   rE   r¡   r   )rÀ   r|   r}   r9   rÐ   r!   r!   r"   r   »  s    c              
   C   sÒ   dd l }| dtd¡ t | ¡}z<| ¡ �* | ddt¡ t| t | d ¡|d�}W 5 Q R X W n8 t	k
r”   |dkrz|}n|}| 
|pŒt ¡ ¡ Y S X | ¡ �* | ddt¡ | |||¡W  5 Q R £ S Q R X d S )	Nr   z3ldngettext() is deprecated, use dngettext() insteadr\   ru   rÔ   rÕ   r2   r   )rP   rQ   rR   rÓ   rE   rw   rx   r   rÒ   r¡   ry   r   rz   r   )rÀ   r|   r}   r9   rP   re   rÐ   r�   r!   r!   r"   r   Å  s,     ÿ

ÿ$
ÿc                 C   s<   zt | t | d ¡ƒ}W n tk
r.   | Y S X | ||¡S rh   )r   rÒ   rE   r¡   r   )rÀ   r‚   rs   rÐ   r!   r!   r"   r   Û  s
    
c                 C   sT   zt | t | d ¡ƒ}W n, tk
rB   |dkr6| Y S | Y S Y nX | ||||¡S r{   )r   rÒ   rE   r¡   r   )rÀ   r‚   r|   r}   r9   rÐ   r!   r!   r"   r   ã  s    c                 C   s
   t t| ƒS rh   )r   rÑ   )rs   r!   r!   r"   r   î  s    c              
   C   sN   dd l }| dtd¡ | ¡ �& | ddt¡ tt| ƒW  5 Q R £ S Q R X d S )Nr   rt   r\   ru   z.*\bldgettext\b.*)rP   rQ   rR   rw   rx   r   rÑ   )rs   rP   r!   r!   r"   r   ñ  s     ÿ
ÿc                 C   s   t t| ||ƒS rh   )r   rÑ   )r|   r}   r9   r!   r!   r"   r   ú  s    c              
   C   sR   dd l }| dtd¡ | ¡ �* | ddt¡ tt| ||ƒW  5 Q R £ S Q R X d S )Nr   r~   r\   ru   z.*\bldngettext\b.*)rP   rQ   rR   rw   rx   r   rÑ   )r|   r}   r9   rP   r!   r!   r"   r   ý  s     ÿ
ÿc                 C   s   t t| |ƒS rh   )r   rÑ   )r‚   rs   r!   r!   r"   r     s    c                 C   s   t t| |||ƒS rh   )r   rÑ   )r‚   r|   r}   r9   r!   r!   r"   r     s    )r5   )NNF)N)N)N)1Ú__doc__r   r»   r   ÚsysÚ__all__r½   r¾   Úbase_prefixrº   ÚcompileÚVERBOSEÚDOTALLr   r#   r$   rC   rª   rD   rA   rS   r[   rg   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$*f 7
5  ÿ
+




	
