
    RhT                        d Z ddlZddlZddlZddlZg dZej                  j                  ej                  dd      Z	 ej                  dej                  ej                  z        Zd Zd Zd	Z eed
      D  ci c]  \  } }|D ]  }||   c}}} ZddddZd&dZd Zd Zd Z G d d      Z G d de      Zd'dZi Z	 	 d(dZd)dddZi adad)dZd)dZ d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(eZ)yc c}}} w )*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              #      K   t        j                  t        |       D ]<  }|j                  }|dk(  r|j	                  |      }|dk(  rt        d|z        | > d y w)NWHITESPACESINVALIDz invalid token in plural form: %s )refinditer_token_pattern	lastgroupgroup
ValueError)pluralmokindvalues       /usr/lib/python3.12/gettext.py	_tokenizer$   W   sf     kk.&1 ||= 9?%GHH Hs   AA!c                 8    | rt        d| z        S t        d      S )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                    d}t        |       }|dk(  r|dz  }t        |       }|dk(  r|dk(  r&t        |       \  }}|d|d}|dk7  r+t        d      |dk(  r||}n	 t        |d      }d	||fz  }t        |       }d
}|t
        v rYt
        |   }||k  rnJ|dv r	|dv rd|z  }t        j                  ||      }t        | |dz         \  }	}|d|d|	}|}|t
        v rY||cxk(  rdk(  rn nd|z  }|dk(  rF|dk  rAt        | d      \  }
}|dk7  rt	        |      t        |       \  }}|
d|d|}|dk(  rd|z  }||fS # t        $ r t	        |      d w xY w)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~W#S)c>DEE	C!7+	,$E 65/)6lGA
[
  x<;1;f_F]]7G,A.w%r51 [
  	H&#~(a-!&!,c>/!"6N''.Aq=f_F7?=  	,/t+	,s   !E Ec                    	 t        |        dd l}t        j                  d      }d}|j                  b|j                  j                  d      t        k(  r@|dz  }|j                  }|j                  #|j                  j                  d      t        k(  r@|j                  d| j                  j                  t        |       | S # t        $ r$ t        d| j                  j                        d w xY w)Nz%Plural value must be an integer, got r   r1      __name__)round	TypeError	__class__rS   warningssys	_getframef_back	f_globalsrE   warnDeprecationWarning)r8   rW   frame
stacklevels       r#   _as_intr`      s    ;a
 MM!EJ
,,
"u':'::'F('Ra
 ,,
"u':'::'F('R MM;;''*$ H  ;--0 16:	;;s   C -C3c                 N   t        |       dkD  rt        d      	 t        t        |             \  }}|rt	        |      d}|D ](  }|dk(  r|dz  }|dkD  st        d      |dk(  s$|dz  }* t
        t        d	}t        d
