ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ #[abc@s)dZddlZddlZddlZddlZddlmZddlmZddlZddl m Z m Z dZ iZ ejZejje dZejdejZd Zd Zd Zd Zed ZdZdefdYZdefdYZdS(sB babel.localedata ~~~~~~~~~~~~~~~~ Low-level locale data access. :note: The `Locale` class, which uses this module under the hood, provides a more convenient interface for accessing the locale data. :copyright: (c) 2013 by the Babel Team. :license: BSD, see LICENSE for more details. iN(tMutableMapping(tchain(tpicklet string_typescCsFttdtr0ttddr0tj}ntjjt}|S(Ntfrozent_MEIPASS( tgetattrtsystFalsetNoneRtostpathtdirnamet__file__(tbasedir((s4/usr/lib/python2.7/site-packages/babel/localedata.pyt get_base_dirs$ s locale-datas%^(con|prn|aux|nul|com[0-9]|lpt[0-9])$cCsj| st|t rdS|jj}x6tjttgD]}||jkrF|SqFWdS(sNormalize a locale ID by stripping spaces and apply proper casing. Returns the normalized locale ID string or `None` if the ID is not recognized. N( t isinstanceRR tstriptlowerRt from_iterablet_cachetlocale_identifiers(tnamet locale_id((s4/usr/lib/python2.7/site-packages/babel/localedata.pytnormalize_locale)s cCsjtjj|}tjdkrStjtjj|drStd|ntjj t d|S(s? Resolve a locale identifier to a `.dat` path on disk. twin32isName %s is invalid on Windowss%s.dat( R R tbasenameRtplatformt_windows_reserved_name_retmatchtsplitextt ValueErrortjoint_dirname(R((s4/usr/lib/python2.7/site-packages/babel/localedata.pytresolve_locale_filename7s.cCs]| st|t rtS|tkr+tStjjt|}|rMtSt t |S(sCheck whether locale data is available for the given locale. Returns `True` if it exists, `False` otherwise. :param name: the locale identifier string ( RRRRtTrueR R texistsR"tboolR(Rt file_found((s4/usr/lib/python2.7/site-packages/babel/localedata.pyR$Gs  cCs]ggtjtD]}tjj|^qD]*\}}|dkr/|dkr/|^q/S(sReturn a list of all locale identifiers for which locale data is available. .. versionadded:: 0.8.1 :return: a list of locale identifiers (strings) s.dattroot(R tlistdirR!R R(tfilenametstemt extension((s4/usr/lib/python2.7/site-packages/babel/localedata.pyRVs8cCsOtjj|}tjz!tj|}|s8|dksG| rPi}n}ddlm}|dj|}|s|j d}t |dkrd}qdj |d }nt |j }t|}t|dA}|dkr|rt|tj |ntj |}WdQX|t|>> d = load('en_US') >>> d['languages']['sv'] u'Swedish' Note that the results are cached, and subsequent requests for the same locale return the same dictionary: >>> d1 = load('en_US') >>> d2 = load('en_US') >>> d1 is d2 True :param name: the locale identifier string (or "root") :param merge_inherited: whether the inherited data should be merged into the data of the requested locale :raise `IOError`: if no locale data file is found for the given locale identifer, or one of the locales it inherits from R'i(t get_globaltparent_exceptionst_itrbN(R R Rt _cache_locktacquireRtgett babel.coreR,tsplittlenR tloadtcopyR"topentmergeRtrelease(Rtmerge_inheritedtdataR,tparenttpartsR)tfileobj((s4/usr/lib/python2.7/site-packages/babel/localedata.pyR6cs.     cCsx|jD]\}}|dk r |j|}t|tr|dkrXi}nt|trv||f}qt|tr|\}}|j}t||||f}q|j}t||n|}|||>> d = {1: 'foo', 3: 'baz'} >>> merge(d, {1: 'Foo', 2: 'Bar'}) >>> sorted(d.items()) [(1, 'Foo'), (2, 'Bar'), (3, 'baz')] :param dict1: the dictionary to merge into :param dict2: the dictionary containing the data that should be merged N( titemsR R2RtdicttAliasttupleR7R9(tdict1tdict2tkeytval2tval1taliastothers((s4/usr/lib/python2.7/site-packages/babel/localedata.pyR9s"        RBcBs)eZdZdZdZdZRS(sRepresentation of an alias in the locale data. An alias is a value that refers to some other part of the locale data, as specified by the `keys`. cCst||_dS(N(RCtkeys(tselfRK((s4/usr/lib/python2.7/site-packages/babel/localedata.pyt__init__scCsdt|j|jfS(Ns<%s %r>(ttypet__name__RK(RL((s4/usr/lib/python2.7/site-packages/babel/localedata.pyt__repr__scCsv|}x|jD]}||}qWt|trE|j|}n-t|trr|\}}|j|}n|S(sResolve the alias based on the given data. This is done recursively, so if one alias resolves to a second alias, that second alias will also be resolved. :param data: the locale data :type data: `dict` (RKRRBtresolveRC(RLR<tbaseRFRIRJ((s4/usr/lib/python2.7/site-packages/babel/localedata.pyRQs  (ROt __module__t__doc__RMRPRQ(((s4/usr/lib/python2.7/site-packages/babel/localedata.pyRBs  tLocaleDataDictcBsPeZdZddZdZdZdZdZdZ dZ RS( sUDictionary wrapper that automatically resolves aliases to the actual values. cCs+||_|dkr|}n||_dS(N(t_dataR RR(RLR<RR((s4/usr/lib/python2.7/site-packages/babel/localedata.pyRMs   cCs t|jS(N(R5RV(RL((s4/usr/lib/python2.7/site-packages/babel/localedata.pyt__len__scCs t|jS(N(titerRV(RL((s4/usr/lib/python2.7/site-packages/babel/localedata.pyt__iter__scCs|j|}}t|tr5|j|j}nt|trx|\}}|j|jj}t||nt|t krt |d|j}n||k r||j| s*           7 !!