+
    …rœiÊ'  ã                   óv   € R t ^ RIHt ^ RIHtHtHt ^RIHtH	t	H
t
 Rt R] R2t R] R2t  ! R	 R
]
4      tR# )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. 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Úps_dz(?P<z>/)z(?:z|$)c                   ó†   a € ] tR t^)t o RtRt]V 3R lR l4       t]]	V 3R lR l4       4       t
]	V 3R lR l4       tRtV tR	# )
ÚGitIgnoreSpecPatterna0  
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.
c          	      ó‚   <€ V ^8„  d   QhRS[ RS[S[,          RS[S[S[S[,          ,          S[S[,          3,          /# ©é   Úis_dir_patternÚpattern_segsÚreturn)ÚboolÚlistÚstrÚtupler   )ÚformatÚ__classdict__s   "€ÚB/usr/lib/python3/dist-packages/pathspec/patterns/gitignore/spec.pyÚ__annotate__Ú!GitIgnoreSpecPattern.__annotate__7   sG   ø€ ÷ ]ñ ]Ùð]á‘S•	ð]ñ ‰H‘T™#•YÕ¡©#¥Ð.Õ/ñ]ó    c                óò  € V^ ,          '       g   V^  MQ\        V4      ^8X  g    \        V4      ^8X  d1   V^,          '       g"   V^ ,          R8w  d   VP                  ^ R4       M V'       g   \        R4      hVR,          '       g   RVR&   \        \        V4      ^,
          ^ R4       F.  pW^,
          ,          pW,          pVR8X  g   K#  VR8X  g   K,  W K0  	  \        V4      pV^8X  d!   V^ ,          R8X  d   V '       d	   R\        3# R# V^8X  d   V^ ,          R8X  d   V^,          R8X  d   R# V^8X  d=   V^ ,          R8X  d/   V^,          R8X  d!   V^,          R8X  d   V '       d	   R\        3# R# VR3# )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`).
ú**zPattern normalized to nothing.NÚ*éÿÿÿÿ)NÚ.)NÚ/)ÚlenÚinsertÚ
ValueErrorÚrangeÚ_DIR_MARK_CG)r   r   ÚiÚprevÚsegÚ	seg_counts   &&    r   Ú__normalize_segmentsÚ)GitIgnoreSpecPattern.__normalize_segments6   sv  € ð( 
�a�Œð �A�ä
ˆ<Ó˜AÔ¤# lÓ"3°qÔ"8ÀÈaÇÄð �1…o˜ÔØ×Ñ˜˜4Ô øð ç	ô 
Ð4Ó	5Ð5à	�b×	Ô	ð
 €<�Ñô
 ”�\Ó" QÕ&¨¨2Ö.€aØ
˜•sÕ
€4Ø	�€3Ø
ˆd†l�s˜d–{ØŠñ	 /ô �,Ó€)Ø�!„^˜ Q�¨4Ô/ßð ”,ÐÐð Ðð �„>Ø�A…˜$ÔØ�A…˜#Ôð Ðð �„>Ø�A…˜$ÔØ�A…˜#ÔØ�A…˜$Ô÷
 Ø”,ÐÐàÐð ˜Ð	Ðr   c                ó\   <€ V ^8„  d   QhRS[ RS[S[S[ ,          S[S[,          3,          /# )r   Úpatternr   )r   r   r   r   )r   r   s   "€r   r   r   ˜   s6   ø€ ÷ qñ qáðqñ ‰H‘VÕ™h¡t�nÐ,Õ-ñqr   c                óŠ  € \        V\        4      '       d
   Tp\        pMB\        V\        4      '       d   VP                  \        4      p\        pM\        RV: R24      hTp?VP                  R4      '       d   MVP                  4       pV'       g   R# VP                  R4      '       d   R# VR8X  d   R# VP                  R4      '       d   RpVR	,          pMR
pVP                  R4      pVR,          '       * p V P                  Wv4      w  rhTe   Tp
M<Te%    T P                  Yv4      pRP                  T4      p
M\        RT: RT: R24       X
e#   T\        J d   T
P!                  \        4      pYÅ3# T
pYÅ3#   \         d   p	\        RT: 24      T	hRp	?	ii ; i  \         d   p	\        RT: 24      T	hRp	?	ii ; i)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\ NÚ#r!   Ú!F:é   NNTzInvalid git pattern: Ú zoverride_regex=z and pattern_segs=z cannot both be null.)NNr   )Ú
isinstancer   ÚbytesÚdecoder   Ú	TypeErrorÚendswithÚrstripÚ
startswithÚsplitÚ)_GitIgnoreSpecPattern__normalize_segmentsr$   r   Ú)_GitIgnoreSpecPattern__translate_segmentsÚjoinr   Úencode)Úclsr.   Úpattern_strÚreturn_typeÚoriginal_patternÚincluder   r   Úoverride_regexÚeÚregexÚregex_partsÚ	out_regexs   &&           r   Úpattern_to_regexÚ%GitIgnoreSpecPattern.pattern_to_regex–   s  € ô* �œ×ÒØ€;Ü�;Ü�'œ5×!Ò!Ø—‘¤Ó0€;Ü�;ä	�h�g‘\Ð!BÐCÓ	DÐDà ÐØà×Ñ˜%× Ò ð ð ×#Ñ#Ó%€;÷
 
ð Ðà×Ñ˜c×"Ò"ð Ðà�cÔð Ðà×Ñ˜C× Ò ð €7à˜R•�;à€7ð ×"Ñ" 3Ó'€,ð $ BÕ'Ô'€.ðØ"%×":Ñ":Øó#Ñ€<ð Òà�5àÒðØ×*Ñ*¨>ÓH€Kð �7‰7�;Ó�5ô Ø€~ÑÐ*˜\™OÐ+@ÐAôð Ò˜;¬%Ó/Ø�|‰|œOÓ,€9ð Ð	Ðð €9à
Ð	ÐøôA 
ô Ü	ØÐ,Ñ/Ð0ó
àðûðûô ô Ü
ØÐ-Ñ0Ð1óàðûðús0   Ã>E? ÄF" Å?FÆ
FÆFÆ"GÆ-F=Æ=Gc                óL   <€ V ^8„  d   QhRS[ RS[S[,          RS[S[,          /# r   )r   r   r   )r   r   s   "€r   r   r     s6   ø€ ÷ Cñ CáðCñ ‘S•	ðCñ ‰3…iñ	Cr   c                ód  € . pRp\        V4      ^,
          p\        V4       EF	  w  rgVR8X  dv   V^ 8X  d   VP                  R4       K'  We8  d   VP                  R4       RpKB  We8X  g	   Q We34       hV'       d   VP                  \        4       Ko  VP                  R4       K‚  V^ 8X  d   VP                  R4       V'       d   VP                  R4       VR8X  d   VP                  R	4       M VP                  V P	                  V4      4       We8X  d   VP                  \
        4       RpEK  	  V# )
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.

Returns the regular expression parts (:class:`list` of :class:`str`).
Fr   z	^(?:.+/)?z(?:/.+)?Tr!   Ú^r   z[^/]+)r"   Ú	enumerateÚappendr&   Ú_translate_segment_globÚ_DIR_MARK_OPT)r@   r   r   Ú	out_partsÚ
need_slashÚendr'   r)   s   &&&     r   Ú__translate_segmentsÚ)GitIgnoreSpecPattern.__translate_segments  s  € ð$ €)Ø€*ÜˆLÓ˜AÕ€#Ü˜,×'�f€aØ	ˆT„kØˆA„vð ×Ñ�kÖ"à	
Œð ×Ñ�jÔ!Ø‚Zð ŒHÐ�q�hÓˆH÷ 	Ø×Ñ”|Ö$à×Ñ�sÖð 	ˆA„và×Ñ�cÔçØ×Ñ�cÔà
ˆc„zà×Ñ�gÕð ×Ñ�c×1Ñ1°#Ó6Ô7à„xð ×Ñ”mÔ$àƒJñ[ (ð^ 
Ðr   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__Ústaticmethodr<   r   ÚclassmethodrJ   r=   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r   )   s[   ø‡ € ñð €à÷]ó ð]ð~ Ø÷qó ó ðqðf ÷Có öCr   r   N)r]   Útypingr   Úpathspec._typingr   r   r   Úbaser   r   r   Ú	_DIR_MARKr&   rR   r   rX   r   r   Ú<module>rg      sh   ðñõ÷ñ ÷
ñ ð
 €	ðð
 �i�[ Ð$€ðð �l�^ 3Ð'€ðô
fÐ0ö fr   