|z  |       |d   S # t        $ r t        d      w xY w)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   )r`   rS   zif True:
            def func(n):
                if not isinstance(n, int):
                    n = _as_int(n)
                return int(%s)
            func)	lenr   rA   r$   r&   r`   rS   execRecursionError)r   rH   rI   depthcnss         r#   c2pyrj      s    
 6{T=>>B 6!23/! 	ACx
2: %%LMMc
	 !h7 
 
 	 &z B@AABs   :B B ''B B$c                    dd l }|j                  |       } d}d}d}d}| j                  d      }|dk\  r| |d  }| d | } ||z  }nd}| j                  d      }|dk\  r| |d  }| d | } ||z  }nd}| j                  d      }|dk\  r| |d  }	| d | } ||z  }nd}	| }
g }t        |dz         D ]:  }|| z  r
|
}||z  r||	z  }||z  r||z  }||z  r||z  }|j	                  |       < |j                          |S )	Nr   r1   rR   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      sX   


3
C   D
((3-C
axst9$3i""
((3-C
axcd)$3i!!
((3-C
axI	$3i##	H
C46] TE	C&&y(8$$w%%xJJsO KKMJr'   c                   L    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 ZddZy)r   Nc                 V    i | _         d | _        d | _        || j                  |       y y N)_info_charset	_fallbackrA   selffps     r#   __init__zNullTranslations.__init__  s,    
>KKO r'   c                      y r    r   s     r#   rA   zNullTranslations._parse  s    r'   c                 b    | j                   r| j                   j                  |       y || _         y r   )r   add_fallback)r   fallbacks     r#   r   zNullTranslations.add_fallback  s"    >>NN''1%DNr'   c                 T    | j                   r| j                   j                  |      S |S r   )r   r   )r   messages     r#   r   zNullTranslations.gettext  s#    >>>>))'22r'   c                 f    | j                   r| j                   j                  |||      S |dk(  r|S |S Nr1   )r   r   )r   msgid1msgid2r8   s       r#   r   zNullTranslations.ngettext   s3    >>>>**661==6MMr'   c                 V    | j                   r| j                   j                  ||      S |S r   )r   r   )r   contextr   s      r#   r   zNullTranslations.pgettext(  s%    >>>>**7G<<r'   c                 h    | j                   r| j                   j                  ||||      S |dk(  r|S |S r   )r   r   )r   r   r   r   r8   s        r#   r   zNullTranslations.npgettext-  s5    >>>>++GVVQGG6MMr'   c                     | j                   S r   )r   r   s    r#   infozNullTranslations.info5  s    zzr'   c                     | j                   S r   )r   r   s    r#   charsetzNullTranslations.charset8  s    }}r'   c                     dd l }| j                  |j                  d<   |1h d}|t        |      z  D ]  }t	        | |      |j                  |<    y y )Nr   rn   >   r   r   r   r   )builtinsr   __dict__setgetattr)r   namesr   allowednames        r#   r	   zNullTranslations.install;  sX    !%#FG#e*, >*1$*=!!$'> r'   r   )rS   
__module____qualname__r   rA   r   r   r   r   r   r   r   r	   r   r'   r#   r   r   
  s4    &

>r'   r   c                   @    e Zd ZdZdZdZdZd Zd Zd Z	d Z
d	 Zd
 Zy)r   l   * l   $< z%s%s)r   r1   c                     |dz	  |dz  fS )z/Returns a tuple of major version, minor version   i  r   )r   versions     r#   _get_versionszGNUTranslations._get_versionsP  s    2w/00r'   c                    ddl m} t        |dd      }i x| _        }d | _        |j                         }t        |      } |d|dd       d   }|| j                  k(  r |d	|dd
       \  }}	}
}d}n0|| j                  k(  r |d|dd
       \  }}	}
}d}nt        dd|      | j                  |      \  }}|| j                  vrt        ddt        |      z   |      t        d|	      D ]  } ||||
|
dz          \  }}||z   } |||||dz          \  }}||z   }||k  r||k  r||| }||| }nt        dd|      |dk(  r4d}|j                  d      D ]  }|j                         j!                         }|s%|j#                  d      r|j%                  d      rHdx}}d|v rU|j                  dd      \  }}|j!                         j'                         }|j!                         }|| j(                  |<   |}n|r| j(                  |xx   d|z   z  cc<   |dk(  r|j                  d      d   | _        |dk(  s|j                  d      }|d   j                  d      d   }t-        |      | _          | j*                  xs d}d|v rV|j                  d      \  }} |j                  d      }t        ||      }t/        |      D ]  \  }}!t        |!|      |||f<    nt        ||      |t        ||      <   |
dz  }
|dz  } y)z8Override this method to support alternative .mo formats.r   )unpackr   r   c                     t        | dk7        S r   )rB   )r8   s    r#   <lambda>z(GNUTranslations._parse.<locals>.<lambda>]  s    AF r'   z<INr<   z<4Irb   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   readrd   LE_MAGICBE_MAGICOSErrorr   VERSIONSstrrp   splitdecodestrip
startswithendswithlowerr   r   rj   	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   zGNUTranslations._parseT  s@    	"2vr* #%$+ggiStS!W%a(DMM!5;E3q95M2GXy(Bdmm#5;E3q95M2GXy(B!/::'+'9'9''B$}-!2S5GGRR q(# 9	AC	)A+$>?JD$$;DC!$<=JD$$;Df}$tn4~a!2H==qy"jj/ 3F!==?002D {3k8R  LAd{#zz#q11GGIOO-GGI()

1 !

5)TD[8)N*()
(;A(>n,GGCL!"1I!6q!9&*6l+3> mm.wG#~!$7!3zz'*VW-%dO ;DAq+.q'?GVQK(; .1w-?C)*NIMHs9	r'   c                    t               }| j                  j                  ||      }||u r-| j                  j                  || j                  d      f|      }||ur|S | j                  r| j                  j                  |      S |S r   )objectr   rE   r   r   r   )r   r   missingr   s       r#   r   zGNUTranslations.gettext  sw    (}}  '27?==$$gt{{1~%>HDwK>>>>))'22r'   c                     	 | j                   || j                  |      f   }|S # t        $ r; | j                  r| j                  j	                  |||      cY S |dk(  r|}Y |S |}Y |S w xY wr   )r   r   KeyErrorr   r   )r   r   r   r8   r   s        r#   r   zGNUTranslations.ngettext  sy    	==&$++a.!9:D   	~~~~..vvqAAAv  	s    $ 2A(A("A('A(c                 2   | j                   ||fz  }t               }| j                  j                  ||      }||u r-| j                  j                  || j	                  d      f|      }||ur|S | j
                  r| j
                  j                  ||      S |S r   )CONTEXTr   r   rE   r   r   r   )r   r   r   ctxt_msg_idr   r   s         r#   r   zGNUTranslations.pgettext  s    llgw%77(}}  g67?==$$k4;;q>%BGLDwK>>>>**7G<<r'   c                     | j                   ||fz  }	 | j                  || j                  |      f   }|S # t        $ r< | j                  r | j                  j                  ||||      cY S |dk(  r|}Y |S |}Y |S w xY wr   )r   r   r   r   r   r   )r   r   r   r   r8   r   r   s          r#   r   zGNUTranslations.npgettext  s    llgv%66	==dkk!n!<=D   	~~~~//KKAv  	s    5 3A:*A:4A:9A:N)rS   r   r   r   r   r   r   r   rA   r   r   r   r   r   r'   r#   r   r   D  s:    HH G H1Wr	

r'   r   c                    |t         }|Rg }dD ]6  }t        j                  j                  |      }|s%|j	                  d      } n d|vr|j                  d       g }|D ](  }t        |      D ]  }||vs|j                  |        * |rg }	nd }	|D ]  }|dk(  r |	S t        j                  j                  ||dd| z        }
t        j                  j                  d|dd| z        }t        j                  j                  |
      r|r|	j                  |
       n|
c S t        j                  j                  |      s|r|	j                  |       |c S  |	S )N)LANGUAGELC_ALLLC_MESSAGESLANGr?   Cr   z%s.moz/usr/share/locale-langpack)
_default_localedirosenvironrE   r   rq   r   pathjoinexists)domain	localedir	languagesallenvarr~   nelangslangnelangrH   mofile	mofile_lps               r#   r   r     sd   &		B 	E**..'CIIcN			
 iS!G '"4( 	'FW$v&	''
  !3;, M+ i}g>NOGGLL!=t,g.>@	 77>>&!f% 77>>)$i(  -!0 Mr'   c                    |t         }t        | ||d      }|s|r
t               S ddlm} t        |d|       d }|D ]  }|t        j                  j                  |      f}	t        j                  |	      }
|
1t        |d      5 }t        j                  |	 ||            }
d d d        dd l}|j                  |
      }
||
}|j                  |
        |S # 1 sw Y   8xY w)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    ~ 69iT:G#%%  FP 	P F #rwwv./c"9fd# >r!,,S&*=> 	IIaL>F"!#" M> >s   CC!	)r   c                B    t        | |d      }|j                  |       y )NT)r   )r   r	   )r   r   r   r
  s       r#   r	   r	   8  s    FI5AIIer'   messagesc                     | | a t         S r   )_current_domain)r   s    r#   r
   r
   C  s     r'   c                 L    |	|t         | <   t         j                  | t              S r   )_localedirsrE   r   )r   r   s     r#   r   r   J  s$    'F??6#566r'   c                     	 t        | t        j                  | d             }|j	                  |      S # t        $ r |cY S w xY wr   )r   r  rE   r   r   )r   r   r
  s      r#   r   r   Q  sE     => 99W  s    3 A Ac                     	 t        | t        j                  | d             }|j	                  |||      S # t        $ r |dk(  r|cY S |cY S w xY wr   )r   r  rE   r   r   )r   r   r   r8   r
  s        r#   r   r   Y  sU     => ::ffa((  6MM	s    5 AAAc                     	 t        | t        j                  | d             }|j	                  ||      S # t        $ r |cY S w xY wr   )r   r  rE   r   r   )r   r   r   r
  s       r#   r   r   d  sG     => ::gw''  s    4 AAc                     	 t        | t        j                  | d             }|j	                  ||||      S # t        $ r |dk(  r|cY S |cY S w xY wr   )r   r  rE   r   r   )r   r   r   r   r8   r
  s         r#   r   r   l  sW     => ;;w22  6MM	s    6 AAAc                 "    t        t        |       S r   )r   r  )r   s    r#   r   r   w  s    OW--r'   c                 &    t        t        | ||      S r   )r   r  )r   r   r8   s      r#   r   r   {  s    _ffa88r'   c                 $    t        t        | |      S r   )r   r  )r   r   s     r#   r   r     s    _gw77r'   c                 (    t        t        | |||      S r   )r   r  )r   r   r   r8   s       r#   r   r     s    owBBr'   ))NNF)NNNFr   )*__doc__operatorr   r   rX   __all__r   r   base_prefixr   compileVERBOSEDOTALLr   r$   r&   rC   r   rD   rA   r`   rj   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"     sZ  
`  	 	 
 WW\\#//7HE    
BII		; $-[!#<KKCsKr1uKrKu40	/d(!BH'T7> 7>tW& Wv0h  37&+DT  7)(3.98C$ G Ls   =C8