??????????????????????
???  ?????????????????
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?   
   ????

(%	aA*?XYD?(J??E  RE,P XYae?)(E  2 B  R  	BQ    X?)X     ?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???  
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?   
   ????

(%	aA*?XYD?(J??E  RE,P XYae?)(E  2 B  R  	BQ    X?)X     ?  @  

adadasdasdasasdasdas


.....................................................................................................................................3

  \T                 @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 dddddd	d
ddddddddddgZ
ejjejddZejdejejB Zdd Zdd ZdPZd)d* eed+D Zd,d-d.d/ZdRd0d1Zd2d3 Zd4d5 Zd6d7 ZG d8d dZG d9d deZdSd;dZi ZdTd<dZ dUd=d	Z!i a"i a#d>a$dVd?d
Z%dWd@dZ&dXdAdZ'dBd Z(dCd Z)dDd Z*dEd Z+dFd Z,dGd Z-dHd Z.dId Z/e Z0dS )Ya  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)ENOENTNullTranslationsGNUTranslationsCatalogfindtranslationinstall
textdomainbindtextdomainbind_textdomain_codesetdgettext	dngettextgettextlgettext	ldgettext
ldngettext	lngettextngettextZ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   sT   xHt jt| D ]8}|j}|dkr"q|j|}|dkr@td| |V  qW dV  d S )NZWHITESPACESZINVALIDz invalid token in plural form: %s )refinditer_token_pattern	lastgroupgroup
ValueError)pluralmoZkindvalue r   /usr/lib64/python3.6/gettext.py	_tokenizeT   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    _error_   s    r"   ||&&==!=<><=>=+-*/%c             C   s    i | ]\}}|D ]
}||qqS r   r   ).0iZopsopr   r   r    
<dictcomp>m   s    r3      orandz//)z||z&&r.   c             C   s  d}t | }x|dkr(|d7 }t | }qW |dkr\t| \}}d||f }|dkrtdnP|dkrrd	||f }n:yt|d
}W n tk
r   t|d Y nX d||f }t | }d}xh|tkr t| }||k rP |dkr|dkrd| }tj||}t| |d \}	}d|||	f }|}qW ||  ko6dkn  rFd| }|dkr|dkrt| d\}
}|dkrzt|t| \}}d|
||f }|dkrd| }||fS )Nr   !znot (z%s(%s))z%unbalanced parenthesis in plural formnz%s%s
   z%s%dd         z(%s)r4   z%s %s %s?r   :z%s if %s else %s)r=   r>   )r=   r>   )next_parser   intr"   _binary_ops	_c2py_opsget)tokensZpriorityresultnexttoksubr   jr1   r2   rightZif_trueZif_falser   r   r    rB   p   sP    



rB   c             C   s:   yt | }W n( tk
r4   td| jjf d Y nX | S )Nz'Plural value must be an integer, got %s)round	TypeError	__class____name__)r:   r1   r   r   r    _as_int   s    rQ   c             C   s   t | dkrtdy~tt| \}}|r2t|d}x>|D ]6}|dkrb|d7 }|dkrrtdq<|dkr<|d8 }q<W d	ti}td
| | |d S  tk
r   tdY nX dS )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   r8   r4      z%plural form expression is too complexr9   rQ   zif True:
            def func(n):
                if not isinstance(n, int):
                    n = _as_int(n)
                return int(%s)
            funcN)lenr   rB   r!   r"   rQ   execRecursionError)r   rH   rI   Zdepthcnsr   r   r    c2py   s(    

