
    }c9              	       N   U d Z ddlZddlmZmZmZmZmZmZm	Z	 ddl
mZ dedefdZdee         deeegeee                  f                  fd	Z G d
 d          Z edg          Zi Zeee	f         ed<   dededeee                  fdZdee         dedee         fdZdS )z.Pattern-matching utility functions for Sphinx.    N)CallableDictIterableListMatchOptionalPattern)
canon_pathpatreturnc                    dt          |           }}d}||k     r"| |         }|dz  }|dk    r#||k     r| |         dk    r|dz  }|dz   }n|dz   }n|dk    r|dz   }n|d	k    r|}||k     r| |         d
k    r|dz  }||k     r| |         dk    r|dz  }||k     r#| |         dk    r|dz  }||k     r| |         dk    ||k    r|dz   }nn| ||                             dd          }|dz   }|d         d
k    rd|dd         z   }n|d         dk    rd|z   }|d	|d}n|t          j        |          z  }||k     "|dz   S )zTranslate a shell-style glob pattern to a regular expression.

    Adapted from the fnmatch module, but enhanced so that single stars don't
    match slashes.
    r       *z.*z[^/]*?z[^/][!]z\[\z\\z^/N^$)lenreplacereescape)r   inrescjstuffs          4lib/python3.11/site-packages/sphinx/util/matching.py_translate_patternr#   	   s    c#hhqA
C
a% " F	Q8 	 1u $Q3 $QDj Gm#X 	 ,CC#X 	 A1u Q3 Q1u Q3 Qa% CFcM Q a% CFcM Av 
.EkAaC((v66E8s? ) 59,EE1X_ ) 5LE"%##uuu-29Q<<CE a% " F 9    patternsc                     d | D             S )Nc                 Z    g | ](}t          j        t          |                    j        )S  )r   compiler#   match.0r   s     r"   
<listcomp>z$compile_matchers.<locals>.<listcomp>8   s.    JJJ#BJ)#..//5JJJr$   r(   )r%   s    r"   compile_matchersr.   7   s    JJJJJJr$   c                   N    e Zd ZdZdee         ddfdZdedefdZdedefdZ	dS )	MatcherzA pattern matcher for Multiple shell-style glob patterns.

    Note: this modifies the patterns to work with copy_asset().
          For example, "**/index.rst" matches with "index.rst"
    r%   r   Nc                 L    d |D             }t          ||z             | _        d S )Nc                 L    g | ]!}|                     d           |dd         "S )z**/   N)
startswithr+   s     r"   r-   z$Matcher.__init__.<locals>.<listcomp>C   s1    III3>>%3H3HICGIIIr$   )r.   r%   )selfr%   expandeds      r"   __init__zMatcher.__init__B   s-    IIxIII(H)<==r$   stringc                 ,    |                      |          S N)r*   r5   r8   s     r"   __call__zMatcher.__call__F   s    zz&!!!r$   c                 b    t                    t          fd| j        D                       S )Nc              3   .   K   | ]} |          V  d S r:   r(   )r,   r   r8   s     r"   	<genexpr>z Matcher.match.<locals>.<genexpr>K   s+      88333v;;888888r$   )r
   anyr%   r;   s    `r"   r*   zMatcher.matchI   s5    F##8888$-888888r$   )
__name__
__module____qualname____doc__r   strr7   boolr<   r*   r(   r$   r"   r0   r0   ;   s         >c >t > > > >"s "t " " " "9C 9D 9 9 9 9 9 9r$   r0   z**/.*
_pat_cachenamec                     |t           vr)t          j        t          |                    t           |<   t           |                             |           S )zbReturn if name matches the regular expression (pattern)
    ``pat```. Adapted from fnmatch module.)rG   r   r)   r#   r*   )rH   r   s     r"   patmatchrJ   T   sE     * >*%7%<%<==
3c?  &&&r$   namesc                     |t           vr)t          j        t          |                    t           |<   t           |         j        }t          t          ||                     S )zReturn the subset of the list ``names`` that match
    the regular expression (pattern) ``pat``.

    Adapted from fnmatch module.
    )rG   r   r)   r#   r*   listfilter)rK   r   r*   s      r"   	patfilterrO   \   sQ     * >*%7%<%<==
3sO!Eue$$%%%r$   )rD   r   typingr   r   r   r   r   r   r	   sphinx.util.osutilr
   rE   r#   r.   r0   DOTFILESrG   __annotations__rJ   rO   r(   r$   r"   <module>rT      s   4 4 4 				 K K K K K K K K K K K K K K K K K K ) ) ) ) ) )+C +C + + + +\KtCy KT(C5(5QT:BV;V2W-X K K K K9 9 9 9 9 9 9 9& 7G9 "$
Dg # # #'3 'S 'XeCj%9 ' ' ' '	&Xc] 	& 	&c 	& 	& 	& 	& 	& 	&r$   