B
    u9aU                 @   st  d dl Z d dlZd dlZd dlZdddddddd	d
ddddddddg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d=d#d$Zd%d& Zd'd( Zd)d* ZG d+d dZG d,d deZd>d.dZi Zd?d/dZd@d0dZi ai ad1adAd2dZdBd3d	Z dCd4d
Z!d5d Z"d6d Z#d7d Z$d8d Z%d9d Z&d:d Z'd;d Z(d<d Z)eZ*dS )D    N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 t| D ]8}|j}|dkr"q||}|dkr@td| |V  qW dV  d S )NWHITESPACESINVALIDz invalid token in plural form: %s )refinditer_token_pattern	lastgroupgroup
ValueError)pluralmokindvalue r!   /usr/lib/python3.7/gettext.py	_tokenizeV   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"   _errora   s    r$   ))z||)z&&)z==z!=)<>z<=z>=)+-)*/%c             C   s    i | ]\}}|D ]
}||qqS r!   r!   ).0iZopsopr!   r!   r"   
<dictcomp>o   s    r/      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||}t| |d \}	}d|||	f }|}qW ||  kr:dkrFn nd| }|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)r0   z%s %s %sr;   ?r   :z%s if %s else %s)next_parser   intr$   _binary_ops	_c2py_opsget)tokenspriorityresultnexttoksubr    jr-   r.   rightif_trueif_falser!   r!   r"   r?   r   sP    



r?   c             C   sZ   yt | }W n( tk
r4   td| jjf d Y nX dd l}|d| jjf td | S )Nz'Plural value must be an integer, got %sr   r;   )round	TypeError	__class____name__warningswarnDeprecationWarning)r7   r-   rQ   r!   r!   r"   _as_int   s    
rT   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 )Ni  z"plural form expression is too longr   r5   r0      z%plural form expression is too complexr6   rT   zif True:
            def func(n):
                if not isinstance(n, int):
                    n = _as_int(n)
                return int(%s)
            func)lenr   r?   r#   r$   rT   execRecursionError)r   rF   rG   depthcnsr!   r!   r"   c2py   s(    