rY   c             C   s:  t j| } d}d	}d
}d}| jd}|dkrN| |d  }| d | } ||O }nd}| jd}|dkr| |d  }| d | } ||O }nd}| jd}|dkr| |d  }| d | } ||O }nd}| }	g }
xbt|d D ]R}|| @ s|	}||@  r||7 }||@ r||7 }||@ r ||7 }|
j| qW |
j  |
S )Nr4   r      @r   ._r4   rZ   r>   )r   Z	normalizer   rangeappendreverse)locZCOMPONENT_CODESETZCOMPONENT_TERRITORYZCOMPONENT_MODIFIERmaskposZmodifiercodesetZ	territoryZlanguageZretr1   valr   r   r    _expand_lang   sJ    








 
 
 rf   c               @   sp   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dZdS )r   Nc             C   s.   i | _ d | _d | _d | _|d k	r*| j| d S )N)_info_charset_output_charset	_fallbackrB   )selffpr   r   r    __init__   s    zNullTranslations.__init__c             C   s   d S )Nr   )rk   rl   r   r   r    rB      s    zNullTranslations._parsec             C   s   | j r| j j| n|| _ d S )N)rj   add_fallback)rk   fallbackr   r   r    rn     s    zNullTranslations.add_fallbackc             C   s   | j r| j j|S |S )N)rj   r   )rk   messager   r   r    r   	  s    zNullTranslations.gettextc             C   s2   | j r| j j|S | jr$|j| jS |jtj S )N)rj   r   ri   encoder   getpreferredencoding)rk   rp   r   r   r    r     s
    zNullTranslations.lgettextc             C   s*   | j r| j j|||S |dkr"|S |S d S )Nr4   )rj   r   )rk   msgid1msgid2r:   r   r   r    r     s
    zNullTranslations.ngettextc             C   sH   | j r| j j|||S |dkr$|}n|}| jr:|j| jS |jtj S )Nr4   )rj   r   ri   rq   r   rr   )rk   rs   rt   r:   tmsgr   r   r    r     s    zNullTranslations.lngettextc             C   s   | j S )N)rg   )rk   r   r   r    info(  s    zNullTranslations.infoc             C   s   | j S )N)rh   )rk   r   r   r    charset+  s    zNullTranslations.charsetc             C   s   | j S )N)ri   )rk   r   r   r    output_charset.  s    zNullTranslations.output_charsetc             C   s
   || _ d S )N)ri   )rk   rw   r   r   r    set_output_charset1  s    z#NullTranslations.set_output_charsetc             C   sv   dd l }| j|jd< t|drrd|kr6|jd |jd< d|krJ| j|jd< d|kr^| j|jd< d|krr| j|jd< d S )Nr   r]   __contains__r   r   r   r   )builtinsr   __dict__hasattrr   r   r   )rk   namesr{   r   r   r    r   4  s    
zNullTranslations.install)N)N)rP   
__module____qualname__rm   rB   rn   r   r   r   r   rv   rw   rx   ry   r   r   r   r   r    r      s   
c               @   sH   e 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S )r   l   * l   $< r   r4   c             C   s   |d? |d@ fS )z/Returns a tuple of major version, minor version   i  r   )rk   versionr   r   r    _get_versionsJ  s    zGNUTranslations._get_versionsc       "      C   s  t j}t|dd}i  | _}dd | _|j }t|}|d|dd d }|| jkrv|d	|dd
 \}}	}
}d}n6|| jkr|d|dd
 \}}	}
}d}nt	dd|| j
|\}}|| jkrt	ddt| |xtd|	D ]}||||
|
d  \}}|| }|||||d  \}}|| }||k r^||k r^||| }||| }nt	dd||dkrRd}x|jdD ]}|j j }|sqd }}d|kr|jdd\}}|j j }|j }|| j|< |}n|r | j|  d| 7  < |dkr|jdd | _n0|dkr|jd}|d jdd }t|| _qW | jp\d}d|kr|jd\}} |jd}t||}x>t|D ]\}}!t|!||||f< qW nt|||t||< |
d7 }
|d7 }qW dS )z8Override this method to support alternative .mo formats.namer   c             S   s   t | dkS )Nr4   )rC   )r:   r   r   r    <lambda>U  s    z(GNUTranslations._parse.<locals>.<lambda>z<INr>   r   z<4IrR   z<IIz>4Iz>IIzBad magic numberzBad version number    zFile is corrupt   
r@   r4   
zcontent-typezcharset=zplural-forms;zplural=ascii    )structunpackgetattr_catalogr   readrT   LE_MAGICBE_MAGICOSErrorr   VERSIONSstrr^   splitdecodestriplowerrg   rh   rY   	enumerate)"rk   rl   r   filenameZcatalogZbufZbuflenmagicr   ZmsgcountZ	masteridxZtransidxZiiZmajor_versionZminor_versionr1   ZmlenZmoffZmendZtlenZtoffZtendmsgru   ZlastkZb_itemitemkvr   rw   rs   rt   xr   r   r    rB   N  sr    














