
    ˆhO1                         S r SSKrSSKrSSKJrJrJr  SSKJr  SSK	J
r
  Sr Sr  " S	 S
\5      r " S S\
5      r\R                   " S\5         " S S\5      r\R                   " S\5        g)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)AnyStrOptionalTuple   )util)RegexPatternlatin1ps_dc                       \ rS rSrSrSrg)GitWildMatchPatternError   zT
The :class:`GitWildMatchPatternError` indicates an invalid git wild match
pattern.
 N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       V/opt/services/DDDS/venv/lib/python3.13/site-packages/pathspec/patterns/gitwildmatch.pyr   r      s     r   r   c                       \ rS rSrSrSr\S\S\\	\   \	\
   4   4S j5       r\S\S\4S j5       r\S\S\4S	 j5       rSrg
)GitWildMatchPattern$   zU
The :class:`GitWildMatchPattern` class represents a compiled Git wildmatch
pattern.
r   patternreturnc                    [        U[        5      (       a  [        nOA[        U[        5      (       a  [        nUR                  [        5      nO[        SU< S35      eUnUR                  S5      (       a  UR                  5       nOUR                  5       nUR                  S5      (       a  SnSnGOUS:X  a  SnSnGOU(       Ga  UR                  S5      (       a  SnUS	S nOS
nSnUR                  S5      nUS   (       + n[        [        U5      S	-
  SS5       H   n	XyS	-
     n
Xy   nU
S:X  d  M  US:X  d  M  Xy	 M"     [        U5      S:X  a  US   S:X  a  US	   (       d
  S[         S3nUS   (       d  US	 OE[        U5      S	:X  d  [        U5      S:X  a&  US	   (       d  US   S:w  a  UR                  SS5        O U(       d  [        SU< 35      eUS   (       d  [        U5      S	:  a  SUS'   UGc  S/nSn[        U5      S	-
  n[!        U5       GH>  u  pUS:X  a  U	S:X  a  X:X  a  UR#                  S5        M*  U	S:X  a  UR#                  S5        SnME  X:X  a5  U(       a  UR#                  S[         S35        Ml  UR#                  S5        M  UR#                  S5        S
nM  US:X  aK  U(       a  UR#                  S5        UR#                  S5        X:X  a  UR#                  S[         S35        S
nM  U(       a  UR#                  S5         UR#                  U R%                  U5      5        X:X  a  UR#                  S[         S35        S
nGMA     UR#                  S5        SR)                  U5      nOUnOSnSnUb  U[        L a  UR+                  [        5      nXE4$ ! [&         a  n[        SU< 35      UeSnAff = f)aq  
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`).
zpattern:! is not a unicode or byte string.z\ #N/!F   Tr   z**r   z^.+(?P<z>/).*$zInvalid git pattern: ^z[^/]+(?:/.*)?z(?:.+/)?z(?P<z>/).*z/.*z(?:/.+)?*z[^/]+z(?:(?P<z>/).*)?$ )
isinstancestrbytesdecode_BYTES_ENCODING	TypeErrorendswithlstripstrip
startswithsplitrangelen	_DIR_MARKinsertr   	enumerateappend_translate_segment_glob
ValueErrorjoinencode)clsr   return_typeoriginal_patternregexincludeoverride_regexpattern_segsis_dir_patterniprevsegoutput
need_slashendes                   r   pattern_to_regex$GitWildMatchPattern.pattern_to_regex-   s    ;'5!!;^^O,7	Xg[(IJ	KKe ^^7]]_7 57#~ 57 GabkGG > --$< %R((> #l#a'B/q!D
/Ct|t		 0 
,1aD!8a yk0N
q/ 	QLQ3|#4#9,q/ A$D! 	
 #%:;K:N#O
PP
r
s<014
 LUFJ
l
a
CL)t	
aAH }}}&6 }}Z z8 YKu-.
 }}Z z
*	}}SmmG	
 }}wyk12j 
}}S[}}S0056 
 }}wyk12ju *x MM#GGFOE E
 57
;%/<<(5	7  [%(=>N=Q&RSYZZ[s    N''
O1OOc                    SnSnS[        U 5      pCX4:  Ga  X   nUS-  nU(       a  SnU[        R                  " U5      -  nOUS:X  a  SnOUS:X  a  US-  nOUS	:X  a  US
-  nOUS:X  a  UnXd:  a  X   S:X  d  X   S:X  a  US-  nXd:  a  X   S:X  a  US-  nXd:  a  X   S:w  a  US-  nXd:  a
  X   S:w  a  M  Xd:  aI  US-  nSnX   S:X  a  US-  nUS-  nOX   S:X  a
  US-  nUS-  nXpX6 R                  SS5      -  nX'-  nUnOUS-  nOU[        R                  " U5      -  nX4:  a  GM  U(       a  [	        SU < 35      eU$ )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&   r   r!   \Tr$   z[^/]*?z[^/][r    r#   ]z\\z\[z9Escape character found with no next character to escape: )r3   reescapereplacer9   )r   rS   r?   rD   rI   charjexprs           r   r8   +GitWildMatchPattern._translate_segment_glob   s    &
%c'lS	
*461F	RYYt_EF 
WE 
VOE 	
A 	wGJ#%s):!VQ 	w7:$!VQ 'gjC'!VQ 'gjC' 	w !VQT
c
ckd1fa
*
 ckd1fa 
Q\!!$//T ]U 
Q
 e^U 
RYYt_Eo 	
r 	OPW{[	\\	,r   sc                 <  ^ [        U [        5      (       a	  [        nU nOA[        U [        5      (       a  [        nU R                  [        5      nO[        SU < S35      eSmSR                  U4S jU 5       5      nU[        L a  UR                  [        5      $ U$ )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`).
zs:r   z[]!*#?r&   c              3   <   >#    U  H  oT;   a  S U-   OUv   M     g7f)rN   Nr   ).0xmeta_characterss     r   	<genexpr>-GitWildMatchPattern.escape.<locals>.<genexpr>z  s     O1#7taxQ>s   )r'   r(   r)   r*   r+   r,   r:   r;   )rY   r=   string
out_stringr^   s       @r   rS   GitWildMatchPattern.escaped  s     3;6!U;HH_%6	Ru=>	?? /wwOOO*E


O
,,
r   N)r   r   r   r   r   	__slots__classmethodr   r   r   boolrK   staticmethodr(   r8   rS   r   r   r   r   r   r   $   s     EE HVhtn,-E EN lc lc l l\ v &  r   r   gitwildmatchc                   Z   ^  \ rS rSrSrSU 4S jjr\SS j5       r\U 4S j5       r	Sr
U =r$ )GitIgnorePatterni  z
The :class:`GitIgnorePattern` class is deprecated by :class:`GitWildMatchPattern`.
This class only exists to maintain compatibility with v0.4.
c                 N   > U R                  5         [        [        U ]  " U0 UD6  g)
Warn about deprecation.
N)_deprecatedsuperrj   __init__)selfargskw	__class__s      r   ro   GitIgnorePattern.__init__  s&     $($5"5r   c                  8    [         R                  " S[        SS9  g)rl   z_GitIgnorePattern ('gitignore') is deprecated. Use GitWildMatchPattern ('gitwildmatch') instead.   )
stacklevelN)warningswarnDeprecationWarningr   r   r   rm   GitIgnorePattern._deprecated  s    
 --A'r   c                 L   > U R                  5         [        [        U ]  " U0 UD6$ )rl   )rm   rn   rj   rK   )r<   rq   rr   rs   s      r   rK   !GitIgnorePattern.pattern_to_regex  s'    
 //		6	C	CCr   r   )r   N)r   r   r   r   r   ro   rg   rm   re   rK   r   __classcell__)rs   s   @r   rj   rj     s7    
6 ' ' D Dr   rj   	gitignore)r   rR   rx   typingr   r   r   r&   r   r   r   r+   r4   r9   r   r   register_patternrj   r   r   r   <module>r      s   
 
  
  " 	z [, [z
   n&9 :D* DB   k#3 4r   