Ë
    hKêj“'  ã                   ó„   — d Z ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z
mZmZ  G d„ de«      Z ej                  d	e«       y
)zÿ
This module provides :class:`GitIgnoreBasicPattern` which implements Git's
`gitignore`_ patterns as documented. This differs from how Git actually behaves
when including files in excluded directories.

.. _`gitignore`: https://git-scm.com/docs/gitignore
é    )ÚOptional)Úutil)ÚAnyStrÚassert_unreachableÚoverrideé   )ÚGitIgnorePatternErrorÚ_BYTES_ENCODINGÚ_GitIgnoreBasePatternc            
       ó´   — 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e   dee   fd	„«       Zy
)ÚGitIgnoreBasicPatternz‡
	The :class:`GitIgnoreBasicPattern` class represents a compiled gitignore
	pattern as documented. This is registered as "gitignore".
	© Ú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y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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)r   r   ÚiÚprevÚsegÚ	seg_counts         úf/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/pathspec/patterns/gitignore/basic.pyÚ__normalize_segmentsz*GitIgnoreBasicPattern.__normalize_segments!   sZ  € ð( 
�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|j                  d«      rd}|dd	 }nd
}|j                  d«      }|d    }|dk(  rd}	 | j                  ||«      \  }}	|	�|	}n8|�$	 | 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}
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ú#ú!Fr   NTr   r   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Ú*_GitIgnoreBasicPattern__normalize_segmentsr   r	   Ú*_GitIgnoreBasicPattern__translate_segmentsÚ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&GitIgnoreBasicPattern.pattern_to_regex~   sú  € ô* �œÔØ€;Ü�;Ü�'œ5Ô!Ø—‘¤Ó0€;Ü�;ä	�h�g�\Ð!BÐCÓ	DÐDà ÐØà×Ñ˜%Ô ð ð ×#Ñ#Ó%€;ñ
 
ð à×Ñ˜cÔ"ð à×Ñ˜CÔ ð €7à˜Q˜R��;à€7ð ×Ñ Ó$€)ð ! ‘}Ð$€.à�CÒð €>ðØ"%×":Ñ":Ø�Ió#Ñ€<�ð Ðà�5àÐðØ×*Ñ*¨<Ó8€Kð �7‰7�;Ó�5ô Ø€~ÐÐ*˜\˜OÐ+@ÐAôð Ð˜;¬%Ñ/Ø—‘œoÓ.€;Ø€9ð �WÐ	Ðð €9à
�WÐ	ÐøôC 
ò Ü	ØÐ,Ð/Ð0ó
àðûðûô ò Ü
ØÐ-Ð0Ð1óàðûðús0   Ã	E Ã&E& Å	E#ÅEÅE#Å&	FÅ/E>Å>Fc                 ó  — g }d}t        |«      dz
  }t        |«      D ]ê  \  }}|dk(  rP|dk(  r|j                  d«       Œ"||k  r|j                  d«       d}Œ;||k(  s	J ||f«       ‚|j                  d«       Œ[|dk(  r|j                  d	«       |r|j                  d«       |d
k(  r|j                  d«       n!|j                  | j                  |d«      «       ||k(  r(|d
k(  r|j                  d«       n|j                  d«       d}Œì |S )zØ
		Translate the pattern segments to regular expressions.

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

		Returns the regular expression parts (:class:`list` of :class:`str`).
		Fr   r   r   z	^(?:.+/)?z(?:/.+)?Tr   ú^r   z[^/]+Úliteralz/?$z(?:/|$))r   Ú	enumerateÚappendÚ_translate_segment_glob)r7   r   Ú	out_partsÚ
need_slashÚendr   r    s          r"   Ú__translate_segmentsz*GitIgnoreBasicPattern.__translate_segments÷   s-  € ð €)Ø€*ÜˆLÓ˜AÑ€#Ü˜,Ó'ò 5�f€aˆØ	ˆT‚kØˆA‚vð
 ×Ñ�kÕ"à	
ˆSŠð ×Ñ�jÔ!Ø�Zð �ŠHÐ�q˜#�hÓˆHð ×Ñ�cÕð 	ˆA‚và×Ñ�cÔáØ×Ñ�cÔà
ˆc‚zà×Ñ�gÕð ×Ñ�c×1Ñ1°#°yÓAÔBàˆC‚xØˆsŠ
ð ×Ñ�uÕð ×Ñ�yÔ!à�Jðk5ðn 
Ðr$   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__ÚstaticmethodÚboolÚlistr+   Útupler   r3   r   Úclassmethodr   rC   r4   r   r$   r"   r   r      sÏ   „ ñð €àðZØðZà�S‘	ðZð ˆH�T˜#‘YÑ ¨#¡Ð.Ñ/òZó ðZðx Øðuàðuð ˆH�VÑ˜h t™nÐ,Ñ-òuó ó ðuðn ðD¨T°#©Yð D¸4À¹9ò Dó ñDr$   r   Ú	gitignoreN)rQ   Útypingr   Úpathspecr   Úpathspec._typingr   r   r   Úbaser	   r
   r   r   Úregister_patternr   r$   r"   ú<module>r^      sM   ðñõõ ÷ñ ÷
ñ ôdÐ1ô dðP	 €× Ñ �kÐ#8Õ 9r$   