K iO1dZddlZddlZddlmZmZmZddlmZddl m Z dZ dZ Gd d e ZGd d e Zej d eGddeZej dey)z This module implements Git's wildmatch pattern matching which itself is derived from Rsync's wildmatch. Git uses wildmatch for its ".gitignore" files. N)AnyStrOptionalTuple)util) RegexPatternlatin1ps_dceZdZdZy)GitWildMatchPatternErrorzW The :class:`GitWildMatchPatternError` indicates an invalid git wild match pattern. N)__name__ __module__ __qualname____doc__d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pathspec/patterns/gitwildmatch.pyr r s rr cxeZdZdZdZededeeeee ffdZ e de de fdZ e dedefdZy ) GitWildMatchPatternzX The :class:`GitWildMatchPattern` class represents a compiled Git wildmatch pattern. rpatternreturnct|trt}n;t|trt}|jt}nt d|d|}|j dr|j}n|j}|jdrd}d}n|dk(rd}d}nx|rq|jdrd}|d d}nd }d}|jd}|d  }tt|d z d d D]} || d z } || } | d k(s| d k(s|| = t|dk(r|d d k(r|d s dtd}|d s|d =n=t|d k(st|dk(r |d s|d d k7r|jd d n |std||d st|d kDrd |d <|jdg} d} t|d z }t!|D]%\} } | d k(r|| d k(r| |k(r| j#d(| d k(r| j#dd} A| |k(r.|r| j#dtdb| j#dt| j#dd } | dk(rE| r| j#d| j#d| |k(r| j#dtdd } | r| j#d | j#|j%| | |k(r| j#dtdd } (| j#ddj)| }n|}nd}d}||tur|j+t}||fS#t&$r}td||d}~wwxYw)a Convert the pattern into a regular expression. *pattern* (:class:`str` or :class:`bytes`) is the pattern to convert into a regular expression. Returns the uncompiled regular expression (:class:`str`, :class:`bytes`, or :data:`None`); and whether matched files should be included (:data:`True`), excluded (:data:`False`), or if it is a null-operation (:data:`None`). zpattern:! is not a unicode or byte string.z\ #N/!FTrz**rz^.+(?P/).*$zInvalid git pattern: ^z [^/]+(?:/.*)?z(?:.+/)?z(?P/).*z/.*z(?:/.+)?*z[^/]+z(?:(?P/).*)?$) isinstancestrbytesdecode_BYTES_ENCODING TypeErrorendswithlstripstrip startswithsplitrangelen _DIR_MARKinsertr enumerateappend_translate_segment_glob ValueErrorjoinencode)clsr return_typeoriginal_patternregexincludeoverride_regex pattern_segsis_dir_patterniprevsegoutput need_slashendes rpattern_to_regexz$GitWildMatchPattern.pattern_to_regex-s;'5!; ^^O ,7 Xg[(IJ KK e^^ 7 ]]_7  5 7#~ 5 7 GabkGG>--$<%R((> #l#a'B /q ! D q/C t|t a   ,1aD!8ayk0N q/ Q LQ3|#4#9,q/ A$D!   #%:;K:N#O PP r s<014 LUFJ l a CL):3 t aAH}}}& 6}}Z z 8  YKu-.  }}Z z *  }}S mmG c}}wyk12j  }}S[ }}S0056 c}}wyk12ju:x MM# GGFOE E 5 7 ;%/ << (5 7[ %(=>N=Q&R SYZZ[s4 M M! MM!cpd}d}dt|}}||kr||}|dz }|rd}|tj|z }n|dk(rd}n|dk(r|dz }n|d k(r|d z }n|d k(r|}||kr||d k(s||d k(r|dz }||kr ||dk(r|dz }||kr||dk7r|dz }||kr ||dk7r||krL|dz }d }||d k(r |d z }|dz }n||d k(r |d z }|dz }||||jddz }||z }|}n|dz }n|tj|z }||kr|rt d||S)a Translates the glob pattern to a regular expression. This is used in the constructor to translate a path segment glob pattern to its corresponding regular expression. *pattern* (:class:`str`) is the glob pattern. Returns the regular expression (:class:`str`). Fr"rr\Tr z[^/]*?z[^/][rr]z\\z\[z9Escape character found with no next character to escape: )r/reescapereplacer5)rrNr;r@rEcharjexprs rr4z+GitWildMatchPattern._translate_segment_globs & % c'lS! C !*461 F RYYt_E  F   WE   VOE   A 3wGAJ#%s):!VQ 3w71:$!VQ c'gajC'!VQ c'gajC' 3w!VQ T c ckd1fa !*   ckd1fa WQq\ ! !$ //T d]U Q  e^U RYYt_Eo Cr OPW{[ \\ ,rsc"t|tr t}|}n;t|trt}|jt}nt d|dddj fd|D}|tur|jtS|S)z Escape special characters in the given string. *s* (:class:`str` or :class:`bytes`) a filename or a string that you want to escape, usually before adding it to a ".gitignore". Returns the escaped string (:class:`str` or :class:`bytes`). zs:rz[]!*#?r"c34K|]}|vrd|zn|yw)rINr).0xmeta_characterss r z-GitWildMatchPattern.escape..zs!O11#7taxQ>Os)r#r$r%r&r'r(r6r7)rSr9string out_stringrXs @rrNzGitWildMatchPattern.escapeds3; 6!U; HH_ %6 Ru=> ??/wwOOO*E   O ,, rN)r rrr __slots__ classmethodrrrboolrG staticmethodr$r4rNrrrrr$s  E E HV htn ,-EENlclcll\v&rr gitwildmatchcJeZdZdZdfd ZeddZefdZxZ S)GitIgnorePatternz The :class:`GitIgnorePattern` class is deprecated by :class:`GitWildMatchPattern`. This class only exists to maintain compatibility with v0.4. cL|jtt||i|y) Warn about deprecation. N) _deprecatedsuperrb__init__)selfargskw __class__s rrgzGitIgnorePattern.__init__s&$($5"5rc<tjdtdy)rdz_GitIgnorePattern ('gitignore') is deprecated. Use GitWildMatchPattern ('gitwildmatch') instead.) stacklevelN)warningswarnDeprecationWarningrrrrezGitIgnorePattern._deprecateds  --A'rcJ|jtt||i|S)rd)rerfrbrG)r8rirjrks rrGz!GitIgnorePattern.pattern_to_regexs' //  6 C CCr)rN) r rrrrgr_rer]rG __classcell__)rks@rrbrbs7 6''DDrrb gitignore)rrMrotypingrrrr"rrrr'r0r5r rregister_patternrbrrrrws   "   z[,[z n&9:D*DBk#34r