o
    	YÝ^L# ã                   @   sÂ
  d dl Z d dlZd dlZd dlmZ d dlmZ g d¢ZG dd„ deƒZ	G dd„ deƒZ
G dd	„ d	eƒZG d
d„ deƒZd ZZd ZZd ZZd ZZd ZZd ZZd ZZd ZZd ZZd ZZ d Z!Z"d Z#Z$d Z%Z&d Z'Z(d Z)Z*d Z+Z,d Z-Z.e(Z/e&e(B Z0eeB e$B Z1e&d e(eiZ2e1e0B eB eB eB eB e B Z3eeB eB e"B e*B e,B Z4e5e j6ƒZ7e5e j8ƒZ9e7e9B Z:e5e j;ƒZ<e5e j=ƒZ>e5dƒe5dgƒB Z?e:e5dƒB Z@e:e5d ƒB ZAd!ZBe C¡ ZDeDd ZEdeE> d ZFeeeeeeeee e"e$e&e(e*e,d"œZGeeB ZHd ZIeeB ZJe$eJB ZKd d ed eeeJeJiZLdddd#œZMd$ZNG d%d&„ d&ƒZOeOƒ ZPeQeN R¡ ƒD ]\ZSZTeUePeTeSƒ �q+�dNd(d)„ZVd*d+„ ZWd,d-„ ZXd.d/„ ZYd0d1„ ZZd2d3„ Z[d4d5„ Z\d6d7„ Z]�dOd9d:„Z^d;d<„ Z_d=d>„ Z`d?d@„ ZadAdB„ ZbdCdD„ ZcdEdF„ ZddGdH„ ZedIdJdKdLœZfdMdN„ ZgdOdP„ ZhdQdR„ ZidSdT„ ZjdUdV„ ZkdWdX„ ZldYdZ„ Zmd[d\„ Znd]d^„ Zod_d`„ Zpdadb„ Zqdcdd„ Zrdedf„ Zsdgdh„ Ztdidj„ Zudkdl„ Zvdmdn„ Zwdodp„ Zxdqdr„ Zydsdt„ Zzdudv„ Z{dwdx„ Z|dydz„ Z}d{d|„ Z~d}d~„ Zdd€„ Z€d�d‚„ Z�dƒd„„ Z‚�dPd…d†„Zƒd‡dˆ„ Z„d‰dŠ„ Z…d‹dŒ„ Z†d�dŽ„ Z‡d�d�„ Zˆd‘d’„ Z‰d“d”„ ZŠd•d–„ Z‹d—d˜„ ZŒd™dš„ Z�d›dœ„ ZŽd�dž„ Z�dŸd „ Z�d¡d¢„ Z‘d£d¤„ Z’d¥d¦„ Z“d§d¨„ Z”d©dª„ Z•d«d¬„ Z–d­d®„ Z—d¯d°„ Z˜d±d²„ Z™d³d´„ Zšdµd¶„ Z›eœd· R¡ ƒZ�eœd¸ R¡ ƒZž�dQd¹dº„ZŸd»d¼„ Z d½d¾„ Z¡d¿dÀ„ Z¢dÁdÂ„ Z£dÃZ¤dZ¥dZ¦dZ§dZ¨dZ©dÄdÅdÆœZªeIdedÇedeJdÈiZ«dÉdÊ„ Z¬G dËdÌ„ dÌƒZ­G dÍdÎ„ dÎe­ƒZ®G dÏdÐ„ dÐe­ƒZ¯G dÑdÒ„ dÒe¯ƒZ°G dÓdÔ„ dÔe¯ƒZ±G dÕdÖ„ dÖe­ƒZ²G d×dØ„ dØe®ƒZ³G dÙdÚ„ dÚe­ƒZ´G dÛdÜ„ dÜe­ƒZµG dÝdÞ„ dÞe­ƒZ¶G dßdà„ dàe­ƒZ·G dádâ„ dâe­ƒZ¸G dãdä„ däe®ƒZ¹G dådæ„ dæe®ƒZºG dçdè„ dèe®ƒZ»G dédê„ dêe®ƒZ¼G dëdì„ dìe¼ƒZ½G dídî„ dîe®ƒZ¾G dïdð„ dðe®ƒZ¿G dñdò„ dòe¿ƒZÀG dódô„ dôe®ƒZÁG dõdö„ döe®ƒZÂG d÷dø„ døe­ƒZÃG dùdú„ dúe­ƒZÄG dûdü„ düƒZÅG dýdþ„ dþe­ƒZÆG dÿ�d „ �d eÆƒZÇG �d�d„ �de­ƒZÈG �d�d„ �de®ƒZÉG �d�d„ �deÆƒZÊG �d�d„ �de­ƒZËG �d	�d
„ �d
e­ƒZÌG �d�d„ �de­ƒZÍG �d�d„ �de­ƒZÎG �d�d„ �de®ƒZÏG �d�d„ �de­ƒZÐG �d�d„ �de­ƒZÑG �d�d„ �de®ƒZÒG �d�d„ �de­ƒZÓG �d�d„ �de­ƒZÔG �d�d„ �deÔƒZÕG �d�d„ �deÔƒZÖG �d�d „ �d eÔƒZ×G �d!�d"„ �d"eÔƒZØG �d#�d$„ �d$e®ƒZÙG �d%�d&„ �d&e®ƒZÚG �d'�d(„ �d(eÚƒZÛG �d)�d*„ �d*e®ƒZÜG �d+�d,„ �d,e®ƒZÝG �d-�d.„ �d.e­ƒZÞG �d/�d0„ �d0eÞƒZßG �d1�d2„ �d2e´ƒZàG �d3�d4„ �d4ƒZáG �d5�d6„ �d6ƒZâ�d7�d8„ Zã�d9�d:„ ZäG �d;�d<„ �d<ƒZåe æ¡ Zçi Zèeç é¡ D ]7\Zê\ZëZìeè íeëdi f¡\ZîZïeðeîeêeñ�d=�Zîeîeïfeèeë< eì é¡ D ]\ZòZóeðeï íeód¡eòeñ�d=�eïeó< �qÙ�q·�d>�d?�d@�dA�dB�dC�dD�dEœZôeŸd�dF�dGƒeŸd�dFd8ƒeŸd�dH�dGƒeŸd�dHd8ƒeŸd�dI�dGƒeŸd�dId8ƒ�dJœZõeÜƒ e³ƒ e³d8ƒeÉƒ eÝƒ eÁƒ e¾ƒ �dKœZöe÷eöƒZøeø ùe¹ƒ e¹d8ƒe»ƒ eºƒ �dLœ¡ eÂƒ eÂƒ eÏƒ eÙƒ �dMœZúdS (R  é    N)Údefaultdict)$ÚAÚASCIIÚBÚ	BESTMATCHÚDÚDEBUGÚEÚENHANCEMATCHÚFÚFULLCASEÚIÚ
IGNORECASEÚLÚLOCALEÚMÚ	MULTILINEÚPÚPOSIXÚRÚREVERSEÚSÚDOTALLÚTÚTEMPLATEÚUÚUNICODEÚV0ÚVERSION0ÚV1ÚVERSION1ÚWÚWORDÚXÚVERBOSEÚerrorÚScannerc                   @   s   e Zd ZdZddd„ZdS )r%   a‰  Exception raised for invalid regular expressions.

    Attributes:

        msg: The unformatted error message
        pattern: The regular expression pattern
        pos: The position in the pattern where compilation failed, or None
        lineno: The line number where compilation failed, unless pos is None
        colno: The column number where compilation failed, unless pos is None
    Nc                 C   s”   t |tƒrdnd}|| _|| _|| _|d urB|d urB| |d|¡d | _|| |d|¡ | _d 	||¡}||v rB|d 	| j| j¡7 }t
 | |¡ d S )NÚ
