o
    X|Äj‚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 dId+d,„Z!dId-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 )Jaª  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   sR   � t  t| ¡D ]}|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.10/gettext.pyÚ	_tokenizeV   s   €

r&   c                 C   s   | rt d|  ƒS t 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   s     r5   é   ÚorÚandz//)r(   r)   r/   éÿÿÿÿc                 C   sž  d}t | ƒ}|dkr|d7 }t | ƒ}|dks
|dkr/t| ƒ\}}d||f }|dkr.tdƒ‚n%|dkr:d	||f }nzt|d
ƒ}W n tyM   t|ƒd ‚w d||f }t | ƒ}d}|tv r�t| }||k rgn(|dv rs|dv rsd| }t ||¡}t| |d ƒ\}	}d|||	f }|}|tv s^||  kr™dkrŸn nd| }|dkrË|dkrËt| dƒ\}
}|dkr¶t|ƒ‚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)r6   z%s %s %srA   ú?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%   rE   r   sX   þÿ
ÿõrE   c                 C   sT   zt | ƒ}W n ty   td| jjf ƒd ‚w dd l}| d| jjf td¡ | S )Nz'Plural value must be an integer, got %sr   rA   )ÚroundÚ	TypeErrorÚ	__class__Ú__name__ÚwarningsÚwarnÚDeprecationWarning)r=   r2   rS   r$   r$   r%   Ú_as_int£   s    ÿÿÿÿþrV   c                 C   s¨   t | ƒdkr
tdƒ‚z>tt| ƒƒ\}}|rt|ƒ‚d}|D ]}|dkr0|d7 }|dkr/tdƒ‚q|dkr8|d8 }qd	ti}td
| |ƒ |d W S  tyS   tdƒ‚w )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;   r6   é   z%plural form expression is too complexr<   rV   z›if True:
            def func(n):
                if not isinstance(n, int):
                    n = _as_int(n)
                return int(%s)
            Úfunc)Úlenr   rE   r&   r'   rV   ÚexecÚRecursionError)r    rJ   rK   ZdepthÚcÚnsr$   r$   r%   Úc2py¯   s4   ý€ûû
þr^   c                 C   s8  dd l }| | ¡} d}d}d}d}|  d¡}|dkr+| |d … }| d |… } ||O }nd}|  d¡}|dkrG| |d … }| d |… } ||O }nd}|  d¡}|dkrc| |d … }	| d |… } ||O }nd}	| }
g }t|d ƒD ]&}|| @ s•|
}||@ r€||	7 }||@ rˆ||7 }||@ r�||7 }| |¡ qo| ¡  |S )	Nr   r6   é   rA   ú@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Ó   sH   








€rm   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   s2   i | _ d | _d | _d | _|d ur|  |¡ d S d S ©N)Ú_infoÚ_charsetÚ_output_charsetÚ	_fallbackrE   ©ÚselfÚfpr$   r$   r%   Ú__init__ÿ   s   ÿzNullTranslations.__init__c                 C   s   d S rn   r$   rs   r$   r$   r%   rE     s   zNullTranslations._parsec                 C   s    | j r| j  |¡ d S || _ d S rn   )rr   Úadd_fallback)rt   Úfallbackr$   r$   r%   rw   
  s   
zNullTranslations.add_fallbackc                 C   s   | j r	| j  |¡S |S rn   )rr   r   )rt   Úmessager$   r$   r%   r     s   zNullTranslations.gettextc                 C   s†   dd l }| dtd¡ dd l}| jr3| ¡ � | ddt¡ | j |¡W  d   ƒ S 1 s.w   Y  | jr<| 	| j¡S | 	| 
¡ ¡S )Nr   ú/lgettext() is deprecated, use gettext() insteadr_   Úignoreú.*\blgettext\b.*)rS   rT   rU   r   rr   Úcatch_warningsÚfilterwarningsr   rq   ÚencodeÚgetpreferredencoding)rt   ry   rS   r   r$   r$   r%   r     s   ÿ
ÿ
 ýzNullTranslations.lgettextc                 C   s&   | j r| j  |||¡S |dkr|S |S ©Nr6   )rr   r   )rt   Úmsgid1Úmsgid2r=   r$   r$   r%   r   #  s
   zNullTranslations.ngettextc                 C   sœ   dd l }| dtd¡ dd l}| jr5| ¡ � | ddt¡ | j |||¡W  d   ƒ S 1 s0w   Y  |dkr<|}n|}| jrG| 	| j¡S | 	| 
