Ë
    hKêjf)  ã                   óx   — d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
mZ dZ	 de› d�Z	 d	e› d
�Z	  G d„ de
«      Zy)aØ  
This module provides :class:`GitIgnoreSpecPattern` which implements Git's
`gitignore`_ patterns, and handles edge-cases where Git's behavior differs from
what's documented. Git allows including files from excluded directories which
appears to contradict the documentation. Git discards patterns with invalid
range notation. This is used by :class:`~pathspec.gitignore.GitIgnoreSpec` to
fully replicate Git's handling.

.. _`gitignore`: https://git-scm.com/docs/gitignore
é    )ÚOptional)ÚAnyStrÚassert_unreachableÚoverrideé   )ÚGitIgnorePatternErrorÚ_BYTES_ENCODINGÚ_GitIgnoreBasePatternÚ_RangeErrorÚps_dz(?P<z>/)z(?:z|$)c            
       ó¸   — e Zd ZdZdZededee   de	e
ee      e
e   f   fd„«       Zeedede	e
e   e
e   f   fd„«       «       Zededee   dee   fd	„«       Zy
)ÚGitIgnoreSpecPatterna6  
	The :class:`GitIgnoreSpecPattern` class represents a compiled gitignore
	pattern with special handling for edge-cases to replicate Git's behavior.

	This is registered under the deprecated name "gitwildmatch" for backward
	compatibility with v0.12. The registered name will be removed in a future
	version.
	© Úis_dir_patternÚpattern_segsÚreturnc                 óú  — |d   s|d= n=t        |«      dk(  st        |«      dk(  r |d   s|d   dk7  r|j                  dd«       n	 |st        d«      ‚|d   sd|d<   t        t        |«      dz
  dd«      D ]  }||dz
     }||   }|dk(  sŒ|dk(  sŒ||= Œ  t        |«      }|dk(  r|d   dk(  r| rdt        fS y|dk(  r|d   dk(  r	|d   d	k(  ry|d
k(  r#|d   dk(  r|d   d	k(  r|d   dk(  r| rdt        fS y|dfS )aç  
		Normalize the pattern segments to make processing easier.

		*is_dir_pattern* (:class:`bool`) is whether the pattern is a directory
		pattern (i.e., ends with a slash '/').

		*pattern_segs* (:class:`list` of :class:`str`) contains the pattern
		segments. This may be modified in place.

		Returns a :class:`tuple` containing either:

		- The normalized segments (:class:`list` of :class:`str`; or :data:`None`).

		- The regular expression override (:class:`str` or :data:`None`).
		r   r   é   ú**zPattern normalized to nothing.éÿÿÿÿN)Nú.Ú*é   )Nú/)ÚlenÚinsertÚ
ValueErrorÚrangeÚ_DIR_MARK_CG)r   r   ÚiÚprevÚsegÚ	seg_counts         úe/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/pathspec/patterns/gitignore/spec.pyÚ__normalize_segmentsz)GitIgnoreSpecPattern.__normalize_segments8   sp  € ð( 
�aŠð �A�ä
ˆ<Ó˜AÒ¤# lÓ"3°qÒ"8ÀÈaÂð �1�o˜ÒØ×Ñ˜˜4Õ ð á	ô 
Ð4Ó	5Ð5à	�bÒ	ð
 €<�Ñô
 ”�\Ó" QÑ&¨¨2Ó.ò €aØ
�q˜‘sÑ
€4Ø	�a‰€3Ø
ˆdƒl�s˜d“{Ø�Q‰ð	ô �,Ó€)Ø�!‚^˜ Q™¨4Ò/Ùð ”,ÐÐð ð �‚>Ø�A�˜$ÒØ�A�˜#Òð ð �‚>Ø�A�˜$ÒØ�A�˜#ÒØ�A�˜$Òñ
 Ø”,ÐÐàð ˜Ð	Ðó    Úpatternc                 ó   — t        |t        «      r	|}t        }n;t        |t        «      r|j                  t        «      }t        }nt        d|›d�«      ‚|}~|j                  d«      rn|j                  «       }|sy|j                  d«      ry|dk(  ry|j                  d«      rd}|d	d
 }nd}|j                  d«      }|d    }	 | j                  ||«      \  }}	|	�|	}n9|�%	 | j                  ||«      }dj                  |«      }nt!        d|	›d|›d�«       �#|t        u r|j#                  t        «      }|}||fS |}||fS # t        $ r}
t        d|›�«      |
‚d
}
~
ww xY w# t        $ r Y yt        $ r}
t        d|›�«      |
‚d
}
~
ww xY w)aß  
		Convert the pattern into a regular expression.

		*pattern* (:class:`str` or :class:`bytes`) is the pattern to convert into a
		regular expression.

		Returns a :class:`tuple` containing:

			-	*pattern* (:class:`str`, :class:`bytes` or :data:`None`) is the
				uncompiled regular expression.

			-	*include* (:class:`bool` or :data:`None`) is whether matched files
				should be included (:data:`True`), excluded (:data:`False`), or is a
				null-operation (:data:`None`).
		zpattern=z! is not a unicode or byte string.z\ )NNú#r   ú!Fr   NTr   zInvalid git pattern: Ú zoverride_regex=z and pattern_segs=z cannot both be null.)Ú