ó   
r   é   z{} at position {}z (line {}, column {}))Ú
isinstanceÚstrÚmsgÚpatternÚposÚcountÚlinenoÚrfindÚcolnoÚformatÚ	ExceptionÚ__init__)ÚselfÚmessager-   r.   Únewline© r9   úC/var/www/html/env/lib/python3.10/site-packages/regex/_regex_core.pyr5   *   s   
ÿzerror.__init__)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   r9   r9   r9   r:   r%      s    r%   c                   @   ó   e Zd ZdS )Ú_UnscopedFlagSetN©r;   r<   r=   r9   r9   r9   r:   r@   =   ó    r@   c                   @   r?   )Ú
ParseErrorNrA   r9   r9   r9   r:   rC   A   rB   rC   c                   @   r?   )Ú_FirstSetErrorNrA   r9   r9   r9   r:   rD   E   rB   rD   é€   i   i   i €  i @  é   é   é   i   i   é   é    i    é   i   é@   r)   z()|?*+{^$.[\#Ú z -z &_-.)ú||ú~~ú&&ú--)ÚaÚbÚeÚfÚir   ÚmÚpÚrÚsÚur   r   ÚwÚx)r]   r[   r   aæ  
FAILURE
SUCCESS
ANY
ANY_ALL
ANY_ALL_REV
ANY_REV
ANY_U
ANY_U_REV
ATOMIC
BOUNDARY
BRANCH
CALL_REF
CHARACTER
CHARACTER_IGN
CHARACTER_IGN_REV
CHARACTER_REV
CONDITIONAL
DEFAULT_BOUNDARY
DEFAULT_END_OF_WORD
DEFAULT_START_OF_WORD
END
END_OF_LINE
END_OF_LINE_U
END_OF_STRING
END_OF_STRING_LINE
END_OF_STRING_LINE_U
END_OF_WORD
FUZZY
GRAPHEME_BOUNDARY
GREEDY_REPEAT
GROUP
GROUP_CALL
GROUP_EXISTS
KEEP
LAZY_REPEAT
LOOKAROUND
NEXT
PROPERTY
PROPERTY_IGN
PROPERTY_IGN_REV
PROPERTY_REV
PRUNE
RANGE
RANGE_IGN
RANGE_IGN_REV
RANGE_REV
REF_GROUP
REF_GROUP_FLD
REF_GROUP_FLD_REV
REF_GROUP_IGN
REF_GROUP_IGN_REV
REF_GROUP_REV
SEARCH_ANCHOR
SET_DIFF
SET_DIFF_IGN
SET_DIFF_IGN_REV
SET_DIFF_REV
SET_INTER
SET_INTER_IGN
SET_INTER_IGN_REV
SET_INTER_REV
SET_SYM_DIFF
SET_SYM_DIFF_IGN
SET_SYM_DIFF_IGN_REV
SET_SYM_DIFF_REV
SET_UNION
SET_UNION_IGN
SET_UNION_IGN_REV
SET_UNION_REV
SKIP
START_OF_LINE
START_OF_LINE_U
START_OF_STRING
START_OF_WORD
STRING
STRING_FLD
STRING_FLD_REV
STRING_IGN
STRING_IGN_REV
STRING_REV
FUZZY_EXT
c                   @   r?   )Ú	NamespaceNrA   r9   r9   r9   r:   r^   ã   rB   r^   é   c              	   C   sì   t |  ¡ ƒ}t|ƒ| }|dk rdS || | }ddl}t|dƒs#dS | ||¡D ]}	z| |	= W q) ty9   Y q)w | ¡  i }
t | ƒD ]&\}}}}}}|||||||f< z|||f |
||f< W qD tyj   Y qDw | ¡  | |
¡ dS )aC  Make room in the given cache.

    Args:
        cache_dict: The cache dictionary to modify.
        args_dict: The dictionary of named list args used by patterns.
        max_length: Maximum # of entries in cache_dict before it is shrunk.
        divisor: Cache will shrink to max_length - 1/divisor*max_length items.
    r   NÚsample)	ÚtupleÚkeysÚlenÚrandomÚhasattrr`   ÚKeyErrorÚclearÚupdate)Ú
cache_dictÚ	args_dictÚlocale_sensitiveÚ
max_lengthÚdivisorÚ
cache_keysÚoverageÚnumber_to_tossrd   Ú
doomed_keyÚsensitivity_dictr-   Úpattern_typeÚflagsÚargsÚdefault_versionÚlocaler9   r9   r:   Ú_shrink_cacheê   s2   

þÿrx   c                 C   s(   | j }|t@ dkr|| jO }t ||¡S )zFolds the case of a string.r   )rt   Ú_ALL_ENCODINGSÚguess_encodingÚ_regexÚ	fold_case)ÚinfoÚstringrt   r9   r9   r:   Ú
_fold_case  s   
r   c                 C   s   t t | j|¡ƒdkS ©z$Checks whether a character is cased.r)   )rc   r{   Úget_all_casesrt   )r}   Úcharr9   r9   r:   Ú
is_cased_i$  s   rƒ   c                 C   s   t t | |¡ƒdkS r€   )rc   r{   r�   )rt   r‚   r9   r9   r:   Ú
is_cased_f(  ó   r„   c                 C   s,   t | jt@ ƒ}t| ||ƒ}|sg S | |¡S )z&Compiles the firstset for the pattern.)Úboolrt   r   Ú_check_firstsetÚcompile)r}   ÚfsÚreverser9   r9   r:   Ú_compile_firstset,  s
   
r‹   c                 C   s”   |rd|v rdS t ƒ }t}|D ]}t|tƒr|js dS ||jO }| |jtd�¡ q|tt	B kr3dS t
| t|ƒ|t @ dd�}|j| |dd�}|S )z$Checks the firstset for the pattern.N©Ú
case_flagsT©r�   Ú	zerowidth©Úin_set)ÚsetÚNOCASEr*   Ú	CharacterÚpositiver�   ÚaddÚ
with_flagsr   r   ÚSetUnionÚlistÚoptimise)r}   rŠ   r‰   Úmembersr�   rV   r9   r9   r:   r‡   6  s    
ÿr‡   c                 C   s   g }| D ]}|  |¡ q|S )z(Flattens the code from a list of tuples.)Úextend)ÚcodeÚ	flat_codeÚcr9   r9   r:   Ú_flatten_codeU  s   r    c                 C   s"   | j t@ }| j t@ r|t M }|S )zMakes the case flags.)rt   Ú
CASE_FLAGSr   r   )r}   rt   r9   r9   r:   Úmake_case_flags]  s   


r¢   Fc                 C   s   |rt |ƒS t |t| ƒd�S )zMakes a character literal.rŒ   )r”   r¢   )r}   Úvaluer‘   r9   r9   r:   Úmake_characterg  s   r¤   c                 C   s   t | ||t| ƒd�S )zMakes a group reference.rŒ   )ÚRefGroupr¢   )r}   ÚnameÚpositionr9   r9   r:   Úmake_ref_groupo  r…   r¨   c                 C   s   t | |t| ƒd�S )zMakes a string set.rŒ   )Ú	StringSetr¢   )r}   r¦   r9   r9   r:   Úmake_string_sets  ó   rª   c                 C   s   |r|S |j t| ƒd�S )zMakes a property.rŒ   )r—   r¢   )r}   Úpropr‘   r9   r9   r:   Úmake_propertyw  s   r­   c                 C   sL   t | |ƒg}|  d¡r| t | |ƒ¡ |  d¡st|ƒdkr"|d S t|ƒS )zParses a pattern, eg. 'a|b|c'.ú|r)   r   )Úparse_sequenceÚmatchÚappendrc   ÚBranch)Úsourcer}   Úbranchesr9   r9   r:   Ú_parse_pattern~  s   

ÿrµ   c           	      C   sP  dg}t |ƒ}	 | j}|  ¡ }|tv �r|dv r|| _�n |dkr+| t| |dƒ¡ nñ|dkrCt| |ƒ}|du r=t |ƒ}nß| |¡ nÙ|dkrf|jt@ rS| t	ƒ ¡ nÉ|jt
@ r_| tƒ ¡ n½| tƒ ¡ n¶|dkrs| t| |ƒ¡ n©|d	kr–|jt@ r�|jt
@ rˆ| tƒ ¡ n”| tƒ ¡ n�| tƒ ¡ n†|d
krÅ|jt@ r²|jt
@ r«| tƒ ¡ nq| tƒ ¡ nj|jt
@ r¾| tƒ ¡ n^| tƒ ¡ nW|dv �rt| ||ƒ}|rât| ||||||ƒ | d¡ n:t| ||ƒ}|rùt| |||||ƒ | d¡ n#| tt|ƒ|d�¡ n| tt|ƒ|d�¡ n| tt|ƒ|d�¡ qdd„ |D ƒ}t|ƒS )zParses a sequence, eg. 'abc'.NTz)|ú\Fú(Ú.ú[ú^ú$z?*+{rŒ   c                 S   s   g | ]}|d ur|‘qS ©Nr9   )Ú.0Úitemr9   r9   r:   Ú
<listcomp>Ù  ó    z"parse_sequence.<locals>.<listcomp>)r¢   r.   ÚgetÚSPECIAL_CHARSr±   Úparse_escapeÚparse_parenrt   r   ÚAnyAllr"   ÚAnyUÚAnyÚ	parse_setr   ÚStartOfLineUÚStartOfLineÚStartOfStringÚ
EndOfLineUÚ	EndOfLineÚEndOfStringLineUÚEndOfStringLineÚparse_quantifierÚapply_quantifierÚparse_fuzzyÚapply_constraintr”   ÚordÚSequence)	r³   r}   Úsequencer�   Ú	saved_posÚchÚelementÚcountsÚconstraintsr9   r9   r:   r¯   ˆ  sv   










ÿ
ÿ
ÿµMr¯   c                 C   s¼   |  ¡ }|d u r|rtd| j|ƒ‚td| j|ƒ‚t|tttfƒr'td| j|ƒ‚|\}}	| j}|  ¡ }|dkr9t}
n|dkr@t}
n|| _t}
| 	¡ sW|dksQ|	dkrW|
|||	ƒ}| 
|¡ d S )Nzmultiple repeatznothing to repeatú?ú+r)   )Úpopr%   r~   r*   ÚGreedyRepeatÚ
LazyRepeatÚPossessiveRepeatr.   rÁ   Úis_emptyr±   )r³   r}   rÚ   r�   rØ   r×   rÖ   rÙ   Ú	min_countÚ	max_countÚrepeatedr9   r9   r:   rÑ   Ü  s&   rÑ   c                 C   sX   |  ¡ }|d u rtd| j|ƒ‚t|tƒr"t|j|ƒ|_| |¡ d S | t||ƒ¡ d S )Nznothing for fuzzy constraint)rÞ   r%   r~   r*   ÚGroupÚFuzzyÚ
subpatternr±   )r³   r}   rÛ   r�   r×   rÖ   rÙ   r9   r9   r:   rÓ   ü  s   
rÓ   )r   r)   ©r   N©r)   N)rÜ   Ú*rÝ   c                 C   s.   t  |¡}|r	|S |dkrt| ƒ}|r|S dS )zParses a quantifier.Ú{N)Ú_QUANTIFIERSrÁ   Úparse_limited_quantifier)r³   r}   rØ   ÚqrÚ   r9   r9   r:   rÐ     s   
rÐ   c                 C   s   | duo| t kS )z,Checks whether a count is above the maximum.N©Ú	UNLIMITED©r/   r9   r9   r:   Úis_above_limit  s   ró   c                 C   s°   | j }t| ƒ}|  d¡rt| ƒ}t|pdƒ}|rt|ƒnd}n|s&|| _ dS t|ƒ }}|  d¡s6|| _ dS t|ƒs>t|ƒrEtd| j|ƒ‚|durT||krTtd| j|ƒ‚||fS )zParses a limited quantifier.ú,r   NÚ}zrepeat count too bigz"min repeat greater than max repeat)r.   Úparse_countr°   Úintró   r%   r~   )r³   r×   rã   rä   r9   r9   r:   rî     s(   

ÿrî   c                 C   s”   | j }|dkr	dS i }zt| |ƒ |  d¡r t| |ƒ |  d¡sW n ty.   || _ Y dS w |  d¡r;t| |ƒ|d< |  d¡sHtd| j| j ƒ‚|S )z#Parses a fuzzy setting, if present.rì   Nrô   ú:Útestrõ   z
expected })r.   Úparse_fuzzy_itemr°   rC   Úparse_fuzzy_testr%   r~   )r³   r}   rØ   r×   rÛ   r9   r9   r:   rÒ   =  s&   



ÿ€þ

rÒ   c                 C   s<   | j }zt| |ƒ W dS  ty   || _ t| |ƒ Y dS w )zParses a fuzzy setting item.N)r.   Úparse_cost_constraintrC   Úparse_cost_equation)r³   rÛ   r×   r9   r9   r:   rú   U  s   ýrú   c           
      C   s6  | j }|  ¡ }|tv r?t| ||ƒ}t| ƒ}|du rd||< dS | j }t| ƒ}|s,|d8 }|dk r7td| j|ƒ‚d|f||< dS |tv r˜|| _ | j }t| ƒ}t| ƒ}	|	du rXt	ƒ ‚t| ||  ¡ ƒ}t| ƒ}|du rkt	ƒ ‚| j }t| ƒ}|	sx|d7 }|s~|d8 }d|  krˆ|ks�n td| j|ƒ‚||f||< dS t	ƒ ‚)zParses a cost constraint.Nré   r)   r   úbad fuzzy cost limit)
r.   rÁ   ÚALPHAÚparse_constraintÚparse_fuzzy_compareÚparse_cost_limitr%   r~   ÚDIGITSrC   )
r³   rÛ   r×   rØ   Ú
constraintÚmax_incÚcost_posÚmax_costÚmin_costÚmin_incr9   r9   r:   rü   _  sF   rü   c                 C   s:   | j }t| ƒ}zt|ƒW S  ty   Y nw td| j|ƒ‚)zParses a cost limit.rþ   )r.   rö   r÷   Ú
ValueErrorr%   r~   )r³   r  Údigitsr9   r9   r:   r  œ  s   
ÿr  c                 C   s    |dvrt ƒ ‚||v rt ƒ ‚|S )zParses a constraint.Údeis)rC   )r³   rÛ   rØ   r9   r9   r:   r   ¨  s
   r   c                 C   s    |   d¡rdS |   d¡rdS dS )zParses a cost comparator.z<=Tú<FN©r°   ©r³   r9   r9   r:   r  ²  s
   

r  c                 C   sž   d|v rt d| j| jƒ‚i }t| |ƒ |  d¡r"t| |ƒ |  d¡st| ƒ}|du r-tƒ ‚tt| ƒƒ}|s9|d8 }|dk rEt d| j| jƒ‚||d< ||d< dS )	zParses a cost equation.Úcostzmore than one cost equationrÝ   Nr)   r   rþ   Úmax)	r%   r~   r.   Úparse_cost_termr°   r  rC   r÷   rö   )r³   rÛ   r  r  r  r9   r9   r:   rý   »  s"   



ÿrý   c                 C   sJ   t | ƒ}|  ¡ }|dvrtƒ ‚||v rtd| j| jƒ‚t|pdƒ||< dS )zParses a cost equation term.Údiszrepeated fuzzy costr)   N)rö   rÁ   rC   r%   r~   r.   r÷   )r³   r  ÚcoeffrØ   r9   r9   r:   r  Ö  s   r  c                 C   sš   | j }|  ¡ }|tv r<|dkrt| |dƒS |dkr,|jt@ r!tƒ S |jt@ r)tƒ S t	ƒ S |dkr5t
| |ƒS td| j|ƒ‚|rFtt|ƒtd�S td| j|ƒ‚)Nr¶   Fr¸   r¹   zexpected character setrŒ   )r.   rÁ   rÂ   rÃ   rt   r   rÅ   r"   rÆ   rÇ   rÈ   r%   r~   r”   rÔ   r�   )r³   r}   r×   rØ   r9   r9   r:   rû   â  s"   


rû   c                 C   s
   |   t¡S )z0Parses a quantifier's count, which can be empty.)Ú	get_whiler  r  r9   r9   r:   rö   ü  s   
rö   c              	   C   sf  | j }|  ¡ }|dkrÎ| j }|  ¡ }|dkrl| j }|  ¡ }|dv r*t| |d|dkƒS || _ t| ƒ}| |¡}|  d¡ |j}zt| |ƒ}	|  d¡ W ||_t|jt	@ ƒ| _
n||_t|jt	@ ƒ| _
w | ¡  t|||	ƒS |dv ryt| |d|dkƒS |d	kr‚t| |ƒS |d
krŠt| ƒS |dkr“t| |ƒS |dkrœt| |ƒS |dkr¥t| |ƒS |dksµd|  kr³dkr¼n nt| |||ƒS |dkrÆt| ||ƒS || _ t| |ƒS |dkrû| j }| jtdƒdd�}
|
dd…  ¡ rût |
¡}|sôtd| j|ƒ‚|  d¡ |S || _ | ¡ }|j}zt| |ƒ}	|  d¡ W ||_t|jt	@ ƒ| _
n||_t|jt	@ ƒ| _
w | ¡  t|||	ƒS )z[Parses a parenthesised subpattern or a flag. Returns FLAGS if it's an
    inline flag.
    rÜ   r  ©ú=ú!Tr  ú>ú)Fr   ú#r·   r®   r   Ú0Ú9ú&rë   ú)>©ÚincludeNr)   zunknown verb)r.   rÁ   Úparse_lookaroundÚ
parse_nameÚ
open_groupÚexpectrt   rµ   r†   r$   Úignore_spaceÚclose_groupræ   Úparse_extensionÚparse_commentÚparse_conditionalÚparse_atomicÚparse_commonÚparse_call_groupÚparse_call_named_groupÚparse_flags_subpatternr  r’   ÚisalphaÚVERBSr%   r~   )r³   r}   r×   rØ   Úsaved_pos_2Úsaved_pos_3r¦   ÚgroupÚsaved_flagsrè   ÚwordÚverbr9   r9   r:   rÄ      s~   


ÿ



 



ÿrÄ   c              	   C   s  | j }|  ¡ }|dkrJt| ƒ}| |¡}|  d¡ |j}zt| |ƒ}|  d¡ W ||_t|jt@ ƒ| _	n||_t|jt@ ƒ| _	w | 
¡  t|||ƒS |dkrkt| dd�}|  d¡ | |¡retd| j|ƒ‚t|||ƒS |dkss|dkryt| ||ƒS || _ td	| j|ƒ‚)
zParses a Python extension.r  r  r  r  T)Úallow_numericúcannot refer to an open groupr  úunknown extension)r.   rÁ   r#  r$  r%  rt   rµ   r†   r$   r&  r'  ræ   Úis_open_groupr%   r~   r¨   r.  )r³   r}   r×   rØ   r¦   r4  r5  rè   r9   r9   r:   r(  Z  s8   


ÿ

ÿr(  c                 C   sD   	 | j }|  ¡ }|r|dkrn	|dkr|  ¡ }q|| _ |  d¡ dS )zParses a comment.Tr  r¶   N)r.   rÁ   r%  )r³   r×   rŸ   r9   r9   r:   r)  ~  s   ø

r)  c              	   C   sZ   |j }zt| |ƒ}|  d¡ W ||_ t|j t@ ƒ| _n||_ t|j t@ ƒ| _w t|||ƒS )zParses a lookaround.r  )rt   rµ   r%  r†   r$   r&  Ú
LookAround)r³   r}   Úbehindr•   r5  rè   r9   r9   r:   r"  �  s   
ÿr"  c              	   C   s"  |j }| j}|  ¡ }|dkr?|  ¡ }|dv rt| |d|dkƒS |dkr4|  ¡ }|dv r4t| |d|dkƒS || _td| j| jƒ‚|| _z/t| dƒ}|  d¡ t| |ƒ}|  	d	¡r]t| |ƒ}nt
ƒ }|  d¡ W ||_ t|j t@ ƒ| _n||_ t|j t@ ƒ| _w | ¡ r‰| ¡ r‰t
ƒ S t|||||ƒS )
z Parses a conditional subpattern.rÜ   r  Fr  r  Tzexpected lookaround conditionalr  r®   )rt   r.   rÁ   Úparse_lookaround_conditionalr%   r~   r#  r%  r¯   r°   rÕ   r†   r$   r&  râ   ÚConditional)r³   r}   r5  r×   rØ   r4  Ú
yes_branchÚ	no_branchr9   r9   r:   r*  ›  sB   
ÿÿ



ÿr*  c              	   C   sŽ   |j }zt| |ƒ}|  d¡ W ||_ t|j t@ ƒ| _n||_ t|j t@ ƒ| _w t| |ƒ}|  d¡r7t| |ƒ}ntƒ }|  d¡ t	|||||ƒS )Nr  r®   )
rt   rµ   r%  r†   r$   r&  r¯   r°   rÕ   ÚLookAroundConditional)r³   r}   r=  r•   r5  rè   r@  rA  r9   r9   r:   r>  Æ  s    
ÿ



ÿr>  c              	   C   sT   |j }zt| |ƒ}|  d¡ W ||_ t|j t@ ƒ| _t|ƒS ||_ t|j t@ ƒ| _w )zParses an atomic subpattern.r  )rt   rµ   r%  r†   r$   r&  ÚAtomic)r³   r}   r5  rè   r9   r9   r:   r+  Ú  s   
ýr+  c                 C   sz   |j }t| |ƒg}|j }|  d¡r'||_ | t| |ƒ¡ t||j ƒ}|  d¡s||_ |  d¡ t|ƒdkr9|d S t|ƒS )zParses a common groups branch.r®   r  r)   r   )Úgroup_countr¯   r°   r±   r  r%  rc   r²   )r³   r}   Úinitial_group_countr´   Úfinal_group_countr9   r9   r:   r,  æ  s   

ý
r,  c                 C   s2   |dkrd}n||   t¡ }|  d¡ t|||ƒS )zParses a call to a group.r   r  r  )r  r  r%  Ú	CallGroup)r³   r}   rØ   r.   r4  r9   r9   r:   r-  ø  s
   
r-  c                 C   s   t | ƒ}|  d¡ t|||ƒS )zParses a call to a named group.r  )r#  r%  rG  )r³   r}   r.   r4  r9   r9   r:   r.    s   
r.  c                 C   sR   d}z	 | j }|  ¡ }|dkr||  ¡ 7 }|t| O }q ty(   || _ Y |S w )zParses a set of inline flags.r   TÚV)r.   rÁ   ÚREGEX_FLAGSrf   )r³   rt   r×   rØ   r9   r9   r:   Úparse_flag_set
  s   ûýrJ  c                 C   sJ   t | ƒ}|  d¡rt | ƒ}|std| j| jƒ‚nd}|t@ r!d|_||fS )z!Parses flags being turned on/off.ú-z$bad inline flags: no flags after '-'r   T)rJ  r°   r%   r~   r.   r   Úinline_locale)r³   r}   Úflags_onÚ	flags_offr9   r9   r:   Úparse_flags  s   
ÿÿrO  c              	   C   sr   |j }|j |B | @ |_ t|j t@ ƒ| _zt| |ƒ}|  d¡ W ||_ t|j t@ ƒ| _|S ||_ t|j t@ ƒ| _w )z&Parses a subpattern with scoped flags.r  )rt   r†   r$   r&  rµ   r%  )r³   r}   rM  rN  r5  rè   r9   r9   r:   Úparse_subpattern+  s   
ýrP  c                 C   s¸   t | |ƒ\}}|t@ rtd| j| jƒ‚||@ rtd| j| jƒ‚||j @ t@ }|r5| j|O  _t|jƒ‚|t M }|  d¡rFt| |||ƒS |  d¡rTt	| |||ƒ dS td| j| jƒ‚)zÆParses a flags subpattern. It could be inline flags or a subpattern
    possibly with local flags. If it's a subpattern, then that's returned;
    if it's a inline flags, then None is returned.
    z-bad inline flags: cannot turn off global flagz(bad inline flags: flag turned on and offrø   r  Nr:  )
rO  ÚGLOBAL_FLAGSr%   r~   r.   Úglobal_flagsr@   r°   rP  Úparse_positional_flags)r³   r}   rM  rN  Únew_global_flagsr9   r9   r:   r/  9  s(   ÿÿ



r/  c                 C   sz   |j t@ pt}|tkr*|rtd| j| jƒ‚||j @ }|r)| j|O  _t|jƒ‚n	|j |B | @ |_ t	|j t
@ ƒ| _dS )zParses positional flags.z'bad inline flags: cannot turn flags offN)rt   Ú_ALL_VERSIONSÚDEFAULT_VERSIONr   r%   r~   r.   rR  r@   r†   r$   r&  )r³   r}   rM  rN  ÚversionrT  r9   r9   r:   rS  \  s   ÿ
ürS  c                 C   sz   | j tdƒdd�}|std| j| jƒ‚| ¡ r/|rdnd}|r%t|ƒ|k r-td| j| jƒ‚|S | ¡ s;td| j| jƒ‚|S )zParses a name.r  Fr   zmissing group namer   r)   zbad character in group name)r  r’   r%   r~   r.   Úisdigitr÷   Úisidentifier)r³   r8  Úallow_group_0r¦   Ú	min_groupr9   r9   r:   r#  p  s   ÿüÿr#  c                 C   ó   t dd„ | D ƒƒS )z!Checks whether a string is octal.c                 s   ó   � | ]}|t v V  qd S r¼   )Ú
OCT_DIGITS©r½   rØ   r9   r9   r:   Ú	<genexpr>…  ó   € zis_octal.<locals>.<genexpr>©Úall©r~   r9   r9   r:   Úis_octalƒ  r«   re  c                 C   r\  )z#Checks whether a string is decimal.c                 s   r]  r¼   )r  r_  r9   r9   r:   r`  ‰  ra  zis_decimal.<locals>.<genexpr>rb  rd  r9   r9   r:   Ú
is_decimal‡  r«   rf  c                 C   r\  )z'Checks whether a string is hexadecimal.c                 s   r]  r¼   )Ú
HEX_DIGITSr_  r9   r9   r:   r`  �  ra  z!is_hexadecimal.<locals>.<genexpr>rb  rd  r9   r9   r:   Úis_hexadecimal‹  r«   rh  c                 C   s’  | j }d| _ |  ¡ }|| _ |std| j| jƒ‚|tv r&t| ||t| ||ƒS |dkrJ|sJ| j}zt| |ƒW S  tyA   || _Y nw t|t	|ƒ|ƒS |dkrS|sSt
ƒ S |dkr^|s^t| |ƒS |dkrht| ||ƒS |dv rut| ||dk|ƒS |d	kr~|s~tƒ S |tv r¶|s˜|jt@ r�t |¡}nt |¡}|r˜|S t |¡}|r¡|S t |¡}|r®tt	|ƒƒS t|t	|ƒ|ƒS |tv rÁt| |||ƒS t|t	|ƒ|ƒS )
zParses an escape sequence.Fúbad escape (end of pattern)ÚgÚGr   ÚNÚpPrX   r#   )r&  rÁ   r%   r~   r.   ÚHEX_ESCAPESÚparse_hex_escapeÚparse_group_refr¤   rÔ   ÚSearchAnchorÚparse_string_setÚparse_named_charÚparse_propertyÚGraphemerÿ   rt   r"   ÚWORD_POSITION_ESCAPESÚPOSITION_ESCAPESÚCHARSET_ESCAPESÚCHARACTER_ESCAPESr”   r  Úparse_numeric_escape)r³   r}   r‘   Úsaved_ignorerØ   r×   r£   r9   r9   r:   rÃ   �  sV   
þ




rÃ   c           	      C   sÊ   |s|dkrt | ||g|ƒS |}| j}|  ¡ }|tv rN||7 }| j}|  ¡ }t|ƒrN|tv rN|jt@ }|tks;|t	kr>d}nd}t
|| dƒ|@ }t||ƒS || _| |¡r^td| j| jƒ‚t||| jƒS )z!Parses a numeric escape sequence.r  éÿ   éÿ  rH   r9  )Úparse_octal_escaper.   rÁ   r  re  r^  rt   ry   r   r   r÷   r¤   r;  r%   r~   r¨   )	r³   r}   rØ   r‘   r  r×   ÚencodingÚ
octal_maskr£   r9   r9   r:   rz  Ð  s(   


rz  c                 C   sÀ   | j }|  ¡ }t|ƒdk r'|tv r'| |¡ | j }|  ¡ }t|ƒdk r'|tv s|| _ ztd |¡dƒ}t|||ƒW S  ty_   |d tv rSt	dd |¡ | j
| j ƒ‚t	d|d  | j
| j ƒ‚w )z Parses an octal escape sequence.é   rM   rH   r   zincomplete escape \%szbad escape \%s)r.   rÁ   rc   r^  r±   r÷   Újoinr¤   r
  r%   r~   )r³   r}   r  r‘   r×   rØ   r£   r9   r9   r:   r~  ñ  s(   
ýÿÿûr~  c                 C   s¦   | j }g }t|ƒD ]}|  ¡ }	|	tvr!td|d |¡f | j|ƒ‚| |	¡ q	z
td |¡dƒ}
W n	 t	y:   Y nw |
dk rEt
||
|ƒS td|d |¡f | j|ƒ‚)zParses a hex escape sequence.úincomplete escape \%s%srM   rI   i   zbad hex escape \%s%s)r.   ÚrangerÁ   rg  r%   r‚  r~   r±   r÷   r
  r¤   )r³   r}   ÚescÚexpected_lenr‘   Útyper×   r  rV   rØ   r£   r9   r9   r:   ro    s&   ÿÿÿro  c                 C   sJ   |   d¡ | j}t| dƒ}|   d¡ | |¡rtd| j| jƒ‚t|||ƒS )zParses a group reference.r  Tr  r9  )r%  r.   r#  r;  r%   r~   r¨   )r³   r}   r×   r¦   r9   r9   r:   rp    s   



rp  c                 C   sJ   |   d¡ t| dƒ}|   d¡ |du s||jvr td| j| jƒ‚t||ƒS )zParses a string set reference.r  Tr  Nzundefined named list)r%  r#  Úkwargsr%   r~   r.   rª   )r³   r}   r¦   r9   r9   r:   rr  (  s   



rr  c                 C   sv   | j }|  d¡r0|  t¡}|  d¡r0zt |¡}t|t|ƒ|ƒW S  ty/   t	d| j
| j ƒ‚w || _ t|tdƒ|ƒS )zParses a named character.rì   rõ   úundefined character namerl  )r.   r°   r  ÚNAMED_CHAR_PARTÚunicodedataÚlookupr¤   rÔ   rf   r%   r~   )r³   r}   r‘   r×   r¦   r£   r9   r9   r:   rs  2  s   



ÿÿrs  c           
      C   sž   | j }|  ¡ }|dkr+|  d¡}t| ƒ\}}|  d¡r*t||||k| ƒ}	t||	|ƒS n|r>|dv r>td||| ƒ}	t||	|ƒS || _ |rEdnd}t|t|ƒ|ƒS )zParses a Unicode property.rì   rº   rõ   ÚCLMNPSZNrX   r   )r.   rÁ   r°   Úparse_property_nameÚlookup_propertyr­   r¤   rÔ   )
r³   r}   r•   r‘   r×   rØ   ÚnegateÚ	prop_namer¦   r¬   r9   r9   r:   rt  B  s   

ýrt  c                 C   sh   |   t¡}| j}|  ¡ }|r+|dv r+|}|   ttdƒB ¡ ¡ }|r%| j}nd|}}nd}|| _||fS )z/Parses a property name, which may be qualified.z:=z &_-./N)r  ÚPROPERTY_NAME_PARTr.   rÁ   ÚALNUMr’   Ústrip)r³   r¦   r×   rØ   r‘  r9   r9   r:   rŽ  W  s   
rŽ  c                 C   s˜   |j t@ pt}| j}d| _|  d¡}z!|tkrt| |ƒ}nt| |ƒ}|  d¡s/td| j	| j
ƒ‚W || _n|| _w |rB|j|j d�}|jt|ƒd�}|S )zParses a character set.Frº   ú]ú	missing ]©r•   rŒ   )rt   rU  rV  r&  r°   r   Úparse_set_imp_unionÚparse_set_unionr%   r~   r.   r—   r•   r¢   )r³   r}   rW  r{  r�  r¾   r9   r9   r:   rÈ   m  s    


ÿrÈ   c                 C   óN   t | |ƒg}|  d¡r| t | |ƒ¡ |  d¡st|ƒdkr"|d S t||ƒS )zParses a set union ([x||y]).rN   r)   r   )Úparse_set_symm_diffr°   r±   rc   r˜   ©r³   r}   Úitemsr9   r9   r:   r™  ‡  ó   

ÿ
r™  c                 C   rš  )z+Parses a set symmetric difference ([x~~y]).rO   r)   r   )Úparse_set_interr°   r±   rc   Ú
SetSymDiffrœ  r9   r9   r:   r›  ‘  rž  r›  c                 C   rš  )z#Parses a set intersection ([x&&y]).rP   r)   r   )Úparse_set_diffr°   r±   rc   ÚSetInterrœ  r9   r9   r:   rŸ  ›  rž  rŸ  c                 C   rš  )z!Parses a set difference ([x--y]).rQ   r)   r   )r˜  r°   r±   rc   ÚSetDiffrœ  r9   r9   r:   r¡  ¥  rž  r¡  c                    sŠ   |j t@ pt}tˆ |ƒg}	 ˆ j}ˆ  d¡r|ˆ _n|tkr-t‡ fdd„tD ƒƒr-|ˆ _n	| 	tˆ |ƒ¡ qt
|ƒdkr@|d S t||ƒS )z#Parses a set implicit union ([xy]).Tr•  c                 3   s   � | ]}ˆ   |¡V  qd S r¼   r  )r½   Úopr  r9   r:   r`  »  ó   € z&parse_set_imp_union.<locals>.<genexpr>r)   r   )rt   rU  rV  Úparse_set_memberr.   r°   r    ÚanyÚSET_OPSr±   rc   r˜   )r³   r}   rW  r�  r×   r9   r  r:   r˜  ¯  s   
ô
r˜  c                 C   sð   t | |ƒ}| j}t|tƒr|jr|  d¡s|S |jt@ pt}| j}|t	kr/|  d¡r/|| _|S |  d¡rB|| _t
||ttdƒƒgƒS t | |ƒ}t|tƒrO|js[t
||ttdƒƒ|gƒS |j|jkritd| j| jƒ‚|j|jkrq|S t|j|jƒS )z#Parses a member in a character set.rK  r•  zbad character range)Úparse_set_itemr.   r*   r”   r•   r°   rt   rU  rV  r    r˜   rÔ   r£   r%   r~   ÚRange)r³   r}   ÚstartÚ
saved_pos1rW  Ú
saved_pos2Úendr9   r9   r:   r¦  Æ  s,   
ÿ

