U Ä:âejã@s¶dZddlZddlZddlZddlZddddddd d d d d ddddddddddgZej ejdd¡Z e  dej ej B¡Z dd„Zdd„ZdZd d!„eed"ƒDƒZd#d$d%d&œZdGd(d)„Zd*d+„Zd,d-„Zd.d/„ZGd0d„dƒZGd1d„deƒZdHd3d„ZiZd4gZdddd2efd5d„Zdedfd6d„Ziaiad7a dId8d „Z!dJd9d „Z"dKd:d „Z#d;d „Z$dd„Z'd?d„Z(d@d„Z)dAd„Z*dBd„Z+dCd„Z,dDd„Z-dEd„Z.dFd„Z/eZ0dS)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[ \t]+) | # spaces and horizontal tabs (?P[0-9]+\b) | # decimal integer (?Pn\b) | # only n is allowed (?P[()]) | (?P[-*/%+?:]|[>, # <=, >=, ==, !=, &&, ||, # ? : # unary and bitwise ops # not allowed (?P\w+|.) # invalid token ccsPt t|¡D]8}|j}|dkr q | |¡}|dkr>td|ƒ‚|Vq dVdS)NÚ WHITESPACESÚINVALIDz invalid token in plural form: %sÚ)ÚreÚfinditerÚ_token_patternÚ lastgroupÚgroupÚ ValueError)ÚpluralÚmoÚkindÚvalue©r&ú,/usr/local/python38/lib/python3.8/gettext.pyÚ _tokenizeWs  r(cCs|rtd|ƒStdƒSdS)Nz#unexpected token in plural form: %szunexpected end of plural form)r!)r%r&r&r'Ú_errorbs r)))ú||)ú&&)z==z!=)ú<ú>z<=z>=)ú+ú-)Ú*ú/ú%cCs i|]\}}|D] }||“qqSr&r&)Ú.0ÚiZopsÚopr&r&r'Ú ps r6éÚorÚandz//)r*r+r1éÿÿÿÿc Cs¨d}t|ƒ}|dkr&|d7}t|ƒ}q |dkrXt|ƒ\}}d||f}|dkr¨tdƒ‚nP|dkrnd ||f}n:zt|d ƒ}Wntk ršt|ƒd‚YnXd ||f}t|ƒ}d }|tkrt|}||krÒq|d krê|d krêd|}t ||¡}t||dƒ\} }d||| f}|}q´||kr4dkr@nnd|}|dkr |dkr t|dƒ\} }|dkrtt|ƒ‚t|ƒ\} }d| || f}|dkr d|}||fS)Nrú!znot ú(z%s(%s)ú)z%unbalanced parenthesis in plural formÚnz%s%sé z%s%déd)ééz(%s)r7z%s %s %srBú?rú:z%s if %s else %s)ÚnextÚ_parser!Úintr)Ú _binary_opsÚ _c2py_opsÚget) ÚtokensÚpriorityÚresultÚnexttokÚsubr%Újr4r5ÚrightÚif_trueÚif_falser&r&r'rFssP          rFcCsZz t|ƒ}Wn(tk r4td|jjfƒd‚YnXddl}| d|jjftd¡|S)Nz'Plural value must be an integer, got %srrB)ÚroundÚ TypeErrorÚ __class__Ú__name__ÚwarningsÚwarnÚDeprecationWarning)r>r4rXr&r&r'Ú_as_int¤s  ÿÿÿþr[cCs²t|ƒdkrtdƒ‚z|tt|ƒƒ\}}|r2t|ƒ‚d}|D]6}|dkr`|d7}|dkrptdƒ‚q:|dkr:|d8}q:d ti}td ||ƒ|d WStk r¬tdƒ‚YnXd 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 longrr<r7éz%plural form expression is too complexr=r[z›if True: def func(n): if not isinstance(n, int): n = _as_int(n) return int(%s) ÚfuncN)Úlenr!rFr(r)r[ÚexecÚRecursionError)r"rMrNÚdepthÚcÚnsr&r&r'Úc2py°s.   ûû rdc Cs4t |¡}d}d}d}d}| d¡}|dkrN||d…}|d|…}||O}nd}| d¡}|dkr†||d…}|d|…}||O}nd}| d¡}|dkr¾||d…}|d|…}||O}nd}|} g} t|dƒD]P} | |@sÖ| } | |@rø| |7} | |@r | |7} | |@r| |7} |  | ¡qÖ|  ¡| S) Nr7érBrú@rÚ.Ú_)rÚ normalizerÚrangeÚappendÚreverse) ÚlocÚCOMPONENT_CODESETÚCOMPONENT_TERRITORYÚCOMPONENT_MODIFIERÚmaskÚposÚmodifierÚcodesetÚ territoryÚlanguageÚretr4Úvalr&r&r'Ú _expand_langÔsJ                 ryc@s€eZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zddd„ZdS) rNcCs.i|_d|_d|_d|_|dk r*| |¡dS©N)Ú_infoÚ_charsetÚ_output_charsetÚ _fallbackrF©ÚselfÚfpr&r&r'Ú__init__ÿs zNullTranslations.__init__cCsdSrzr&rr&r&r'rFszNullTranslations._parsecCs|jr|j |¡n||_dSrz)r~Ú add_fallback)r€Úfallbackr&r&r'rƒ szNullTranslations.add_fallbackcCs|jr|j |¡S|Srz)r~r )r€Úmessager&r&r'r s zNullTranslations.gettextc Csrddl}| dtd¡|jrR| ¡(| ddt¡|j |¡W5QR£SQRX|jrd| |j¡S| t   ¡¡S)Nrú/lgettext() is deprecated, use gettext() insteadreÚignoreú.*\blgettext\b.*) rXrYrZr~Úcatch_warningsÚfilterwarningsrr}ÚencoderÚgetpreferredencoding)r€r…rXr&r&r'rsÿ ÿ zNullTranslations.lgettextcCs*|jr|j |||¡S|dkr"|S|SdS©Nr7)r~r)r€Úmsgid1Úmsgid2r>r&r&r'r"s zNullTranslations.ngettextc Csˆddl}| dtd¡|jrV| ¡,| ddt¡|j |||¡W5QR£SQRX|dkrd|}n|}|jrz| |j¡S| t   ¡¡S)Nrú1lngettext() is deprecated, use ngettext() insteadrer‡ú.*\blngettext\b.*r7) rXrYrZr~r‰rŠrr}r‹rrŒ©r€rŽrr>rXÚtmsgr&r&r'r*s"ÿ ÿ" zNullTranslations.lngettextcCs|jr|j ||¡S|Srz)r~r)r€Úcontextr…r&r&r'r;szNullTranslations.pgettextcCs,|jr|j ||||¡S|dkr$|S|SdSr)r~r)r€r”rŽrr>r&r&r'r@s zNullTranslations.npgettextcCs|jSrz)r{©r€r&r&r'ÚinfoHszNullTranslations.infocCs|jSrz)r|r•r&r&r'ÚcharsetKszNullTranslations.charsetcCsddl}| dtd¡|jS)Nrzoutput_charset() is deprecatedre©rXrYrZr})r€rXr&r&r'Úoutput_charsetNs ÿzNullTranslations.output_charsetcCs ddl}| dtd¡||_dS)Nrz"set_output_charset() is deprecatedrer˜)r€r—rXr&r&r'Úset_output_charsetTs ÿz#NullTranslations.set_output_charsetcCsRddl}|j|jd<|dk rNddddddh}|t|ƒ@D]}t||ƒ|j|<q8dS) Nrrhr rrrrr)Úbuiltinsr Ú__dict__ÚsetÚgetattr)r€Únamesr›ÚallowedÚnamer&r&r'rZs ÿzNullTranslations.install)N)N)rWÚ __module__Ú __qualname__r‚rFrƒr rrrrrr–r—r™ršrr&r&r&r'rþs  c@s\eZdZdZdZdZdZdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„ZdS)rlÞ*l•$<z%s%s)rr7cCs|d?|d@fS)z/Returns a tuple of major version, minor versionéiÿÿr&)r€Úversionr&r&r'Ú _get_versionspszGNUTranslations._get_versionsc"Csöddlm}t|ddƒ}i|_}dd„|_| ¡}t|ƒ}|d|dd …ƒd}||jkr||d |d d …ƒ\}} } } d } n6||jkr¦|d |d d …ƒ\}} } } d} n t dd|ƒ‚|  |¡\} }| |j krÞt ddt | ƒ|ƒ‚t d| ƒD]}|| || | d…ƒ\}}||}|| || | d…ƒ\}}||}||kr`||kr`|||…}|||…}n t dd|ƒ‚|dkrld}| d¡D]æ}| ¡ ¡}|sžq„| d¡rº| d¡rºq„d}}d|kr| dd¡\}}| ¡ ¡}| ¡}||j|<|}n|r|j|d|7<|dkr8| d¡d|_n0|dkr„| d¡}|d d¡d}t|ƒ|_q„|jpvd}d|krÌ| d¡\}} | d¡}t ||ƒ}t|ƒD]\}}!t |!|ƒ|||f<q¬nt ||ƒ|t ||ƒ<| d7} | d7} qèdS)z8Override this method to support alternative .mo formats.r)Úunpackr¡rcSs t|dkƒSr)rG)r>r&r&r'Ú}óz(GNUTranslations._parse..z4Iz>IIzBad magic numberzBad version number ézFile is corruptó z #-#-#-#-#rDr7Ú z content-typezcharset=z plural-formsú;zplural=Úasciió)Ústructr§ržÚ_catalogr"Úreadr^ÚLE_MAGICÚBE_MAGICÚOSErrorr¦ÚVERSIONSÚstrrjÚsplitÚdecodeÚstripÚ startswithÚendswithÚlowerr{r|rdÚ enumerate)"r€rr§ÚfilenameÚcatalogÚbufÚbuflenÚmagicr¥ÚmsgcountÚ masteridxÚtransidxÚiiÚ major_versionÚ minor_versionr4ÚmlenÚmoffÚmendÚtlenÚtoffÚtendÚmsgr“ÚlastkÚb_itemÚitemÚkÚvr"r—rŽrÚxr&r&r'rFtsv                      zGNUTranslations._parsecCshddl}| dtd¡tƒ}|j ||¡}||krH|jrD|j |¡S|}|jrZ|  |j¡S|  t   ¡¡S)Nrr†re) rXrYrZÚobjectr±rJr~rr}r‹rrŒ)r€r…rXÚmissingr“r&r&r'rÍsÿ  zGNUTranslations.lgettextcCsddl}| dtd¡z|j|| |¡f}Wn@tk rn|jrX|j |||¡YS|dkrf|}n|}YnX|jr‚|  |j¡S|  t   ¡¡S)Nrrrer7) rXrYrZr±r"ÚKeyErrorr~rr}r‹rrŒr’r&r&r'rÛs ÿ  zGNUTranslations.lngettextcCs6tƒ}|j ||¡}||kr2|jr.|j |¡S|S|Srz)r×r±rJr~r )r€r…rØr“r&r&r'r ìs zGNUTranslations.gettextcCs^z|j|| |¡f}Wn@tk rX|jrB|j |||¡YS|dkrP|}n|}YnX|Sr)r±r"rÙr~r)r€rŽrr>r“r&r&r'rõs zGNUTranslations.ngettextcCsF|j||f}tƒ}|j ||¡}||krB|jr>|j ||¡S|S|Srz)ÚCONTEXTr×r±rJr~r)r€r”r…Ú ctxt_msg_idrØr“r&r&r'rszGNUTranslations.pgettextc Csn|j||f}z|j|| |¡f}WnBtk rh|jrR|j ||||¡YS|dkr`|}n|}YnX|Sr)rÚr±r"rÙr~r)r€r”rŽrr>rÛr“r&r&r'r s zGNUTranslations.npgettextN)rWr¢r£r³r´rÚr¶r¦rFrrr rrrr&r&r&r'rdsY   Fc Csâ|dkr t}|dkrRg}dD]"}tj |¡}|r| d¡}q@qd|krR| d¡g}|D]$}t|ƒD]}||krf| |¡qfqZ|rŠg} nd} |D]J}|dkr¢qÞtj ||dd|¡} tj  | ¡r’|rÔ|  | ¡q’| Sq’| S)N)ÚLANGUAGEÚLC_ALLÚ LC_MESSAGESÚLANGrDÚCrÞz%s.mo) Ú_default_localedirÚosÚenvironrJr¸rkryÚpathÚjoinÚexists) ÚdomainÚ localedirÚ languagesÚallÚenvarrxÚnelangsÚlangÚnelangrMÚmofiler&r&r'rs8       Ú unspecifiedc Cs|dkr t}t|||dd}|sB|r*tƒSddlm}t|d|ƒ‚d}|D]Æ} |tj | ¡f} t   | ¡} | dkr–t | dƒ} t   | || ƒ¡} W5QRXddl } |   | ¡} |tk röddl}| dtd¡|rö| ¡| d d t¡|  |¡W5QRX|dkr| }qJ| | ¡qJ|S) NT)rêr)ÚENOENTz$No translation file found for domainÚrbzparameter codeset is deprecatedrer‡z.*\bset_output_charset\b.*)rrrÚerrnorñÚFileNotFoundErrorrâräÚabspathÚ _translationsrJÚopenÚ setdefaultÚcopyÚ _unspecifiedrXrYrZr‰rŠršrƒ)rçrèréÚclass_r„rtÚmofilesrñrMrïÚkeyÚtrrùrXr&r&r'rCsH ÿ   ÿ ÿ  cCst||d|d}| |¡dS)NT)r„rt)rr)rçrèrtrŸrþr&r&r'rnsÚmessagescCs|dk r |atSrz)Ú_current_domain)rçr&r&r'r|scCs|dk r|t|<t |t¡Srz)Ú _localedirsrJrá)rçrèr&r&r'r ƒscCs0ddl}| dtd¡|dk r&|t|<t |¡S)Nrz'bind_textdomain_codeset() is deprecatedre)rXrYrZÚ_localecodesetsrJ)rçrtrXr&r&r'r ŠsÿcCs:zt|t |d¡ƒ}Wntk r.|YSX| |¡Srz)rrrJrµr )rçr…rþr&r&r'r ”s  c Cs¼ddl}| dtd¡t |¡}z<| ¡*| ddt¡t|t |d¡|d}W5QRXWn&t k r‚|  |pzt   ¡¡YSX| ¡&| ddt¡|  |¡W5QR£SQRXdS)Nrz1ldgettext() is deprecated, use dgettext() insteadrer‡ú.*\bparameter codeset\b.*©rtrˆ)rXrYrZrrJr‰rŠrrrµr‹rrŒr)rçr…rXrtrþr&r&r'r›s&ÿ  ÿ$ ÿcCsRzt|t |d¡ƒ}Wn,tk rB|dkr6|YS|YSYnX| |||¡Sr)rrrJrµr)rçrŽrr>rþr&r&r'r ¬sc CsÒddl}| dtd¡t |¡}z<| ¡*| ddt¡t|t |d¡|d}W5QRXWn8t k r”|dkrz|}n|}|  |pŒt   ¡¡YSX| ¡*| ddt¡|  |||¡W5QR£SQRXdS) Nrz3ldngettext() is deprecated, use dngettext() insteadrer‡rrr7r‘)rXrYrZrrJr‰rŠrrrµr‹rrŒr)rçrŽrr>rXrtrþr“r&r&r'r¶s,ÿ  ÿ$ ÿcCs<zt|t |d¡ƒ}Wntk r.|YSX| ||¡Srz)rrrJrµr)rçr”r…rþr&r&r'rÌs  cCsTzt|t |d¡ƒ}Wn,tk rB|dkr6|YS|YSYnX| ||||¡Sr)rrrJrµr)rçr”rŽrr>rþr&r&r'rÔscCs tt|ƒSrz)r r)r…r&r&r'r ßsc CsNddl}| dtd¡| ¡&| ddt¡tt|ƒW5QR£SQRXdS)Nrr†rer‡z.*\bldgettext\b.*)rXrYrZr‰rŠrr)r…rXr&r&r'râsÿ ÿcCstt|||ƒSrz)r r)rŽrr>r&r&r'rësc CsRddl}| dtd¡| ¡*| ddt¡tt|||ƒW5QR£SQRXdS)Nrrrer‡z.*\bldngettext\b.*)rXrYrZr‰rŠrr)rŽrr>rXr&r&r'rîsÿ ÿcCs tt||ƒSrz)rr)r”r…r&r&r'røscCstt||||ƒSrz)rr)r”rŽrr>r&r&r'rüs)r:)NNF)N)N)N)1Ú__doc__rrârÚsysÚ__all__räråÚ base_prefixráÚcompileÚVERBOSEÚDOTALLrr(r)rHr¾rIrFr[rdryrrrrörúrrrrrrr r r rr rrrr rrrrrrr&r&r&r'Úsˆ0û  õ    1 $*f7 &ÿ +