
    F\hU                        S r SSKrSSKrSSKrSSKr/ SQr\R                  R                  \R                  SS5      r	\R                  " S\R                  \R                  -  5      rS rS rS	r\" \S
5       V VVs0 s H  u  pU  H  o"U _M     M     snnn rSSSS.rS'S jrS rS rS rS r " S S5      r " S S\5      rS(S jr0 r  S)S jrS*SS.S jjr0 qSqS*S jr S*S jr!S r"S  r#S! r$S" r%S# r&S$ r'S% r(S& r)\r*gs  snnn f )+a  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bindtextdomainfindtranslationinstall
textdomaindgettext	dngettextgettext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              #      #    [         R                  " [        U 5       H@  nUR                  nUS:X  a  M  UR	                  U5      nUS:X  a  [        SU-  5      eUv   MB     Sv   g 7f)NWHITESPACESINVALIDz invalid token in plural form: %s )refinditer_token_pattern	lastgroupgroup
ValueError)pluralmokindvalues       /usr/lib/python3.13/gettext.py	_tokenizer$   W   s`     kk.&1||= 9?%GHH 2 Hs   A%A'c                 B    U (       a  [        SU -  5      $ [        S5      $ )Nz#unexpected token in plural form: %szunexpected end of plural form)r   )r"   s    r#   _errorr&   c   s"    ?%GHH9::    ))||)&&)z==z!=)<>z<=z>=)+-)*/%   orandz//)r(   r)   r/   c                    Sn[        U 5      nUS:X  a  US-  n[        U 5      nUS:X  a  M  US:X  a)  [        U 5      u  pCU< SU< S3nUS:w  a  [        S5      eO"US:X  a	  U< U< 3nO [        US5      nS	X%4-  n[        U 5      nS
nU[
        ;   a`  [
        U   nXq:  a  OQUS;   a  US;   a  SU-  n[        R                  X35      n[        XS-   5      u  pU< SU< SU	< 3nUnU[
        ;   a  M`  Xas=:X  a  S:X  a  O  OSU-  nUS:X  aJ  US::  aD  [        U S5      u  pUS:w  a  [	        U5      e[        U 5      u  pU
< SU< SU< 3nUS:X  a  SU-  nX#4$ ! [         a    [	        U5      S ef = f)Nr   !znot ()z%unbalanced parenthesis in plural formn
   z%s%dd   )      z(%s)r1    r<   ?r   :z if z else )next_parser   intr&   _binary_ops	_c2py_opsget)tokenspriorityresultnexttoksubr"   jioprightif_trueif_falses               r#   rA   rA   v   s   F6lG
S.&v, S. #~f~#S)c>DEE 	C!7+	,$E 6/)6lGA
[
  <;1;f_F]]7,A.%r51 [
  	&#~(a-!&!,c>/!"6N'.Aq=f_F?=  	,/t+	,s   +E E2c                      [        U 5        [	        U 5      $ ! [         a%    [        SU R                  R                  < 35      S ef = f)N%Plural value must be an integer, got )round	TypeError	__class____name___as_int2r8   s    r#   _as_intrY      sM    ;a A;  ;--0 16:	;;s	    /Ac                     [         R                  " U 5      $ ! [         a     Of = fSS Kn[        R
                  " S5      nSnUR                  bf  UR                  R                  S5      [        :X  aC  US-  nUR                  nUR                  b%  UR                  R                  S5      [        :X  a  MC  UR                  SU R                  R                  < 3[        U5        U $ )Nr   r1      rV   rR   )operatorindexrT   warningssys	_getframef_back	f_globalsrE   rV   warnrU   DeprecationWarning)r8   r^   frame
stacklevels       r#   rW   rW      s    ~~a    MM!EJ
,,
"u':'::'F('Ra
 ,,
"u':'::'F('R MM;;''*$ Hs    
%%c                 h   [        U 5      S:  a  [        S5      e [        [        U 5      5      u  pU(       a  [	        U5      eSnU H.  nUS:X  a  US-  nUS:  a  [        S5      eM!  US:X  d  M)  US-  nM0     [
        [        S	.n[        S
U-  U5        US   $ ! [         a    [        S5      ef = f)zGets 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   r6   r1      z%plural form expression is too complexr7   )rY   rV   zif True:
            def func(n):
                if not isinstance(n, int):
                    n = _as_int(n)
                return int(%s)
            func)	lenr   rA   r$   r&   rY   rV   execRecursionError)r   rH   rI   depthcnss         r#   c2pyrp      s    
 6{T=>>B 6!23/!ACx
2: %%LMM  c
  !h7 
 
 	 &z B@AABs   AB 1)B B1c                    SS K nUR                  U 5      n SnSnSnSnU R                  S5      nUS:  a  XS  nU S U n XT-  nOSnU R                  S5      nUS:  a  XS  nU S U n XR-  nOSnU R                  S5      nUS:  a  XS  n	U S U n XS-  nOSn	U n
/ n[        US-   5       HI  nX) -  (       a  M  U
nX-  (       a  X-  nX-  (       a  X-  nX-  (       a  X-  nUR	                  U5        MK     UR                  5         U$ )	Nr   r1   r[   r<   @r   ._)r   	normalizer   rangeappendreverse)locr   COMPONENT_CODESETCOMPONENT_TERRITORYCOMPONENT_MODIFIERmaskposmodifiercodeset	territorylanguageretrL   vals                 r#   _expand_langr      s5   


3
C   D
((3-C
axt9$3i"
((3-C
axd)$3i!
((3-C
axI	$3i#	H
C46]E		C&(8$%JJsO  KKMJr'   c                   X    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rSS jrSrg)r   i  Nc                 X    0 U l         S U l        S U l        Ub  U R                  U5        g g N)_info_charset	_fallbackrA   selffps     r#   __init__NullTranslations.__init__  s,    
>KKO r'   c                     g r    r   s     r#   rA   NullTranslations._parse  s    r'   c                 j    U R                   (       a  U R                   R                  U5        g Xl         g r   )r   add_fallback)r   fallbacks     r#   r   NullTranslations.add_fallback  s     >>NN''1%Nr'   c                 ^    U R                   (       a  U R                   R                  U5      $ U$ r   )r   r   )r   messages     r#   r   NullTranslations.gettext"  s#    >>>>))'22r'   c                     U R                   (       a  U R                   R                  XU5      $ [        U5      nUS:X  a  U$ U$ Nr1   )r   r   rW   )r   msgid1msgid2r8   s       r#   r   NullTranslations.ngettext'  s:    >>>>**61==QK6MMr'   c                 ^    U R                   (       a  U R                   R                  X5      $ U$ r   )r   r   )r   contextr   s      r#   r   NullTranslations.pgettext0  s#    >>>>**7<<r'   c                     U R                   (       a  U R                   R                  XX45      $ [        U5      nUS:X  a  U$ U$ r   )r   r   rW   )r   r   r   r   r8   s        r#   r   NullTranslations.npgettext5  s:    >>>>++GVGGQK6MMr'   c                     U R                   $ r   )r   r   s    r#   infoNullTranslations.info>  s    zzr'   c                     U R                   $ r   )r   r   s    r#   charsetNullTranslations.charsetA  s    }}r'   c                     SS K nU R                  UR                  S'   Ub2  1 SknU[        U5      -   H  n[	        X5      UR                  U'   M     g g )Nr   rt   >   r   r   r   r   )builtinsr   __dict__setgetattr)r   namesr   allowednames        r#   r	   NullTranslations.installD  sQ    !%#FG#e*,*1$*=!!$' - r'   )r   r   r   r   )rV   
__module____qualname____firstlineno__r   rA   r   r   r   r   r   r   r   r	   __static_attributes__r   r'   r#   r   r     s4    &

>r'   r   c                   H    \ rS rSrSrSrSrSrS rS r	S r
S	 rS
 rS rSrg)r   iM  l   * l   $< z%s%s)r   r1   c                     US-	  US-  4$ )z/Returns a tuple of major version, minor version   i  r   )r   versions     r#   _get_versionsGNUTranslations._get_versionsY  s    2w/00r'   c                 Z   SSK Jn  [        USS5      n0 =U l        nS U l        UR                  5       n[        U5      nU" SUSS 5      S   nXpR                  :X  a  U" S	USS
 5      u  ppSnO.XpR                  :X  a  U" SUSS
 5      u  ppSnO[        SSU5      eU R                  U5      u  pXR                  ;  a  [        SS[        U5      -   U5      e[        SU	5       GHB  nU" XXS-    5      u  nnUU-   nU" XXS-    5      u  nnUU-   nUU:  a  UU:  a  UUU nUUU nO[        SSU5      eUS:X  GaS  SnUR                  S5       GH;  nUR                  5       R!                  5       nU(       d  M+  UR#                  S5      (       a  UR%                  S5      (       a  MY  S=nnSU;   aU  UR                  SS5      u  nnUR!                  5       R'                  5       nUR!                  5       nUU R(                  U'   UnO!U(       a  U R(                  U==   SU-   -  ss'   US:X  a  UR                  S5      S   U l        M  US:X  d  GM  UR                  S5      nUS   R                  S5      S   n[-        U5      U l        GM>     U R*                  =(       d    SnSU;   aX  UR                  S5      u  nn UR                  S5      n[        UU5      n[/        U5       H  u  nn![        U!U5      UUU4'   M     O[        UU5      U[        UU5      '   U
S-  n
US-  nGME     g)z8Override this method to support alternative .mo formats.r   )unpackr   r   c                     [        U S:g  5      $ r   )rB   rX   s    r#   <lambda>(GNUTranslations._parse.<locals>.<lambda>f  s    AFr'   z<INr<   z<4Irh   z<IIz>4Iz>IIzBad magic numberzBad version number    zFile is corrupt   
z	#-#-#-#-#r?   r1   
zcontent-typezcharset=zplural-forms;zplural=ascii    )structr   r   _catalogr   readrj   LE_MAGICBE_MAGICOSErrorr   VERSIONSstrrv   splitdecodestrip
startswithendswithlowerr   r   rp   	enumerate)"r   r   r   filenamecatalogbufbuflenmagicr   msgcount	masteridxtransidxiimajor_versionminor_versionrL   mlenmoffmendtlentofftendmsgtmsglastkb_itemitemkvr   r   r   r   xs"                                     r#   rA   GNUTranslations._parse]  s    	"2vr* #%$+ggiStS!W%a(MM!5;E3q95M2GyBmm#5;E3q95M2GyB!/::'+'9'9''B$-!2S5GGRR q(#A	A+$>?JD$$;D!$<=JD$$;Df}$tn4~a!2H==qy"jj/F!==?002D {33k8R8R  LAd{#zz#q11GGIOO-GGI()

1 !

5)TD[8)N*()
(;A(>n,GGCL!"1I!6q!9&*6l+ 0> mm.wG#~!$7!3zz'*VW-%dODAq+.q'?GVQK( , .1w-?C)*NIMHs $r'   c                    [        5       nU R                  R                  X5      nX2L a,  U R                  R                  XR                  S5      4U5      nX2La  U$ U R                  (       a  U R                  R                  U5      $ U$ r   )objectr   rE   r   r   r   )r   r   missingr   s       r#   r   GNUTranslations.gettext  so    (}}  2?==$$g{{1~%>HDK>>>>))'22r'   c                      U R                   XR                  U5      4   nU$ ! [         a@    U R                  (       a  U R                  R	                  XU5      s $ US:X  a  Un U$ Un U$ f = fr   )r   r   KeyErrorr   r   )r   r   r   r8   r   s        r#   r   GNUTranslations.ngettext  su    	==&++a.!9:D   	~~~~..vqAAAv  	s   # 7A-A-'A-,A-c                 4   U R                   X4-  n[        5       nU R                  R                  X45      nXTL a,  U R                  R                  X0R	                  S5      4U5      nXTLa  U$ U R
                  (       a  U R
                  R                  X5      $ U$ r   )CONTEXTr   r   rE   r   r   r   )r   r   r   ctxt_msg_idr   r   s         r#   r   GNUTranslations.pgettext  s    llg%77(}}  6?==$$k;;q>%BGLDK>>>>**7<<r'   c                     U R                   X4-  n U R                  XPR                  U5      4   nU$ ! [         a@    U R                  (       a  U R                  R                  XX45      s $ US:X  a  Un U$ Un U$ f = fr   )r   r   r   r   r   r   )r   r   r   r   r8   r   r   s          r#   r   GNUTranslations.npgettext  s    llg%66	==kk!n!<=D   	~~~~//KKAv  	s   3 7A=,A=7A=<A=)r   r   r   N)rV   r   r   r   r   r   r   r   r   rA   r   r   r   r   r   r   r'   r#   r   r   M  s:    HH G H1Wr	

r'   r   c                    Uc  [         nUc[  / nS H<  n[        R                  R                  U5      nU(       d  M+  UR	                  S5      n  O   SU;  a  UR                  S5        / nU H-  n[        U5       H  nX;  d  M
  UR                  U5        M     M/     U(       a  / n	OS n	U H  nUS:X  a    U	$ [        R                  R                  XSSU -  5      n
[        R                  R                  SUSSU -  5      n[        R                  R                  U
5      (       a  U(       a  U	R                  U
5        OU
s  $ [        R                  R                  U5      (       d  M  U(       a  U	R                  U5        M  Us  $    U	$ )N)LANGUAGELC_ALLLC_MESSAGESLANGr?   Cr  z%s.moz/usr/share/locale-langpack)
_default_localedirosenvironrE   r   rw   r   pathjoinexists)domain	localedir	languagesallenvarr   nelangslangnelangrH   mofile	mofile_lps               r#   r   r     sU   &		BE**..'CsIIcN		 C
 iS!G"4(F$v& ) 
 3;, M+ i}g>NOGGLL!=t,g.>@	 77>>&!!f% 77>>)$$i(  - 0 Mr'   c                    Uc  [         n[        XUSS9nU(       d$  U(       a
  [        5       $ SSKJn  [        USU 5      eS nU H  nU[        R                  R                  U5      4n	[        R                  U	5      n
U
c0  [        US5       n[        R                  X" U5      5      n
S S S 5        SS KnUR                  U
5      n
Uc  U
nM  UR                  U
5        M     U$ ! , (       d  f       NA= f)NT)r  r   )ENOENTz$No translation file found for domainrb)r   r   r   errnor  FileNotFoundErrorr  r	  abspath_translationsrE   open
setdefaultcopyr   )r  r  r  class_r   mofilesr  rH   r  keytr   r  s                r#   r   r     s    ~ 6iT:G#%%  FP 	P Frwwv./c"9fd#r!,,S&*= $ 	IIaL>F"! " M $#s   C##
C1	)r   c                :    [        XSS9nUR                  U5        g )NT)r   )r   r	   )r  r  r   r#  s       r#   r	   r	   A  s    F5AIIer'   messagesc                     U b  U q [         $ r   )_current_domain)r  s    r#   r
   r
   L  s     r'   c                 N    Ub	  U[         U '   [         R                  U [        5      $ r   )_localedirsrE   r  )r  r  s     r#   r   r   S  s$    'F??6#566r'   c                      [        U [        R                  U S 5      5      nUR	                  U5      $ ! [         a    Us $ f = fr   )r   r)  rE   r   r   )r  r   r#  s      r#   r   r   Z  sE     => 99W      3 AAc                      [        U [        R                  U S 5      5      nUR                  XU5      $ ! [         a    [	        U5      nUS:X  a  Us $ Us $ f = fr   )r   r)  rE   r   rW   r   )r  r   r   r8   r#  s        r#   r   r   b  s\     => ::fa((  QK6MM    4 AAAc                      [        U [        R                  U S 5      5      nUR	                  X5      $ ! [         a    Us $ f = fr   )r   r)  rE   r   r   )r  r   r   r#  s       r#   r   r   n  sE     => ::g''  r+  c                      [        U [        R                  U S 5      5      nUR                  XX45      $ ! [         a    [	        U5      nUS:X  a  Us $ Us $ f = fr   )r   r)  rE   r   rW   r   )r  r   r   r   r8   r#  s         r#   r   r   v  s\     => ;;w22  QK6MMr-  c                 "    [        [        U 5      $ r   )r   r'  )r   s    r#   r   r     s    OW--r'   c                 $    [        [        XU5      $ r   )r   r'  )r   r   r8   s      r#   r   r     s    _fa88r'   c                 "    [        [        X5      $ r   )r   r'  )r   r   s     r#   r   r     s    _g77r'   c                 $    [        [        XX#5      $ r   )r   r'  )r   r   r   r8   s       r#   r   r     s    owBBr'   ))NNF)NNNFr   )+__doc__r\   r  r   r_   __all__r	  r
  base_prefixr  compileVERBOSEDOTALLr   r$   r&   rC   r   rD   rA   rY   rW   rp   r   r   r   r   r  r   r	   r)  r'  r
   r   r   r   r   r   r   r   r   r   r   )rL   opsrM   s   000r#   <module>r<     sX  
`  	 	 
 WW\\#//7HE    
BII		; $-[!#<K#<s1usr#<Ku40	/d&!BH'T9> 9>xW& Wv0h  37&+DT  7	)(	3.98C$ ] Ls   =D