r¦  c                 C   sÚ   |j t@ pt}|  d¡rt| |dƒS | j}|  d¡r-zt| |ƒW S  ty,   || _Y nw |tkrY|  d¡rY|  d¡}t	| |ƒ}|  d¡sMt
d| j| jƒ‚|rW|j|j d�}|S |  ¡ }|sgt
d	| j| jƒ‚tt|ƒƒS )
z"Parses an item in a character set.r¶   Tz[:r¹   rº   r•  r–  r—  zunterminated character set)rt   rU  rV  r°   rÃ   r.   Úparse_posix_classrC   r    r™  r%   r~   r—   r•   rÁ   r”   rÔ   )r³   r}   rW  r×   r�  r¾   rØ   r9   r9   r:   r©  ï  s,   


þ


r©  c                 C   s:   |   d¡}t| ƒ\}}|   d¡stƒ ‚t||| | dd�S )zParses a POSIX character class.rº   z:]T)Úposix)r°   rŽ  rC   r�  )r³   r}   r�  r‘  r¦   r9   r9   r:   r¯    s
   

r¯  c                 C   sD   t | ƒ}| | }t|ƒdk r|dfS td| ƒ\}}|| | |fS )z$Converts a float to a rational pair.g-Cëâ6?r)   g      ð?)r÷   ÚabsÚfloat_to_rational)ÚfltÚint_partr%   ÚdenÚnumr9   r9   r:   r²    s   r²  c                 C   s´   | dd… dkr| d | dd… }} nd}|   d¡}t|ƒdkr2tt|d ƒt|d ƒ ƒ\}}nt|ƒdkrCtt|d ƒƒ\}}ntƒ ‚d |||¡}| d	¡rX|dd
… S |S )z<Converts a numeric string to a rational string, if possible.Nr)   rK  r   rM   ú/rF   z{}{}/{}z/1éþÿÿÿ)Úsplitrc   r²  Úfloatr
  r3   Úendswith)ÚnumericÚsignÚpartsr¶  rµ  Úresultr9   r9   r:   Únumeric_to_rational)  s   
"
rÀ  c              	   C   s@   zt d | ¡ƒW S  ttfy   d dd„ | D ƒ¡ ¡  Y S w )z&Standardises a property or value name.rM   c                 s   s   � | ]	}|d vr|V  qdS )z_- Nr9   r_  r9   r9   r:   r`  C  ó   € z#standardise_name.<locals>.<genexpr>)rÀ  r‚  r
  ÚZeroDivisionErrorÚupper)r¦   r9   r9   r:   Ústandardise_name>  s
   ÿrÄ  zALNUM DIGIT PUNCT XDIGITzYES Y NO N TRUE T FALSE Fc           
      C   s   | rt | ƒnd} t |ƒ}| |fdkrdd| } }}|r)| s)| ¡ tv r)d| }| rdt | ¡}|s@|s8tdƒ‚td|j|jƒ‚|\}}| |¡}|du r[|sStdƒ‚td|j|jƒ‚t|d> |B |ƒS d	D ]} t | ¡\}}| |¡}|durƒt|d> |B |ƒ  S qft |¡}|r¦|\}}t	|ƒt
kržt|d> d
B |ƒS t|d> | ƒS | d¡rÇt |dd… ¡}|rÇ|\}}d|v rÇt|d> d
B |ƒS dD ](\}	} | |	¡rñt | ¡\}}| |dd… ¡}|durñt|d> |B |ƒ  S qÉ|søtdƒ‚td|j|jƒ‚)zLooks up a property.N)ÚGENERALCATEGORYÚASSIGNEDrÅ  Ú
UNASSIGNEDr   zunknown propertyzunknown property valuerI   )ÚGCÚSCRIPTÚBLOCKr)   ÚISrF   ÚYES))rË  rÉ  )ÚINrÊ  )rÄ  rÃ  Ú_POSIX_CLASSESÚ
PROPERTIESrÁ   r%   r~   r.   ÚPropertyr’   Ú_BINARY_VALUESÚ
startswith)
Úpropertyr£   r•   r³   r°  r¬   Úprop_idÚ
value_dictÚval_idÚprefixr9   r9   r:   r�  I  s^   


ÿ


€r�  c                 C   sÎ  |   ¡ }|tv rTt  |¡}|rdt|ƒgfS |tv r+|dks |r+dt| t| |ƒgfS |dkr7dt| |ƒgfS |dkrJ|rJt| ƒ}|durJd|gfS dtdƒt|ƒgfS t| j	t
ƒr]d}nd	}|d
krŽ|}t|ƒdk r„| j}|   ¡ }|tvrz|| _n
||7 }t|ƒdk skdt|dƒ|@ gfS |tv rÈ|}| j}|   ¡ }|tv r¾||7 }| j}|   ¡ }|r¾t|| ƒr¾dt|| dƒ|@ gfS || _dt|ƒgfS |dkrÓdtdƒgfS |sÝtd| j| jƒ‚dtdƒt|ƒgfS )z0Compiles a replacement template escape sequence.Fr]   rj  Trl  Nr¶   r|  r}  r  r�  rH   ri  )rÁ   rÿ   ry  rÔ   rn  Úparse_repl_hex_escapeÚcompile_repl_groupÚparse_repl_named_charr*   ÚsepÚbytesrc   r.   r^  r÷   r  re  r%   r~   )r³   r-   Ú
is_unicoderØ   r£   r€  r  r×   r9   r9   r:   Ú_compile_replacement�  sZ   

úrÞ  c                 C   sZ   g }t |ƒD ]}|  ¡ }|tvrtd|d |¡f | j| jƒ‚| |¡ qtd |¡dƒS )z5Parses a hex escape sequence in a replacement string.rƒ  rM   rI   )	r„  rÁ   rg  r%   r‚  r~   r.   r±   r÷   )r³   r†  r‡  r  rV   rØ   r9   r9   r:   rØ  ×  s   ÿrØ  c                 C   sj   | j }|  d¡r0|  ttdƒB ¡}|  d¡r0z
t |¡}t|ƒW S  ty/   t	d| j
| j ƒ‚w || _ dS )z1Parses a named character in a replacement string.rì   ú rõ   r‰  N)r.   r°   r  rÿ   r’   r‹  rŒ  rÔ   rf   r%   r~   )r³   r×   r¦   r£   r9   r9   r:   rÚ  ã  s   



ÿÿrÚ  c                 C   s€   |   d¡ t| ddƒ}|   d¡ | ¡ r.t|ƒ}d|  kr#|jks,n td| j| jƒ‚|S z|j| W S  t	y?   t
dƒ‚w )z0Compiles a replacement template group reference.r  Tr  r   úinvalid group referenceúunknown group)r%  r#  rX  r÷   Úgroupsr%   r~   r.   Ú
groupindexrf   Ú
IndexError)r³   r-   r¦   Úindexr9   r9   r:   rÙ  ô  s   

ÿrÙ  z  z	NON-MATCHÚMATCH©FTz SIMPLE_IGNORE_CASEz FULL_IGNORE_CASEc                 C   s   t | ƒdkr
| d S t| ƒS ©Nr)   r   )rc   rÕ   ©r�  r9   r9   r:   Úmake_sequence  s   rê  c                   @   s˜   e Zd Zdd„ Zd%dd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zd&dd„Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ ZdS )'Ú	RegexBasec                 C   s   | j | _d S r¼   )Ú	__class__Ú_key©r6   r9   r9   r:   r5     ó   zRegexBase.__init__Nc                 C   s|   |d u r| j }nt|ƒ}|d u r| j}nt|t@  }|d u r"| j}nt|ƒ}|| j kr7|| jkr7|| jkr7| S |  |||¡S r¼   )r•   r†   r�   ÚCASE_FLAGS_COMBINATIONSr¡   r�   Úrebuild©r6   r•   r�   r�   r9   r9   r:   r—     s   
zRegexBase.with_flagsc                 C   s   d S r¼   r9   ©r6   r-   rŠ   Úfuzzyr9   r9   r:   Ú
fix_groups2  ó   zRegexBase.fix_groupsc                 C   ó   | S r¼   r9   ©r6   r}   rŠ   r9   r9   r:   rš   5  rö  zRegexBase.optimisec                 C   r÷  r¼   r9   ©r6   r}   r9   r9   r:   Úpack_characters8  rö  zRegexBase.pack_charactersc                 C   r÷  r¼   r9   rî  r9   r9   r:   Úremove_captures;  rö  zRegexBase.remove_capturesc                 C   ó   dS ©NTr9   rî  r9   r9   r:   Ú	is_atomic>  rö  zRegexBase.is_atomicc                 C   rü  rý  r9   rî  r9   r9   r:   Úcan_be_affixA  rö  zRegexBase.can_be_affixc                 C   rü  ©NFr9   rî  r9   r9   r:   Úcontains_groupD  rö  zRegexBase.contains_groupc                 C   s   t ƒ ‚r¼   )rD   ©r6   rŠ   r9   r9   r:   Úget_firstsetG  s   zRegexBase.get_firstsetc                 C   rü  r   r9   rî  r9   r9   r:   Úhas_simple_startJ  rö  zRegexBase.has_simple_startFc                 C   s   |   ||¡S r¼   )Ú_compile©r6   rŠ   rô  r9   r9   r:   rˆ   M  rï  zRegexBase.compilec                 C   rü  r   r9   rî  r9   r9   r:   râ   P  rö  zRegexBase.is_emptyc                 C   ó
   t | jƒS r¼   )Úhashrí  rî  r9   r9   r:   Ú__hash__S  ó   
zRegexBase.__hash__c                 C   ó   t | ƒt |ƒu o| j|jkS r¼   )r‡  rí  ©r6   Úotherr9   r9   r:   Ú__eq__V  ó   zRegexBase.__eq__c                 C   s   |   |¡ S r¼   )r  r  r9   r9   r:   Ú__ne__Y  rï  zRegexBase.__ne__c                 C   ó   |   ¡ d fS r¼   ©Ú	max_widthr  r9   r9   r:   Úget_required_string\  rï  zRegexBase.get_required_string)NNN©FF)r;   r<   r=   r5   r—   rõ  rš   rú  rû  rþ  rÿ  r  r  r  rˆ   râ   r	  r  r  r  r9   r9   r9   r:   rë    s$    

rë  c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚZeroWidthBaseTc                 C   s&   t  | ¡ t|ƒ| _| j| jf| _d S r¼   )rë  r5   r†   r•   rì  rí  )r6   r•   r9   r9   r:   r5   a  s   

zZeroWidthBase.__init__c                 C   s
   t d gƒS r¼   ©r’   r  r9   r9   r:   r  g  r
  zZeroWidthBase.get_firstsetc                 C   s6   d}| j r	|tO }|r|tO }|r|tO }| j|fgS ©Nr   )r•   ÚPOSITIVE_OPÚFUZZY_OPÚ
REVERSE_OPÚ_opcode©r6   rŠ   rô  rt   r9   r9   r:   r  j  s   zZeroWidthBase._compilec                 C   ó"   t d t| | jt| j ¡ƒ d S )Nz{}{} {})Úprintr3   ÚINDENTÚ_op_nameÚPOS_TEXTr•   ©r6   ÚindentrŠ   r9   r9   r:   Údumpt  ó   
ÿzZeroWidthBase.dumpc                 C   rü  r  r9   rî  r9   r9   r:   r  x  rö  zZeroWidthBase.max_widthN©T)r;   r<   r=   r5   r  r  r%  r  r9   r9   r9   r:   r  `  s    

