o
    Ñ­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   úN/var/www/html/CropPilot/venv/lib/python3.10/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>"   s    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r|tˆ ƒ | S ˆ s-|t| dd… dƒ d | S t ˆ ƒdkrlg }g }| D ]}t |ƒdkrG| |¡ q9| |¡ q9t |ƒdkrl|rd|t|dƒ d t|ƒ | S |t|ƒ | S t| ƒ}|rŠt |ƒ‰|t|ƒ t‡fd	d
„| D ƒdƒ | S dd
„ | D ƒ}t|ƒ}|r¶t |ƒ‰|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   s    z#regex_opt_inner.<locals>.<listcomp>c                 S   s   g | ]	}|d d d… ‘qS )Néÿÿÿÿr   r    r   r   r   r$   M   s    c                 3   s   � | ]
}|d ˆ  … V  qd S r   r   r    )Úslenr   r   Ú	<genexpr>S   s   € 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   s    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.   r3   r5   r   r   r   Ú	regex_opt]   s   r7   )r   r   )Ú__doc__Úrer   Ú	itertoolsr   Úoperatorr   Úcompiler   ÚFIRST_ELEMENTr   r   r(   r7   r   r   r   r   Ú<module>   s    
8