zGNUTranslations._parsec             C   sR   t  }| jj||}||kr2| jr.| jj|S |}| jrD|j| jS |jtj S )N)	objectr   rF   rj   r   ri   rq   r   rr   )rk   rp   missingru   r   r   r    r     s    zGNUTranslations.lgettextc             C   sv   y| j || j|f }W n< tk
rT   | jr>| jj|||S |dkrL|}n|}Y nX | jrh|j| jS |jtj S )Nr4   )	r   r   KeyErrorrj   r   ri   rq   r   rr   )rk   rs   rt   r:   ru   r   r   r    r     s    
zGNUTranslations.lngettextc             C   s6   t  }| jj||}||kr2| jr.| jj|S |S |S )N)r   r   rF   rj   r   )rk   rp   r   ru   r   r   r    r     s    zGNUTranslations.gettextc             C   sZ   y| j || j|f }W n< tk
rT   | jr>| jj|||S |dkrL|}n|}Y nX |S )Nr4   )r   r   r   rj   r   )rk   rs   rt   r:   ru   r   r   r    r     s    
zGNUTranslations.ngettextN)r   r4   )rP   r   r   r   r   r   r   rB   r   r   r   r   r   r   r   r    r   B  s   T	Fc             C   s   |d krt }|d krTg }x(dD ] }tjj|}|r|jd}P qW d|krT|jd g }x0|D ](}x"t|D ]}||krl|j| qlW q^W |rg }	nd }	xL|D ]D}|dkrP tjj||dd|  }
tjj	|
r|r|	j|
 q|
S qW |	S )	NLANGUAGELC_ALLLC_MESSAGESLANGr@   Cz%s.mo)r   r   r   r   )
_default_localedirosenvironrF   r   r_   rf   pathjoinexists)domain	localedir	languagesallZenvarre   ZnelangsZlangZnelangrH   mofiler   r   r    r     s8    




c             C   s   |d krt }t| ||dd}|s6|r*t S ttd| d }x|D ]|}|tjj|f}	tj	|	}
|
d krt
|d}tj|	||}
W d Q R X tj|
}
|r|
j| |d kr|
}q@|j|
 q@W |S )NT)r   z$No translation file found for domainrb)r   r   r   r   r   r   r   abspath_translationsrF   open
setdefaultcopyry   rn   )r   r   r   Zclass_ro   rd   ZmofilesrH   r   keytrl   r   r   r    r     s*    



c             C   s   t | |d|d}|j| d S )NT)ro   rd   )r   r   )r   r   rd   r~   r   r   r   r    r     s    Zmessagesc             C   s   | d k	r| a t S )N)_current_domain)r   r   r   r    r	   '  s    c             C   s   |d k	r|t | < t j| tS )N)_localedirsrF   r   )r   r   r   r   r    r
   .  s    c             C   s   |d k	r|t | < t j| S )N)_localecodesetsrF   )r   rd   r   r   r    r   5  s    c             C   s@   y t | tj| d tj| d}W n tk
r4   |S X |j|S )N)rd   )r   r   rF   r   r   r   )r   rp   r   r   r   r    r   <  s    c             C   sR   t j| }yt| tj| d |d}W n" tk
rF   |j|pBtj S X |j|S )N)rd   )	r   rF   r   r   r   rq   r   rr   r   )r   rp   rd   r   r   r   r    r   D  s    
c             C   sT   y t | tj| d tj| d}W n$ tk
rD   |dkr<|S |S Y nX |j|||S )N)rd   r4   )r   r   rF   r   r   r   )r   rs   rt   r:   r   r   r   r    r   L  s    
c             C   sh   t j| }yt| tj| d |d}W n4 tk
rX   |dkrB|}n|}|j|pTtj S X |j|||S )N)rd   r4   )	r   rF   r   r   r   rq   r   rr   r   )r   rs   rt   r:   rd   r   ru   r   r   r    r   W  s    
c             C   s
   t t| S )N)r   r   )rp   r   r   r    r   c  s    c             C   s
   t t| S )N)r   r   )rp   r   r   r    r   f  s    c             C   s   t t| ||S )N)r   r   )rs   rt   r:   r   r   r    r   i  s    c             C   s   t t| ||S )N)r   r   )rs   rt   r:   r   r   r    r   l  s    r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   )r   r   r   r   r   r   )r   )NNF)NNNFN)NNN)N)N)N)1__doc__r   r   ior   r   r   syserrnor   __all__r   r   base_prefixr   compileVERBOSEDOTALLr   r!   r"   rD   r   rE   rB   rQ   rY   rf   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^   &8


     
1$*K 
& 




