a
    æ´«j6  ã                   @   sP   d dl Z d dlZddlmZ e jee jƒee jƒ  ZG dd„ dƒZ	dd„ Z
dS )é    Né   )Úlegacy_end_markerc                   @   sh   e Zd ZU dZeed< efedœdd„Zdd„ Ze	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J dƒ‚|| _d S )NzInvalid separators)ÚsetÚ_default_sepsr   )Úselfr   © r	   úH/var/www/html/laksyashrimp/venv/lib/python3.9/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   6   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   E   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 |v o|d kV  qdS )z**Nr	   )Ú.0Úsegmentr	   r	   r
   Ú	<genexpr>[   ó    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   P   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_segmentc   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
   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   k   s    	r   )Úosr   Zcompat.py313r   Úsepr/   ÚaltsepÚboolr   r   r   r	   r	   r	   r
   Ú<module>   s
   b