o
    >c                     @   s  d Z ddlZddl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ddZ	dd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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ejeed,dB Z dS )-zFilename globbing utility.    N)globiglobescapeFroot_dirdir_fd	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   r    r   X/Volumes/Data/workspace/med-macos-weekly/build/ExtProjs/pyncpp/python/source/Lib/glob.pyr      s   r   c                C   s   t d| | t d| ||| |durt|}n| dd }t| |||d}| r4|rRt| dd rRzt|}|rEt|f|}W |S W |S  t	yQ   Y |S w |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.globzglob.glob/2Nr   F   )
sysauditosfspath_iglob_isrecursivenext	itertoolschainStopIteration)r
   r   r   r   itsr   r   r   r      s&   r   c           
      c   s   t j| \}}t| s-|rJ |r tt|| |r| V  d S tt|||r+| V  d S |sM|rAt|rAt||||E d H  d S t	||||E d H  d S || kr^t|r^t
||||d}n|g}t|rq|rnt|rnt}nt	}nt}|D ]}|t|||||D ]
}	t j||	V  qqud S )NT)r   pathsplit	has_magic_lexists_join_isdirr   _glob2_glob1r   _glob0join)
r
   r   r   r   dironlydirnamebasenamedirsZglob_in_dirnamer   r   r   r   5   s<   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>`   s    z_glob1.<locals>.<genexpr>)_listdirr*   fnmatchfilter)r%   patternr   r$   namesr   r   r   r!   ]   s   r!   c                 C   s2   |rt t| ||r|gS g S t| |r|gS g S r)   )r   r   r   )r%   r&   r   r$   r   r   r   r"   c   s   
r"   c                 C      t | |d dS NF)r"   r%   r1   r   r   r   glob0p      r6   c                 C   r3   r4   )r!   r5   r   r   r   glob1s   r7   r8   c                 c   s2    t |sJ |d d V  t| ||E d H  d S )Nr   )r   	_rlistdir)r%   r1   r   r$   r   r   r   r    y   s   r    c              
   c   s,   zd }d }|d ur"| rt j| t|d }}n|}t| tr!t j}n| r'| }nt| tr3tt jd}nt j}zJt |-}|D ]"}z|rH| rW|d urS||j	V  n|j	V  W q? t
ya   Y q?w W d    n1 slw   Y  W |d ur~t | W d S W d S |d urt | w w  t
y   Y d S w )Nr   ASCII)r   open_dir_open_flags
isinstancebytesfsencodecurdirscandiris_dirr(   OSErrorclose)r%   r   r$   fdr@   argr   entryr   r   r   _iterdir   sN   

rI   c                 C   s>   t t| ||}t|W  d    S 1 sw   Y  d S r)   )
contextlibclosingrI   r	   )r%   r   r$   r   r   r   r   r.      s   $r.   c                 c   sZ    t | ||}|D ]!}t|s*|V  | rt| |n|}t|||D ]}t||V  q!q	d S r)   )r.   r*   r   r9   )r%   r   r$   r2   r,   r   yr   r   r   r9      s   r9   c              	   C   sB   |d u r
t j| S z
t j| |d W dS  ttfy    Y dS w )Nr:   FT)r   r   lexistslstatrD   
ValueError)r
   r   r   r   r   r      s   r   c              	   C   sL   |d u r
t j| S z	t j| |d}W n ttfy   Y dS w t|jS )Nr:   F)r   r   isdirstatrD   rO   S_ISDIRst_mode)r
   r   str   r   r   r      s   r   c                 C   s   | r|s| p|S t j| |S r)   )r   r   r#   )r%   r&   r   r   r   r      s   r   z([*?[])s   ([*?[])c                 C   s.   t | trt| }|d uS t| }|d uS r)   )r>   r?   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 )Ns   **z**)r>   r?   )r1   r   r   r   r      s   
r   c                 C   sB   t j| \}} t| trtd| } ||  S td| } ||  S )z#Escape all special characters.
    s   [\1]z[\1])r   r   
splitdriver>   r?   rU   subrW   )r
   driver   r   r   r      s   
r   O_DIRECTORY)!__doc__rJ   r   rer/   r   rQ   r   __all__r   r   r   r!   r"   r6   r8   r    rI   r.   r9   r   r   r   compilerW   rU   r   r*   r   r   O_RDONLYgetattrr=   r   r   r   r   <module>   s<    ("


