o V\@sdZddlZddlZddlmZmZddlZddlZddlZddl m Z m Z ddl Z ddlmZeZddZedejZd d Zed Zdd dZddZGdddejZdddZejZGdddeZe jZ ej!Z!ej"Z"ej#Z#ej$Z$ej%Z%ej&Z&dS)z babel.util ~~~~~~~~~~ Various utility classes and functions. :copyright: (c) 2013-2019 by the Babel Team. :license: BSD, see LICENSE for more details. N) timedeltatzinfo)izipimap) localtimeccs2t}t|D]}||vr|V||qdS)aYield all items in an iterable collection that are distinct. Unlike when using sets for a similar effect, the original ordering of the items in the collection is preserved by this function. >>> print(list(distinct([1, 2, 1, 3, 4, 4]))) [1, 2, 3, 4] >>> print(list(distinct('foobar'))) ['f', 'o', 'b', 'a', 'r'] :param iterable: the iterable collection providing the data N)setiteradd)iterableseenitemr ,/usr/lib/python3/dist-packages/babel/util.pydistincts  rs([ \t\f]* \# .* coding[=:][ \t]*([-\w.]+)c Cs|}|dzw|}|tj}|r|ttjd}t|}|sJzddl }| | dWn t t tfy@Yn w|}t|}|ri|ra|d d}|dkrat d|W||dS|ry|d dW||SW||dS||w)a/Deduce the encoding of a source file from magic comment. It does this in the same way as the `Python interpreter`__ .. __: https://docs.python.org/3.4/reference/lexical_analysis.html#encoding-declarations The ``fp`` argument should be a seekable file object. (From Jeff Dairiki) rNlatin-1zutf-8zencoding problem: {0} with BOM)tellseekreadline startswithcodecsBOM_UTF8lenPYTHON_MAGIC_COMMENT_rematchparsersuitedecode ImportError SyntaxErrorUnicodeEncodeErrorgroupformat)fpposline1has_bommrline2magic_comment_encodingr r rparse_encoding1sB     r*z'from\s+__future__\s+import\s+\(*(.+)\)*rc Csddl}|}|dd}zK||}tdd|}tdd|}tdd|}t|D]!}d d | d  d D}|D]}t ||d} | rQ|| j O}qBq1W|||S||w) zRParse the compiler flags by :mod:`__future__` from the given Python code. rNzimport\s*\([\r\n]+zimport (z ,\s*[\r\n]+z, z \\\s*[\r\n]+ cSsg|] }|dqS)z())strip).0xr r r }sz&parse_future_flags..r,) __future__rrreadrresubPYTHON_FUTURE_IMPORT_refinditerr!splitgetattr compiler_flag) r#encodingr1r$flagsbodyr'namesnamefeaturer r rparse_future_flagsgs*     r@cCsddddddd}|drdg}|d d }n|d r'dg}|d d }ng}ttd |D]\}}|d rA|||q1|rK|t|q1td|d|t j d}|d uS)aExtended pathname pattern matching. This function is similar to what is provided by the ``fnmatch`` module in the Python standard library, but: * can match complete (relative or absolute) path names, and not just file names, and * also supports a convenience pattern ("**") to match files at any directory level. Examples: >>> pathmatch('**.py', 'bar.py') True >>> pathmatch('**.py', 'foo/bar/baz.py') True >>> pathmatch('**.py', 'templates/index.html') False >>> pathmatch('./foo/**.py', 'foo/bar/baz.py') True >>> pathmatch('./foo/**.py', 'bar/baz.py') False >>> pathmatch('^foo/**.py', 'foo/bar/baz.py') True >>> pathmatch('^foo/**.py', 'bar/baz.py') False >>> pathmatch('**/templates/*.html', 'templates/index.html') True >>> pathmatch('**/templates/*.html', 'templates/foo/bar.html') False :param pattern: the glob pattern :param filename: the path name of the file to match against z[^/]z[^/]/z[^/]+z[^/]+/z (?:.+/)*?z(?:.+/)*?[^/]+)?z?/*z*/z**/z**^rNz./z ([?*]+/?)$/) r enumerater3r7appendescaperjoinreplaceossep)patternfilenamesymbolsbufidxpartrr r r pathmatchs,'   rUc@seZdZedZdS) TextWrapperz((\s+|(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))N)__name__ __module__ __qualname__r3compile wordsep_rer r r rrVsrVFrEcCst|||dd}||S)aSimple wrapper around the ``textwrap.wrap`` function in the standard library. This version does not wrap lines on hyphens in words. :param text: the text to wrap :param width: the maximum line width :param initial_indent: string that will be prepended to the first line of wrapped output :param subsequent_indent: string that will be prepended to all lines save the first of wrapped output F)widthinitial_indentsubsequent_indentbreak_long_words)rVwrap)textr]r^r_wrapperr r rwraptexts   rdc@sBeZdZdZdddZddZddZd d Zd d Zd dZ dS)FixedOffsetTimezonez&Fixed offset in minutes east from UTC.NcCs&t|d|_|durd|}||_dS)N)minutesz Etc/GMT%+d)r_offsetzone)selfoffsetr>r r r__init__s  zFixedOffsetTimezone.__init__cC|jSNrhrir r r__str__zFixedOffsetTimezone.__str__cCsd|j|jfS)Nz)rhrgror r r__repr__szFixedOffsetTimezone.__repr__cCrlrm)rgridtr r r utcoffsetrqzFixedOffsetTimezone.utcoffsetcCrlrmrnrsr r rtznamerqzFixedOffsetTimezone.tznamecCstSrm)ZEROrsr r rdstszFixedOffsetTimezone.dstrm) rWrXrY__doc__rkrprrrurvrxr r r rres  re)r)r\rErE)'ryr collectionsdatetimerrrMr3textwrap babel._compatrrpytz_pytzbabelrobjectmissingrrZVERBOSErr*r5r@rUrVrd OrderedDictodictreutcUTCLOCALTZ get_localzone STDOFFSET DSTOFFSETDSTDIFFrwr r r rs@  2  A