r  c                   @   s>   e Zd ZejejdœZdZdd„ Zdd„ Z	dd„ Z
d	d
„ ZdS )rÇ   rç  ÚANYc                 C   rü  rý  r9   rî  r9   r9   r:   r    rö  zAny.has_simple_startc                 C   s    d}|r|t O }| j| |fgS r  )r  r  r  r9   r9   r:   r  ‚  s   zAny._compilec                 C   ó   t d t| | j¡ƒ d S )Nú{}{})r  r3   r   r!  r#  r9   r9   r:   r%  ˆ  ó   zAny.dumpc                 C   rü  ©Nr)   r9   rî  r9   r9   r:   r  ‹  rö  zAny.max_widthN)r;   r<   r=   ÚOPr(  ÚANY_REVr  r!  r  r  r%  r  r9   r9   r9   r:   rÇ   {  s    rÇ   c                   @   ó   e Zd ZejejdœZdZdS )rÅ   rç  ÚANY_ALLN)r;   r<   r=   r-  r0  ÚANY_ALL_REVr  r!  r9   r9   r9   r:   rÅ   Ž  ó    rÅ   c                   @   r/  )rÆ   rç  ÚANY_UN)r;   r<   r=   r-  r3  Ú	ANY_U_REVr  r!  r9   r9   r9   r:   rÆ   ’  r2  rÆ   c                   @   ó„   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) rC  c                 C   ó   t  | ¡ || _d S r¼   )rë  r5   rè   )r6   rè   r9   r9   r:   r5   —  ó   

zAtomic.__init__c                 C   ó   | j  |||¡ d S r¼   ©rè   rõ  ró  r9   r9   r:   rõ  ›  ó   zAtomic.fix_groupsc                 C   s$   | j  ||¡| _ | j  ¡ r| j S | S r¼   )rè   rš   râ   rø  r9   r9   r:   rš   ž  s   
zAtomic.optimisec                 C   ó   | j  |¡| _ | S r¼   ©rè   rú  rù  r9   r9   r:   rú  ¥  ó   zAtomic.pack_charactersc                 C   ó   | j  ¡ | _ | S r¼   ©rè   rû  rî  r9   r9   r:   rû  ©  ó   zAtomic.remove_capturesc                 C   ó
   | j  ¡ S r¼   ©rè   rÿ  rî  r9   r9   r:   rÿ  ­  r
  zAtomic.can_be_affixc                 C   rA  r¼   ©rè   r  rî  r9   r9   r:   r  °  r
  zAtomic.contains_groupc                 C   ó   | j  |¡S r¼   ©rè   r  r  r9   r9   r:   r  ³  rï  zAtomic.get_firstsetc                 C   rA  r¼   ©rè   r  rî  r9   r9   r:   r  ¶  r
  zAtomic.has_simple_startc                 C   s"   t jfg| j ||¡ t jfg S r¼   )r-  ÚATOMICrè   rˆ   ÚENDr  r9   r9   r:   r  ¹  s   ÿzAtomic._compilec                 C   s(   t d t| ¡ƒ | j |d |¡ d S )Nú{}ATOMICr)   )r  r3   r   rè   r%  r#  r9   r9   r:   r%  ½  s   zAtomic.dumpc                 C   rA  r¼   ©rè   râ   rî  r9   r9   r:   râ   Á  r
  zAtomic.is_emptyc                 C   r  r¼   )r‡  rè   r  r9   r9   r:   r  Ä  s   ÿzAtomic.__eq__c                 C   rA  r¼   ©rè   r  rî  r9   r9   r:   r  È  r
  zAtomic.max_widthc                 C   rD  r¼   ©rè   r  r  r9   r9   r:   r  Ë  rï  zAtomic.get_required_stringN)r;   r<   r=   r5   rõ  rš   rú  rû  rÿ  r  r  r  r  r%  râ   r  r  r  r9   r9   r9   r:   rC  –  s     rC  c                   @   ó   e Zd ZejZdZdS )ÚBoundaryÚBOUNDARYN)r;   r<   r=   r-  rO  r  r!  r9   r9   r9   r:   rN  Î  ó    rN  c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZed#d$„ ƒZed%d&„ ƒZed'd(„ ƒZed)d*„ ƒZed+d,„ ƒZed-d.„ ƒZed/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Zd7S )8r²   c                 C   r6  r¼   )rë  r5   r´   )r6   r´   r9   r9   r:   r5   Ó  r7  zBranch.__init__c                 C   ó   | j D ]	}| |||¡ qd S r¼   )r´   rõ  )r6   r-   rŠ   rô  rS   r9   r9   r:   rõ  ×  ó   
ÿzBranch.fix_groupsc                 C   s¼   | j stg ƒS t ||| j ¡}|rt ||¡\}}g }n
t ||¡\}}g }t |||¡}t|ƒdkrTt|ƒg}|r<|sS|  |||¡}|rS|rM| 	|¡ n	| 
d|¡ n|}t|| | ƒS rè  )r´   rÕ   r²   Ú_flatten_branchesÚ_split_common_suffixÚ_split_common_prefixÚ_reduce_to_setrc   Ú_add_precheckr±   Úinsertrê  )r6   r}   rŠ   r´   Úsuffixr×  rÖ   Úfirstsetr9   r9   r:   rš   Û  s(   
€zBranch.optimisec                 C   sf   t ƒ }|rdnd}|D ]}t|ƒtu r!|jtkr!| |j| ¡ q d S |s(d S t||dd„ |D ƒƒS )Néÿÿÿÿr   c                 S   ó   g | ]}t |ƒ‘qS r9   ©r”   ©r½   rŸ   r9   r9   r:   r¿     ó    z(Branch._add_precheck.<locals>.<listcomp>)r’   r‡  ÚLiteralr�   r“   r–   Ú
charactersr‡   )r6   r}   rŠ   r´   Úcharsetr.   Úbranchr9   r9   r:   rW  þ  s   zBranch._add_precheckc                    s   ‡ fdd„| j D ƒ| _ | S )Nc                    s   g | ]}|  ˆ ¡‘qS r9   )rú  ©r½   rS   ©r}   r9   r:   r¿     s    z*Branch.pack_characters.<locals>.<listcomp>©r´   rù  r9   re  r:   rú    s   zBranch.pack_charactersc                 C   ó   dd„ | j D ƒ| _ | S )Nc                 S   ó   g | ]}|  ¡ ‘qS r9   ©rû  rd  r9   r9   r:   r¿     r_  z*Branch.remove_captures.<locals>.<listcomp>rf  rî  r9   r9   r:   rû    ó   zBranch.remove_capturesc                 C   ó   t dd„ | jD ƒƒS )Nc                 s   ó   � | ]}|  ¡ V  qd S r¼   ©rþ  rd  r9   r9   r:   r`    ra  z#Branch.is_atomic.<locals>.<genexpr>©rc  r´   rî  r9   r9   r:   rþ    r:  zBranch.is_atomicc                 C   rk  )Nc                 s   rl  r¼   )rÿ  rd  r9   r9   r:   r`    ra  z&Branch.can_be_affix.<locals>.<genexpr>rn  rî  r9   r9   r:   rÿ    r:  zBranch.can_be_affixc                 C   rk  )Nc                 s   rl  r¼   ©r  rd  r9   r9   r:   r`    ra  z(Branch.contains_group.<locals>.<genexpr>)r§  r´   rî  r9   r9   r:   r    r:  zBranch.contains_groupc                 C   s.   t ƒ }| jD ]	}|| |¡O }q|pt d gƒS r¼   )r’   r´   r  )r6   rŠ   r‰   rS   r9   r9   r:   r    s   
zBranch.get_firstsetc                 C   sF   t jfg}| jD ]}| | ||¡¡ | t jf¡ qt jf|d< |S ©Nr[  )r-  ÚBRANCHr´   rœ   rˆ   r±   ÚNEXTrH  )r6   rŠ   rô  r�   rS   r9   r9   r:   r  %  s   

zBranch._compilec                 C   sb   t d t| ¡ƒ | jd  |d |¡ | jdd … D ]}t d t| ¡ƒ | |d |¡ qd S )Nz{}BRANCHr   r)   ú{}OR)r  r3   r   r´   r%  )r6   r$  rŠ   rS   r9   r9   r:   r%  /  s   þzBranch.dumpc                 C   s@   g }|D ]}|  | |¡}t|tƒr| |j¡ q| |¡ q|S r¼   )rš   r*   r²   rœ   r´   r±   )r}   rŠ   r´   Únew_branchesrS   r9   r9   r:   rS  6  s   
zBranch._flatten_branchesc                    sN  g }|D ]}t |tƒr| |j¡ q| |g¡ qtdd„ |D ƒƒ}|d ‰d‰|}ˆ|k rZˆˆ  ¡ rZt‡‡fdd„|D ƒƒrZˆd7 ‰ˆ|k rZˆˆ  ¡ rZt‡‡fdd„|D ƒƒs@ˆ‰ | jt@ r…ˆ‰ ˆ dkr…t‡ fdd„|D ƒƒs…ˆ d8 ‰ ˆ dkr…t‡ fdd„|D ƒƒrrˆ dkr�g |fS g }|D ]}| t	|ˆ d … ƒ¡ q‘ˆd ˆ … |fS )Nc                 s   ó   � | ]}t |ƒV  qd S r¼   ©rc   ©r½   rR   r9   r9   r:   r`  O  ra  z.Branch._split_common_prefix.<locals>.<genexpr>r   c                 3   ó    � | ]}|ˆ  ˆˆ  kV  qd S r¼   r9   rw  )r.   r×  r9   r:   r`  U  ó   € ÿÿr)   c                 3   ó   � | ]	}t  |ˆ ¡V  qd S r¼   )r²   Ú
_can_splitrw  rò   r9   r:   r`  ^  rÁ  ©
r*   rÕ   r±   r�  Úminrÿ  rc  rt   r   rê  ©r}   r´   ÚalternativesrS   rä   Úend_posrt  rR   r9   )r/   r.   r×  r:   rU  C  s@   
"ÿ"þÿ
ÿþÿzBranch._split_common_prefixc                    sV  g }|D ]}t |tƒr| |j¡ q| |g¡ qtdd„ |D ƒƒ}|d ‰d‰d| }ˆ|kr\ˆˆ  ¡ r\t‡‡fdd„|D ƒƒr\ˆd8 ‰ˆ|kr\ˆˆ  ¡ r\t‡‡fdd„|D ƒƒsBdˆ ‰ | jt@ r‡ˆ dkr‡t‡ fdd„|D ƒƒs‡ˆ d8 ‰ ˆ dkr‡t‡ fdd„|D ƒƒrtˆ dkr�g |fS g }|D ]}| t	|d ˆ  … ƒ¡ q“ˆˆ  d … |fS )Nc                 s   ru  r¼   rv  rw  r9   r9   r:   r`  y  ra  z.Branch._split_common_suffix.<locals>.<genexpr>r   r[  c                 3   rx  r¼   r9   rw  )r.   rY  r9   r:   r`    ry  r)   c                 3   rz  r¼   )r²   Ú_can_split_revrw  rò   r9   r:   r`  ‡  rÁ  r|  r~  r9   )r/   r.   rY  r:   rT  m  s>   
"ÿ"þÿ
ÿþÿzBranch._split_common_suffixc                 C   s¢   t  | |d ¡s
dS t  | |¡sdS t  | |d |d … ¡r!dS t  | |d ¡r8t  | |d |d … ¡r8dS t  | |d ¡rOt  | |d |d … ¡rOdS dS )Nr)   TFrF   )r²   Ú_is_full_caseÚ
_is_folded)r�  r/   r9   r9   r:   r{  –  s   ÿÿzBranch._can_splitc                 C   sÒ   t | ƒ}t | || ¡sdS t | || d ¡sdS t | || d || d … ¡r-dS t | || d ¡rJt | || d || d … ¡rJdS t | || d ¡rgt | || d || d … ¡rgdS dS )NTr)   FrF   )rc   r²   r‚  rƒ  )r�  r/   r®  r9   r9   r:   r�  ¯  s    " ÿ ÿzBranch._can_split_revc                 C   sÌ   t tƒ}i }g }|D ]Q}t |¡r$||j  |g¡ | |jt|ƒ¡ q
t|t	ƒrM|j
rMt |j
d ¡rM||j
d j  |j
¡ | |j
d jt|ƒ¡ q
t | ||||¡ | |¡ q
t | |||¡ |S r  )r   r™   r²   Ú_is_simple_characterr£   r±   Ú
setdefaultrc   r*   rÕ   r�  Ú_flush_char_prefix)r}   rŠ   r´   ÚprefixedÚorderrt  rS   r9   r9   r:   Ú_merge_common_prefixesÊ  s$   
ÿÿzBranch._merge_common_prefixesc                 C   s   t | tƒo| jo| j S r¼   )r*   r”   r•   r�   ©rŸ   r9   r9   r:   r„  æ  s   zBranch._is_simple_characterc                 C   s�   g }t ƒ }t}|D ]3}t|tttfƒr.|j|kr$t | ||||¡ |j}| 	|j
td�¡ q	t | ||||¡ | |¡ q	t | ||||¡ |S )NrŒ   )r’   r“   r*   r”   rÐ  ÚSetBaser�   r²   Ú_flush_set_membersr–   r—   r±   )r}   rŠ   r´   rt  r�  r�   rS   r9   r9   r:   rV  ê  s&   
ÿÿÿzBranch._reduce_to_setc                    sÎ   |sd S t | ¡ ‡ fdd„d�D ]L\}}t|ƒdkr$| t|d ƒ¡ qg }d}|D ]}	t|	ƒdkr>| t|	dd … ƒ¡ q*|sH| tƒ ¡ d}q*tt|ƒt|ƒgƒ}
| |
 | |¡¡ q| 	¡  ˆ  	¡  d S )Nc                    s   ˆ | d  S r  r9   )Úpair©rˆ  r9   r:   Ú<lambda>	  rï  z+Branch._flush_char_prefix.<locals>.<lambda>©Úkeyr)   r   FT)
Úsortedr�  rc   r±   rê  rÕ   r”   r²   rš   rg   )r}   rŠ   r‡  rˆ  rt  r£   r´   ÚsubbranchesÚoptionalrS   rÖ   r9   rŽ  r:   r†  	  s$    €zBranch._flush_char_prefixc                 C   sV   |sd S t |ƒdkrt|ƒd }nt| t|ƒƒ | |¡}| |j|d�¡ | ¡  d S )Nr)   r   rŒ   )rc   r™   r˜   rš   r±   r—   rg   )r}   rŠ   r�  r�   rt  r¾   r9   r9   r:   rŒ   	  s   zBranch._flush_set_membersc                 C   sF   d|  krt | ƒk sdS  dS | | }t|tƒo"|jo"|jt@ tkS )Nr   F)rc   r*   r”   r•   r�   ÚFULLIGNORECASE)r�  rV   r¾   r9   r9   r:   r‚  /	  s   ÿÿzBranch._is_full_casec                 C   s‚   t | ƒdk rdS | D ]}t|tƒr|jr|js dS q
d dd„ | D ƒ¡}t t|¡}t 	¡ }|D ]}|t t|¡kr> dS q1dS )NrF   FrM   c                 s   s   � | ]}t |jƒV  qd S r¼   )Úchrr£   ©r½   rV   r9   r9   r:   r`  B	  r¥  z$Branch._is_folded.<locals>.<genexpr>T)
rc   r*   r”   r•   r�   r‚  r{   r|   ÚFULL_CASE_FOLDINGÚget_expand_on_folding)r�  rV   ÚfoldedÚexpanding_charsrŸ   r9   r9   r:   rƒ  8	  s    ÿþÿzBranch._is_foldedc                 C   rk  )Nc                 s   rl  r¼   ©râ   rd  r9   r9   r:   r`  O	  ra  z"Branch.is_empty.<locals>.<genexpr>rn  rî  r9   r9   r:   râ   N	  r:  zBranch.is_emptyc                 C   r  r¼   )r‡  r´   r  r9   r9   r:   r  Q	  r  zBranch.__eq__c                 C   rk  )Nc                 s   rl  r¼   r  rd  r9   r9   r:   r`  U	  ra  z#Branch.max_width.<locals>.<genexpr>)r  r´   rî  r9   r9   r:   r  T	  r:  zBranch.max_widthN)r;   r<   r=   r5   rõ  rš   rW  rú  rû  rþ  rÿ  r  r  r  r%  ÚstaticmethodrS  rU  rT  r{  r�  r‰  r„  rV  r†  rŒ  r‚  rƒ  râ   r  r  r9   r9   r9   r:   r²   Ò  sP    #


)
(








r²   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )rG  c                 C   s.   t  | ¡ || _|| _|| _| j| jf| _d S r¼   )rë  r5   r}   r4  r§   rì  rí  )r6   r}   r4  r§   r9   r9   r:   r5   X	  s
   