¡ ¡S )Nr   ú1lngettext() is deprecated, use ngettext() insteadr_   r{   ú.*\blngettext\b.*r6   )rS   rT   rU   r   rr   r}   r~   r   rq   r   r€   ©rt   r‚   rƒ   r=   rS   r   Útmsgr$   r$   r%   r   +  s$   ÿ
ÿ ýzNullTranslations.lngettextc                 C   s   | j r
| j  ||¡S |S rn   )rr   r   )rt   Úcontextry   r$   r$   r%   r   =  s   zNullTranslations.pgettextc                 C   s(   | j r| j  ||||¡S |dkr|S |S r�   )rr   r   )rt   rˆ   r‚   rƒ   r=   r$   r$   r%   r   B  s
   zNullTranslations.npgettextc                 C   ó   | j S rn   )ro   ©rt   r$   r$   r%   ÚinfoJ  ó   zNullTranslations.infoc                 C   r‰   rn   )rp   rŠ   r$   r$   r%   ÚcharsetM  rŒ   zNullTranslations.charsetc                 C   s   dd l }| dtd¡ | jS )Nr   zoutput_charset() is deprecatedr_   ©rS   rT   rU   rq   )rt   rS   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Ž   )rt   r�   rS   r$   r$   r%   Úset_output_charsetV  s
   ÿ
z#NullTranslations.set_output_charsetc                 C   sN   dd l }| j|jd< |d ur#h d£}|t|ƒ@ D ]}t| |ƒ|j|< qd S d S )Nr   rb   >   r   r   r   r   r   r   )Úbuiltinsr   Ú__dict__ÚsetÚgetattr)rt   Únamesr‘   ZallowedÚnamer$   r$   r%   r   \  s   üzNullTranslations.installrn   )rR   Ú
__module__Ú__qualname__rv   rE   rw   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   r6   c                 C   s   |d? |d@ fS )z/Returns a tuple of major version, minor versioné   iÿÿ  r$   )rt   Ú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}n|| jkrS|d|d	d… ƒ\}}	}
}d}nt	dd|ƒ‚|  
|¡\}}|| jvrot	ddt|ƒ |ƒ‚td|	ƒD ]ú}||||
|
d … ƒ\}}|| }|||||d … ƒ\}}|| }||k r­||k r­|||… }|||… }nt	dd|ƒ‚|dk�r,d}| d¡D ]l}| ¡  ¡ }|sÊq¿| d¡rÕ| d¡rÕq¿d }}d|v r÷| dd¡\}}| ¡  ¡ }| ¡ }|| j|< |}n|�r| j|  d| 7  < |dk�r| d¡d | _q¿|dk�r+| d¡}|d  d¡d }t|ƒ| _q¿| j�p1d}d|v �r\| d¡\}} | d¡}t||ƒ}t|ƒD ]\}}!t|!|ƒ|||f< �qLn
t||ƒ|t||ƒ< |
d7 }
|d7 }qtdS )z8Override this method to support alternative .mo formats.r   )Úunpackr–   r   c                 S   s   t | dkƒS r�   )rF   )r=   r$   r$   r%   Ú<lambda>  s    z(GNUTranslations._parse.<locals>.<lambda>z<INrA   z<4IrW   z<IIz>4Iz>IIzBad magic numberzBad version number é   zFile is corruptó   
z	#-#-#-#-#rC   r6   Ú
zcontent-typezcharset=zplural-formsú;zplural=Úasciió    )Ústructrœ   r”   Ú_catalogr    ÚreadrY   ÚLE_MAGICÚBE_MAGICÚOSErrorr›   ÚVERSIONSÚstrrd   ÚsplitÚdecodeÚstripÚ
startswithÚendswithÚlowerro   rp   r^   Ú	enumerate)"rt   ru   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%   rE   v  s|   










€



