a
    If                     @   s   d Z ddlZddlZddlZddlZddlZg dZddddZdddd	Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZedZedZdd Zd d! Zd"d# Zd$d% ZdS )&zFilename globbing utility.    N)globiglobescapeF	recursivec                C   s   t t| |dS )ay  Return a list of paths matching a pathname pattern.

    The pattern may contain simple shell-style wildcards a la
    fnmatch. However, unlike fnmatch, filenames starting with a
    dot are special cases that are not matched by '*' and '?'
    patterns.

    If recursive is true, the pattern '**' will match any files and
    zero or more directories and subdirectories.
    r   )listr   )pathnamer    r	   lib/python3.9/glob.pyr      s    r   c                C   s:   t d| | t| |d}|r6t| r6t|}|r6J |S )a  Return an iterator which yields the paths matching a pathname pattern.

    The pattern may contain simple shell-style wildcards a la
    fnmatch. However, unlike fnmatch, filenames starting with a
    dot are special cases that are not matched by '*' and '?'
    patterns.

    If recursive is true, the pattern '**' will match any files and
    zero or more directories and subdirectories.
    z	glob.globF)sysaudit_iglob_isrecursivenext)r   r   itsr	   r	   r
   r      s    r   c                 c   s   t j| \}}t| sN|r J |r8t j| rJ| V  nt j|rJ| V  d S |s|rrt|rrt|||E d H  nt|||E d H  d S || krt|rt	||d}n|g}t|r|rt|rt}qt}nt
}|D ]&}||||D ]}t j||V  qqd S )NT)ospathsplit	has_magiclexistsisdirr   _glob2_glob1r   _glob0join)r   r   dironlydirnamebasenamedirsZglob_in_dirnamer	   r	   r
   r   *   s2    r   c                 C   s,   t | |}t|s dd |D }t||S )Nc                 s   s   | ]}t |s|V  qd S N)	_ishidden).0xr	   r	   r
   	<genexpr>U       z_glob1.<locals>.<genexpr>)_listdirr"   fnmatchfilter)r   patternr   namesr	   r	   r
   r   R   s    
r   c                 C   s8   |st j| r4|gS nt jt j| |r4|gS g S r!   )r   r   r   r   r   )r   r   r   r	   r	   r
   r   X   s    r   c                 C   s   t | |dS NF)r   r   r*   r	   r	   r
   glob0e   s    r.   c                 C   s   t | |dS r,   )r   r-   r	   r	   r
   glob1h   s    r/   c                 c   s.   t |sJ |d d V  t| |E d H  d S )Nr   )r   	_rlistdir)r   r*   r   r	   r	   r
   r   n   s    r   c              
   c   s   | s"t | trttjd} ntj} zdt| F}|D ]0}z|rF| rN|jV  W q4 tyb   Y q40 q4W d    n1 sz0    Y  W n ty   Y d S 0 d S )NASCII)
isinstancebytesr   curdirscandiris_dirr    OSError)r   r   r   entryr	   r	   r
   _iterdiru   s    
*r9   c                 C   s<   t t| |}t|W  d    S 1 s.0    Y  d S r!   )
contextlibclosingr9   r   )r   r   r   r	   r	   r
   r'      s    r'   c                 c   s\   t | |}|D ]H}t|s|V  | r2tj| |n|}t||D ]}tj||V  q@qd S r!   )r'   r"   r   r   r   r0   )r   r   r+   r$   r   yr	   r	   r
   r0      s    
r0   z([*?[])s   ([*?[])c                 C   s(   t | trt| }n
t| }|d uS r!   )r2   r3   magic_check_bytessearchmagic_check)r   matchr	   r	   r
   r      s    

r   c                 C   s   | d dv S )Nr   )..   r	   )r   r	   r	   r
   r"      s    r"   c                 C   s   t | tr| dkS | dkS d S )Ns   **z**)r2   r3   )r*   r	   r	   r
   r      s    
r   c                 C   s<   t j| \}} t| tr(td| } ntd| } ||  S )z#Escape all special characters.
    s   [\1]z[\1])r   r   
splitdriver2   r3   r=   subr?   )r   Zdriver	   r	   r
   r      s
    
r   )__doc__r:   r   rer(   r   __all__r   r   r   r   r   r.   r/   r   r9   r'   r0   compiler?   r=   r   r"   r   r   r	   r	   r	   r
   <module>   s.   (