isinstanceÚstrÚbytesÚdecoder	   Ú	TypeErrorÚendswithÚrstripÚ
startswithÚsplitÚ)_GitIgnoreSpecPattern__normalize_segmentsr   r   Ú)_GitIgnoreSpecPattern__translate_segmentsr   Újoinr   Úencode)Úclsr'   Úpattern_strÚreturn_typeÚoriginal_patternÚincludeÚ	orig_segsr   r   Úoverride_regexÚeÚregexÚregex_partsÚregex_bytesÚ	out_regexs                  r$   Úpattern_to_regexz%GitIgnoreSpecPattern.pattern_to_regex˜   s  € ô* �œÔØ€;Ü�;Ü�'œ5Ô!Ø—‘¤Ó0€;Ü�;ä	�h�g�\Ð!BÐCÓ	DÐDà ÐØà×Ñ˜%Ô ð ð ×#Ñ#Ó%€;ñ
 
ð à×Ñ˜cÔ"ð à�cÒð à×Ñ˜CÔ ð €7à˜Q˜R��;à€7ð ×Ñ Ó$€)ð ! ‘}Ð$€.ðØ"%×":Ñ":Ø�Ió#Ñ€<�ð Ðà�5àÐðØ×*Ñ*¨>¸<ÓH€Kð �7‰7�;Ó�5ô Ø€~ÐÐ*˜\˜OÐ+@ÐAôð Ð˜;¬%Ñ/Ø—‘œoÓ.€;Ø€9ð �WÐ	Ðð €9à
�WÐ	ÐøôI 
ò Ü	ØÐ,Ð/Ð0ó
àðûðûô ò áÜ
ò Ü
ØÐ-Ð0Ð1óàðûðús6   ÃE Ã%E& Å	E#ÅEÅE#Å&	FÅ1FÅ9FÆFc                 ó$  — g }d}t        |«      dz
  }t        |«      D ]ï  \  }}|dk(  rh|dk(  r|j                  d«       Œ"||k  r|j                  d«       d}Œ;||k(  s	J ||f«       ‚|r|j                  t        «       Œa|j                  d«       Œs|dk(  r|j                  d	«       |r|j                  d«       |d
k(  r|j                  d«       n!|j                  | j	                  |d«      «       ||k(  r|j                  t
        «       d}Œñ |S )aŽ  
		Translate the pattern segments to regular expressions.

		*is_dir_pattern* (:class:`bool`) is whether the pattern is a directory
		pattern (i.e., ends with a slash '/').

		*pattern_segs* (:class:`list` of :class:`str`) contains the pattern
		segments.

		Raises :class:`_RangeError` if invalid range notation is found.

		Returns the regular expression parts (:class:`list` of :class:`str`).
		Fr   r   r   z	^(?:.+/)?z(?:/.+)?Tr   ú^r   z[^/]+Úraise)r   Ú	enumerateÚappendr   Ú_translate_segment_globÚ_DIR_MARK_OPT)r9   r   r   Ú	out_partsÚ
need_slashÚendr    r"   s           r$   Ú__translate_segmentsz)GitIgnoreSpecPattern.__translate_segments  s'  € ð( €)Ø€*ÜˆLÓ˜AÑ€#Ü˜,Ó'ò .�f€aˆØ	ˆT‚kØˆA‚vð ×Ñ�kÕ"à	
ˆSŠð ×Ñ�jÔ!Ø�Zð �ŠHÐ�q˜#�hÓˆHñ 	Ø×Ñ”|Õ$à×Ñ�sÕð 	ˆA‚và×Ñ�cÔáØ×Ñ�cÔà
ˆc‚zà×Ñ�gÕð
 ×Ñ�c×1Ñ1°#°wÓ?Ô@àˆC‚xð ×Ñ”mÔ$à�Jð].ð` 
Ðr&   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__ÚstaticmethodÚboolÚlistr-   Útupler   r5   r   Úclassmethodr   rE   r6   r   r&   r$   r   r   +   sÞ   „ ñð €àð]Øð]à�S‘	ð]ð ˆH�T˜#‘YÑ ¨#¡Ð.Ñ/ò]ó ð]ð~ Øðuàðuð ˆH�VÑ˜h t™nÐ,Ñ-òuó ó ðuðn ðFàðFð �S‘	ðFð ˆ3�iò	Fó ñFr&   r   N)rT   Útypingr   Úpathspec._typingr   r   r   Úbaser   r	   r
   r   Ú	_DIR_MARKr   rL   r   r   r&   r$   ú<module>r_      sh   ðñ	õ÷ñ ÷
ó ð €	ðð
 �i�[ Ð$€ðð �l�^ 3Ð'€ðô
mÐ0õ mr&   