ÿ
ÇzGNUTranslations._parsec                 C   sp   dd l }| dtd¡ dd l}tƒ }| j ||¡}||u r(| jr&| j |¡S |}| j	r1| 
| j	¡S | 
| ¡ ¡S )Nr   rz   r_   )rS   rT   rU   r   Úobjectr¥   rI   rr   r   rq   r   r€   )rt   ry   rS   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y:   | jr/| j |||¡ Y S |dkr6|}n|}Y nw | j	rD| 
| j	¡S | 
| ¡ ¡S )Nr   r„   r_   r6   )rS   rT   rU   r   r¥   r    ÚKeyErrorrr   r   rq   r   r€   r†   r$   r$   r%   r   Þ  s$   ÿ€úzGNUTranslations.lngettextc                 C   s6   t ƒ }| j ||¡}||u r| jr| j |¡S |S |S rn   )r¼   r¥   rI   rr   r   )rt   ry   r½   r‡   r$   r$   r%   r   ð  s   zGNUTranslations.gettextc                 C   s`   z| j ||  |¡f }W |S  ty/   | jr!| j |||¡ Y S |dkr*|}Y |S |}Y |S w r�   )r¥   r    r¾   rr   r   )rt   r‚   rƒ   r=   r‡   r$   r$   r%   r   ù  s   ùÿùzGNUTranslations.ngettextc                 C   sF   | j ||f }tƒ }| j ||¡}||u r!| jr| j ||¡S |S |S rn   )ÚCONTEXTr¼   r¥   rI   rr   r   )rt   rˆ   ry   Úctxt_msg_idr½   r‡   r$   r$   r%   r     s   zGNUTranslations.pgettextc              	   C   sp   | j ||f }z| j||  |¡f }W |S  ty7   | jr)| j ||||¡ Y S |dkr2|}Y |S |}Y |S w r�   )r¿   r¥   r    r¾   rr   r   )rt   rˆ   r‚   rƒ   r=   rÀ   r‡   r$   r$   r%   r     s   ùÿùzGNUTranslations.npgettextN)rR   r—   r˜   r§   r¨   r¿   rª   r›   rE   r   r   r   r   r   r   r$   r$   r$   r%   r   f  s    Y	
r   Fc                 C   sä   |d u rt }|d u r)g }dD ]}tj |¡}|r| d¡} nqd|vr)| d¡ g }|D ]}t|ƒD ]}||vr>| |¡ q3q-|rEg }	nd }	|D ]&}|dkrR |	S tj ||dd|  ¡}
tj 	|
¡ro|rk|	 |
¡ qI|
  S qI|	S )N)ÚLANGUAGEÚLC_ALLÚLC_MESSAGESÚLANGrC   ÚCrÃ   z%s.mo)
Ú_default_localedirÚosÚenvironrI   r¬   re   rm   ÚpathÚjoinÚexists)ÚdomainÚ	localedirÚ	languagesÚallZenvarrl   ZnelangsÚlangZnelangrJ   Úmofiler$   r$   r%   r     sB   
þ

€þúür   Zunspecifiedc              	   C   s<  |d u rt }t| ||dd�}|s!|rtƒ S ddlm} t|d| ƒ‚d }|D ]v}	|tj |	¡f}
t	 
|
¡}|d u rUt|	dƒ�}t	 |
||ƒ¡}W d   ƒ n1 sPw   Y  dd l}| |¡}|tur�dd l}| dtd¡ |r�| ¡ � | d	d
t¡ | |¡ W d   ƒ n1 sŠw   Y  |d u r–|}q%| |¡ q%|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Ú_translationsrI   ÚopenÚ
setdefaultÚcopyÚ_unspecifiedrS   rT   rU   r}   r~   r�   rw   )rÌ   rÍ   rÎ   Zclass_rx   rj   ZmofilesrÒ   rJ   rÑ   ÚkeyÚtru   rÚ   rS   r$   r$   r%   r   G  sH   ÿ
ÿ
ÿ
ÿýr   c                 C   s   t | |d|d�}| |¡ d S )NT)rx   rj   )r   r   )rÌ   rÍ   rj   r•   rÝ   r$   r$   r%   r   r  s   r   Zmessagesc                 C   s   | d ur| a t S rn   )Ú_current_domain)rÌ   r$   r$   r%   r   €  s   r   c                 C   s   |d ur|t | < t  | t¡S rn   )Ú_localedirsrI   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_   )rS   rT   rU   Ú_localecodesetsrI   )rÌ   rj   rS   r$   r$   r%   r
   Ž  s   ÿ
r
   c                 C   s8   zt | t | d ¡ƒ}W n ty   | Y S w | |¡S rn   )r   rß   rI   r©   r   )rÌ   ry   rÝ   r$   r$   r%   r   ˜  s   ÿ
r   c                 C   sâ   dd l }| dtd¡ dd l}t | ¡}z(| ¡ � | ddt¡ t| t	 | d ¡|d�}W d   ƒ n1 s6w   Y  W n t
yN   | |pJ| ¡ ¡ Y S w | ¡ � | ddt¡ | |¡W  d   ƒ S 1 sjw   Y  d S )Nr   z1ldgettext() is deprecated, use dgettext() insteadr_   r{   ú.*\bparameter codeset\b.*©rj   r|   )rS   rT   rU   r   rà   rI   r}   r~   r   rß   r©   r   r€   r   )rÌ   ry   rS   r   rj   rÝ   r$   r$   r%   r   Ÿ  s.   ÿ

ÿý€ÿ
ÿ$ýr   c                 C   sL   zt | t | d ¡ƒ}W n ty   |dkr| Y S | Y S w | |||¡S r�   )r   rß   rI   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 | ¡}z(| ¡ � | ddt¡ t| t	 | d ¡|d�}W d   ƒ n1 s6w   Y  W n t
yW   |dkrJ|}n|}| |pS| ¡ ¡ Y S w | ¡ � | ddt¡ | |||¡W  d   ƒ S 1 suw   Y  d S )	Nr   z3ldngettext() is deprecated, use dngettext() insteadr_   r{   rá   râ   r6   r…   )rS   rT   rU   r   rà   rI   r}   r~   r   rß   r©   r   r€   r   )	rÌ   r‚   rƒ   r=   rS   r   rj   rÝ   r‡   r$   r$   r%   r   »  s4   ÿ

ÿý€û
ÿ$ýr   c                 C   s:   zt | t | d ¡ƒ}W n ty   | Y S w | ||¡S rn   )r   rß   rI   r©   r   )rÌ   rˆ   ry   rÝ   r$   r$   r%   r   Ò  s   ÿr   c                 C   sN   zt | t | d ¡ƒ}W n ty   |dkr| Y S | Y S w | ||||¡S r�   )r   rß   rI   r©   r   )rÌ   rˆ   r‚   rƒ   r=   rÝ   r$   r$   r%   r   Ú  s   ür   c                 C   s
   t t| ƒS rn   )r   rÞ   )ry   r$   r$   r%   r   å  s   
r   c                 C   sZ   dd l }| dtd¡ | ¡ � | ddt¡ tt| ƒW  d   ƒ S 1 s&w   Y  d S )Nr   rz   r_   r{   z.*\bldgettext\b.*)rS   rT   rU   r}   r~   r   rÞ   )ry   rS   r$   r$   r%   r   è  s   ÿ
ÿ$ýr   c                 C   s   t t| ||ƒS rn   )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 s(w   Y  d S )Nr   r„   r_   r{   z.*\bldngettext\b.*)rS   rT   rU   r}   r~   r   rÞ   )r‚   rƒ   r=   rS   r$   r$   r%   r   ô  s   ÿ
ÿ$ýr   c                 C   s   t t| |ƒS rn   )r   rÞ   )rˆ   ry   r$   r$   r%   r   þ  s   r   c                 C   s   t t| |||ƒS rn   )r   rÞ   )rˆ   r‚   rƒ   r=   r$   r$   r%   r     s   r   )r9   )NNFrn   )0Ú__doc__rÇ   r   ÚsysÚ__all__rÉ   rÊ   Úbase_prefixrÆ   ÚcompileÚVERBOSEÚDOTALLr   r&   r'   rG   r²   rH   rE   rV   r^   rm   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&
ÿ+




	
