
    W-Ph                         d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZmZ ddlmZ  edd	
          Z	  G d d	e          ZdS )zV
This module provides :class:`.GitIgnoreSpec` which replicates
*.gitignore* behavior.
    )
AnyStrCallableIterableOptionalTupleTypeTypeVarUnioncastoverload   )PathSpec)Pattern)GitWildMatchPattern	_DIR_MARK)_is_iterableSelfGitIgnoreSpec)boundc                       e Zd ZdZdedef fdZeede	e
         deeeegef         f         dee         de
fd                        Zee	 dde	e
         dee         deeeegef         d	f         de
fd
                        Ze	 dde	e
         dee         deeeegef         d	f         de
f fd            Zedeeeef                  dedeee         ee         f         fd            Z xZS )r   zu
	The :class:`GitIgnoreSpec` class extends :class:`pathspec.pathspec.PathSpec` to
	replicate *.gitignore* behavior.
	otherreturnc                     t          |t                    r!t                                          |          S t          |t                    rdS t
          S )z
		Tests the equality of this gitignore-spec with *other* (:class:`GitIgnoreSpec`)
		by comparing their :attr:`~pathspec.pattern.Pattern`
		attributes. A non-:class:`GitIgnoreSpec` will not compare equal.
		F)
isinstancer   super__eq__r   NotImplemented)selfr   	__class__s     R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pathspec/gitignore.pyr   zGitIgnoreSpec.__eq__)   sJ     }%% 
''..

%"" 
%
    clspattern_factorylinesc                     d S N )r"   r#   r$   s      r    
from_lineszGitIgnoreSpec.from_lines7   	     #r!   Nc                     d S r&   r'   )r"   r$   r#   s      r    r(   zGitIgnoreSpec.from_lines@   r)   r!   c                    |t           }n>t          |t          t          f          st	          |          rt          |          r||}}t                                          ||          }t          t          |          S )a  
		Compiles the pattern lines.

		*lines* (:class:`~collections.abc.Iterable`) yields each uncompiled
		pattern (:class:`str`). This simply has to yield each line so it can
		be a :class:`io.TextIOBase` (e.g., from :func:`open` or
		:class:`io.StringIO`) or the result from :meth:`str.splitlines`.

		*pattern_factory* can be :data:`None`, the name of a registered
		pattern factory (:class:`str`), or a :class:`~collections.abc.Callable`
		used to compile patterns. The callable must accept an uncompiled
		pattern (:class:`str`) and return the compiled pattern
		(:class:`pathspec.pattern.Pattern`).
		Default is :data:`None` for :class:`.GitWildMatchPattern`).

		Returns the :class:`GitIgnoreSpec` instance.
		)
r   r   strbytescallabler   r   r(   r   r   )r"   r$   r#   r   r   s       r    r(   zGitIgnoreSpec.from_linesI   sv    . (??53,'' 38E?? 3_@]@] 3!?E?			OU	3	3$	dD		r!   patternsfilec                    d}d}d}| D ]\  }}|j         u|                    |          }|^|j                                                            t
                    }|rd}	nd}	|j         r|r|j         }|}|	}p|	|k    r|j         }|}|	}||fS )a  
		Check the file against the patterns.

		.. NOTE:: Subclasses of :class:`~pathspec.pathspec.PathSpec` may override
		   this method as an instance method. It does not have to be a static
		   method. The signature for this method is subject to change.

		*patterns* (:class:`~collections.abc.Iterable`) yields each indexed pattern
		(:class:`tuple`) which contains the pattern index (:class:`int`) and actual
		pattern (:class:`~pathspec.pattern.Pattern`).

		*file* (:class:`str`) is the normalized file path to be matched against
		*patterns*.

		Returns a :class:`tuple` containing whether to include *file* (:class:`bool`
		or :data:`None`), and the index of the last matched pattern (:class:`int` or
		:data:`None`).
		Nr   r      )include
match_filematch	groupdictgetr   )
r/   r0   out_include	out_indexout_priorityindexpatternr5   dir_markprioritys
             r    _match_filezGitIgnoreSpec._match_filej   s    . !%+!),   neWo!t$$E %%''++I66X hh h H Okill
l
"
"Okil	i	r!   r&   )__name__
__module____qualname____doc__objectboolr   r   classmethodr   r   r
   r,   r   r   r   r   r(   staticmethodr   intr   r   r?   __classcell__)r   s   @r    r   r   #   s        
 D       Dzhx'899: 
&	 	   + (  DH Dz	&	 hx'894?@ 	   + (  DH Dz	&	 hx'894?@ 	     +@ 2 U3 33452 2  HTNHSM)*2  2  2  ,2  2  2  2  2 r!   N)rC   typingr   r   r   r   r   r   r	   r
   r   r   pathspecr   r<   r   patterns.gitwildmatchr   r   utilr   r   r   r'   r!   r    <module>rN      sb   

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
 
 
 
 
             wv_---z  z  z  z  z H z  z  z  z  z r!   