U e @sDddlZddlZejeejeejZGdddZddZdS)Nc@s\eZdZUdZeed<efedddZddZdd Z d d Z d d Z ddZ ddZ dS) Translatorz >>> Translator('xyz') Traceback (most recent call last): ... AssertionError: Invalid separators >>> Translator('') Traceback (most recent call last): ... AssertionError: Invalid separators seps)rcCs&|rt|ttkstd||_dS)NzInvalid separators)set _default_sepsAssertionErrorr)selfrr7/opt/hc_python/lib/python3.8/site-packages/zipp/glob.py__init__szTranslator.__init__cCs|||S)zH Given a glob pattern, produce a regex that matches it. )extendtranslate_corerpatternrrr translateszTranslator.translatecCs d|dS)z Extend regex for pattern-wide concerns. Apply '(?s:)' to create a non-matching group that matches newlines (valid on Unix). Append '\Z' to imply fullmatch even when match is used. z(?s:z)\Zrr rrr r !s zTranslator.extendcCs&||dt|jt||S)a? Given a glob pattern, produce a regex that matches it. >>> t = Translator() >>> t.translate_core('*.txt').replace('\\\\', '') '[^/]*\\.txt' >>> t.translate_core('a?txt') 'a[^/]txt' >>> t.translate_core('**/*').replace('\\\\', '') '.*/[^/][^/]*' )restrict_rglobjoinmapreplaceseparatestar_not_emptyr rrr r ,s zTranslator.translate_corecCsB|dp@t|dddddt|jddd S) zM Perform the replacements for a match from :func:`separate`. rrz\*\*z.*z\*[^z]*z\?z[^/])groupreescaperr)rmatchrrr r;s zTranslator.replacecCs>dt|jd}t||}tdd|Dr:tddS)z Raise ValueError if ** appears in anything but a full path segment. >>> Translator().translate('**foo') Traceback (most recent call last): ... ValueError: ** must appear alone in a path segment []+css|]}d|ko|dkVqdS)z**Nr).0segmentrrr Qsz,Translator.restrict_rglob..z&** must appear alone in a path segmentN)rrrsplitany ValueError)rrZ seps_patternsegmentsrrr rFs  zTranslator.restrict_rglobcCs*dd}dt|jd}t|||S)z@ Ensure that * will not match an empty segment. cSs|d}|dkrdS|S)Nr*z?*)r)rrrrr handle_segmentYs z1Translator.star_not_empty..handle_segmentrr)rrrsub)rrr&Znot_seps_patternrrr rTszTranslator.star_not_emptyN)__name__ __module__ __qualname____doc__str__annotations__rr rr r rrrrrrr rs    rcCs td|S)z Separate out character sets to avoid translating their contents. >>> [m.group(0) for m in separate('*.txt')] ['*.txt'] >>> [m.group(0) for m in separate('a[?]txt')] ['a', '[?]', 'txt'] z+([^\[]+)|(?P[\[].*?[\]])|([\[][^\]]*$))rfinditer)rrrr ras r) osrsepr,altsepboolrrrrrrr sY