zCallGroup.__init__c                 C   sÐ   zt | jƒ| _W n" ty*   z
| jj| j | _W n ty'   td|| jƒ‚w Y nw d| j  kr8| jjks@n td|| jƒ‚| jdkrU| jj	| j dkrUtd|| jƒ‚| jj
 | ||f¡ | j| jf| _d S )Nrà  r   rá  r)   zambiguous group reference)r÷   r4  r
  r}   Úgroup_indexrf   r%   r§   rD  Úopen_group_countÚgroup_callsr±   rì  rí  ró  r9   r9   r:   rõ  `	  s    ÿÿþzCallGroup.fix_groupsc                 C   ó   t dt| jƒ‚©Nzgroup reference not allowed©r%   r-   r§   rî  r9   r9   r:   rû  s	  ó   zCallGroup.remove_capturesc                 C   s   t j| jfgS r¼   )r-  Ú
GROUP_CALLÚcall_refr  r9   r9   r:   r  v	  r¤  zCallGroup._compilec                 C   r)  )Nz{}GROUP_CALL {})r  r3   r   r4  r#  r9   r9   r:   r%  y	  r+  zCallGroup.dumpc                 C   r  r¼   )r‡  r4  r  r9   r9   r:   r  |	  r  zCallGroup.__eq__c                 C   ó   t S r¼   rð   rî  r9   r9   r:   r  	  rö  zCallGroup.max_widthc                 C   ó
   d | _ d S r¼   re  rî  r9   r9   r:   Ú__del__‚	  r
  zCallGroup.__del__N)r;   r<   r=   r5   rõ  rû  r  r%  r  r  r©  r9   r9   r9   r:   rG  W	  s    rG  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚCallRefc                 C   s   || _ || _d S r¼   )ÚrefÚparsed)r6   r¬  r­  r9   r9   r:   r5   †	  s   
zCallRef.__init__c                 C   s&   t j| jfg| j ||¡ t jfg S r¼   )r-  ÚCALL_REFr¬  r­  r  rH  r  r9   r9   r:   r  Š	  s
   ÿÿzCallRef._compileN©r;   r<   r=   r5   r  r9   r9   r9   r:   r«  …	  s    r«  c                   @   sº   e Zd Zedfejedfejedfeje	dfejedfej
edfejedfej
e	dfejiZdedfdd„Zdd„ Zddd„Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )r”   FTc                 C   s‚   t  | ¡ || _t|ƒ| _t| | _t|ƒ| _| jr,| jt@ tkr,t	 
tt| jƒ¡| _nt| jƒ| _| j| j| j| j| jf| _d S r¼   )rë  r5   r£   r†   r•   rð  r�   r�   r•  r{   r|   r˜  r–  rš  rì  rí  ©r6   r£   r•   r�   r�   r9   r9   r:   r5   •	  s   



ÿ
ÿzCharacter.__init__c                 C   ó   t | j|||ƒS r¼   )r”   r£   rò  r9   r9   r:   rñ  ¦	  ó   zCharacter.rebuildc                 C   r÷  r¼   r9   ©r6   r}   rŠ   r‘   r9   r9   r:   rš   ©	  rö  zCharacter.optimisec                 C   ó
   t | gƒS r¼   r  r  r9   r9   r:   r  ¬	  r
  zCharacter.get_firstsetc                 C   rü  rý  r9   rî  r9   r9   r:   r  ¯	  rö  zCharacter.has_simple_startc                 C   s„   d}| j r	|tO }| jr|tO }|r|tO }t| j| j|f || jgƒ}t	| j
ƒdkr<t|tdd„ | j
D ƒ| jd�gƒ}| ||¡S )Nr   r)   c                 S   r\  r9   ©rÔ   r^  r9   r9   r:   r¿   À	  r_  z&Character._compile.<locals>.<listcomp>rŒ   )r•   r  r�   ÚZEROWIDTH_OPr  ÚPrecompiledCoder  r�   r£   rc   rš  r²   ÚStringrˆ   )r6   rŠ   rô  rt   r�   r9   r9   r:   r  ²	  s   ÿ
ÿzCharacter._compilec                 C   s<   t t| jƒƒ d¡}td t| t| j |t	| j
 ¡ƒ d S )NÚbuz{}CHARACTER {} {}{})Úasciir–  r£   Úlstripr  r3   r   r"  r•   Ú	CASE_TEXTr�   ©r6   r$  rŠ   Údisplayr9   r9   r:   r%  Å	  s   
ÿzCharacter.dumpc                 C   s   || j k| jkS r¼   )r£   r•   ©r6   rØ   r9   r9   r:   ÚmatchesÊ	  r²  zCharacter.matchesc                 C   r  r¼   )rc   rš  rî  r9   r9   r:   r  Í	  r
  zCharacter.max_widthc                 C   s(   | j sdS tdd„ | jD ƒƒ| _d| fS )Nrê   c                 s   ru  r¼   rµ  r^  r9   r9   r:   r`  Ô	  ra  z0Character.get_required_string.<locals>.<genexpr>r   )r•   ra   rš  Úfolded_charactersr  r9   r9   r:   r  Ð	  s   zCharacter.get_required_stringN©F)r;   r<   r=   r“   r-  Ú	CHARACTERr   ÚCHARACTER_IGNr   r•  ÚCHARACTER_REVÚCHARACTER_IGN_REVr  r5   rñ  rš   r  r  r  r%  rÀ  r  r  r9   r9   r9   r:   r”   Ž	  s.    ÿÿ
ü
ÿ
r”   c                   @   r5  ) r?  c                 C   s,   t  | ¡ || _|| _|| _|| _|| _d S r¼   )rë  r5   r}   r4  Úyes_itemÚno_itemr§   )r6   r}   r4  rÇ  rÈ  r§   r9   r9   r:   r5   Ù	  s   

zConditional.__init__c                 C   sº   zt | jƒ| _W n- ty5   z
| jj| j | _W n ty2   | jdkr)d| _ntd|| jƒ‚Y nw Y nw d| j  krC| jjksKn td|| jƒ‚| j	 
|||¡ | j 
|||¡ d S )NÚDEFINEr   rá  rà  )r÷   r4  r
  r}   rž  rf   r%   r§   rD  rÇ  rõ  rÈ  ró  r9   r9   r:   rõ  á	  s"   
þü€ýzConditional.fix_groupsc                 C   s0   | j  ||¡}| j ||¡}t|| j||| jƒS r¼   )rÇ  rš   rÈ  r?  r4  r§   )r6   r}   rŠ   rÇ  rÈ  r9   r9   r:   rš   õ	  s   zConditional.optimisec                 C   s    | j  |¡| _ | j |¡| _| S r¼   )rÇ  rú  rÈ  rù  r9   r9   r:   rú  û	  s   zConditional.pack_charactersc                 C   s   | j  ¡ | _ | j ¡ | _d S r¼   )rÇ  rû  rÈ  rî  r9   r9   r:   rû   
  s   zConditional.remove_capturesc                 C   ó   | j  ¡ o	| j ¡ S r¼   )rÇ  rþ  rÈ  rî  r9   r9   r:   rþ  
  r:  zConditional.is_atomicc                 C   rÊ  r¼   )rÇ  rÿ  rÈ  rî  r9   r9   r:   rÿ  
  r:  zConditional.can_be_affixc                 C   s   | j  ¡ p	| j ¡ S r¼   )rÇ  r  rÈ  rî  r9   r9   r:   r  

  r:  zConditional.contains_groupc                 C   s   | j  |¡| j |¡B S r¼   )rÇ  r  rÈ  r  r9   r9   r:   r  
  s   

ÿzConditional.get_firstsetc                 C   s^   t j| jfg}| | j ||¡¡ | j ||¡}|r&| t jf¡ | |¡ | t j	f¡ |S r¼   )
r-  ÚGROUP_EXISTSr4  rœ   rÇ  rˆ   rÈ  r±   rr  rH  ©r6   rŠ   rô  r�   Úadd_coder9   r9   r:   r  
  s   
zConditional._compilec                 C   s^   t d t| | j¡ƒ | j |d |¡ | j ¡ s-t d t| ¡ƒ | j |d |¡ d S d S )Nz{}GROUP_EXISTS {}r)   rs  )r  r3   r   r4  rÇ  r%  rÈ  râ   r#  r9   r9   r:   r%  
  s   
þzConditional.dumpc                 C   rÊ  r¼   )rÇ  râ   rÈ  rî  r9   r9   r:   râ   $
  r:  zConditional.is_emptyc                 C   ó0   t | ƒt |ƒu o| j| j| jf|j|j|jfkS r¼   )r‡  r4  rÇ  rÈ  r  r9   r9   r:   r  '
  ó
   ÿÿzConditional.__eq__c                 C   ó   t | j ¡ | j ¡ ƒS r¼   ©r  rÇ  r  rÈ  rî  r9   r9   r:   r  +
  ó   zConditional.max_widthc                 C   r¨  r¼   re  rî  r9   r9   r:   r©  .
  r
  zConditional.__del__N)r;   r<   r=   r5   rõ  rš   rú  rû  rþ  rÿ  r  r  r  r%  râ   r  r  r©  r9   r9   r9   r:   r?  Ø	  s     r?  c                   @   rM  )ÚDefaultBoundaryÚDEFAULT_BOUNDARYN)r;   r<   r=   r-  rÔ  r  r!  r9   r9   r9   r:   rÓ  1
  rP  rÓ  c                   @   rM  )ÚDefaultEndOfWordÚDEFAULT_END_OF_WORDN)r;   r<   r=   r-  rÖ  r  r!  r9   r9   r9   r:   rÕ  5
  rP  rÕ  c                   @   rM  )ÚDefaultStartOfWordÚDEFAULT_START_OF_WORDN)r;   r<   r=   r-  rØ  r  r!  r9   r9   r9   r:   r×  9
  rP  r×  c                   @   rM  )rÍ   ÚEND_OF_LINEN)r;   r<   r=   r-  rÙ  r  r!  r9   r9   r9   r:   rÍ   =
  rP  rÍ   c                   @   rM  )rÌ   ÚEND_OF_LINE_UN)r;   r<   r=   r-  rÚ  r  r!  r9   r9   r9   r:   rÌ   A
  rP  rÌ   c                   @   rM  )ÚEndOfStringÚEND_OF_STRINGN)r;   r<   r=   r-  rÜ  r  r!  r9   r9   r9   r:   rÛ  E
  rP  rÛ  c                   @   rM  )rÏ   ÚEND_OF_STRING_LINEN)r;   r<   r=   r-  rÝ  r  r!  r9   r9   r9   r:   rÏ   I
  rP  rÏ   c                   @   rM  )rÎ   ÚEND_OF_STRING_LINE_UN)r;   r<   r=   r-  rÞ  r  r!  r9   r9   r9   r:   rÎ   M
  rP  rÎ   c                   @   rM  )Ú	EndOfWordÚEND_OF_WORDN)r;   r<   r=   r-  rà  r  r!  r9   r9   r9   r:   rß  Q
  rP  rß  c                   @   ó   e Zd ZdZdd„ ZdS )ÚFailureÚFAILUREc                 C   ó
   t jfgS r¼   )r-  rã  r  r9   r9   r:   r  X
  r
  zFailure._compileN©r;   r<   r=   r!  r  r9   r9   r9   r:   râ  U
  ó    râ  c                   @   sn   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )rç   Nc                 C   sÚ   t  | ¡ |d u ri }|| _|| _d|v r&dD ]}||d v r%| |d¡ qt|ƒtdƒ@ r:dD ]}| |d¡ q0ndD ]}| |d¡ q<| dd¡ d|v r^dD ]
}|d  |d¡ qQd S ddd|d d dœ|d< d S )	Nr  r  ré   )r   r   rT   r   r)   )ÚdrV   rZ   r  )rë  r5   rè   rÛ   r…  r’   )r6   rè   rÛ   rT   r9   r9   r:   r5   \
  s0   
€ÿÿ
ÿzFuzzy.__init__c                 C   s   | j  ||d¡ d S rý  r9  ró  r9   r9   r:   rõ  
  r:  zFuzzy.fix_groupsc                 C   r;  r¼   r<  rù  r9   r9   r:   rú  ‚
  r=  zFuzzy.pack_charactersc                 C   r>  r¼   r?  rî  r9   r9   r:   rû  †
  r@  zFuzzy.remove_capturesc                 C   rA  r¼   ©rè   rþ  rî  r9   r9   r:   rþ  Š
  r
  zFuzzy.is_atomicc                 C   rA  r¼   rC  rî  r9   r9   r:   r  �
  r
  zFuzzy.contains_groupc                 C   s  g }dD ]}| j | }| |d ¡ | |d d u rtn|d ¡ qdD ]}| | j d | ¡ q$| j d d }| |d u r@tn|¡ d}|rK|tO }| j  d¡}|rttj|ft|ƒ g| |d¡ tj	fg | j
 |d¡ tjfg S tj|ft|ƒ g| j
 |d¡ tjfg S )	NÚdiser   r)   r  r  r  rù   T)rÛ   r±   rñ   r  rÁ   r-  Ú	FUZZY_EXTra   rˆ   rr  rè   rH  ÚFUZZY)r6   rŠ   rô  Ú	argumentsrT   Úvrt   rù   r9   r9   r:   r  �
  s8   
 
ÿÿþþÿÿzFuzzy._compilec                 C   s>   |   ¡ }|r
d| }td t| |¡ƒ | j |d |¡ d S )Nrß  z	{}FUZZY{}r)   )Ú_constraints_to_stringr  r3   r   rè   r%  )r6   r$  rŠ   rÛ   r9   r9   r:   r%  ®
  s
   z
Fuzzy.dumpc                 C   rA  r¼   rJ  rî  r9   r9   r:   râ   µ
  r
  zFuzzy.is_emptyc                 C   s(   t | ƒt |ƒu o| j|jko| j|jkS r¼   )r‡  rè   rÛ   r  r9   r9   r:   r  ¸
  s
   ÿ
ÿzFuzzy.__eq__c                 C   r§  r¼   rð   rî  r9   r9   r:   r  ¼
  rö  zFuzzy.max_widthc           	      C   sÞ   g }dD ]-}| j | \}}|dkrqd}|dkrd |¡}||7 }|d ur,|d |¡7 }| |¡ qg }dD ]}| j d | }|dkrL| d ||¡¡ q6| j d d }|d urj|dkrjd	 d
 |¡|¡}| |¡ d |¡S )NÚidsr   rM   z{}<=z<={}r  r*  r  z{}<={}rÝ   rô   )rÛ   r3   r±   r‚  )	r6   rÛ   r¦   r}  r  Úconr  r  Úlimitr9   r9   r:   rî  ¿
  s.   
€

zFuzzy._constraints_to_stringr¼   )r;   r<   r=   r5   rõ  rú  rû  rþ  r  r  r%  râ   r  r  rî  r9   r9   r9   r:   rç   [
  s    
#rç   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ru  c                 C   s(   t tttƒ dd ƒtƒ gƒƒ}| ||¡S r,  )rC  rÕ   rà   rÅ   ÚGraphemeBoundaryrˆ   )r6   rŠ   rô  Úgrapheme_matcherr9   r9   r:   r  á
  s   ÿzGrapheme._compilec                 C   s   t d t| ¡ƒ d S )Nz
{}GRAPHEME)r  r3   r   r#  r9   r9   r:   r%  é
  rÒ  zGrapheme.dumpc                 C   r§  r¼   rð   rî  r9   r9   r:   r  ì
  rö  zGrapheme.max_widthN)r;   r<   r=   r  r%  r  r9   r9   r9   r:   ru  à
  s    ru  c                   @   ó   e Zd Zdd„ ZdS )ró  c                 C   s   t jdfgS r,  )r-  ÚGRAPHEME_BOUNDARYr  r9   r9   r:   rˆ   ð
  rï  zGraphemeBoundary.compileN)r;   r<   r=   rˆ   r9   r9   r9   r:   ró  ï
  ó    ró  c                   @   sŽ   e Zd ZejZdZdd„ Zdd„ Zdd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd S )!rß   ÚGREEDY_REPEATc                 C   s    t  | ¡ || _|| _|| _d S r¼   )rë  r5   rè   rã   rä   )r6   rè   rã   rä   r9   r9   r:   r5   ÷
  s   

zGreedyRepeat.__init__c                 C   r8  r¼   r9  ró  r9   r9   r:   rõ  ý
  r:  zGreedyRepeat.fix_groupsc                 C   s"   | j  ||¡}t| ƒ|| j| jƒS r¼   )rè   rš   r‡  rã   rä   ©r6   r}   rŠ   rè   r9   r9   r:   rš      s   zGreedyRepeat.optimisec                 C   r;  r¼   r<  rù  r9   r9   r:   rú    r=  zGreedyRepeat.pack_charactersc                 C   r>  r¼   r?  rî  r9   r9   r:   rû  	  r@  zGreedyRepeat.remove_capturesc                 C   s   | j | jko
| j ¡ S r¼   )rã   rä   rè   rþ  rî  r9   r9   r:   rþ    rÒ  zGreedyRepeat.is_atomicc                 C   rü  r   r9   rî  r9   r9   r:   rÿ    rö  zGreedyRepeat.can_be_affixc                 C   rA  r¼   rC  rî  r9   r9   r:   r    r
  zGreedyRepeat.contains_groupc                 C   s$   | j  |¡}| jdkr| d ¡ |S r  )rè   r  rã   r–   )r6   rŠ   r‰   r9   r9   r:   r    s   

