Ë
    ålÖiO1  ã                   óÞ   — d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
 dZ	 dZ	  G d	„ d
e«      Z G d„ de
«      Z ej                   de«        G d„ de«      Z ej                   de«       y)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                   ó   — e Zd ZdZy)ÚGitWildMatchPatternErrorzW
	The :class:`GitWildMatchPatternError` indicates an invalid git wild match
	pattern.
	N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úc/var/www/html/strategist-ai/venv_dbt/lib/python3.12/site-packages/pathspec/patterns/gitwildmatch.pyr   r      s   „ ñð r   r   c                   óx   — e Zd ZdZdZededeee   ee	   f   fd„«       Z
ededefd„«       Zededefd„«       Zy	)
ÚGitWildMatchPatternzX
	The :class:`GitWildMatchPattern` class represents a compiled Git wildmatch
	pattern.
	r   ÚpatternÚreturnc                 óÈ  — t        |t        «      rt        }n;t        |t        «      rt        }|j                  t        «      }nt        d|›d�«      ‚|}|j                  d«      r|j                  «       }n|j                  «       }|j                  d«      rd}d}�nƒ|dk(  rd}d}�nx|�rq|j                  d«      rd}|d	d }nd
}d}|j                  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|d	   s
dt        › d�}|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t        |«      d	kD  rd|d<   |�€jdg}d}t        |«      d	z
  }t!        |«      D �]%  \  }	}|dk(  r||	dk(  r|	|k(  r|j#                  d«       Œ(|	dk(  r|j#                  d«       d}ŒA|	|k(  r.|r|j#                  dt        › d�«       Œb|j#                  d«       Œt|j#                  d«       d
}Œˆ|dk(  rE|r|j#                  d«       |j#                  d«       |	|k(  r|j#                  dt        › d�«       d
}ŒÒ|r|j#                  d«       	 |j#                  | j%                  |«      «       |	|k(  r|j#                  dt        › d�«       d
}�Œ( |j#                  d«       dj)                  |«      }n|}nd}d}|�|t        u r|j+                  t        «      }||fS # 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 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é   Téÿÿÿÿr   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_regexz$GitWildMatchPattern.pattern_to_regex-   sÆ  € ô �œÔÜ�;Ü�'œ5Ô!Ü€;Ø�^‰^œOÓ,�7ä	�X˜g˜[Ð(IÐJÓ	KÐKàÐà×Ñ�eÔð �^‰^Ó�7à�]‰]‹_€7à×Ñ˜Ôð €5Ø‚7à�#‚~ð €5Ø‚7âØ×Ñ˜Ôð €Gà�a�bˆk�Gà€Gð €>ð —-‘- Ó$€<ð % RÑ(Ð(€>ô ”#�lÓ# aÑ'¨¨BÓ/ò €qØ˜˜!™Ñ€DØ
�q‰/€CØˆtƒ|˜˜t›Ø	�a‰ð	ô 
ˆ,Ó˜1Ò ¨a¡°DÒ!8ÀÈaÂð œy˜k¨Ð0€Nà
�qŠ/ð 	�Q‰äˆLÓ˜QÒ¤3 |Ó#4¸Ò#9À,ÈqÂ/ð �A�˜$ÒØ×Ñ˜˜DÕ!ð 	á
ô #Ð%:Ð;KÐ:NÐ#OÓ
PÐPà
�rÒ
œs <Ó0°1Ò4ð
 €L�ÑàÑàˆU€FØ€JÜ
ˆlÓ
˜aÑ
€CÜ˜LÓ)ó :‰ˆˆ3ØˆtŠØ	
ˆaŠ�A˜’Hð ‡}�}�}Õ&à�Š6ð ‡}�}�ZÔ Ø�zà�Š8ñ Ø�‰˜œY˜K uÐ-Õ.à�‰˜Õð
 ‡}�}�ZÔ Ø�zà
�Š*á	Ø‡}�}�SÔà‡m�m�GÔà	
ˆcŠð ‡}�}�wœy˜k¨Ð1Ô2à�jñ 
Ø‡}�}�SÔð[Ø‡}�}�S×0Ñ0°Ó5Ô6ð 
ˆcŠð ‡}�}�wœy˜k¨Ð1Ô2à‚jðu:ðx ‡M�M�#ÔØ�G‰G�F‹O�Eð �Eð
 €5Ø€7à
