JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrў fPc @spdZddlZddlZddlZddlZddlZddlZddlZddlm Z dddddd d d d d ddg Z ej j ej ddZejdejejBZddZddZdNZd$d%eed&DZid'd6d(d6d)d"6ZdOd*d+Zd,d-Zd.d/Zd0d1ZGd2ddZGd3ddeZdddPd4dZ iZ!ddddPdd5dZ"dddd6d Z#ia$ia%d7a&dd8d Z'dd9d Z(dd:d;Z)d<d Z*d=d>Z+d?d Z,d@dAZ-dBdZ.dCdDZ/dEdZ0dFdGZ1e"Z2dS(QuInternationalization 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. iN(uENOENTuNullTranslationsuGNUTranslationsuCatalogufindu translationuinstallu textdomainubindtextdomainudgettextu dngettextugettextungettextushareulocaleu (?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 ccstxhtjt|D]T}|j}|dkr4qn|j|}|dkrbtd|n|VqWdVdS(Nu WHITESPACESuINVALIDu invalid token in plural form: %su(ureufinditeru_token_patternu lastgroupugroupu ValueError(upluralumoukinduvalue((u,/opt/alt/python33/lib64/python3.3/gettext.pyu _tokenizeRs    u _tokenizecCs"|rtd|StdSdS(Nu#unexpected token in plural form: %suunexpected end of plural form(u ValueError(uvalue((u,/opt/alt/python33/lib64/python3.3/gettext.pyu_error]su_erroru||u&&u==u!=uu<=u>=u+u-u*u/u%cCs,i|]"\}}|D]}||qqS(((u.0uiuopsuop((u,/opt/alt/python33/lib64/python3.3/gettext.pyu ks u iuoruandu//c CsQd}t|}x&|dkr:|d7}t|}qW|dkrt|\}}d||f}|dkrtdqnf|dkrd ||f}nGyt|d }Wn!tk rt|dYnXd ||f}t|}d }x|tkrt|}||kr(Pn|dkrM|dkrMd|}ntj||}t||d\} }d||| f}|}qW||kodknrd|}n|dkrG|dkrGt|d\} }|dkrt|nt|\} }d| || f}|dkrGd|}qGn||fS(Nuu!unot u(u%s(%s)u)u%unbalanced parenthesis in plural formunu%s%si u%s%didiiu(%s)iu%s %s %su?iu:u%s if %s else %s(ii(ii( unextu_parseu ValueErroruintu_erroruNoneu _binary_opsu _c2py_opsuget( utokensupriorityuresultunexttokusubuvalueujuiuopurightuif_trueuif_false((u,/opt/alt/python33/lib64/python3.3/gettext.pyu_parsensP              u_parsec CsEyt|}Wn.tk r@td|jjfdYnX|S(Nu'Plural value must be an integer, got %s(uroundu TypeErroru __class__u__name__uNone(unui((u,/opt/alt/python33/lib64/python3.3/gettext.pyu_as_ints  u_as_intc Cst|dkr!tdnytt|\}}|rQt|nd}x[|D]S}|dkr|d7}|dkrtdqq^|dkr^|d8}q^q^Witd 6}td |||d SWntk rtdYnXd S( uGets a C expression as used in PO files for plural forms and returns a Python function that implements an equivalent expression. iu"plural form expression is too longiu(iiu%plural form expression is too complexu)u_as_intuif True: def func(n): if not isinstance(n, int): n = _as_int(n) return int(%s) ufuncN(ulenu ValueErroru_parseu _tokenizeu_erroru_as_intuexecu RuntimeError(upluraluresultunexttokudepthucuns((u,/opt/alt/python33/lib64/python3.3/gettext.pyuc2pys(        uc2pyc Cstj|}d}d }d }d}|jd}|dkro||d}|d|}||O}nd}|jd}|dkr||d}|d|}||O}nd}|jd}|dkr ||d}|d|}||O}nd}|} g} x~t|dD]l} | |@s.| } | |@r\| |7} n| |@rs| |7} n| |@r| |7} n| j| q.q.W| j| S( Niiiu@uu.u_iii(ulocaleu normalizeufindurangeuappendureverse( ulocuCOMPONENT_CODESETuCOMPONENT_TERRITORYuCOMPONENT_MODIFIERumaskuposumodifierucodesetu territoryulanguageuretuiuval((u,/opt/alt/python33/lib64/python3.3/gettext.pyu _expand_langsJ           u _expand_langcBs|EeZdZdddZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZdddZdS(uNullTranslationscCsDi|_d|_d|_d|_|dk r@|j|ndS(N(u_infouNoneu_charsetu_output_charsetu _fallbacku_parse(uselfufp((u,/opt/alt/python33/lib64/python3.3/gettext.pyu__init__s      uNullTranslations.__init__cCsdS(N((uselfufp((u,/opt/alt/python33/lib64/python3.3/gettext.pyu_parsesuNullTranslations._parsecCs)|jr|jj|n ||_dS(N(u _fallbacku add_fallback(uselfufallback((u,/opt/alt/python33/lib64/python3.3/gettext.pyu add_fallbacks uNullTranslations.add_fallbackcCs|jr|jj|S|S(N(u _fallbackugettext(uselfumessage((u,/opt/alt/python33/lib64/python3.3/gettext.pyugettexts uNullTranslations.gettextcCs|jr|jj|S|S(N(u _fallbackulgettext(uselfumessage((u,/opt/alt/python33/lib64/python3.3/gettext.pyulgettext s uNullTranslations.lgettextcCs7|jr|jj|||S|dkr/|S|SdS(Ni(u _fallbackungettext(uselfumsgid1umsgid2un((u,/opt/alt/python33/lib64/python3.3/gettext.pyungettexts   uNullTranslations.ngettextcCs7|jr|jj|||S|dkr/|S|SdS(Ni(u _fallbacku lngettext(uselfumsgid1umsgid2un((u,/opt/alt/python33/lib64/python3.3/gettext.pyu lngettexts   uNullTranslations.lngettextcCs|jS(N(u_info(uself((u,/opt/alt/python33/lib64/python3.3/gettext.pyuinfo!suNullTranslations.infocCs|jS(N(u_charset(uself((u,/opt/alt/python33/lib64/python3.3/gettext.pyucharset$suNullTranslations.charsetcCs|jS(N(u_output_charset(uself((u,/opt/alt/python33/lib64/python3.3/gettext.pyuoutput_charset'suNullTranslations.output_charsetcCs ||_dS(N(u_output_charset(uselfucharset((u,/opt/alt/python33/lib64/python3.3/gettext.pyuset_output_charset*su#NullTranslations.set_output_charsetcCsddl}|j|jdGsu(GNUTranslations._parse..u4Iu>IIuBad magic numberiuFile is corruptu uasciiu:iu content-typeucharset=u plural-formsu;uplural=s(ustructuunpackugetattru_catalogupluralureadulenuLE_MAGICuBE_MAGICuIOErrorurangeuNoneusplituencodeudecodeustripuloweru_infou_charsetuc2pyustru enumerate( uselfufpuunpackufilenameucatalogubufubuflenumagicuversionumsgcountu masteridxutransidxuiiuiumlenumoffumendutlenutoffutendumsgutmsgulastkukub_itemuitemuvupluralucharsetumsgid1umsgid2ux((u,/opt/alt/python33/lib64/python3.3/gettext.pyu_parse@sj    % % # #             uGNUTranslations._parsecCsst}|jj||}||krG|jrC|jj|S|S|jr`|j|jS|jtjS(N( uobjectu_catalogugetu _fallbackulgettextu_output_charsetuencodeulocaleugetpreferredencoding(uselfumessageumissingutmsg((u,/opt/alt/python33/lib64/python3.3/gettext.pyulgettexts    uGNUTranslations.lgettextc CsyL|j||j|f}|jr8|j|jS|jtjSWnEtk r|jr{|jj|||S|dkr|S|SYnXdS(Ni( u_catalogupluralu_output_charsetuencodeulocaleugetpreferredencodinguKeyErroru _fallbacku lngettext(uselfumsgid1umsgid2unutmsg((u,/opt/alt/python33/lib64/python3.3/gettext.pyu lngettexts    uGNUTranslations.lngettextcCsKt}|jj||}||krG|jrC|jj|S|S|S(N(uobjectu_catalogugetu _fallbackugettext(uselfumessageumissingutmsg((u,/opt/alt/python33/lib64/python3.3/gettext.pyugettexts   uGNUTranslations.gettextc Cssy |j||j|f}WnLtk rn|jrO|jj|||S|dkrd|}n|}YnX|S(Ni(u_catalogupluraluKeyErroru _fallbackungettext(uselfumsgid1umsgid2unutmsg((u,/opt/alt/python33/lib64/python3.3/gettext.pyungettexts      uGNUTranslations.ngettextN( u__name__u __module__u __qualname__uLE_MAGICuBE_MAGICu_parseulgettextu lngettextugettextungettext(u __locals__((u,/opt/alt/python33/lib64/python3.3/gettext.pyuGNUTranslations;s M  c CsT|dkrt}n|dkrg}x9dD]1}tjj|}|r.|jd}Pq.q.Wd|kr|jdqng}xA|D]9}x0t|D]"}||kr|j|qqWqW|rg} nd} xl|D]d}|dkrPntjj ||dd|} tjj | r|rE| j| qL| SqqW| S( NuLANGUAGEuLC_ALLu LC_MESSAGESuLANGu:uCu%s.mo(uLANGUAGEuLC_ALLu LC_MESSAGESuLANG( uNoneu_default_localediruosuenvironugetusplituappendu _expand_langupathujoinuexists( udomainu localediru languagesualluenvaruvalunelangsulangunelanguresultumofile((u,/opt/alt/python33/lib64/python3.3/gettext.pyufinds8           c Cs|dkrt}nt|||dd}|sU|r@tSttd|nd}x|D]}|tjj |f} t j | } | dkrt |d} t j | || } WdQXntj| } |r| j|n|dkr| }qb|j| qbW|S(Nuallu$No translation file found for domainurbT(uNoneuGNUTranslationsufinduTrueuNullTranslationsuIOErroruENOENTuosupathuabspathu _translationsugetuopenu setdefaultucopyuset_output_charsetu add_fallback( udomainu localediru languagesuclass_ufallbackucodesetumofilesuresultumofileukeyutufp((u,/opt/alt/python33/lib64/python3.3/gettext.pyu translations*    !  cCs,t||ddd|}|j|dS(NufallbackucodesetT(u translationuTrueuinstall(udomainu localedirucodesetunamesut((u,/opt/alt/python33/lib64/python3.3/gettext.pyuinstallsumessagescCs|dk r|antS(N(uNoneu_current_domain(udomain((u,/opt/alt/python33/lib64/python3.3/gettext.pyu textdomains  cCs)|dk r|t|u<=u>=(u+u-(u*u/u%((u||(u&&(u==u!=(uu<=u>=(u+u-(u*u/u%iF(3u__doc__ulocaleucopyuiouosureustructusysuerrnouENOENTu__all__upathujoinu base_prefixu_default_localedirucompileuVERBOSEuDOTALLu_token_patternu _tokenizeu_erroru _binary_opsu enumerateu _c2py_opsu_parseu_as_intuc2pyu _expand_languNullTranslationsuGNUTranslationsuNoneuFalseufindu _translationsu translationuinstallu _localedirsu_localecodesetsu_current_domainu textdomainubindtextdomainubind_textdomain_codesetudgettextu ldgettextu dngettextu ldngettextugettextulgettextungettextu lngettextuCatalog(((u,/opt/alt/python33/lib64/python3.3/gettext.pyu sX&T    1  $ *F&