zGreedyRepeat.get_firstsetc                 C   s\   | j | jg}| jd u r| t¡ n| | j¡ | j ||¡}|s"g S t|ƒg| tj	fg S r¼   )
r  rã   rä   r±   rñ   rè   rˆ   ra   r-  rH  )r6   rŠ   rô  Úrepeatrè   r9   r9   r:   r    s   
zGreedyRepeat._compilec                 C   sH   | j d u rd}n| j }td t| | j| j|¡ƒ | j |d |¡ d S )NÚINFú
{}{} {} {}r)   )rä   r  r3   r   r!  rã   rè   r%  ©r6   r$  rŠ   rñ  r9   r9   r:   r%  *  s   
ÿzGreedyRepeat.dumpc                 C   rA  r¼   rJ  rî  r9   r9   r:   râ   4  r
  zGreedyRepeat.is_emptyc                 C   rÎ  r¼   )r‡  rè   rã   rä   r  r9   r9   r:   r  7  s   ÿÿÿzGreedyRepeat.__eq__c                 C   s   | j d u rtS | j ¡ | j  S r¼   )rä   rñ   rè   r  rî  r9   r9   r:   r  <  s   
zGreedyRepeat.max_widthc                 C   sr   | j d u rtn| j }| jdkr| j ¡ | }t|tƒd fS | j |¡\}}|r+||fS | j ¡ | }t|tƒd fS r  )rä   rñ   rã   rè   r  r}  r  )r6   rŠ   rä   r\   ÚofsÚreqr9   r9   r:   r  B  s   
z GreedyRepeat.get_required_stringN)r;   r<   r=   r-  rø  r  r!  r5   rõ  rš   rú  rû  rþ  rÿ  r  r  r  r%  râ   r  r  r  r9   r9   r9   r:   rß   ó
  s$    
rß   c                   @   rò  )rá   c                 C   rü  rý  r9   rî  r9   r9   r:   rþ  P  rö  zPossessiveRepeat.is_atomicc                 C   sh   | j  ||¡}|sg S | j| jg}| jd u r| t¡ n| | j¡ tjft	|ƒg| tj
ftj
fg S r¼   )rè   rˆ   r  rã   rä   r±   rñ   r-  rG  ra   rH  )r6   rŠ   rô  rè   rú  r9   r9   r:   r  S  s   
ÿzPossessiveRepeat._compilec                 C   s^   t d t| ¡ƒ | jd u rd}n| j}t d t|d  | j| j|¡ƒ | j |d |¡ d S )NrI  rû  rü  r)   rF   )r  r3   r   rä   r!  rã   rè   r%  rý  r9   r9   r:   r%  a  s   
ÿzPossessiveRepeat.dumpN)r;   r<   r=   rþ  r  r%  r9   r9   r9   r:   rá   O  s    rá   c                   @   sŒ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"ræ   c                 C   s&   t  | ¡ || _|| _|| _d | _d S r¼   )rë  r5   r}   r4  rè   r¦  )r6   r}   r4  rè   r9   r9   r:   r5   n  s
   

zGroup.__init__c                 C   s(   | ||f| j j| j< | j |||¡ d S r¼   )r}   Údefined_groupsr4  rè   rõ  ró  r9   r9   r:   rõ  v  s   zGroup.fix_groupsc                 C   s   | j  ||¡}t| j| j|ƒS r¼   )rè   rš   ræ   r}   r4  rù  r9   r9   r:   rš   z  s   zGroup.optimisec                 C   r;  r¼   r<  rù  r9   r9   r:   rú    r=  zGroup.pack_charactersc                 C   rA  r¼   r?  rî  r9   r9   r:   rû  ƒ  r
  zGroup.remove_capturesc                 C   rA  r¼   rè  rî  r9   r9   r:   rþ  †  r
  zGroup.is_atomicc                 C   rü  r   r9   rî  r9   r9   r:   rÿ  ‰  rö  zGroup.can_be_affixc                 C   rü  rý  r9   rî  r9   r9   r:   r  Œ  rö  zGroup.contains_groupc                 C   rD  r¼   rE  r  r9   r9   r:   r  �  rï  zGroup.get_firstsetc                 C   rA  r¼   rF  rî  r9   r9   r:   r  ’  r
  zGroup.has_simple_startc                 C   s¬   g }| j ||f}| jj |¡}|d ur|tj|fg7 }| j  }}|dk r0| jj| }| jj| }|tjt	| ƒ||fg| j
 ||¡ tjfg 7 }|d urT|tjfg7 }|S r  )r4  r}   Ú	call_refsrÁ   r-  r®  Úprivate_groupsrD  ÚGROUPr÷   rè   rˆ   rH  )r6   rŠ   rô  r�   r‘  r¬  Úpublic_groupÚprivate_groupr9   r9   r:   r  •  s"   
ÿÿzGroup._compilec                 C   s@   | j }|dk rt| }td t| |¡ƒ | j |d |¡ d S )Nr   z
{}GROUP {}r)   )r4  r  r  r3   r   rè   r%  )r6   r$  rŠ   r4  r9   r9   r:   r%  ª  s
   z
Group.dumpc                 C   s(   t | ƒt |ƒu o| j| jf|j|jfkS r¼   )r‡  r4  rè   r  r9   r9   r:   r  ±  s   
ÿzGroup.__eq__c                 C   rA  r¼   rK  rî  r9   r9   r:   r  µ  r
  zGroup.max_widthc                 C   rD  r¼   rL  r  r9   r9   r:   r  ¸  rï  zGroup.get_required_stringc                 C   r¨  r¼   re  rî  r9   r9   r:   r©  »  r
  zGroup.__del__N)r;   r<   r=   r5   rõ  rš   rú  rû  rþ  rÿ  r  r  r  r  r%  r  r  r  r©  r9   r9   r9   r:   ræ   m  s"    ræ   c                   @   rM  )ÚKeepÚKEEPN)r;   r<   r=   r-  r  r  r!  r9   r9   r9   r:   r  ¾  rP  r  c                   @   rM  )rà   ÚLAZY_REPEATN)r;   r<   r=   r-  r  r  r!  r9   r9   r9   r:   rà   Â  rP  rà   c                   @   ó†   e Zd ZdddœZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd S )!r<  ÚAHEADÚBEHINDrç  c                 C   s(   t  | ¡ t|ƒ| _t|ƒ| _|| _d S r¼   )rë  r5   r†   r=  r•   rè   )r6   r=  r•   rè   r9   r9   r:   r5   É  s   



zLookAround.__init__c                 C   s   | j  || j|¡ d S r¼   )rè   rõ  r=  ró  r9   r9   r:   rõ  Ï  rÒ  zLookAround.fix_groupsc                 C   s2   | j  || j¡}| jr| ¡ r|S t| j| j|ƒS r¼   )rè   rš   r=  r•   râ   r<  rù  r9   r9   r:   rš   Ò  s   zLookAround.optimisec                 C   r;  r¼   r<  rù  r9   r9   r:   rú  Ù  r=  zLookAround.pack_charactersc                 C   rA  r¼   r?  rî  r9   r9   r:   rû  Ý  r
  zLookAround.remove_capturesc                 C   rA  r¼   rè  rî  r9   r9   r:   rþ  à  r
  zLookAround.is_atomicc                 C   rA  r¼   rB  rî  r9   r9   r:   rÿ  ã  r
  zLookAround.can_be_affixc                 C   rA  r¼   rC  rî  r9   r9   r:   r  æ  r
  zLookAround.contains_groupc                 C   s&   | j r| j|kr| j |¡S td gƒS r¼   )r•   r=  rè   r  r’   r  r9   r9   r:   r  é  s   
zLookAround.get_firstsetc                 C   sX   d}| j r	|tO }|r|tO }|r|tO }tj|t| j ƒfg| j 	| j¡ tj
fg S r  )r•   r  r  r  r-  Ú
LOOKAROUNDr÷   r=  rè   rˆ   rH  r  r9   r9   r:   r  ï  s   ÿÿzLookAround._compilec                 C   s<   t d t| | j| j t| j ¡ƒ | j |d | j¡ d S )Nz{}LOOK{} {}r)   )	r  r3   r   Ú	_dir_textr=  r"  r•   rè   r%  r#  r9   r9   r:   r%  û  s   ÿzLookAround.dumpc                 C   s   | j o| j ¡ S r¼   )r•   rè   râ   rî  r9   r9   r:   râ      r²  zLookAround.is_emptyc                 C   rÎ  r¼   )r‡  r=  r•   rè   r  r9   r9   r:   r    rÏ  zLookAround.__eq__c                 C   rü  r  r9   rî  r9   r9   r:   r    rö  zLookAround.max_widthN)r;   r<   r=   r  r5   rõ  rš   rú  rû  rþ  rÿ  r  r  r  r%  râ   r  r  r9   r9   r9   r:   r<  Æ  s     
r<  c                   @   r	  )!rB  r
  r  rç  c                 C   s4   t  | ¡ t|ƒ| _t|ƒ| _|| _|| _|| _d S r¼   )rë  r5   r†   r=  r•   rè   rÇ  rÈ  )r6   r=  r•   rè   rÇ  rÈ  r9   r9   r:   r5     s   



zLookAroundConditional.__init__c                 C   s4   | j  |||¡ | j |||¡ | j |||¡ d S r¼   )rè   rõ  rÇ  rÈ  ró  r9   r9   r:   rõ    s   z LookAroundConditional.fix_groupsc                 C   sD   | j  || j¡}| j || j¡}| j || j¡}t| j| j|||ƒS r¼   )rè   rš   r=  rÇ  rÈ  rB  r•   )r6   r}   rŠ   rè   rÇ  rÈ  r9   r9   r:   rš     s   ÿzLookAroundConditional.optimisec                 C   s.   | j  |¡| _ | j |¡| _| j |¡| _| S r¼   )rè   rú  rÇ  rÈ  rù  r9   r9   r:   rú  "  s   z%LookAroundConditional.pack_charactersc                 C   s(   | j  ¡ | _ | j ¡ | _| j ¡ | _d S r¼   )rè   rû  rÇ  rÈ  rî  r9   r9   r:   rû  (  s   z%LookAroundConditional.remove_capturesc                 C   ó   | j  ¡ o| j ¡ o| j ¡ S r¼   )rè   rþ  rÇ  rÈ  rî  r9   r9   r:   rþ  -  ó   ÿzLookAroundConditional.is_atomicc                 C   r  r¼   )rè   rÿ  rÇ  rÈ  rî  r9   r9   r:   rÿ  1  r  z"LookAroundConditional.can_be_affixc                 C   s   | j  ¡ p| j ¡ p| j ¡ S r¼   )rè   r  rÇ  rÈ  rî  r9   r9   r:   r  5  s
   
ÿÿz$LookAroundConditional.contains_groupc                 C   s�   t jt| jƒt| j ƒfg}| | j | j|¡¡ | t j	f¡ | | j
 ||¡¡ | j ||¡}|r?| t j	f¡ | |¡ | t jf¡ |S r¼   )r-  ÚCONDITIONALr÷   r•   r=  rœ   rè   rˆ   r±   rr  rÇ  rÈ  rH  rÌ  r9   r9   r:   r  9  s   
zLookAroundConditional._compilec                 C   s’   t d t| | j| j t| j ¡ƒ | j |d | j¡ t d t| ¡ƒ | j	 |d |¡ | j
 ¡ sGt d t| ¡ƒ | j
 |d |¡ d S d S )Nz{}CONDITIONAL {} {}r)   z{}EITHERrs  )r  r3   r   r  r=  r"  r•   rè   r%  rÇ  rÈ  râ   r#  r9   r9   r:   r%  G  s   ÿ
þzLookAroundConditional.dumpc                 C   s   | j  ¡ r
| j ¡ p| j ¡ S r¼   )rè   râ   rÇ  rÈ  rî  r9   r9   r:   râ   Q  r  zLookAroundConditional.is_emptyc                 C   rÎ  r¼   )r‡  rè   rÇ  rÈ  r  r9   r9   r:   r  U  rÏ  zLookAroundConditional.__eq__c                 C   rÐ  r¼   rÑ  rî  r9   r9   r:   r  Y  rÒ  zLookAroundConditional.max_widthc                 C   r  r¼   r  r  r9   r9   r:   r  \  rï  z)LookAroundConditional.get_required_stringN)r;   r<   r=   r  r5   rõ  rš   rú  rû  rþ  rÿ  r  r  r%  râ   r  r  r  r9   r9   r9   r:   rB  
  s     

rB  c                   @   rª  )r·  c                 C   s
   || _ d S r¼   )r�   )r6   r�   r9   r9   r:   r5   `  r
  zPrecompiledCode.__init__c                 C   s   t | jƒgS r¼   )ra   r�   r  r9   r9   r:   r  c  rï  zPrecompiledCode._compileNr¯  r9   r9   r9   r:   r·  _  s    r·  c                   @   s²   e Zd Zedfejedfejedfeje	dfejedfej
edfejedfej
e	dfejiZdedfdd„Zdd„ Zddd„Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )rÐ  FTc                 C   sL   t  | ¡ || _t|ƒ| _t| | _t|ƒ| _| j| j| j| j| jf| _	d S r¼   )
rë  r5   r£   r†   r•   rð  r�   r�   rì  rí  r°  r9   r9   r:   r5   m  s   




ÿzProperty.__init__c                 C   r±  r¼   )rÐ  r£   rò  r9   r9   r:   rñ  x  r²  zProperty.rebuildc                 C   r÷  r¼   r9   r³  r9   r9   r:   rš   {  rö  zProperty.optimisec                 C   r´  r¼   r  r  r9   r9   r:   r  ~  r
  zProperty.get_firstsetc                 C   rü  rý  r9   rî  r9   r9   r:   r  �  rö  zProperty.has_simple_startc                 C   sF   d}| j r	|tO }| jr|tO }|r|tO }| j| j|f || jfgS r  )r•   r  r�   r¶  r  r  r�   r£   r  r9   r9   r:   r  „  s   zProperty._compilec              	   C   sT   t | jd?  }|d |d | jd@  }}td t| t| j ||t| j ¡ƒ d S )NrI   r   r)   iÿÿ  z{}PROPERTY {} {}:{}{})	ÚPROPERTY_NAMESr£   r  r3   r   r"  r•   r¼  r�   )r6   r$  rŠ   r¬   r¦   r£   r9   r9   r:   r%  Ž  s
   
ÿzProperty.dumpc                 C   s   t  | j|¡| jkS r¼   )r{   Úhas_property_valuer£   r•   r¿  r9   r9   r:   rÀ  ”  r:  zProperty.matchesc                 C   rü  r,  r9   rî  r9   r9   r:   r  —  rö  zProperty.max_widthNrÂ  )r;   r<   r=   r“   r-  ÚPROPERTYr   ÚPROPERTY_IGNr   r•  ÚPROPERTY_REVÚPROPERTY_IGN_REVr  r5   rñ  rš   r  r  r  r%  rÀ  r  r9   r9   r9   r:   rÐ  f  s(    ÿü
ÿ

rÐ  c                   @   rá  )ÚPruneÚPRUNEc                 C   rä  r¼   )r-  r  r  r9   r9   r:   r  �  r
  zPrune._compileNrå  r9   r9   r9   r:   r  š  ræ  r  c                   @   s¦   e Zd Zedfejedfejedfeje	dfejedfej
edfejedfej
e	dfejiZdZdedfdd„Zdd„ Zddd	„Zd
d„ Zdd„ Zdd„ Zdd„ ZdS )rª  FTÚRANGEc                 C   sV   t  | ¡ || _|| _t|ƒ| _t| | _t|ƒ| _| j	| j| j| j| j| jf| _
d S r¼   )rë  r5   ÚlowerrÃ  r†   r•   rð  r�   r�   rì  rí  )r6   r  rÃ  r•   r�   r�   r9   r9   r:   r5   §  s   




ÿzRange.__init__c                 C   s   t | j| j|||ƒS r¼   )rª  r  rÃ  rò  r9   r9   r:   rñ  ³  r:  zRange.rebuildc                 C   sÈ   | j r
| jt@ r
|r| S |jt@ r| jt@ tkr| S t ¡ }g }|D ]'}| jt	|ƒ  kr2| j
krIn q"t t|¡}| tdd„ |D ƒ| jd�¡ q"|sN| S t|ƒ| j
| j d k r`| d| ¡ t|ƒS )Nc                 S   r\  r9   rµ  r^  r9   r9   r:   r¿   È  r_  z"Range.optimise.<locals>.<listcomp>rŒ   r)   r   )r•   r�   r   rt   r   r•  r{   r™  r  rÔ   rÃ  r|   r˜  r±   r¸  rc   rX  r²   )r6   r}   rŠ   r‘   r›  r�  rØ   rš  r9   r9   r:   rš   ¶  s(   ÿ ÿ€zRange.optimisec                 C   sJ   d}| j r	|tO }| jr|tO }|r|tO }| j| j|f || j| jfgS r  )	r•   r  r�   r¶  r  r  r�   r  rÃ  r  r9   r9   r:   r  Õ  s   ÿzRange._compilec              	   C   sR   t t| jƒƒ d¡}t t| jƒƒ d¡}td t| t| j	 ||t
| j ¡ƒ d S )Nr¹  z{}RANGE {} {} {}{})rº  r–  r  r»  rÃ  r  r3   r   r"  r•   r¼  r�   )r6   r$  rŠ   Údisplay_lowerÚdisplay_upperr9   r9   r:   r%  à  s   
þz
Range.dumpc                 C   s(   | j |  ko| jk| jkS   | jkS r¼   )r  rÃ  r•   r¿  r9   r9   r:   rÀ  ç  s   (zRange.matchesc                 C   rü  r,  r9   rî  r9   r9   r:   r  ê  rö  zRange.max_widthNrÂ  )r;   r<   r=   r“   r-  r  r   Ú	RANGE_IGNr   r•  Ú	RANGE_REVÚRANGE_IGN_REVr  r!  r5   rñ  rš   r  r%  rÀ  r  r9   r9   r9   r:   rª     s     ý
ÿ
rª  c                   @   óœ   e Zd Zedfejedfejedfeje	dfej
edfejedfejedfeje	dfejiZefdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ ZdS )r¥   FTc                 C   s<   t  | ¡ || _|| _|| _t| | _| j| j| jf| _d S r¼   )	rë  r5   r}   r4  r§   rð  r�   rì  rí  )r6   r}   r4  r§   r�   r9   r9   r:   r5   ô  s   