Ð˜;¬%Ñ/Ø�<‰<œÓ(€5à	�ˆÐøô7 ò [Ü%Ð(=Ð>NÐ=QÐ&RÓSÐYZÐZûð[ús   Ê4 MÍ	M!ÍMÍM!c                 óp  — d}d}dt        | «      }}||k  �r| |   }|dz  }|rd}|t        j                  |«      z  }nà|dk(  rd}nØ|dk(  r|dz  }nÍ|d	k(  r|d
z  }nÂ|dk(  r¥|}||k  r| |   dk(  s| |   dk(  r|dz  }||k  r| |   dk(  r|dz  }||k  r| |   dk7  r|dz  }||k  r	| |   dk7  rŒ||k  rL|dz  }d}| |   dk(  r|dz  }|dz  }n| |   dk(  r
|dz  }|dz  }|| || j                  dd«      z  }||z  }|}n|dz  }n|t        j                  |«      z  }||k  r�Œ|rt	        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"   r   r   ú\Tr    z[^/]*ú?z[^/]ú[r   r   ú]z\\z\[z9Escape character found with no next character to escape: )r/   ÚreÚescapeÚreplacer5   )r   rN   r;   r@   rE   ÚcharÚjÚexprs           r   r4   z+GitWildMatchPattern._translate_segment_globõ   sÓ  € ð €&Ø
€%ØŒc�'‹l€S€!Ø	ˆC‹à
�!‰*€4Øˆ�6€1áà€FØ	ŒR�Y‰Y�t‹_Ñ�Eà�Šà�Fà�Šð 
ˆWÑ�Eà�Šð 
ˆV�O�Eà�Šð 	
€Að 	ˆ3‚w�G˜A‘J #Ò%¨°©°sÒ):Øˆ!�V€Qð 	ˆ3‚w�7˜1‘: Ò$Øˆ!�V€Qð ˆcŠ'�g˜a‘j CÒ'Øˆ!�V€Qð ˆcŠ'�g˜a‘j CÓ'ð 	ˆ3‚wð ˆ!�V€QØ€Tà�‰
�cÒà
ˆc�k€dØˆ1�f�aØ
�!‰*˜Ò
ð ˆc�k€dØˆ1�f€að 
ˆW�Q�qˆ\×!Ñ! $¨Ó/Ñ/€Tð ˆd�]€Uð 
�Qð
 ˆe�^�Uð 
ŒR�Y‰Y�t‹_Ñ€Eðo 	
ˆCŒñr Ü	ÐOÐPWÈ{Ð[Ó	\Ð\à	€,r   Úsc                 ó"  ‡— t        | t        «      r	t        }| }n;t        | t        «      rt        }| j                  t        «      }nt        d| ›d�«      ‚dŠdj                  ˆfd„|D «       «      }|t        u r|j                  t        «      S |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`).
		zs:r   z[]!*#?r"   c              3   ó4   •K  — | ]  }|‰v rd |z   n|–— Œ y­w)rI   Nr   )Ú.0ÚxÚmeta_characterss     €r   ú	<genexpr>z-GitWildMatchPattern.escape.<locals>.<genexpr>z  s!   øè ø€ ÒOÀ1 1¨Ñ#7�t˜a’x¸QÓ>ÑOùs   ƒ)r#   r$   r%   r&   r'   r(   r6   r7   )rS   r9   ÚstringÚ
out_stringrX   s       @r   rN   zGitWildMatchPattern.escaped  s…   ø€ ô �”3ÔÜ€;Ø�6Ü�!”UÔÜ€;Ø�H‰H”_Ó%�6ä	�R˜�uÐ=Ð>Ó	?Ð?ð €/à�w‰wÓOÈÔOÓO€*à”EÑØ
×
Ñ
œOÓ
,Ð,à
Ðr   N)r   r   r   r   Ú	__slots__Úclassmethodr   r   r   ÚboolrG   Ústaticmethodr$   r4   rN   r   r   r   r   r   $   s“   „ ñð €àðEàðEð ˆH�VÑ˜h t™nÐ,Ñ-òEó ðEðN ðl cð l¨cò ló ðlð\ ðˆvð ˜&ò ó ñr   r   Úgitwildmatchc                   óJ   ‡ — e Zd ZdZdˆ fd„Zedd„«       Zeˆ fd„«       Zˆ xZ	S )ÚGitIgnorePatternz“
	The :class:`GitIgnorePattern` class is deprecated by :class:`GitWildMatchPattern`.
	This class only exists to maintain compatibility with v0.4.
	c                 óL   •— | j                  «        t        t        | �  |i |¤Ž y)ú
		Warn about deprecation.
		N)Ú_deprecatedÚsuperrb   Ú__init__)ÚselfÚargsÚkwÚ	__class__s      €r   rg   zGitIgnorePattern.__init__Š  s&   ø€ ð ×ÑÔÜÔ˜$Ñ(¨$Ð5°"Ó5r   c                  ó<   — t        j                  dt        d¬«       y)rd   z_GitIgnorePattern ('gitignore') is deprecated. Use GitWildMatchPattern ('gitwildmatch') instead.é   )Ú
stacklevelN)ÚwarningsÚwarnÚDeprecationWarningr   r   r   re   zGitIgnorePattern._deprecated‘  s   € ô
 ‡-�-ðä Aö'r   c                 óJ   •— | j                  «        t        t        | �  |i |¤ŽS )rd   )re   rf   rb   rG   )r8   ri   rj   rk   s      €r   rG   z!GitIgnorePattern.pattern_to_regex›  s'   ø€ ð
 ‡/�/ÔÜ	Ô Ñ	6¸Ð	CÀÑ	CÐCr   )r   N)
r   r   r   r   rg   r_   re   r]   rG   Ú__classcell__)rk   s   @r   rb   rb   „  s7   ø„ ñõ
6ð ò'ó ð'ð óDó ôDr   rb   Ú	gitignore)r   rM   ro   Útypingr   r   r   r"   r   r   r   r'   r0   r5   r   r   Úregister_patternrb   r   r   r   ú<module>rw      s�   ðñó
 
Û ÷ñ õ
 Ý "à€ðð €	ðô˜zô ô[˜,ô [ðz
 €× Ñ �nÐ&9Ô :ôDÐ*ô DðB €× Ñ �kÐ#3Õ 4r   