Ë
    gKêj~  ã                   ó¬   — d dl Z d dlZd dlZddlmZ ej
                   eej                  «       eej                  «      z  z   Z	 G d„ d«      Z
d„ Zd„ Zy)é    Né   )Úlegacy_end_markerc                   ól   — e Zd ZU dZeed<   efdefd„Zd„ Ze	d„ «       Z
d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zy)Ú
Translatorzã
    >>> Translator('xyz')
    Traceback (most recent call last):
    ...
    AssertionError: Invalid separators

    >>> Translator('')
    Traceback (most recent call last):
    ...
    AssertionError: Invalid separators
    Úsepsc                 óZ   — |rt        |«      t        t        «      k  sJ d«       ‚|| _        y )NzInvalid separators)ÚsetÚ_default_sepsr   )Úselfr   s     úN/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/zipp/glob.pyÚ__init__zTranslator.__init__   s(   € Ùœ˜D›	¤S¬Ó%7Ò7ÐMÐ9MÓMÐ7Øˆ�	ó    c                 ó`   — | j                  | j                  | j                  |«      «      «      S )zH
        Given a glob pattern, produce a regex that matches it.
        )ÚextendÚ
match_dirsÚtranslate_core©r   Úpatterns     r   Ú	translatezTranslator.translate   s'   € ð �{‰{˜4Ÿ?™?¨4×+>Ñ+>¸wÓ+GÓHÓIÐIr   c                 ó   — 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)\z© r   s     r   r   zTranslator.extend#   s   € ð �w�i˜sÐ#Ð#r   c                 ó   — |› d�S )z„
        Ensure that zipfile.Path directory names are matched.

        zipfile.Path directory names always end in a slash.
        z[/]?r   r   s     r   r   zTranslator.match_dirs/   s   € ð �)˜4Ð Ð r   c           
      óž   — | j                  |«       dj                  t        | j                  t	        | j                  |«      «      «      «      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   s     r   r   zTranslator.translate_core7   s<   € ð 	×Ñ˜GÔ$Ø�w‰w”s˜4Ÿ<™<¬°$×2EÑ2EÀgÓ2NÓ)OÓPÓQÐQr   c                 ó‚   — |j                  d«      r| j                  n| j                  } ||j                  d«      «      S )zM
        Perform the replacements for a match from :func:`separate`.
        r	   r   )ÚgroupÚ_replace_setÚ_replace_plain)r   ÚmatchÚhandlers      r   r   zTranslator.replaceF   s5   € ð (-§{¡{°5Ô'9�$×#Ò#¸t×?RÑ?RˆÙ�u—{‘{ 1“~Ó&Ð&r   c                 óˆ   — t        t        j                  |«      «      }dt        j                  | j
                  «      › d|› �S )aŒ  
        Translate a character set using shell-style semantics.

        Glob character sets treat a leading ``!`` as negation and ``^``
        as a literal (unlike regex), so defer to fnmatch, but guard
        against matching a separator.

        >>> Translator('/')._replace_set('[!a]')
        '(?![/])[^a]'
        >>> Translator('/')._replace_set('[^a]')
        '(?![/])[\\^a]'
        z(?![z]))Ú_strip_fnmatchÚfnmatchr   ÚreÚescaper   )r   Úcharacter_setÚ
translateds      r   r#   zTranslator._replace_setM   s:   € ô $¤G×$5Ñ$5°mÓ$DÓEˆ
Ø”r—y‘y §¡Ó+Ð,¨B¨z¨lÐ;Ð;r   c                 óÎ   — t        j                  |«      j                  dd«      j                  ddt        j                  | j                  «      › d�«      j                  dd«      S )z=
        Escape the text, translating any wildcards.
        z\*\*z.*z\*ú[^z]*z\?z[^/])r*   r+   r   r   )r   Útexts     r   r$   zTranslator._replace_plain]   sS   € ô
 ß‰V�Dóç‰W�X˜uÓ%ß‰W�U˜r¤"§)¡)¨D¯I©IÓ"6Ð!7°rÐ:Ó;ß‰W�U˜GÓ$ð	
r   c                 ó°   — dt        j                  | j                  «      › d�}t        j                  ||«      }t	        d„ |D «       «      rt        d«      ‚y)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              3   ó2   K  — | ]  }d |v xr |d k7  –— Œ y­w)z**Nr   )Ú.0Úsegments     r   ú	<genexpr>z,Translator.restrict_rglob.<locals>.<genexpr>t   s    è ø€ ÒK°wˆt�wˆÒ2 7¨d¡?Ó2ÑKùs   ‚z&** must appear alone in a path segmentN)r*   r+   r   ÚsplitÚanyÚ
ValueError)r   r   Úseps_patternÚsegmentss       r   r   zTranslator.restrict_rglobi   sP   € ð œBŸI™I d§i¡iÓ0Ð1°Ð4ˆÜ—8‘8˜L¨'Ó2ˆÜÑKÀ(ÔKÔKÜÐEÓFÐFð Lr   c                 ó|   — d„ }dt        j                  | j                  «      › d�}t        j                  |||«      S )z@
        Ensure that * will not match an empty segment.
        c                 ó6   — | j                  d«      }|dk(  rdS |S )Nr   Ú*z?*)r"   )r%   r6   s     r   Úhandle_segmentz1Translator.star_not_empty.<locals>.handle_segment|   s    € Ø—k‘k !“nˆGØ" cš>�4Ð6¨wÐ6r   r/   r3   )r*   r+   r   Úsub)r   r   r@   Únot_seps_patterns       r   r    zTranslator.star_not_emptyw   s:   € ò
	7ð !¤§¡¨4¯9©9Ó!5Ð 6°bÐ9ÐÜ�v‰vÐ&¨¸Ó@Ð@r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r
   r   r   r   r   r   r   r   r#   r$   r   r    r   r   r   r   r   
   s]   … ñ
ð ƒIà#0ñ ˜Só òJð ñ	$ó ð	$ò!òRò'ò<ò 

òGó
Ar   r   c                 ó.   — t        j                  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   s    r   r   r   „   s   € ô �;‰;ÐEÀwÓOÐOr   c                 ój   — t        j                  d| t         j                  «      j                  d«      S )zš
    Strip fnmatch's outer group and end marker.

    >>> _strip_fnmatch(r'(?s:[^a])\z')
    '[^a]'
    >>> _strip_fnmatch(r'(?s:[^a])\Z')
    '[^a]'
    z\(\?s:(.*)\)\\[zZ]r   )r*   Ú	fullmatchÚDOTALLr"   )r-   s    r   r(   r(   �   s'   € ô �<‰<Ð-¨z¼2¿9¹9ÓE×KÑKÈAÓNÐNr   )r)   Úosr*   Úcompat.py313r   ÚseprG   ÚaltsepÚboolr
   r   r   r(   r   r   r   ú<module>rS      sO   ðÛ Û 	Û 	å +à—‘™˜RŸY™Y›©$¨r¯y©y«/Ñ9Ñ9€÷wAñ wAòt	Pó	Or   