zRefGroup.__init__c                 C   s–   zt | jƒ| _W n" ty*   z
| jj| j | _W n ty'   td|| jƒ‚w Y nw d| j  kr8| jjks@n td|| jƒ‚| j	| j| j
f| _d S )Nrá  r)   rà  )r÷   r4  r
  r}   rž  rf   r%   r§   rD  rì  r�   rí  ró  r9   r9   r:   rõ  ý  s   ÿÿþzRefGroup.fix_groupsc                 C   r¡  r¢  r£  rî  r9   r9   r:   rû    r¤  zRefGroup.remove_capturesc                 C   s*   d}|r|t O }| j| j|f || jfgS r  )r  r  r�   r4  r  r9   r9   r:   r    s   zRefGroup._compilec                 C   r  )Nz{}REF_GROUP {}{})r  r3   r   r4  r¼  r�   r#  r9   r9   r:   r%    r&  zRefGroup.dumpc                 C   r§  r¼   rð   rî  r9   r9   r:   r    rö  zRefGroup.max_widthc                 C   r¨  r¼   re  rî  r9   r9   r:   r©    r
  zRefGroup.__del__N)r;   r<   r=   r“   r-  Ú	REF_GROUPr   ÚREF_GROUP_IGNr   r•  ÚREF_GROUP_FLDÚREF_GROUP_REVÚREF_GROUP_IGN_REVÚREF_GROUP_FLD_REVr  r5   rõ  rû  r  r%  r  r©  r9   r9   r9   r:   r¥   í  s$    ÿÿ
ü	r¥   c                   @   rM  )rq  ÚSEARCH_ANCHORN)r;   r<   r=   r-  r'  r  r!  r9   r9   r9   r:   rq    rP  rq  c                   @   s²   e Zd Zd(dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZd d!„ Zd"d#„ Zd$d%„ Zd&d'„ ZdS ))rÕ   Nc                 C   s    t  | ¡ |d u rg }|| _d S r¼   )rë  r5   r�  )r6   r�  r9   r9   r:   r5   #  s   

zSequence.__init__c                 C   rQ  r¼   )r�  rõ  )r6   r-   rŠ   rô  rZ   r9   r9   r:   rõ  *  rR  zSequence.fix_groupsc                 C   sF   g }| j D ]}| ||¡}t|tƒr| |j ¡ q| |¡ qt|ƒS r¼   )r�  rš   r*   rÕ   rœ   r±   rê  )r6   r}   rŠ   r�  rZ   r9   r9   r:   rš   .  s   

zSequence.optimisec                    s
  g }g }t }| jD ]o}t|ƒtu r7|jr7|js7|j|kr0|js%tˆ |jƒr0t	 
ˆ |||¡ |j}| |j¡ q	t|ƒtu sCt|ƒtu rh|j|kra|jsVt‡ fdd„|D ƒƒrat	 
ˆ |||¡ |j}| |j¡ q	t	 
ˆ |||¡ | | ˆ ¡¡ q	t	 
ˆ |||¡ t|ƒS )z+Packs sequences of characters into strings.c                 3   ó   � | ]}t ˆ |ƒV  qd S r¼   ©rƒ   r^  re  r9   r:   r`  O  r¥  z+Sequence.pack_characters.<locals>.<genexpr>)r“   r�  r‡  r”   r•   r�   r�   rƒ   r£   rÕ   Ú_flush_charactersr±   r¸  r`  r§  rœ   ra  rú  rê  )r6   r}   r�  ra  r�   rZ   r9   re  r:   rú  :  s4   

ÿ
ÿÿzSequence.pack_charactersc                 C   rg  )Nc                 S   rh  r9   ri  ©r½   rZ   r9   r9   r:   r¿   a  r_  z,Sequence.remove_captures.<locals>.<listcomp>ré  rî  r9   r9   r:   rû  `  rj  zSequence.remove_capturesc                 C   rk  )Nc                 s   rl  r¼   rm  r+  r9   r9   r:   r`  e  ra  z%Sequence.is_atomic.<locals>.<genexpr>©rc  r�  rî  r9   r9   r:   rþ  d  r:  zSequence.is_atomicc                 C   rü  r   r9   rî  r9   r9   r:   rÿ  g  rö  zSequence.can_be_affixc                 C   rk  )Nc                 s   rl  r¼   ro  r+  r9   r9   r:   r`  k  ra  z*Sequence.contains_group.<locals>.<genexpr>)r§  r�  rî  r9   r9   r:   r  j  r:  zSequence.contains_groupc                 C   sX   t ƒ }| j}|r| ¡  |D ]}|| |¡O }d |vr|  S | d ¡ q|t d gƒB S r¼   )r’   r�  rŠ   r  Údiscard)r6   rŠ   r‰   r�  rZ   r9   r9   r:   r  m  s   zSequence.get_firstsetc                 C   s   t | jƒo| jd  ¡ S r  )r†   r�  r  rî  r9   r9   r:   r  z  s   zSequence.has_simple_startc                 C   s<   | j }|r|d d d… }g }|D ]}| | ||¡¡ q|S rp  )r�  rœ   rˆ   )r6   rŠ   rô  Úseqr�   rZ   r9   r9   r:   r  }  s   zSequence._compilec                 C   s   | j D ]}| ||¡ qd S r¼   )r�  r%  )r6   r$  rŠ   rZ   r9   r9   r:   r%  ˆ  s   
ÿzSequence.dumpc                    sÒ   |sd S |t @ rt‡ fdd„|D ƒƒst}|t@ tkrFt |¡}|D ]"}|j}t|ƒdkr:| t	|d |j
d�¡ q"| t||j
d�¡ q"nt|ƒdkrX| t	|d |d�¡ n	| t||d�¡ g |d d …< d S )Nc                 3   r(  r¼   r)  r^  re  r9   r:   r`  “  r¥  z-Sequence._flush_characters.<locals>.<genexpr>r)   r   rŒ   )r   r§  r“   r•  rÕ   Ú_fix_full_casefoldra  rc   r±   r”   r�   r¸  )r}   ra  r�   r�  Úliteralsr¾   Úcharsr9   re  r:   r*  Œ  s"   
úzSequence._flush_charactersc           
      C   s  dd„ t  ¡ D ƒ}t  td dd„ | D ƒ¡¡ ¡ }g }|D ]"}| |¡}|dkr?| ||t|ƒ f¡ | ||d ¡}|dks(qd}g }t	 
|¡D ]$\}}	||k r^| t| ||… td�¡ | t| ||	… td�¡ |	}qI|t| ƒk r�| t| |d … td�¡ |S )	Nc                 S   s   g | ]}t  t|¡‘qS r9   )r{   r|   r˜  r^  r9   r9   r:   r¿   ¬  rÀ   z/Sequence._fix_full_casefold.<locals>.<listcomp>rM   c                 s   ru  r¼   ©r–  r^  r9   r9   r:   r`  ®  s   € ÿz.Sequence._fix_full_casefold.<locals>.<genexpr>r   r)   rŒ   )r{   r™  r|   r˜  r‚  r  Úfindr±   rc   rÕ   Ú_merge_chunksr`  r   r•  )
ra  Úexpandedr~   ÚchunksrT   Úfoundr.   r0  r«  r®  r9   r9   r:   r/  ¨  s<   ÿÿÿ
þ€ÿÿzSequence._fix_full_casefoldc                 C   s|   t | ƒdk r| S |  ¡  | d \}}g }| dd … D ]\}}||kr(t||ƒ}q| ||f¡ ||}}q| ||f¡ |S )NrF   r   r)   )rc   Úsortr  r±   )r6  r«  r®  Ú
new_chunksrZ   rT   r9   r9   r:   r4  Ê  s   zSequence._merge_chunksc                 C   rk  )Nc                 s   rl  r¼   rœ  r—  r9   r9   r:   r`  à  ra  z$Sequence.is_empty.<locals>.<genexpr>r,  rî  r9   r9   r:   râ   ß  r:  zSequence.is_emptyc                 C   r  r¼   )r‡  r�  r  r9   r9   r:   r  â  r  zSequence.__eq__c                 C   rk  )Nc                 s   rl  r¼   r  r+  r9   r9   r:   r`  æ  ra  z%Sequence.max_width.<locals>.<genexpr>)Úsumr�  rî  r9   r9   r:   r  å  r:  zSequence.max_widthc                 C   sT   | j }|r|d d d… }d}|D ]}| |¡\}}||7 }|r%||f  S q|d fS )Nr[  r   )r�  r  )r6   rŠ   r.  ÚoffsetrZ   rþ  rÿ  r9   r9   r:   r  è  s   ÿzSequence.get_required_stringr¼   )r;   r<   r=   r5   rõ  rš   rú  rû  rþ  rÿ  r  r  r  r  r%  r�  r*  r/  r4  râ   r  r  r  r9   r9   r9   r:   rÕ   "  s.    
&

!
rÕ   c                   @   s\   e Zd Zdedfdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )r‹  TFc                 C   s\   t  | ¡ || _t|ƒ| _t|ƒ| _t| | _t|ƒ| _	d| _
| j| j| j| j| j	f| _d S r,  )rë  r5   r}   ra   r�  r†   r•   rð  r�   r�   Ú
char_widthrì  rí  )r6   r}   r�  r•   r�   r�   r9   r9   r:   r5   ø  s   





ÿzSetBase.__init__c                 C   s"   t | ƒ| j| j|||ƒ | jd¡S r   )r‡  r}   r�  rš   rò  r9   r9   r:   rñ    s
   ÿ
ÿzSetBase.rebuildc                 C   r´  r¼   r  r  r9   r9   r:   r  
  r
  zSetBase.get_firstsetc                 C   rü  rý  r9   rî  r9   r9   r:   r    rö  zSetBase.has_simple_startc                 C   sn   d}| j r	|tO }| jr|tO }|r|tO }| j| j|f |fg}| jD ]	}| | 	¡ ¡ q$| 
tjf¡ |S r  )r•   r  r�   r¶  r  r  r�   r�  rœ   rˆ   r±   r-  rH  )r6   rŠ   rô  rt   r�   rW   r9   r9   r:   r    s   
zSetBase._compilec                 C   sF   t d t| | jt| j t| j ¡ƒ | jD ]
}| 	|d |¡ qd S )Nz	{}{} {}{}r)   )
r  r3   r   r!  r"  r•   r¼  r�   r�  r%  )r6   r$  rŠ   rV   r9   r9   r:   r%     s   ÿ
ÿzSetBase.dumpc                 C   s²   | j r
| jt@ r
|r| S | jjt@ r| jt@ tkr| S t ¡ }g }t	ƒ }|D ]'}|  
t|ƒ¡rMt t|¡}||vrM| tdd„ |D ƒ| jd�¡ | |¡ q&|sR| S t| g| ƒS )Nc                 S   r\  r9   rµ  r^  r9   r9   r:   r¿   :  r_  z0SetBase._handle_case_folding.<locals>.<listcomp>rŒ   )r•   r�   r   r}   rt   r   r•  r{   r™  r’   rÀ  rÔ   r|   r˜  r±   r¸  r–   r²   )r6   r}   r‘   r›  r�  ÚseenrØ   rš  r9   r9   r:   Ú_handle_case_folding&  s.   ÿÿÿ
€zSetBase._handle_case_foldingc                 C   sˆ   | j r| jt@ s
dS | jjt@ r| jt@ tkrdS t ¡ }t	ƒ }|D ]}|  
t|ƒ¡r6t t|¡}| |¡ q"|s;dS tdd„ |D ƒƒS )Nr)   c                 s   ru  r¼   rv  )r½   rš  r9   r9   r:   r`  [  ra  z$SetBase.max_width.<locals>.<genexpr>)r•   r�   r   r}   rt   r   r•  r{   r™  r’   rÀ  rÔ   r|   r˜  r–   r  )r6   r›  r=  rØ   rš  r9   r9   r:   r  D  s$   ÿÿ
€zSetBase.max_widthc                 C   r¨  r¼   re  rî  r9   r9   r:   r©  ]  r
  zSetBase.__del__N)r;   r<   r=   r“   r5   rñ  r  r  r  r%  r>  r  r©  r9   r9   r9   r:   r‹  ÷  s    
ÿr‹  c                   @   óv   e Zd Zedfejedfejedfeje	dfejedfej
edfejedfej
e	dfejiZdZd	dd„Zdd„ ZdS )
r£  FTÚSET_DIFFc                    s~   | j }t|ƒdkr|d tˆ |dd … ƒg}t|ƒdkr,|d j| j| jd� ˆ ˆ|¡S t‡ ‡fdd„|D ƒƒ| _ |  ˆ |¡S )NrF   r   r)   rŽ   c                 3   s    � | ]}|j ˆ ˆd d�V  qdS )Tr�   N)rš   )r½   rW   ©r}   rŠ   r9   r:   r`  q  s   € z#SetDiff.optimise.<locals>.<genexpr>)	r�  rc   r˜   r—   r�   r�   rš   ra   r>  )r6   r}   rŠ   r‘   r�  r9   rA  r:   rš   h  s   ÿ
ÿ
ÿzSetDiff.optimisec                 C   s,   | j d  |¡o| j d  |¡ }|| jkS ©Nr   r)   ©r�  rÀ  r•   ©r6   rØ   rW   r9   r9   r:   rÀ  v  s   "
zSetDiff.matchesNrÂ  )r;   r<   r=   r“   r-  r@  r   ÚSET_DIFF_IGNr   r•  ÚSET_DIFF_REVÚSET_DIFF_IGN_REVr  r!  rš   rÀ  r9   r9   r9   r:   r£  `  s    ÿü
r£  c                   @   r?  )
r¢  FTÚ	SET_INTERc                 C   óŠ   g }| j D ]}|j||dd�}t|tƒr|jr| |j ¡ q| |¡ qt|ƒdkr:|d j| j	| j
d� |||¡S t|ƒ| _ |  ||¡S ©NTr�   r)   r   rŽ   )r�  rš   r*   r¢  r•   rœ   r±   rc   r—   r�   r�   ra   r>  ©r6   r}   rŠ   r‘   r�  rW   r9   r9   r:   rš   ‚  ó   
ÿ
ÿ
zSetInter.optimisec                    ó"   t ‡ fdd„| jD ƒƒ}|| jkS )Nc                 3   ó   � | ]}|  ˆ ¡V  qd S r¼   ©rÀ  r—  ©rØ   r9   r:   r`  •  r¥  z#SetInter.matches.<locals>.<genexpr>)rc  r�  r•   rD  r9   rP  r:   rÀ  ”  ó   
zSetInter.matchesNrÂ  )r;   r<   r=   r“   r-  rH  r   ÚSET_INTER_IGNr   r•  ÚSET_INTER_REVÚSET_INTER_IGN_REVr  r!  rš   rÀ  r9   r9   r9   r:   r¢  z  s    ÿÿ
ü
r¢  c                   @   r?  )
r   FTÚSET_SYM_DIFFc                 C   rI  rJ  )r�  rš   r*   r   r•   rœ   r±   rc   r—   r�   r�   ra   r>  rK  r9   r9   r:   rš      rL  zSetSymDiff.optimisec                 C   s(   d}| j D ]	}|| |¡k}q|| jkS r   rC  )r6   rØ   rW   rV   r9   r9   r:   rÀ  ²  s   

zSetSymDiff.matchesNrÂ  )r;   r<   r=   r“   r-  rU  r   ÚSET_SYM_DIFF_IGNr   r•  ÚSET_SYM_DIFF_REVÚSET_SYM_DIFF_IGN_REVr  r!  rš   rÀ  r9   r9   r9   r:   r   ˜  s    ÿü
r   c                   @   s~   e Zd Zedfejedfejedfeje	dfejedfej
edfejedfej
e	dfejiZdZddd„Zdd„ Zdd	„ Zd
S )r˜   FTÚ	SET_UNIONc                 C   s˜   g }| j D ]}|j||dd�}t|tƒr|jr| |j ¡ q| |¡ qt|ƒdkrA|d }|j|j| jk| j	| j
d� |||¡S t|ƒ| _ |  ||¡S )NTr�   r)   r   )r•   r�   r�   )r�  rš   r*   r˜   r•   rœ   r±   rc   r—   r�   r�   ra   r>  )r6   r}   rŠ   r‘   r�  rW   rV   r9   r9   r:   rš   Á  s    
þ
þ
zSetUnion.optimisec           
      C   s  d}| j r	|tO }| jr|tO }|r|tO }ttƒg }}| jD ]}t|t	ƒr1||j   