r]   c             C   s8  t | } d}d}d}d}| d}|dkrN| |d  }| d | } ||O }nd}| d}|dkr| |d  }| d | } ||O }nd}| d}|dkr| |d  }| d | } ||O }nd}| }	g }
x`t|d D ]P}|| @ s|	}||@ r||7 }||@ r||7 }||@ r||7 }|
| qW |
  |
S )	Nr0      r;   r   @r   ._)r   	normalizer   rangeappendreverse)locCOMPONENT_CODESETCOMPONENT_TERRITORYCOMPONENT_MODIFIERmaskposmodifiercodeset	territorylanguageretr-   valr!   r!   r"   _expand_lang   sJ    







 
 
 rr   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*| | d S )N)_info_charset_output_charset	_fallbackr?   )selffpr!   r!   r"   __init__   s    zNullTranslations.__init__c             C   s   d S )Nr!   )rw   rx   r!   r!   r"   r?     s    zNullTranslations._parsec             C   s   | j r| j | n|| _ d S )N)rv   add_fallback)rw   fallbackr!   r!   r"   rz   	  s    zNullTranslations.add_fallbackc             C   s   | j r| j |S |S )N)rv   r   )rw   messager!   r!   r"   r     s    zNullTranslations.gettextc             C   s2   | j r| j |S | jr$|| jS |t S )N)rv   r   ru   encoder   getpreferredencoding)rw   r|   r!   r!   r"   r     s
    zNullTranslations.lgettextc             C   s*   | j r| j |||S |dkr"|S |S d S )Nr0   )rv   r   )rw   msgid1msgid2r7   r!   r!   r"   r     s
    zNullTranslations.ngettextc             C   sH   | j r| j |||S |dkr$|}n|}| jr:|| jS |t S )Nr0   )rv   r   ru   r}   r   r~   )rw   r   r   r7   tmsgr!   r!   r"   r   #  s    zNullTranslations.lngettextc             C   s   | j S )N)rs   )rw   r!   r!   r"   info.  s    zNullTranslations.infoc             C   s   | j S )N)rt   )rw   r!   r!   r"   charset1  s    zNullTranslations.charsetc             C   s   | j S )N)ru   )rw   r!   r!   r"   output_charset4  s    zNullTranslations.output_charsetc             C   s
   || _ d S )N)ru   )rw   r   r!   r!   r"   set_output_charset7  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   ra   __contains__r   r   r   r   )builtinsr   __dict__hasattrr   r   r   )rw   namesr   r!   r!   r"   r   :  s    
zNullTranslations.install)N)N)rP   
__module____qualname__ry   r?   rz   r   r   r   r   r   r   r   r   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   r0   c             C   s   |d? |d@ fS )N   i  r!   )rw   versionr!   r!   r"   _get_versionsP  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}n6|| jkr|d|dd
 \}}	}
}d}nt	dd|| 
|\}}|| jkrt	ddt| |xtd|	D ]}||||
|
d  \}}|| }|||||d  \}}|| }||k rd||k rd||| }||| }nt	dd||dkrXd }x|dD ]}|  }|sqd  }}d|kr|dd\}}|  }| }|| j|< |}n|r| j|  d| 7  < |dkr"|dd | _n0|dkr|d}|d dd }t|| _qW | jpbd}d|kr|d\}} |d}t||}x>t|D ]\}}!t|!||||f< qW nt|||t||< |
d7 }
|d7 }qW d S )Nr   )unpacknamer   c             S   s   t | dkS )Nr0   )r@   )r7   r!   r!   r"   <lambda>]      z(GNUTranslations._parse.<locals>.<lambda>z<Ir;   z<4IrU   z<IIz>4Iz>IIzBad magic numberzBad version number    zFile is corrupt   
r=   r0   
zcontent-typezcharset=zplural-forms;zplural=ascii    )structr   getattr_catalogr   readrW   LE_MAGICBE_MAGICOSErrorr   VERSIONSstrrc   splitdecodestriplowerrs   rt   r]   	enumerate)"rw   rx   r   filenamecatalogbufbuflenmagicr   msgcount	masteridxtransidxiimajor_versionminor_versionr-   mlenmoffmendtlentofftendmsgr   lastkb_itemitemkvr   r   r   r   xr!   r!   r"   r?   T  sr    














zGNUTranslations._parsec             C   sR   t  }| j||}||kr2| jr.| j|S |}| jrD|| jS |t S )N)	objectr   rC   rv   r   ru   r}   r   r~   )rw   r|   missingr   r!   r!   r"   r     s    zGNUTranslations.lgettextc             C   sv   y| j || |f }W n< tk
rT   | jr>| j|||S |dkrL|}n|}Y nX | jrh|| jS |t S )Nr0   )	r   r   KeyErrorrv   r   ru   r}   r   r~   )rw   r   r   r7   r   r!   r!   r"   r     s    
zGNUTranslations.lngettextc             C   s6   t  }| j||}||kr2| jr.| j|S |S |S )N)r   r   rC   rv   r   )rw   r|   r   r   r!   r!   r"   r     s    zGNUTranslations.gettextc             C   sZ   y| j || |f }W n< tk
rT   | jr>| j|||S |dkrL|}n|}Y nX |S )Nr0   )r   r   r   rv   r   )rw   r   r   r7   r   r!   r!   r"   r     s    
zGNUTranslations.ngettextN)rP   r   r   r   r   r   r   r?   r   r   r   r   r!   r!   r!   r"   r   H  s   V	Fc             C   s   |d krt }|d krTg }x(dD ] }tj|}|r|d}P qW d|krT|d g }x0|D ](}x"t|D ]}||krl|| qlW q^W |rg }	nd }	xL|D ]D}|dkrP tj||dd|  }
tj	|
r|r|	|
 q|
S qW |	S )N)LANGUAGELC_ALLLC_MESSAGESLANGr=   Cr   z%s.mo)
_default_localedirosenvironrC   r   rd   rr   pathjoinexists)domain	localedir	languagesallenvarrq   nelangslangnelangrF   mofiler!   r!   r"   r     s8    




c          
   C   s   |d krt }t| ||dd}|sB|r*t S ddlm} t|d| d }x|D ]}	|tj|	f}
t	
|
}|d krt|	d}t	|
||}W d Q R X dd l}||}|r|| |d kr|}qL|| qLW |S )NT)r   r   )ENOENTz$No translation file found for domainrb)r   r   r   errnor   FileNotFoundErrorr   r   abspath_translationsrC   open
setdefaultcopyr   rz   )r   r   r   class_r{   rm   mofilesr   rF   r   keytrx   r   r!   r!   r"   r     s0    



c             C   s   t | |d|d}|| d S )NT)r{   rm   )r   r   )r   r   rm   r   r   r!   r!   r"   r   &  s    messagesc             C   s   | d k	r| a t S )N)_current_domain)r   r!   r!   r"   r   4  s    c             C   s   |d k	r|t | < t | tS )N)_localedirsrC   r   )r   r   r!   r!   r"   r	   ;  s    c             C   s   |d k	r|t | < t | S )N)_localecodesetsrC   )r   rm   r!   r!   r"   r
   B  s    c             C   s@   y t | t| d t| d}W n tk
r4   |S X ||S )N)rm   )r   r   rC   r   r   r   )r   r|   r   r!   r!   r"   r   I  s    c             C   sR   t | }yt| t| d |d}W n" tk
rF   ||pBt S X ||S )N)rm   )	r   rC   r   r   r   r}   r   r~   r   )r   r|   rm   r   r!   r!   r"   r   Q  s    
c             C   sT   y t | t| d t| d}W n$ tk
rD   |dkr<|S |S Y nX ||||S )N)rm   r0   )r   r   rC   r   r   r   )r   r   r   r7   r   r!   r!   r"   r   Y  s    
c             C   sh   t | }yt| t| d |d}W n4 tk
rX   |dkrB|}n|}||pTt S X ||||S )N)rm   r0   )	r   rC   r   r   r   r}   r   r~   r   )r   r   r   r7   rm   r   r   r!   r!   r"   r   d  s    
c             C   s
   t t| S )N)r   r   )r|   r!   r!   r"   r   p  s    c             C   s
   t t| S )N)r   r   )r|   r!   r!   r"   r   s  s    c             C   s   t t| ||S )N)r   r   )r   r   r7   r!   r!   r"   r   v  s    c             C   s   t t| ||S )N)r   r   )r   r   r7   r!   r!   r"   r   y  s    )r3   )NNF)NNNFN)NNN)N)N)N)+r   r   r   sys__all__r   r   base_prefixr   compileVERBOSEDOTALLr   r#   r$   rA   r   rB   r?   rT   r]   rr   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>1   sV   



1$*K 
& 
#



