a
    hbòf   ã                   @   sl   d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ e 	d¡Z
edƒZdd	„ Zd
d„ Zddd„ZdS )a  
    pygments.regexopt
    ~~~~~~~~~~~~~~~~~

    An algorithm that generates optimized regexes for matching long lists of
    literal strings.

    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Úescape)Úcommonprefix)Úgroupby)Ú
itemgetterz[\[\^\\\-\]]c                 C   s   dt  dd„ d | ¡¡ d S )Nú[c                 S   s   d|   ¡  S )Nú\)Úgroup)Úm© r
   úZ/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_vendor/pygments/regexopt.pyÚ<lambda>   ó    zmake_charset.<locals>.<lambda>Ú ú])Ú	CS_ESCAPEÚsubÚjoin)Úlettersr
   r
   r   Úmake_charset   s    r   c           	   	      sš  |rdp
d}| sdS | d ‰ t | ƒdkr8|tˆ ƒ | S ˆ sZ|t| dd… dƒ d | S t ˆ ƒdkrØg }g }| D ]&}t |ƒdkrŽ| |¡ qr| |¡ qrt |ƒdkrØ|rÈ|t|dƒ d t|ƒ | S |t|ƒ | S t| ƒ}|�rt |ƒ‰|t|ƒ t‡fd	d
„| D ƒdƒ | S dd
„ | D ƒ}t|ƒ}|�rpt |ƒ‰|tt‡fdd„| D ƒƒdƒ t|ddd… ƒ | S |d dd„ t| ‡ fdd„ƒD ƒ¡ | S )zEReturn a regex that matches any string in the sorted list of strings.ú)r   r   é   Nz(?:ú?ú|c                    s   g | ]}|ˆ d … ‘qS ©Nr
   ©Ú.0Ús)Úplenr
   r   Ú
<listcomp>?   r   z#regex_opt_inner.<locals>.<listcomp>c                 S   s   g | ]}|d d d… ‘qS )Néÿÿÿÿr
   r   r
   r
   r   r   B   r   c                 3   s   | ]}|d ˆ  … V  qd S r   r
   r   )Úslenr
   r   Ú	<genexpr>H   r   z"regex_opt_inner.<locals>.<genexpr>r   c                 s   s    | ]}t t|d  ƒdƒV  qdS )r   r   N)Úregex_opt_innerÚlist)r   r   r
   r
   r   r!   M   s   ÿc                    s   | d ˆ d kS )Nr   r
   )r   )Úfirstr
   r   r   N   r   z!regex_opt_inner.<locals>.<lambda>)	Úlenr   r"   Úappendr   r   Úsortedr   r   )	ÚstringsÚ
open_parenÚclose_parenÚ	oneletterÚrestr   ÚprefixÚstrings_revÚsuffixr
   )r$   r   r    r   r"      sj    ÿÿÿÿ
ÿþÿþþ
ÿÿýr"   r   c                 C   s   t | ƒ} |t| dƒ | S )zíReturn a compiled regex that matches any string in the given list.

    The strings to match must be literal strings, not regexes.  They will be
    regex-escaped.

    *prefix* and *suffix* are pre- and appended to the final regex.
    ú()r'   r"   )r(   r-   r/   r
   r
   r   Ú	regex_optR   s    r1   )r   r   )Ú__doc__Úrer   Úos.pathr   Ú	itertoolsr   Úoperatorr   Úcompiler   ÚFIRST_ELEMENTr   r"   r1   r
   r
   r
   r   Ú<module>   s   
8