|j¡ q | 
|¡ q | j| j|f |fg}| ¡ D ]-\}}	d}|rR|tO }t|	ƒdkrd| 
tj||	d f¡ qF| 
tj|t|	ƒft|	ƒ ¡ qF|D ]	}| | ¡ ¡ qv| 
tjf¡ |S rB  )r•   r  r�   r¶  r  r   r™   r�  r*   r”   r±   r£   r  r�   rc   r-  rÃ  ÚSTRINGra   rœ   rˆ   rH  )
r6   rŠ   rô  rt   ra  ÚothersrW   r�   r•   Úvaluesr9   r9   r:   r  Õ  s0   

 zSetUnion._compilec                    rM  )Nc                 3   rN  r¼   rO  r—  rP  r9   r:   r`  ø  r¥  z#SetUnion.matches.<locals>.<genexpr>)r§  r�  r•   rD  r9   rP  r:   rÀ  ÷  rQ  zSetUnion.matchesNrÂ  )r;   r<   r=   r“   r-  rY  r   ÚSET_UNION_IGNr   r•  ÚSET_UNION_REVÚSET_UNION_IGN_REVr  r!  rš   r  rÀ  r9   r9   r9   r:   r˜   ¹  s    ÿÿ
ü
"r˜   c                   @   s   e Zd ZdZejZdS )ÚSkipÚSKIPN)r;   r<   r=   r!  r-  ra  r  r9   r9   r9   r:   r`  û  s    
r`  c                   @   rM  )rÊ   ÚSTART_OF_LINEN)r;   r<   r=   r-  rb  r  r!  r9   r9   r9   r:   rÊ   ÿ  rP  rÊ   c                   @   rM  )rÉ   ÚSTART_OF_LINE_UN)r;   r<   r=   r-  rc  r  r!  r9   r9   r9   r:   rÉ     rP  rÉ   c                   @   rM  )rË   ÚSTART_OF_STRINGN)r;   r<   r=   r-  rd  r  r!  r9   r9   r9   r:   rË     rP  rË   c                   @   rM  )ÚStartOfWordÚSTART_OF_WORDN)r;   r<   r=   r-  rf  r  r!  r9   r9   r9   r:   re    rP  re  c                   @   r   )r¸  FTc                 C   s„   t |ƒ| _t| | _| jt@ tkr,g }| jD ]}t tt|ƒ¡}| 	dd„ |D ƒ¡ qn| j}t |ƒ| _
d| _| j| j| jf| _d S )Nc                 s   ru  r¼   rµ  r^  r9   r9   r:   r`    ra  z"String.__init__.<locals>.<genexpr>F)ra   ra  rð  r�   r•  r{   r|   r˜  r–  rœ   rÁ  Úrequiredrì  rí  )r6   ra  r�   rÁ  r‚   rš  r9   r9   r:   r5     s   


þ
zString.__init__c                 C   s(   |rd}nd}t t| j| | jd�gƒS )Nr[  r   rŒ   )r’   r”   ra  r�   )r6   rŠ   r.   r9   r9   r:   r  '  s   
ÿzString.get_firstsetc                 C   rü  rý  r9   rî  r9   r9   r:   r  /  rö  zString.has_simple_startc                 C   sB   d}|r|t O }| jr|tO }| j| j|f |t| jƒf| j gS r  )r  rg  ÚREQUIRED_OPr  r�   rc   rÁ  r  r9   r9   r:   r  2  s   ÿÿzString._compilec                 C   s@   t d dd„ | jD ƒ¡ƒ d¡}td t| |t| j ¡ƒ d S )NrM   c                 s   ru  r¼   r2  r^  r9   r9   r:   r`  <  ra  zString.dump.<locals>.<genexpr>r¹  z{}STRING {}{})	rº  r‚  ra  r»  r  r3   r   r¼  r�   r½  r9   r9   r:   r%  ;  s    
ÿzString.dumpc                 C   r  r¼   )rc   rÁ  rî  r9   r9   r:   r  @  r
  zString.max_widthc                 C   s   d| fS r  r9   r  r9   r9   r:   r  C  s   zString.get_required_stringN)r;   r<   r=   r“   r-  rZ  r   Ú
STRING_IGNr   r•  Ú
STRING_FLDÚ
STRING_REVÚSTRING_IGN_REVÚSTRING_FLD_REVr  r5   r  r  r  r%  r  r  r9   r9   r9   r:   r¸    s    ü	r¸  c                   @   rõ  )r`  c                 C   sD   d  dd„ | jD ƒ¡}t|ƒ d¡}td t| |t| j ¡ƒ d S )NrM   c                 s   ru  r¼   r2  r^  r9   r9   r:   r`  H  ra  zLiteral.dump.<locals>.<genexpr>r¹  z{}LITERAL MATCH {}{})	r‚  ra  rº  r»  r  r3   r   r¼  r�   )r6   r$  rŠ   Úliteralr¾  r9   r9   r:   r%  G  s
   
ÿzLiteral.dumpN)r;   r<   r=   r%  r9   r9   r9   r:   r`  F  r÷  r`  c                   @   s(   e Zd Zefdd„Zdd„ Zdd„ ZdS )r©   c           
         sè   || _ || _tˆ  | _| j| j| jf| _|| jf| _| j|jvr)t|jƒ|j| j< | j j| j }| j j	| j }| j‰ | j j
t@ }|ˆ B }g }|D ]}	t|	tƒrVdd„ |	D ƒ}	| ‡ fdd„|	D ƒ¡ qH|jtdd� dd„ |D ƒ| _d S )Nc                 S   r\  r9   rµ  r^  r9   r9   r:   r¿   e  r_  z&StringSet.__init__.<locals>.<listcomp>c                    s   g | ]}t |ˆ d �‘qS )rŒ   r]  r^  rŒ   r9   r:   r¿   g  rÀ   T)r‘  rŠ   c                 S   r\  r9   )rÕ   )r½   Úchoicer9   r9   r:   r¿   m  r_  )r}   r¦   rð  r�   rì  rí  Úset_keyÚnamed_lists_usedrc   rˆ  rt   ry   r*   r+   r±   r8  r´   )
r6   r}   r¦   r�   rå  r�  r  Ú
fold_flagsÚchoicesr~   r9   rŒ   r:   r5   N  s*   


ÿzStringSet.__init__c                 C   r  )Nz{}STRING_SET {}{})r  r3   r   r¦   r¼  r�   r#  r9   r9   r:   r%  o  r&  zStringSet.dumpc                 C   r¨  r¼   re  rî  r9   r9   r:   r©  s  r
  zStringSet.__del__N)r;   r<   r=   r“   r5   r%  r©  r9   r9   r9   r:   r©   M  s    !r©   c                   @   sV   e Zd ZdZdd„ Zdd„ Zddd„Zdd
d„Zddd„Zdd„ Z	dd„ Z
dd„ ZdS )ÚSourcez1Scanner for the regular expression source string.c                 C   sL   t |tƒr|| _t| _n| d¡| _dd„ | _d| _d| _|d d… | _d S )Nzlatin-1c                 S   r´  r¼   )rÜ  rŠ  r9   r9   r:   r�  ~  s   
 z!Source.__init__.<locals>.<lambda>r   F)	r*   r+   r~   r–  Ú	char_typeÚdecoder.   r&  rÛ  )r6   r~   r9   r9   r:   r5   x  s   

zSource.__init__c                 C   s¬   | j }| j}z*| jr%	 ||  ¡ r|d7 }n|| dkr#| d|¡}nnq|| }|d | _|W S  tyB   || _|d d…  Y S  tyU   t|ƒ| _|d d…  Y S w )NTr)   r  r'   r   )r~   r.   r&  Úisspacerå  rä  r
  rc   )r6   r~   r.   rØ   r9   r9   r:   rÁ   „  s*   
ø


ýz
Source.getr)   c                 C   sú   | j }| j}zQ| jrDg }t|ƒ|k r>	 ||  ¡ r|d7 }n|| dkr+| d|¡}nnq| || ¡ |d7 }t|ƒ|k sd |¡}n|||| … }|t|ƒ7 }|| _|W S  tyj   t|ƒ| _d |¡ Y S  t	y|   t|ƒ| _d |¡ Y S w ©NTr)   r  r'   rM   )
r~   r.   r&  rc   rw  rå  r±   r‚  rä  r
  )r6   r/   r~   r.   Ú	substringr9   r9   r:   Úget_many   s8   
ø
ô

ýzSource.get_manyTc                 C   s.  | j }| j}| jr`z6g }	 ||  ¡ r|d7 }n"|| dkr%| d|¡}n|| |v |kr9| || ¡ |d7 }nnq|| _W n tyM   t|ƒ| _Y n tyZ   t|ƒ| _Y nw d 	|¡S z!|| |v |kru|d7 }|| |v |ksi|| j|… }|| _|W S  ty–   || j|… }|| _| Y S w rx  )
r~   r.   r&  rw  rå  r±   rä  rc   r
  r‚  )r6   Útest_setr!  r~   r.   ry  r9   r9   r:   r  Æ  sD   

õ
þ
ÿúzSource.get_whilec                 C   sÔ   | j }| j}zF| jr3	 ||  ¡ r|d7 }n|| dkr#| d|¡}n|| |v |kr0|d7 }nnqn|| |v |krG|d7 }|| |v |ks;|| _W d S  ty[   t|ƒ| _Y d S  tyi   t|ƒ| _Y d S w ©NTr)   r  r'   )r~   r.   r&  rw  rå  rä  rc   r
  )r6   r{  r!  r~   r.   r9   r9   r:   Ú
skip_whileö  s.   

ö
ÿþzSource.skip_whilec                 C   sÄ   | j }| j}| jrQz4|D ]+}	 ||  ¡ r|d7 }n|| dkr'| d|¡}nnq|| |kr3 W dS |d7 }q|| _W dS  tyG   Y dS  tyP   Y dS w | ||¡sYdS |t|ƒ | _dS )NTr)   r  r'   F)	r~   r.   r&  rw  rå  rä  r
  rÒ  rc   )r6   ry  r~   r.   rŸ   r9   r9   r:   r°     s4   
ø

þzSource.matchc                 C   s$   |   |¡std |¡| j| jƒ‚d S )Nz
missing {})r°   r%   r3   r~   r.   )r6   ry  r9   r9   r:   r%  :  s   
ÿzSource.expectc                 C   s~   | j }| j}z%| jr%	 ||  ¡ r|d7 }n|| dkr#| d|¡}nnq|t|ƒkW S  ty5   Y dS  ty>   Y dS w r|  )r~   r.   r&  rw  rå  rc   rä  r
  )r6   r~   r.   r9   r9   r:   Úat_end>  s"   
úþzSource.at_endN©r)   r'  )r;   r<   r=   r>   r5   rÁ   rz  r  r}  r°   r%  r~  r9   r9   r9   r:   rt  v  s    

&
0'rt  c                   @   s:   e Zd ZdZddi fdd„Zddd„Zdd	„ Zd
d„ ZdS )ÚInfoz"Info about the regular expression.r   Nc                 C   sl   |t |t@ pt O }|| _|| _d| _|| _d| _i | _i | _	|| _
i | _g | _i | _i | _g | _i | _d S )NFr   )ÚDEFAULT_FLAGSrU  rV  rt   rR  rL  rˆ  rD  rž  Ú
group_nameru  rq  Úopen_groupsrŸ  r   r   r  )r6   rt   ru  rˆ  r9   r9   r:   r5   W  s   
zInfo.__init__c                 C   sª   | j  |¡}|d u r-	 |  jd7  _|d u s| j| jvrnq| j}|r-|| j |< || j|< || jv rAt| jƒd  }|| j|< |}| j |¡ | j |d¡d | j|< |S )NTr)   r   )	rž  rÁ   rD  r‚  rƒ  rc   r  r±   rŸ  )r6   r¦   r4  Úgroup_aliasr9   r9   r:   r$  j  s$   ý



zInfo.open_groupc                 C   s   | j  ¡  d S r¼   )rƒ  rÞ   rî  r9   r9   r:   r'  „  r¤  zInfo.close_groupc                 C   sB   | j t@ pt}|tkrdS | ¡ rt|ƒ}n| j |¡}|| jv S r   )	rt   rU  rV  r    rX  r÷   rž  rÁ   rƒ  )r6   r¦   rW  r4  r9   r9   r:   r;  ‡  s   

zInfo.is_open_groupr¼   )r;   r<   r=   r>   r5   r$  r'  r;  r9   r9   r9   r:   r€  T  s    
r€  c                 C   sä   i }g }| j D ]b\}}}|j||f}| |¡}|du rf|jdkrBt| jt@ ƒ}	t|tƒ}
|	|
f||fkrA| t	t
|ƒ|ƒ||f¡ n| j|j }|d }|dd… ||fkr^| |||f¡ t
|ƒ}|||< ||_q|| _|| _dS )zkChecks whether the reverse and fuzzy features of the group calls match
    the groups which they call.
    Nr   r)   )r   r4  rÁ   r†   rt   r   r*   rç   r±   r«  rc   r   r¦  r  Úadditional_groups)r}   r­  r  r…  ÚcallrŠ   rô  r‘  r¬  ÚrevÚfuzÚdef_infor4  r9   r9   r:   Ú_check_group_features•  s.   


ÿ€
rŠ  c                 C   sb   |   t|t@ ƒ¡\}}|r&d|_|tkrd}|j}|t@ s"|t M }|j}nd}d}d}|||fS )z>Gets the required string and related info of a parsed pattern.Tr[  r   r9   )r  r†   r   rg  rñ   r�   r   rÁ  )r­  rt   Ú
req_offsetrg  Ú	req_flagsÚ	req_charsr9   r9   r:   Ú_get_required_string¼  s   

rŽ  c                   @   s   e Zd Zddd„Zdd„ ZdS )r&   r   c                    s¦  || _ g }|D ].\}}t|ƒ}t||jƒ‰ tˆ jt@ ƒ|_t|ˆ ƒ}| 	¡ s.t
d|j|jƒ‚| | ¡ ¡ qt|ƒ‰ ‡ fdd„t|ƒD ƒ}t|ƒ}tˆ jt@ ƒ}| ˆ |¡}| ˆ ¡}t|ˆ jƒ\}	}
}tˆ |ƒ ˆ jrtt
d|j|jƒ‚tˆ jt@ ƒ}| |¡tjfg }t|ƒ}| ¡ s©ztˆ | |¡ƒ}t|ƒ}|| }W n	 ty¨   Y nw ˆ jt@ p¯t }|dt!t"fvr»t#dƒ‚t$ d |t%@ |B |i i i g |	|
|t&|ƒ¡| _'d S )Nzunbalanced parenthesisc                    s    g | ]\}}t ˆ |d  |ƒ‘qS r  )ræ   )r½   rj  rX   re  r9   r:   r¿   æ  s     z$Scanner.__init__.<locals>.<listcomp>z(recursive regex not supported by Scannerr   z5VERSION0 and VERSION1 flags are mutually incompatible)(Úlexiconrt  r€  ru  r†   rt   r$   r&  rµ   r~  r%   r~   r.   r±   rû  Ú	enumerater²   r   rš   rú  rŽ  rŠ  r  rˆ   r-  ÚSUCCESSr    r  r‹   r  rD   rU  rV  r   r    r
  r{   rQ  rc   Úscanner)r6   r�  rt   ÚpatternsÚphraseÚactionr³   r­  rŠ   r‹  r�  rŒ  r�   Úfs_coderW  r9   re  r:   r5   Ò  sX   
ÿ

ÿ
ÿÿ
þzScanner.__init__c           	      C   s”   g }|j }| j |¡j}d}	 |ƒ }|sn-| ¡ }||krn$| j|jd  d }t|dƒr7|| _|| | ¡ ƒ}|d ur?||ƒ |}q|||d … fS )Nr   Tr)   Ú__call__)r±   r’  r°   r®  r�  Ú	lastindexre   r4  )	r6   r~   r¿  r±   r°   rV   rW   Újr•  r9   r9   r:   Úscan  s(   
ózScanner.scanN)r   )r;   r<   r=   r5   rš  r9   r9   r9   r:   r&   Ñ  s    
Ir&   r�  úúúr'   úú	ú)rR   rS   rU   ÚnrY   Útrí  ÚDigitTÚSpaceÚWord)rç  r   rZ   r   r\   r!   )r   rS   r   ÚKrW   r   ÚZ)rS   r   rW   r   )ÚFAILr   r  ra  )r_   rÂ  r  r   )ûr~   Úsysr‹  Úcollectionsr   Úregex._regexr{   Ú__all__r4   r%   r@   rC   rD   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r   r   rV  rU  ry   r�  rQ  ÚSCOPED_FLAGSÚ	frozensetÚascii_lettersrÿ   r  r  r“  Ú	octdigitsr^  Ú	hexdigitsrg  rÂ   rŠ  r’  r¨  Úget_code_sizeÚBYTES_PER_CODEÚBITS_PER_CODErñ   rI  r¡   r“   r•  r˜  rð  rn  ÚOPCODESr^   r-  r�  r¹  rV   r¤  Úsetattrrx   r   rƒ   r„   r‹   r‡   r    r¢   r¤   r¨   rª   r­   rµ   r¯   rÑ   rÓ   rí   rÐ   ró   rî   rÒ   rú   rü   r  r   r  rý   r  rû   rö   rÄ   r(  r)  r"  r*  r>  r+  r,  r-  r.  rJ  rO  rP  r/  rS  r#  re  rf  rh  rÃ   rz  r~  ro  rp  rr  rs  rt  rŽ  rÈ   r™  r›  rŸ  r¡  r˜  r¦  r©  r¯  r²  rÀ  rÄ  r’   rÎ  rÑ  r�  rÞ  rØ  rÚ  rÙ  r   r  r¶  r  r  rh  r"  r¼  rê  rë  r  rÇ   rÅ   rÆ   rC  rN  r²   rG  r«  r”   r?  rÓ  rÕ  r×  rÍ   rÌ   rÛ  rÏ   rÎ   rß  râ  rç   ru  ró  rß   rá   ræ   r  rà   r<  rB  r·  rÐ  r  rª  r¥   rq  rÕ   r‹  r£  r¢  r   r˜   r`  rÊ   rÉ   rË   re  r¸  r`  r©   rt  r€  rŠ  rŽ  r&   Úget_propertiesrÏ  r  r�  r‘  rÔ  r\  rÁ   r¦   Úprop_valuesr  rc   Úval_namerÖ  ry  rx  rw  Údictrv  rh   r1  r9   r9   r9   r:   Ú<module>   s  ÿÿÿ





ýÿU2


T 
=
	Z$+#A!




)&	FH
ÿF8   .	JY \QDU4M1 Vi!B7) _A'aÿÿùúù
ü	ü