a
    ñ»jñ  ã                   @   sh   d Z ddl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„ 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-present by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Úescape)Úgroupby)Ú
itemgetterz[\[\^\\\-\]]c                 C   sJ   | sdS t | ƒ}t| ƒ}t|ƒD ]$\}}||| kr |d|…   S q |S )zJGiven an iterable of strings, returns the longest common leading substringÚ N)ÚminÚmaxÚ	enumerate)ÚmÚs1Ús2ÚiÚc© r   ú7E:\soccer\ml_env\Lib\site-packages\pygments/regexopt.pyÚcommonprefix   s    r   c                 C   s   dt  dd„ d | ¡¡ d S )Nú[c                 S   s   d|   ¡  S )Nú\)Úgroup)r	   r   r   r   Ú<lambda>"   ó    zmake_charset.<locals>.<lambda>r   ú])Ú	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>J   r   z#regex_opt_inner.<locals>.<listcomp>c                 S   s   g | ]}|d d d… ‘qS )Néÿÿÿÿr   r!   r   r   r   r%   M   r   c                 3   s   | ]}|d ˆ  … V  qd S r    r   r!   )Úslenr   r   Ú	<genexpr>S   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(   X   s   ÿc                    s   | d ˆ d kS )Nr   r   )r#   )Úfirstr   r   r   Y   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| ƒƒ} |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.   Úsetr)   )r/   r4   r6   r   r   r   Ú	regex_opt]   s    r9   )r   r   )Ú__doc__Úrer   Ú	itertoolsr   Úoperatorr   Úcompiler   ÚFIRST_ELEMENTr   r   r)   r9   r   r   r   r   Ú<module>   s   
8