U
    M»{jó  ã                   @   sD   d dl Z d dlZe jee jƒee jƒ  ZG dd„ dƒZdd„ ZdS )é    Nc                   @   sd   e Zd ZU dZeed< efe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S )Ú
Translatorzã
    >>> Translator('xyz')
    Traceback (most recent call last):
    ...
    AssertionError: Invalid separators

    >>> Translator('')
    Traceback (most recent call last):
    ...
    AssertionError: Invalid separators
    Úseps)r   c                 C   s&   |rt |ƒt tƒkstdƒ‚|| _d S )NzInvalid separators)ÚsetÚ_default_sepsÚAssertionErrorr   )Úselfr   © r   úH/var/www/html/bwave/python/venv/lib/python3.8/site-packages/zipp/glob.pyÚ__init__   s    zTranslator.__init__c                 C   s   |   |  |  |¡¡¡S )zH
        Given a glob pattern, produce a regex that matches it.
        )ÚextendÚ
match_dirsÚtranslate_core©r   Úpatternr   r   r	   Ú	translate   s    zTranslator.translatec                 C   s   d|› d�S )zß
        Extend regex for pattern-wide concerns.

        Apply '(?s:)' to create a non-matching group that
        matches newlines (valid on Unix).

        Append '\Z' to imply fullmatch even when match is used.
        z(?s:z)\Zr   r   r   r   r	   r   !   s    	zTranslator.extendc                 C   s
   |› d�S )z„
        Ensure that zipfile.Path directory names are matched.

        zipfile.Path directory names always end in a slash.
        z[/]?r   r   r   r   r	   r   ,   s    zTranslator.match_dirsc                 C   s&   |   |¡ d t| jt|  |¡ƒƒ¡S )a?  
        Given a glob pattern, produce a regex that matches it.

        >>> t = Translator()
        >>> t.translate_core('*.txt').replace('\\\\', '')
        '[^/]*\\.txt'
        >>> t.translate_core('a?txt')
        'a[^/]txt'
        >>> t.translate_core('**/*').replace('\\\\', '')
        '.*/[^/][^/]*'
        Ú )Úrestrict_rglobÚjoinÚmapÚreplaceÚseparateÚstar_not_emptyr   r   r   r	   r   4   s    
zTranslator.translate_corec                 C   sB   |  d¡p@t |  d¡¡ dd¡ ddt | j¡› d�¡ dd	¡S )
zM
        Perform the replacements for a match from :func:`separate`.
        r   r   z\*\*z.*z\*ú[^z]*z\?z[^/])ÚgroupÚreÚescaper   r   )r   Úmatchr   r   r	   r   C   s    
 ÿ þ ýÿzTranslator.replacec                 C   s>   dt  | j¡› d�}t  ||¡}tdd„ |D ƒƒr:tdƒ‚dS )zô
        Raise ValueError if ** appears in anything but a full path segment.

        >>> Translator().translate('**foo')
        Traceback (most recent call last):
        ...
        ValueError: ** must appear alone in a path segment
        ú[ú]+c                 s   s   | ]}d |ko|d kV  qdS )z**Nr   )Ú.0Úsegmentr   r   r	   Ú	<genexpr>Y   s     z,Translator.restrict_rglob.<locals>.<genexpr>z&** must appear alone in a path segmentN)r   r   r   ÚsplitÚanyÚ
ValueError)r   r   Zseps_patternÚsegmentsr   r   r	   r   N   s    	zTranslator.restrict_rglobc                 C   s*   dd„ }dt  | j¡› d�}t  |||¡S )z@
        Ensure that * will not match an empty segment.
        c                 S   s   |   d¡}|dkrdS |S )Nr   Ú*z?*)r   )r   r    r   r   r	   Úhandle_segmenta   s    
z1Translator.star_not_empty.<locals>.handle_segmentr   r   )r   r   r   Úsub)r   r   r'   Znot_seps_patternr   r   r	   r   \   s    zTranslator.star_not_emptyN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   r
   r   r   r   r   r   r   r   r   r   r   r	   r      s   
r   c                 C   s   t  d| ¡S )zÓ
    Separate out character sets to avoid translating their contents.

    >>> [m.group(0) for m in separate('*.txt')]
    ['*.txt']
    >>> [m.group(0) for m in separate('a[?]txt')]
    ['a', '[?]', 'txt']
    z+([^\[]+)|(?P<set>[\[].*?[\]])|([\[][^\]]*$))r   Úfinditer)r   r   r   r	   r   i   s    	r   )	Úosr   Úsepr-   ÚaltsepÚboolr   r   r   r   r   r   r	   Ú<module>   s   a