
    Pi?                    l   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e          Z	 G d de          Z
 G d	 d
e          Z G d de          Z G d de j                  Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej         Z ej!        Z!ej"        Z"ej#        Z#ej$        Z$ej%        Z%ej&        Z&ej'        Z'ej(        Z(ej)        Z)ej*        Z*ej+        Z+ej,        Z,ej-        Z-ej.        Z.ej/        Z/ej0        Z0eZ1eez  Z2eez  ez  Z3ed eeiZ4e2ez  ez  ez  ez  ez  Z5eez  ez  ez  ez  ez  e3z  Z6 e7ej8                  Z9 e7ej:                  Z;e9e;z  Z< e7ej=                  Z> e7ej?                  Z@ e7d           e7dg          z  ZAe< e7d          z  ZBe< e7d          z  ZCdZD ejE                    ZFeFdz  ZGdeGz  dz
  ZHeeeeeeeeeeeeeeedZIeez  ZJd ZKeez  ZLeeLz  ZMd d ed eeeLeLiZNddddZOdZP G d d          ZQ eQ            ZR eSePT                                          D ]\  ZUZV eWeReVeU           ddZXd ZYd  ZZd! Z[d" Z\d# Z]d$ Z^d% Z_dd'Z`d( Zad) Zbd* Zcd+ Zdd, Zed- Zfd. Zgd/ Zhd0d1d2d3Zid4 Zjd5 Zkd6 Zld7 Zmd8 Znd9 Zod: Zpd; Zqd< Zrd= Zsd> Ztd? Zud@ ZvdA ZwdB ZxdC ZydD ZzdE Z{dF Z|dG Z}dH Z~dI ZdJ ZdK ZdL ZdM ZdN ZdO ZdP ZddQZdR ZdS ZdT ZdU ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Zdg Zdh Zdi Z edjT                                          Z edkT                                          Zd dlZdm Zdn Zdo Zdp ZdqZdZdZdZdZdrZdZdsdtduZeKdedvedeLdwiZdx Z G dy dz          Z G d{ d|e          Z G d} d~e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d deĦ          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d          Z G d de          Z G d de˦          Z G d de          Z G d de          Z G d de˦          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G dÄ de          Z G dń de          Z G dǄ de          Z G dɄ de٦          Z G d˄ de٦          Z G d̈́ de٦          Z G dτ de٦          Z G dф de          Z G dӄ de          Z G dՄ deߦ          Z G dׄ de          Z G dل de          Z G dۄ de          Z G d݄ de          Z G d߄ de          Z G d d          Z G d d          Zd Zd Z G d d          Z ej                    Zi Ze                                D ]w\  Z\  ZZe                    edi f          \  ZZ eeee          Zeefee<   e                                D ]*\  ZZ ee                    ed          ee          ee<   +xddddddddZdZdZ eddd           eddd&           eddd           eddd           eddd&           eddd           eddd&          dZ ee          Ze                     eddde           eddd&e           eddde           eddd&e           eddde           eddd&e          d            ee          Z e                      eddde           eddd&e           eddde           eddd&e           eddde           eddd&e          d            e             e             ed&           eΦ             e             eƦ             eæ            dZ ee          Ze                     ee           ed&e           ee           ee          d            ee          Ze                     ee           ed&e           ee           ee          d            ee          Ze                     e             ed&           e             e            d            eǦ             eǦ             eԦ             eަ            dZdS (      N)defaultdict)_regex)%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Scanner	RegexFlagc                       e Zd ZdZ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                    t          |t                    rdnd}|| _        || _        || _        |}|{|                    |d|          dz   | _        ||                    |d|          z
  | _        d	                    ||          }||v r#|d	                    | j        | j                  z  }t                              | |           d S )N
   
r      z{} at position {}z (line {}, column {}))
isinstancestrmsgpatternposcountlinenorfindcolnoformat	Exception__init__)selfmessager2   r3   newlines        e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/regex/_regex_core.pyr:   zerror.__init__*   s    $Wc22=$$3?!--C881<DKw}}Wa===DJ)00#>>G'!!299$+*   	4)))))    )NN)__name__
__module____qualname____doc__r:    r?   r>   r'   r'      s2        	 	* * * * * *r?   r'   c                       e Zd ZdS )_UnscopedFlagSetNr@   rA   rB   rD   r?   r>   rF   rF   =           Dr?   rF   c                       e Zd ZdS )
ParseErrorNrG   rD   r?   r>   rJ   rJ   A   rH   r?   rJ   c                       e Zd ZdS )_FirstSetErrorNrG   rD   r?   r>   rL   rL   E   rH   r?   rL   c                       e Zd ZdxZZdxZZdxZZdxZ	Z
dxZZdxZZdxZZdxZZd	xZZd
xZZdxZZdxZZdxZZdxZZdxZZ dxZ!Z"dxZ#Z$d Z%e&j'        Z'dS )r)      i   i   i   i @           i   i          i       i   @   r.   c                 z   | j         
d| j         z  S | j        }g }|dk     }|r| }| j        D ]4}||j        z  r(||j         z  }|                    d|j         z             5|r"|                    t	          |                     d                    |          }|rt          |          dk    rd|z  }nd|z  }|S )Nzregex.%sr   |r.   z~(%s)z~%s)_name__value_	__class__appendhexjoinlen)r;   valuemembersnegativemress         r>   __repr__zRegexFlag.__repr__]   s    ;"++19 	FE 	6 	6Aqy  6!)#zAH4555 	'NN3u::&&&hhw 	"7||amck
r?   N)(r@   rA   rB   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   rd   object__str__rD   r?   r>   r)   r)   I   s        AA	AAAA
AA	AAAABBAAA  : nGGGr?   r)   z()|?*+{^$.[\# z -z &_-.)||~~&&--rQ   r.   )abefir   rb   prsur   r!   wxrO   rP   )rv   rt   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                       e Zd ZdS )	NamespaceNrG   rD   r?   r>   rx   rx   )  rH   r?   rx      c                    t          |                                           }t          |          |z
  }|dk     rdS ||z  |z   }ddl}t	          |d          sdS |                    ||          D ]}		 | |	= # t          $ r Y w xY w|                                 i }
t          |           D ]3\  }}}}}}|||||||f<   	 |||f         |
||f<   $# t          $ r Y 0w xY w|                                 |                    |
           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keysr^   randomhasattrr{   KeyErrorclearupdate)
cache_dict	args_dictlocale_sensitive
max_lengthdivisor
cache_keysoveragenumber_to_tossr~   
doomed_keysensitivity_dictr2   pattern_typeflagsargsdefault_versionlocales                    r>   _shrink_cacher   0  s~    z(())J*oo
*G{{ 	7*W4N MMM68$$  	mmJ??  
	:&& 	 	 	D	
 OOGLZGXGX  CudOVKO	'<GH	6F|U\G\6]\7233 	 	 	D	 ,-----s$   3A77
BB C
CCc                 j    | j         }|t          z  dk    r
|| j        z  }t          j        ||          S )zFolds the case of a string.r   )r   _ALL_ENCODINGSguess_encodingr   	fold_case)infostringr   s      r>   
_fold_caser   b  s9    JE1$$$$E6***r?   c                 X    t          t          j        | j        |                    dk    S z$Checks whether a character is cased.r.   )r^   r   get_all_casesr   )r   chars     r>   
is_cased_ir   j  s$    v#DJ5566::r?   c                 N    t          t          j        | |                    dk    S r   )r^   r   r   )r   r   s     r>   
is_cased_fr   n  s"    v#E40011A55r?   c                     t          | j        t          z            }t          | ||          }|rt	          |t
                    rg S |                    |          S )z&Compiles the firstset for the pattern.)boolr   r   _check_firstsetr/   AnyAllcompile)r   fsreverses      r>   _compile_firstsetr   r  sY    4:'((G	w	+	+B B'' 	 ::gr?   c                    |rd|v rdS t                      }t          }|D ]Y}t          |t                    r
|j        s dS ||j        z  }|                    |                    t                               Z|t          t          z  k    rdS t          | t          |          |t           z  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   r`   r   rp   s         r>   r   r   |  s     t eeGJ 5 5a## 	AJ 	44 	al"
ALLFL334444h+,,t 
$W*y2H
 
 
B	T74	0	0BIr?   c                 >    g }| D ]}|                     |           |S )z(Flattens the code from a list of tuples.)extend)code	flat_codecs      r>   _flatten_coder     s3    I  r?   c                 X    | j         t          z  }| j         t          z  r|t           z  }|S )zMakes the case flags.)r   
CASE_FLAGSr   r   )r   r   s     r>   make_case_flagsr     s0    J#E zE (Lr?   Fc                 `    |rt          |          S t          |t          |                     S )zMakes a character literal.r   )r   r   )r   r_   r   s      r>   make_characterr     s3      Ut'<'<====r?   c                 B    t          | ||t          |                     S )zMakes a group reference.r   )RefGroupr   )r   namepositions      r>   make_ref_groupr     s!    D$_T5J5JKKKKr?   c                 @    t          | |t          |                     S )zMakes a string set.r   )	StringSetr   )r   r   s     r>   make_string_setr     s    T4OD,A,ABBBBr?   c                 P    |r|S |                     t          |                     S )zMakes a property.r   )r   r   )r   propr   s      r>   make_propertyr     s+     ??od&;&;?<<<r?   c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          |          S )zParses a pattern, eg. 'a|b|c'.rW   r.   r   )parse_sequencematchr[   r^   Branch)sourcer   branchess      r>   _parse_patternr     s    vt,,-H
,,s

 6vt44555 ,,s

 6 8}}{(r?   c           	         dg}t          |          }	 | j        }|                                 }|t          v rp|dv r	|| _        n|dk    r&|                    t          | |d                     nh|dk    r:t          | |          }|t          |          }n?|                    |           n(|dk    r|j        t          z  r#|                    t                                 n|j        t          z  r#|                    t                                 n|                    t                                 n|dk    r%|                    t          | |                     np|d	k    r|j        t          z  rU|j        t          z  r#|                    t                                 n)|                    t!                                 n|                    t#                                 n|d
k    r|j        t          z  rU|j        t          z  r#|                    t%                                 n|                    t'                                 ny|j        t          z  r#|                    t)                                 nG|                    t+                                 n$|dv rt-          | ||          }|r+t/          | ||||||           |                    d           nt1          | |||          }|r9t3          |          r)t5          | |||||           |                    d           n|                    t7          t9          |          |                     nc|                    t7          t9          |          |                     n1|                    t7          t9          |          |                     d |D             }t;          |          S )zParses a sequence, eg. 'abc'.NTz)|\F(.[^$z?*+{r   c                     g | ]}||S NrD   ).0items     r>   
<listcomp>z"parse_sequence.<locals>.<listcomp>!  s    >>>T-=-=-=-=r?   )r   r3   getSPECIAL_CHARSr[   parse_escapeparse_parenr   r   r   r$   AnyUAny	parse_setr   StartOfLineUStartOfLineStartOfString
EndOfLineU	EndOfLineEndOfStringLineUEndOfStringLineparse_quantifierapply_quantifierparse_fuzzyis_actually_fuzzyapply_constraintr   ordSequence)	r   r   sequencer   	saved_poschelementcountsconstraintss	            r>   r   r     s   vH &&JMGJ	ZZ\\Tzz&
tVT5 A ABBBBs%fd33?!0!6!6JJOOG,,,,s:& +OOFHH----Z$& +OODFF++++OOCEE****s	&$ 7 78888s:	) 5zD( 7 7777 6666OOMOO4444s:	) 	;zD( 5 
5555 	4444zD( ; (8(:(:;;;; (9(9::::v)&$;; 2$VT6:r+ + +OOD)))) #.fdB
"K"KK" 	2,[99 2,VT;
'3 3 3$OOD111 !	#b''%/)1 )1 )1 2 2 2 2 	#b''j I I IJJJJ OOIc"gg*EEEFFF[MG^ ?>>>>HHr?   c                     |                      d          dk    rdS |                      d          |                      d          |                      d          fdk    rdS dS )	z4Checks whether a fuzzy constraint is actually fuzzy.rn   r   r   Frs   rp   d)r   r   r   T)r   )r   s    r>   r   r   $  s_    sv%%ukooc22KOOC4H4HIMeeeu4r?   c                    |                                 }|.|rt          d| j        |          t          d| j        |          t          |t          t
          t          f          rt          d| j        |          |\  }}	| j        }|                                 }|dk    rt
          }
n|dk    rt          }
n|| _        t          }
|	                                s|dk    s|	dk    r |
|||	          }|
                    |           d S )Nzmultiple repeatznothing to repeat?+r.   )popr'   r   r/   GreedyRepeat
LazyRepeatPossessiveRepeatr3   r   is_emptyr[   )r   r   r   r   r   r   r   r   	min_count	max_countrepeateds              r>   r   r   .  s   llnnG 	E)6=)DDD'	BBB'L*6FGHH A%v}i@@@!Iy
I	B	Syy	s# 
  :9>>Y!^^(7Iy99OOGr?   c                 0   |                                 }|t          d| j        |          t          |t                    r1t          |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   s          r>   r   r   N  s    llnnG2FM9MMM '5!! 5"7#5{CC     g{3344444r?   )r   r.   r   Nr.   N)r  *r  c                 t    t                               |          }|r|S |dk    rt          |           }|r|S dS )zParses a quantifier.{N)_QUANTIFIERSr   parse_limited_quantifier)r   r   r   qr   s        r>   r   r   ^  sJ    A 	Syy)&11 	M4r?   c                      | duo
| t           k    S )z,Checks whether a count is above the maximum.N	UNLIMITED)r4   s    r>   is_above_limitr  m  s    3)!33r?   c                    | j         }t          |           }|                     d          r4t          |           }t          |pd          }|rt          |          nd}n|s	|| _         dS t          |          x}}|                     d          s	|| _         dS t	          |          st	          |          rt          d| j        |          |||k    rt          d| j        |          ||fS )zParses a limited quantifier.,r   N}zrepeat count too bigz"min repeat greater than max repeat)r3   parse_countr   intr  r'   r   )r   r   r  r	  s       r>   r  r  q  s   
IF##I||C /''	 	Q''	&/9C	NNNT		 	"FJ4 #I.	I<< 
ti   FN9$=$= F*FM9EEEY!6!68&-
  	 ir?   c                    | j         }|dk    rdS i }	 t          | |           |                     d          r%t          | |           |                     d          %n# t          $ r || _         Y dS w xY w|                     d          rt	          | ||          |d<   |                     d          st          d| j        | j                   |S )z#Parses a fuzzy setting, if present.r  Nr  :testr  z
expected })r3   parse_fuzzy_itemr   rJ   parse_fuzzy_testr'   r   )r   r   r   r   r   r   s         r>   r   r     s    
I	SyytK---ll3 	2V[111 ll3 	2   
tt ||C I.vtZHHF<< =L&-<<<s   A
A A32A3c                     | j         }	 t          | |           dS # t          $ r || _         t          | |           Y dS w xY w)zParses a fuzzy setting item.N)r3   parse_cost_constraintrJ   parse_cost_equation)r   r   r   s      r>   r#  r#    s_    
I1fk22222 1 1 1
FK0000001s    !A A c                    | j         }|                                 }|t          v rkt          | ||          }t	          |           }|d||<   dS | j         }t          |           }|s|dz  }|dk     rt          d| j        |          d|f||<   dS |t          v r|| _         | j         }t          |           }t	          |           }	|	t                      t          | ||                                           }t	          |           }|t                      | j         }t          |           }|	s|dz  }|s|dz  }d|cxk    r|k    sn t          d| j        |          ||f||<   dS t                      )zParses a cost constraint.Nr  r.   r   bad fuzzy cost limit)
r3   r   ALPHAparse_constraintparse_fuzzy_compareparse_cost_limitr'   r   DIGITSrJ   )
r   r   r   r   
constraintmax_inccost_posmax_costmin_costmin_incs
             r>   r&  r&    s   
I	B	U{{%fk2>>
%f--?&-K
### zH'//H  A!||2FM8LLL&'kK
###	v
 :#F++%f--?,,%fk6::<<HH
%f--?,, :#F++  	MH 	MHH((((((((.xHHH"*H"4Jllr?   c                     | j         }t          |           }	 t          |          S # t          $ r Y nw xY wt	          d| j        |          )zParses a cost limit.r)  )r3   r  r  
ValueErrorr'   r   )r   r1  digitss      r>   r-  r-    s^    zH  F6{{    &x
@
@@s   ' 
44c                 N    |dvrt                      ||v rt                      |S )zParses a constraint.deis)rJ   )r   r   r   s      r>   r+  r+    s1    	ll	[llIr?   c                 b    |                      d          rdS |                      d          rdS dS )zParses a cost comparator.z<=T<FNr   r   s    r>   r,  r,    s9    ||D t	c		 utr?   c                    d|v rt          d| j        | j                  i }t          | |           |                     d          r%t          | |           |                     d          %t          |           }|t                      t          t          |                     }|s|dz  }|dk     rt          d| j        | j                  ||d<   ||d<   dS )	zParses a cost equation.costzmore than one cost equationr  Nr.   r   r)  max)	r'   r   r3   parse_cost_termr   r,  rJ   r  r  )r   r   r?  r0  r2  s        r>   r'  r'    s    16=&*MMMDFD!!!
,,s

 &%%% ,,s

 & "&))Gll;v&&''H A!||*FM6:FFFDKKr?   c                     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   rJ   r'   r   r3   r  )r   r?  coeffr   s       r>   rA  rA  (  sf    E	B	ll	Tzz)6=&*EEE5:ADHHHr?   c                    | j         }|                                 }|t          v r|dk    rt          | |d          S |dk    rH|j        t
          z  rt                      S |j        t          z  rt                      S t                      S |dk    rt          | |          S t          d| j        |          |rt          t          |          |          S t          d| j        |          )Nr   Fr   r   zexpected character setr   )r3   r   r   r   r   r   r   r$   r   r   r   r'   r   r   r   )r   r   r   r   r   s        r>   r$  r$  4  s    
I	B	]::e4443YYzF" xxd" vvuu3YYVT***0&-KKK	 HRZ8888,fmYGGGr?   c                 6    |                      t                    S )z0Parses a quantifier's count, which can be empty.)	get_whiler.  r=  s    r>   r  r  N  s    F###r?   c                    | j         }|                     d          }|dk    rV| j         }|                     d          }|dk    r| j         }|                                 }|dv rt          | |d|dk              S || _         t          |           }|                    |          }|                     d           |j        }	 t          | |          }	|                     d           ||_        t          |j        t          z            | _
        n-# ||_        t          |j        t          z            | _
        w xY w|                                 t          |||	          S |dv rt          | |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|cxk    rdk    rn nt%          | |||          S |dk    rt'          | ||          S |dk    s|dk    r-|                                 t*          v rt-          | |||          S || _         t/          | |          S |dk    r| j         }|                     t3          d          d          }
|
dd                                         rIt6                              |
          }|st9          d| j        |          |                     d           |S || _         |                                }|j        }	 t          | |          }	|                     d           ||_        t          |j        t          z            | _
        n-# ||_        t          |j        t          z            | _
        w xY w|                                 t          |||	          S )z[Parses a parenthesised subpattern or a flag. Returns FLAGS if it's an
    inline flag.
    Tr  r;  =!rJ  >)Fr   #r   rW   r   09&r  -r  )>includeNr.   zunknown verb)r3   r   parse_lookaround
parse_name
open_groupexpectr   r   r   r&   ignore_spaceclose_groupr  parse_extensionparse_commentparse_conditionalparse_atomicparse_commonparse_call_groupparse_call_named_grouppeekr.  parse_rel_call_groupparse_flags_subpatternrG  r   isalphaVERBSr'   r   )r   r   r   r   saved_pos_2saved_pos_3r   groupsaved_flagsr  wordverbs               r>   r   r   R  s    
I	D		B	SyyjZZ99 *KBZ'dB#IFFF %FJf%%DOOD))EMM#*KA+FD99
c"""(
&*4:+?&@&@## )
&*4:+?&@&@#@@@@uj111#FD%sCCC99"6400099 (((99$VT22299---99---99r((((S(((((#FD"kBBB99)&$DDD#IIs(?(?'b+FFF !
%fd333	SyyjD		5991: 	99T??D HNFM;GGGMM#K FJOOE*K9#FD11
c 
"4:#788 !
"4:#7888888uj)))s   %D *D<3%N *N+c                 J   | j         }|                                 }|dk    rt          |           }|                    |          }|                     d           |j        }	 t          | |          }|                     d           ||_        t          |j        t          z            | _	        n-# ||_        t          |j        t          z            | _	        w xY w|
                                 t          |||          S |dk    rbt          | d          }|                     d           |                    |          rt          d| j        |          t          |||          S |dk    s|dk    rt!          | ||          S || _         t          d	| j        |          )
zParses a Python extension.r;  rL  rM  rJ  T)allow_numericcannot refer to an open grouprQ  unknown extension)r3   r   rW  rX  rY  r   r   r   r&   rZ  r[  r  is_open_groupr'   r   r   rb  )r   r   r   r   r   rj  rk  r  s           r>   r\  r\    s   
I	B	Syy&!!%%cj	='55JMM#$DJ"&tzG';"<"<F %DJ"&tzG';"<"<F<<<<T5*---	Syy&555cd## 	7   dD)444	SyyB#II%fdI>>>FJ
#V]I
>
>>s   #%B1 1*Cc                     	 | j         }|                     d          }|r|dk    rn|dk    r|                     d          }A|| _         |                     d           dS )zParses a comment.TrM  r   N)r3   r   rY  )r   r   r   s      r>   r]  r]    sq    !J	JJt 	AHH99

4  A! FJ
MM#4r?   c                 *   |j         }	 t          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY wt          |||          S )zParses a lookaround.rM  )r   r   rY  r   r&   rZ  
LookAround)r   r   behindr   rk  r  s         r>   rV  rV    s    *K9#FD11
c 
"4:#788 !
"4:#7888888fh
333   %A *Bc                    |j         }| j        }|                                 }|dk    r|                                 }|dv rt          | |d|dk              S |dk    r.|                                 }|dv rt          | |d|dk              S || _        t	          d| j        | j                  || _        	 t          | d          }|                     d           t          | |          }| 	                    d	          rt          | |          }nt                      }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY w|                                r"|                                rt                      S t          |||||          S )
z Parses a conditional subpattern.r  rI  FrJ  r;  Tzexpected lookaround conditionalrM  rW   )r   r3   r   parse_lookaround_conditionalr'   r   rW  rY  r   r   r   r   r&   rZ  r  Conditional)r   r   rk  r   r   rj  
yes_branch	no_branchs           r>   r^  r^    s   *K
I	B	SyyZZ\\/eR3YOOO99BZ3FD$I    
5v}
*  	 FJ964((c#FD11
<< 	#&vt44II 

Ic 
"4:#788 !
"4:#7888888 !3!3!5!5 zztUJ	9EEEs   5A>E *Fc                    |j         }	 t          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY wt          | |          }|                     d          rt          | |          }nt                      }|                     d           t          |||||          S )NrM  rW   )
r   r   rY  r   r&   rZ  r   r   r   LookAroundConditional)r   r   rv  r   rk  r  r{  r|  s           r>   ry  ry    s    *K9#FD11
c 
"4:#788 !
"4:#7888888--J||C "6400		JJ	
MM# :z  rw  c                 &   |j         }	 t          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY wt          |          S )zParses an atomic subpattern.rM  )r   r   rY  r   r&   rZ  Atomic)r   r   rk  r  s       r>   r_  r_  .  s    *K9#FD11
c 
"4:#788 !
"4:#7888888*rw  c                    |j         }t          | |          g}|j         }|                     d          rT||_         |                    t          | |                     t	          ||j                   }|                     d          T||_         |                     d           t          |          dk    r|d         S t          |          S )zParses a common groups branch.rW   rM  r.   r   )group_countr   r   r[   r@  rY  r^   r   )r   r   initial_group_countr   final_group_counts        r>   r`  r`  :  s     *vt,,-H(
,,s

 E.vt44555 143CDD ,,s

 E
 )D
MM#
8}}{(r?   c                     |dk    rd}n||                      t                    z   }|                     d           t          |||          S )zParses a call to a group.r   rO  rM  )rG  r.  rY  	CallGroup)r   r   r   r3   rj  s        r>   ra  ra  L  sN    	SyyV%%f---
MM#T5#&&&r?   c                 V   |                      t                    }|st          d| j        | j                  t          |          }|dk    r
|j        |z   n|j        |z
  dz   }|dk    rt          d| j        | j                  |                     d           t          |||          S )z"Parses a relative call to a group.zmissing relative group numberr  r.   r   zinvalid relative group numberrM  )	rG  r.  r'   r   r3   r  r  rY  r  )r   r   r   r3   r7  offsetrj  s          r>   rd  rd  W  s    f%%F P3V]FJOOO[[F)+sDv%%8H68QTU8UEzz3V]FJOOO
MM#T5#&&&r?   c                 l    t          |           }|                     d           t          |||          S )zParses a call to a named group.rM  )rW  rY  r  )r   r   r3   rj  s       r>   rb  rb  f  s3    vE
MM#T5#&&&r?   c                     d}	 	 | j         }|                                 }|dk    r||                                 z  }|t          |         z  }I# t          $ r
 || _         Y nw xY w|S )zParses a set of inline flags.r   TV)r3   r   REGEX_FLAGSr   )r   r   r   r   s       r>   parse_flag_setr  m  s    E	%
IBSyyfjjll"[_$E	%    


 Ls   A
A A"!A"c                     t          |           }|                     d          r-t          |           }|st          d| j        | j                  nd}|t
          z  rd|_        ||fS )z!Parses flags being turned on/off.rR  z$bad inline flags: no flags after '-'r   T)r  r   r'   r   r3   r   inline_localer   r   flags_on	flags_offs       r>   parse_flagsr  }  s    f%%H||C "6**	 	>j  	 	& "!Yr?   c                    |j         }|j         |z  | z  |_         |j         t          t          z  t          z  z  r|j         t           z  |z  |_         t          |j         t          z            | _        	 t          | |          }| 	                    d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY w|S )z&Parses a subpattern with scoped flags.rM  )
r   r   r   r   r   r   r&   rZ  r   rY  )r   r   r  r  rk  r  s         r>   parse_subpatternr    s    *K*x'I:5DJ zUV^g-. ?jN?2h>
tzG344F9#FD11
c 
"4:#788 !
"4:#7888888s   4%C *C,c                    t          | |          \  }}|t          z  rt          d| j        | j                  ||z  rt          d| j        | j                  ||j         z  t          z  }|r$|xj        |z  c_        t          |j                  |t           z  }|                     d          rt          | |||          S |                     d          rt          | |||           dS t          d| j        | j                  )zParses 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!  rM  Nrq  )
r  GLOBAL_FLAGSr'   r   r3   global_flagsrF   r   r  parse_positional_flags)r   r   r  r  new_global_flagss        r>   re  re    s3   
 &fd33Hi< %C
-% % 	% ) >
*  	 !D$5#55E 2-- t0111 H||C Ch	BBB||C vtXyAAAt
#V]FJ
?
??r?   c                 n    |j         |z  | z  |_         t          |j         t          z            | _        dS )zParses positional flags.N)r   r   r&   rZ  r  s       r>   r  r    s4    *x'I:5DJtzG344Fr?   c                 |   |                      t          d          d          }|st          d| j        | j                  |                                r7|rdnd}|rt          |          |k     rt          d| j        | j                  n/|                                st          d| j        | j                  |S )zParses a name.rS  FrT  zmissing group namer   r.   zbad character in group name)rG  r   r'   r   r3   isdigitr  isidentifier)r   ro  allow_group_0r   	min_groups        r>   rW  rW    s    CIIu55D E(&-DDD||~~ &-AAA	 	D		I 5 55v}j   !6   "" 	5v}j   Kr?   c                 4    t          d | D                       S )z!Checks whether a string is octal.c              3   (   K   | ]}|t           v V  d S r   )
OCT_DIGITSr   r   s     r>   	<genexpr>zis_octal.<locals>.<genexpr>  '      11BrZ111111r?   allr   s    r>   is_octalr        11&111111r?   c                 4    t          d | D                       S )z#Checks whether a string is decimal.c              3   (   K   | ]}|t           v V  d S r   )r.  r  s     r>   r  zis_decimal.<locals>.<genexpr>  s&      --rV|------r?   r  r  s    r>   
is_decimalr    s    --f------r?   c                 4    t          d | D                       S )z'Checks whether a string is hexadecimal.c              3   (   K   | ]}|t           v V  d S r   )
HEX_DIGITSr  s     r>   r  z!is_hexadecimal.<locals>.<genexpr>  r  r?   r  r  s    r>   is_hexadecimalr    r  r?   c           
         | j         }d| _         |                                 }|| _         |st          d| j        | j                  |t
          v rt          | ||t
          |         ||          S |dk    rO|sM| j        }	 t          | |          S # t          $ r
 || _        Y nw xY wt          |t          |          |          S |dk    r|st                      S |dk    r|st          | |          S |dk    rt          | ||          S |dv rt          | ||dk    |          S |d	k    rr|spg d
}|j        t          k    r|                    g d           t#          t%          t'          ddg          t)          |d |D                       g                    S |dk    r|st+                      S |t,          v rf|s|j        t0          z  rt2                              |          }nn|j        t4          z  rt6                              |          }nD|j        t          z  rt8                              |          }nt:                              |          }|r|S |j        t4          z  rt<                              |          }nD|j        t          z  rt>                              |          }nt@                              |          }|r|S tB                              |          }|rtE          t          |                    S t          d|z  | j        | j                  |tF          v rtI          | |||          S t          |t          |          |          S )zParses an escape sequence.Fbad escape (end of pattern)gGr   NpPrq   r   )
            )   i(   i)   r  r  c                 ,    g | ]}t          |          S rD   r   r   r   s     r>   r   z parse_escape.<locals>.<listcomp>  s6     D D D ENaLL D D Dr?   r%   bad escape \%s)%rZ  r   r'   r   r3   HEX_ESCAPESparse_hex_escapeparse_group_refr   r   SearchAnchorparse_string_setparse_named_charparse_propertyr   r   r   r  r   Stringr   Graphemer*  r   r$   WORD_POSITION_ESCAPESr   ASCII_POSITION_ESCAPESUNICODE_POSITION_ESCAPESPOSITION_ESCAPESASCII_CHARSET_ESCAPESUNICODE_CHARSET_ESCAPESCHARSET_ESCAPESCHARACTER_ESCAPESr   r.  parse_numeric_escape)r   r   r   saved_ignorer   r   charsetr_   s           r>   r   r     s   &LF	B&F N16=&*MMM	[b+b/62NNN	s6J		#"64000 	# 	# 	#"FJJJ	# dCGGV444	s6~~	s6---	sf555	tfdB#Iv>>>	s6***'))NN111222ffdD\22HT D DD D D 5 5        	 	s6zz	u  	zD  1-11"55e# 1.22266g% 1044R88(,,R00 : 	,)--b11EEZ'! 	,+//33EE#''++E 	L!%%b)) 	)SZZ(((%*FM6:FFF	v#FD"f=== dCGGV444s   ?B B#"B#c                 .   |s|dk    rt          | ||g|          S |}| j        }|                                 }|t          v r||z  }| j        }|                                 }t	          |          rY|t
          v rP|j        t          z  }|t          k    s|t          k    rd}nd}t          ||z   d          |z  }t          ||          S || _        |                    |          rt          d| j        | j                  t          ||| j                  S )z!Parses a numeric escape sequence.rO       rQ   rp  )parse_octal_escaper3   r   r.  r  r  r   r   r   r   r  r   rr  r'   r   r   )	r   r   r   r   r7  r   encoding
octal_maskr_   s	            r>   r  r  ;  s#    >s!&$f=== F
I	B	V||"J	ZZ\\F 		/j 0 0zN2H5  H$6$6!

"
Q''*4E!$... FJ&!! P3V]FJOOO$
333r?   c                 d   | j         }|                                 }t          |          dk     rU|t          v rL|                    |           | j         }|                                 }t          |          dk     r	|t          v L|| _         	 t          d                    |          d          }t          |||          S # t          $ re |d         t          v r1t          dd                    |          z  | j
        | j                   t          d|d         z  | j
        | j                   w xY w)z Parses an octal escape sequence.   rg   rQ   r   zincomplete escape \%sr  )r3   r   r^   r  r[   r  r]   r   r6  r'   r   )r   r   r7  r   r   r   r_   s          r>   r  r  \  s)   
I	B
f++//bJ..bJ	ZZ\\ f++//bJ..
 FJ	BGGFOOQ''dE6222   !9
""02776??BmVZ) ) ) )F1I5v}j  s   3C   A/D/c                    | j         }g }t          |          D ]b}|                                 }	|	t          vr.t	          d|d                    |          | j        |          |                    |	           c	 t          d                    |          d          }
|
dk     rt          ||
|          S n# t          $ r Y nw xY wt	          d|d                    |          | j        |          )zParses a hex escape sequence.incomplete escape \rg   rR   i   zbad hex escape \)r3   ranger   r  r'   r]   r   r[   r  r   r6  )r   r   escexpected_lenr   typer   r7  rp   r   r_   s              r>   r  r  q  s   
IF<    ZZ\\Z%ddBGGFOOOLmY( ( (b7BGGFOOR(( 8!$v666      %33@mY     s   =#B8 8
CCc                    |                      d           | j        }t          | d          }|                      d           |                    |          rt	          d| j        | j                  t          |||          S )zParses a group reference.r;  TrL  rp  )rY  r3   rW  rr  r'   r   r   )r   r   r   r   s       r>   r  r    s|    
MM#
Ifd##D
MM#$ P3V]FJOOO$i000r?   c                     |                      d           t          | d          }|                      d           |	||j        vrt          d| j        | j                  t          ||          S )zParses a string set reference.r;  TrL  Nzundefined named list)rY  rW  kwargsr'   r   r3   r   )r   r   r   s      r>   r  r    sm    
MM#fd##D
MM#|t4;..*FM6:FFF4&&&r?   c                    | j         }|                     d          r|                     t          d          }|                     d          r\	 t	          j        |          }t          |t          |          |          S # t          $ r t          d| j
        | j                   w xY w|| _         t          |t          d          |          S )zParses a named character.r  T)keep_spacesr  undefined character namer  )r3   r   rG  NAMED_CHAR_PARTunicodedatalookupr   r   r   r'   r   )r   r   r   r   r   r_   s         r>   r  r    s    
I||C TBB<< 	#*400%dCJJ???   6*   FJ$C&111s   1B &B'c                 |   | j         }|                                 }|dk    r|                     d          }t          |           \  }}|                     d          rY|j        t
          z  rt          }	n|j        t          z  rt          }	nd}	t          ||||k    | |	          }
t          ||
|          S n[|rY|dv rU|j        t
          z  rt          }	n|j        t          z  rt          }	nd}	t          d||| |	          }
t          ||
|          S || _         |rdnd	}t          |t          |          |          S )
zParses a Unicode property.r  r   r  r   r  CLMNPSZNrq   r   )r3   r   r   parse_property_namer   r   ASCII_ENCODINGr   UNICODE_ENCODINGlookup_propertyr   r   r   )r   r   r   r   r   r   negate	prop_namer   r  r   s              r>   r  r    s]   
I	B	Syyc""-f55	4<< 	5zE! )g% +"9dH4F! ! !D tV444	5 
 
1i: 	%HHZ'! 	'HHHtR6HMMMT4000 FJ	!cB$B000r?   c                 ,   |                      t                    }| j        }|                                 }|rQ|dv rM|}|                      t          t          d          z                                            }|r| j        }nd|}}nd}|| _        ||fS )z/Parses a property name, which may be qualified.z:=z &_-./N)rG  PROPERTY_NAME_PARTr3   r   ALNUMr   strip)r   r   r   r   r  s        r>   r  r    s    .//D
I	B	 bDjj	H 566<<>> 	.
II #ItII	FJd?r?   c                    |j         t          z  pt          }| j        }d| _        |                     d          }	 |t
          k    rt          | |          }nt          | |          }|                     d          st          d| j	        | j
                  	 || _        n# || _        w xY w|r|                    |j                   }|                    t          |                    }|S )zParses a character set.Fr   ]	missing ]r   r   )r   _ALL_VERSIONSDEFAULT_VERSIONrZ  r   r    parse_set_imp_unionparse_set_unionr'   r   r3   r   r   r   )r   r   versionr  r  r   s         r>   r   r     s    zM)=oG&LF\\#F	+h&vt44DD"6400D||C   	@V]FJ???	@ +l**** ;DM(9::??od&;&;?<<DKs   AB   	B)c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          ||          S )zParses a set union ([x||y]).rh   r.   r   )parse_set_symm_diffr   r[   r^   r   r   r   itemss      r>   r  r    s     ../E
,,t

 8(66777 ,,t

 8 5zzQQxD%   r?   c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          ||          S )z+Parses a set symmetric difference ([x~~y]).ri   r.   r   )parse_set_interr   r[   r^   
SetSymDiffr  s      r>   r  r    s    VT**+E
,,t

 4_VT22333 ,,t

 4 5zzQQxdE"""r?   c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          ||          S )z#Parses a set intersection ([x&&y]).rj   r.   r   )parse_set_diffr   r[   r^   SetInterr  s      r>   r  r    s    FD))*E
,,t

 3^FD11222 ,,t

 3 5zzQQxD%   r?   c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          ||          S )z!Parses a set difference ([x--y]).rk   r.   r   )r   r   r[   r^   SetDiffr  s      r>   r  r    s     ../E
,,t

 8(66777 ,,t

 8 5zzQQx4r?   c                     |j         t          z  pt          }t           |          g}	  j        }                     d          r| _        nW|t          k    r(t           fdt          D                       r| _        n$|	                    t           |                     {t          |          dk    r|d         S t          ||          S )z#Parses a set implicit union ([xy]).Tr  c              3   B   K   | ]}                     |          V  d S r   r<  )r   opr   s     r>   r  z&parse_set_imp_union.<locals>.<genexpr>5  s/      &J&JBv||B'7'7&J&J&J&J&J&Jr?   r.   r   )r   r  r  parse_set_memberr3   r   r"   anySET_OPSr[   r^   r   )r   r   r  r  r   s   `    r>   r   r   )  s    zM)=oGfd++,E5J	<< 	"FJh3&J&J&J&J'&J&J&J#J#J"FJ%fd334445 5zzQQxD%   r?   c           	         t          | |          }| j        }t          |t                    r|j        r|                     d          s|S |j        t          z  pt          }| j        }|t          k    r|                     d          r	|| _        |S |                     d          r3|| _        t          ||t          t          d                    g          S t          | |          }t          |t                    r|j        s-t          ||t          t          d                    |g          S |j        |j        k    rt          d| j        | j                  |j        |j        k    r|S t          |j        |j                  S )z#Parses a member in a character set.rR  r  zbad character range)parse_set_itemr3   r/   r   r   r   r   r  r  r"   r   r   r_   r'   r   Range)r   r   start
saved_pos1r  
saved_pos2ends          r>   r  r  @  sw    64((EJui((  ll3 zM)=oG J(v||C00  
||C <  
uiC&9&9:;;; 
&
&Cc9%% AS\ AuiC&9&93?@@@ {SY)6=&*EEE{cici(((r?   c                    |j         t          z  pt          }|                     d          rt	          | |d          S | j        }|                     d          r(	 t          | |          S # t          $ r
 || _        Y nw xY w|t          k    r|                     d          ru|                     d          }t          | |          }|                     d          st          d| j        | j                  |r|                    |j                   }|S |                                 }|st          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)r   r  r  r   r   r3   parse_posix_classrJ   r"   r  r'   r   r   r   r   r   r   )r   r   r  r   r  r   r   s          r>   r  r  i  s`   zM)=oG||D 0FD$///
I||D #	#$VT222 	# 	# 	#"FJJJ	# (v||C00 c""vt,,||C   	@V]FJ??? 	???,=?>>D	B M0&-LLLSWWs   A* *A>=A>c                     |                      d          }t          |           \  }}|                      d          st                      t          ||| | d          S )zParses a POSIX character class.r   z:]T)posix)r   r  rJ   r  )r   r   r  r  r   s        r>   r  r    s]    \\#F)&11OIt<< ll9dJdKKKKr?   c                     t          |           }| |z
  }t          |          dk     r|dfS t          d|z            \  }}||z  |z   |fS )z$Converts a float to a rational pair.g-C6?r.   g      ?)r  absfloat_to_rational)fltint_partr'   dennums        r>   r"  r"    sZ    3xxH(NE
5zzF{ u--HCc>C$$r?   c                    | dd         dk    r| d         | dd         } }nd}|                      d          }t          |          dk    r<t          t          |d                   t          |d                   z            \  }}nGt          |          dk    r&t          t          |d                             \  }}nt	                      d                    |||          }|                    d	          r
|dd
         S |S )z<Converts a numeric string to a rational string, if possible.Nr.   rR  r   rg   /rO   z{}{}/{}z/1)splitr^   r"  floatr6  r8   endswith)numericsignpartsr&  r%  results         r>   numeric_to_rationalr1    s    !}
GACCMgMM#E
5zzQ$U58__uU1X%FGGSS	Uq$U58__55SSlldC--Ft tt}Mr?   c                     	 t          d                    |                     S # t          t          f$ r4 d                    d | D                                                       cY S w xY w)z&Standardises a property or value name.rg   c              3   "   K   | ]
}|d v|V  dS )z_- NrD   r  s     r>   r  z#standardise_name.<locals>.<genexpr>  s&      <<bBeOOrOOOO<<r?   )r1  r]   r6  ZeroDivisionErrorupper)r   s    r>   standardise_namer6    sx    E"2774==111)* E E Eww<<D<<<<<BBDDDDDEs   !$ AA)(A)zALNUM DIGIT PUNCT XDIGITzYES Y NO N TRUE T FALSE Fc                 f   | rt          |           nd} t          |          }| |fdk    rdd| }}} |r"| s |                                t          v rd|z   }| rt                              |           }|s,|st          d          t          d|j        |j                  |\  }}|                    |          }	|	,|st          d          t          d|j        |j                  t          |dz  |	z  ||	          S d
D ]P} t                              |           \  }}|                    |          }	|	t          |dz  |	z  ||	          c S Qt                              |          }|rK|\  }}t          |          t          k    rt          |dz  dz  ||	          S t          |dz  | |	          S |                    d          rEt                              |dd                   }|r!|\  }}d|v rt          |dz  dz  ||	          S dD ]p\  }
} |                    |
          rVt                              |           \  }}|                    |dd                   }	|	t          |dz  |	z  ||	          c S q|st          d          t          d|j        |j                  )zLooks up a property.N)GENERALCATEGORYASSIGNEDr8  
UNASSIGNEDr   zunknown propertyzunknown property valuerR   r  )GCSCRIPTBLOCKr.   ISrO   YES))r>  r<  )INr=  )r6  r5  _POSIX_CLASSES
PROPERTIESr   r'   r   r3   Propertyr   _BINARY_VALUES
startswith)propertyr_   r   r   r  r  r   prop_id
value_dictval_idprefixs              r>   r  r    s1    .6?)))4HU##E%;;;$5|\%  X  %++-->"A"A% O~~h'' 	G 0.///*FM6:FFF"&&> 645550&-LLLB&0(XNNNN . S S(nnX66&&W]f4hRRRRRR  >>%  D H"z??n,,W]a/HMMMM28|hGGGG  R~~eACCk** 	R"&GZ
""B! 3XQQQQ @ W WF## 	W",..":":GZ^^E!##K00F!B& 8(XVVVVVV  (&'''
"FM6:
>
>>r?   c                    |                                  }|t          v rt                               |          }|rdt          |          gfS |t          v r'|dk    s|rdt          | t          |         |          gfS |dk    rdt          | |          gfS |dk    r|rt          |           }|d|gfS t          d|z  | j	        | j
                  t          | j        t                    rd}nd	}|d
k    ro|}t          |          dk     rD| j
        }|                                  }|t          vr|| _
        n||z  }t          |          dk     Ddt!          |d          |z  gfS |t"          v r|}| j
        }|                                  }|t"          v rM||z  }| j
        }|                                  }|r+t%          ||z             rdt!          ||z   d          |z  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.Frv   r  Tr  Nr  r  r  rO  r  rQ   r   r  )r   r*  r  r   r  parse_repl_hex_escapecompile_repl_groupparse_repl_named_charr'   r   r3   r/   sepbytesr^   r  r  r.  r  )r   r2   
is_unicoder   r_   r  r7  r   s           r>   _compile_replacementrR  	  s   	B	U{{!%%b)) 	'3u::,&&"))z)0R"MMNNN99,VW==>>>999)&11E ug~%%*FM6:FFF&*e$$ 


	Syy&kkAoo
IB##&
bLF &kkAoo s61~~
2333	V|| J	ZZ\\<<bLF
IB Ahv{++ As6B;22Z?@@@ 
c&kk]""	Tzzs4yyk!! N16=&*MMM 3t99c"gg&&&r?   c                 :   g }t          |          D ]g}|                                 }|t          vr3t          d|d                    |          | j        | j                  |                    |           ht          d                    |          d          S )z5Parses a hex escape sequence in a replacement string.r  rg   rR   )	r  r   r  r'   r]   r   r3   r[   r  )r   r  r  r7  rp   r   s         r>   rL  rL  Q  s    F<    ZZ\\Z%ddBGGFOOOLmVZ) ) )brwwv###r?   c                 d   | j         }|                     d          r|                     t          t	          d          z            }|                     d          rM	 t          j        |          }t          |          S # t          $ r t          d| j
        | j                   w xY w|| _         dS )z1Parses a named character in a replacement string.r   r  r  N)r3   r   rG  r*  r   r  r  r   r   r'   r   )r   r   r   r_   s       r>   rN  rN  ]  s    
I||C 	C 011<< 	#*4005zz!   6*   FJ4s   "B   &B&c                 v   |                      d           t          | dd          }|                      d           |                                r@t          |          }d|cxk    r|j        k    sn t          d| j        | j                  |S 	 |j        |         S # t          $ r t          d          w xY w)z0Compiles a replacement template group reference.r;  TrL  r   invalid group referenceunknown group)rY  rW  r  r  groupsr'   r   r3   
groupindexr   
IndexError)r   r2   r   indexs       r>   rM  rM  n  s    
MM#fdD))D
MM#||~~ D		E++++W^++++16=&*MMM*!$'' * * *)))*s   B B8z  rR   z	NON-MATCHMATCHFTz SIMPLE_IGNORE_CASEz FULL_IGNORE_CASEc                 V    t          |           dk    r| d         S t          |           S Nr.   r   )r^   r   r  s    r>   make_sequencerb    s&    
5zzQQxE??r?   c                   x    e Zd Zd ZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZddZd Zd Zd Zd Zd ZdS )	RegexBasec                     | j         | _        d S r   )rZ   _keyr;   s    r>   r:   zRegexBase.__init__  s    N			r?   Nc                    || j         }nt          |          }|| j        }nt          |t          z           }|| j        }nt          |          }|| j         k    r|| j        k    r|| j        k    r| S |                     |||          S r   )r   r   r   CASE_FLAGS_COMBINATIONSr   r   rebuildr;   r   r   r   s       r>   r   zRegexBase.with_flags  s    }HHH~~HJJ0j1HIJIIYI%%**G*G
t~
%
%K||Hj)<<<r?   c                     d S r   rD   r;   r2   r   fuzzys       r>   
fix_groupszRegexBase.fix_groups  s    r?   c                     | S r   rD   r;   r   r   s      r>   r   zRegexBase.optimise      r?   c                     | S r   rD   r;   r   s     r>   pack_characterszRegexBase.pack_characters  rr  r?   c                     | S r   rD   rg  s    r>   remove_captureszRegexBase.remove_captures  rr  r?   c                     dS NTrD   rg  s    r>   	is_atomiczRegexBase.is_atomic      tr?   c                     dS ry  rD   rg  s    r>   can_be_affixzRegexBase.can_be_affix  r{  r?   c                     dS NFrD   rg  s    r>   contains_groupzRegexBase.contains_group      ur?   c                     t                      r   )rL   r;   r   s     r>   get_firstsetzRegexBase.get_firstset  s    r?   c                     dS r  rD   rg  s    r>   has_simple_startzRegexBase.has_simple_start  r  r?   Fc                 .    |                      ||          S r   )_compiler;   r   rn  s      r>   r   zRegexBase.compile  s    }}We,,,r?   c                     dS r  rD   rg  s    r>   r  zRegexBase.is_empty  r  r?   c                 *    t          | j                  S r   )hashrf  rg  s    r>   __hash__zRegexBase.__hash__  s    DIr?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  rf  r;   others     r>   __eq__zRegexBase.__eq__  s'    DzzT%[[(DTY%*-DDr?   c                 .    |                      |           S r   )r  r  s     r>   __ne__zRegexBase.__ne__  s    ;;u%%%%r?   c                 .    |                                  d fS r   	max_widthr  s     r>   get_required_stringzRegexBase.get_required_string      ~~%%r?   )NNNFF)r@   rA   rB   r:   r   ro  r   ru  rw  rz  r}  r  r  r  r   r  r  r  r  r  rD   r?   r>   rd  rd    s        # # #= = = =(                  - - - -    E E E& & && & & & &r?   rd  c                   .    e Zd Zd	dZd Zd Zd Zd ZdS )
ZeroWidthBaseTr   c                     t                               |            t          |          | _        || _        | j        | j        f| _        d S r   )rd  r:   r   r   r  rZ   rf  )r;   r   r  s      r>   r:   zZeroWidthBase.__init__  s>    4   X NDM1			r?   c                 "    t          d g          S r   r   r  s     r>   r  zZeroWidthBase.get_firstset      D6{{r?   c                     d}| j         r
|t          z  }|r
|t          z  }|r
|t          z  }|| j        t
          z  z  }| j        |fgS Nr   )r   POSITIVE_OPFUZZY_OP
REVERSE_OPr  ENCODING_OP_SHIFT_opcoder;   r   rn  r   s       r>   r  zZeroWidthBase._compile  sa    = 	![ E 	XE 	 ZE"333u%&&r?   c           	          t          d                    t          |z  | j        t          | j                 ddg| j                                      d S )N	{}{} {}{}rg    ASCII)printr8   INDENT_op_namePOS_TEXTr   r  r;   indentr   s      r>   dumpzZeroWidthBase.dump  sX    k  &$-
4=
!B>$-#@B B 	C 	C 	C 	C 	Cr?   c                     dS r  rD   rg  s    r>   r  zZeroWidthBase.max_width      qr?   N)Tr   )r@   rA   rB   r:   r  r  r  r  rD   r?   r>   r  r    sg        2 2 2 2  	' 	' 	'C C C    r?   r  c                   H    e Zd Zej        ej        dZdZd Zd Z	d Z
d ZdS )r   r^  ANYc                     dS ry  rD   rg  s    r>   r  zAny.has_simple_start  r{  r?   c                 >    d}|r
|t           z  }| j        |         |fgS r  )r  r  r  s       r>   r  zAny._compile  s.     	XEg&.//r?   c                 f    t          d                    t          |z  | j                             d S )N{}{})r  r8   r  r  r  s      r>   r  zAny.dump  s*    fmmFVOT];;<<<<<r?   c                     dS Nr.   rD   rg  s    r>   r  zAny.max_width  r  r?   N)r@   rA   rB   OPr  ANY_REVr  r  r  r  r  r  rD   r?   r>   r   r     sf        fBJ//GH  0 0 0= = =    r?   r   c                   6    e Zd Zej        ej        dZdZd ZdS )r   r^  ANY_ALLc                 V    d| _         d| _        d| _        | j        | j         f| _        d S )NTFr   )r   r   r   rZ   rf  rg  s    r>   r:   zAnyAll.__init__  s+    NDM1			r?   N)	r@   rA   rB   r  r  ANY_ALL_REVr  r  r:   rD   r?   r>   r   r     s9        j77GH2 2 2 2 2r?   r   c                   0    e Zd Zej        ej        dZdZdS )r   r^  ANY_UN)r@   rA   rB   r  r  	ANY_U_REVr  r  rD   r?   r>   r   r     s$        hbl33GHHHr?   r   c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )r  c                 H    t                               |            || _        d S r   )rd  r:   r  )r;   r  s     r>   r:   zAtomic.__init__  s!    4   $r?   c                 >    | j                             |||           d S r   r  ro  rm  s       r>   ro  zAtomic.fix_groups  "    ""7GU;;;;;r?   c                     | j                             ||          | _         | j                                         r| j         S | S r   )r  r   r  rq  s      r>   r   zAtomic.optimise"  s>    /224AA?##%% 	#?"r?   c                 D    | j                             |          | _         | S r   r  ru  rt  s     r>   ru  zAtomic.pack_characters)      /99$??r?   c                 B    | j                                         | _         | S r   r  rw  rg  s    r>   rw  zAtomic.remove_captures-      /99;;r?   c                 4    | j                                         S r   r  r}  rg  s    r>   r}  zAtomic.can_be_affix1      ++---r?   c                 4    | j                                         S r   r  r  rg  s    r>   r  zAtomic.contains_group4      --///r?   c                 6    | j                             |          S r   r  r  r  s     r>   r  zAtomic.get_firstset7      ++G444r?   c                 4    | j                                         S r   r  r  rg  s    r>   r  zAtomic.has_simple_start:      //111r?   c                 t    t           j        fg| j                            ||          z   t           j        fgz   S r   )r  ATOMICr  r   ENDr  s      r>   r  zAtomic._compile=  s5    )$/"9"9'5"I"IIF:, 	r?   c                     t          d                    t          |z                       | j                            |dz   |           d S )N{}ATOMICr.   )r  r8   r  r  r  r  s      r>   r  zAtomic.dumpA  sD    j00111VaZ11111r?   c                 4    | j                                         S r   r  r  rg  s    r>   r  zAtomic.is_emptyE      '')))r?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  r  r  s     r>   r  zAtomic.__eq__H  s/    T

d5kk) do

/ 	r?   c                 4    | j                                         S r   r  r  rg  s    r>   r  zAtomic.max_widthL      ((***r?   c                 6    | j                             |          S r   r  r  r  s     r>   r  zAtomic.get_required_stringO      227;;;r?   N)r@   rA   rB   r:   ro  r   ru  rw  r}  r  r  r  r  r  r  r  r  r  rD   r?   r>   r  r    s        % % %< < <      . . .0 0 05 5 52 2 2  2 2 2* * *  + + +< < < < <r?   r  c                        e Zd Zej        ZdZdS )BoundaryBOUNDARYN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  R  s        kGHHHr?   r  c                   p   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zd Zd Zd ZdS )r   c                 H    t                               |            || _        d S r   )rd  r:   r   )r;   r   s     r>   r:   zBranch.__init__W  s!    4    r?   c                 H    | j         D ]}|                    |||           d S r   )r   ro  )r;   r2   r   rn  rm   s        r>   ro  zBranch.fix_groups[  s6     	2 	2ALL'51111	2 	2r?   c                 :   | j         st          g           S t                              ||| j                   }|r!t                              ||          \  }}g }n t                              ||          \  }}g }t                              |||          }t          |          dk    r\t          |          g}|r|sG|                     |||          }|r.|r|	                    |           n|
                    d|           n|}t          ||z   |z             S r`  )r   r   r   _flatten_branches_split_common_suffix_split_common_prefix_reduce_to_setr^   _add_precheckr[   insertrb  )r;   r   r   r   suffixrJ  r   firstsets           r>   r   zBranch.optimise_  s4   } 	 B<< ++D'4=II  	%::4JJFHFF%::4JJFHF ((wAAx==1x(()H 5 5--dGXFF 5 5 1111 8444HVh.7888r?   c                    t                      }|rdnd}|D ]K}t          |          t          u r1|j        t          k    r!|                    |j        |                    I d S |sd S t          ||d |D                       S )Nr   c                 ,    g | ]}t          |          S rD   r  r  s     r>   r   z(Branch._add_precheck.<locals>.<listcomp>  s    .M.M.My||.M.M.Mr?   )r   r  Literalr   r   r   
charactersr   )r;   r   r   r   r  r3   branchs          r>   r  zBranch._add_precheck  s    %%"bb 	 	FF||w&&6+<+F+FF-c23333 	4tW.M.MW.M.M.MNNNr?   c                 8    fd| j         D             | _         | S )Nc                 :    g | ]}|                               S rD   )ru  )r   rm   r   s     r>   r   z*Branch.pack_characters.<locals>.<listcomp>  s'    HHHQ**400HHHr?   r   rt  s    `r>   ru  zBranch.pack_characters  s%    HHHH$-HHHr?   c                 2    d | j         D             | _         | S )Nc                 6    g | ]}|                                 S rD   rw  r   rm   s     r>   r   z*Branch.remove_captures.<locals>.<listcomp>  s$    DDD**,,DDDr?   r  rg  s    r>   rw  zBranch.remove_captures  s    DDdmDDDr?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   rz  r  s     r>   r  z#Branch.is_atomic.<locals>.<genexpr>  *      88Q1;;==888888r?   r  r   rg  s    r>   rz  zBranch.is_atomic  !    88$-888888r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   )r}  r  s     r>   r  z&Branch.can_be_affix.<locals>.<genexpr>  s,      ;;1>>##;;;;;;r?   r  rg  s    r>   r}  zBranch.can_be_affix  s!    ;;T];;;;;;r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z(Branch.contains_group.<locals>.<genexpr>  s.      ==!1##%%======r?   )r  r   rg  s    r>   r  zBranch.contains_group  s!    ==t}======r?   c                     t                      }| j        D ]}||                    |          z  }|pt          d g          S r   )r   r   r  )r;   r   r   rm   s       r>   r  zBranch.get_firstset  sG    UU 	* 	*A!..)))BB S$[[ r?   c                     | j         sg S t          j        fg}| j         D ]K}|                    |                    ||                     |                    t          j        f           Lt          j        f|d<   |S Nr  )r   r  BRANCHr   r   r[   NEXTr  )r;   r   rn  r   rm   s        r>   r  zBranch._compile  sx    } 	I 	% 	%AKK		'511222KK$$$$F:Rr?   c                 L   t          d                    t          |z                       | j        d                             |dz   |           | j        dd          D ]E}t          d                    t          |z                       |                    |dz   |           Fd S )Nz{}BRANCHr   r.   {}OR)r  r8   r  r   r  )r;   r  r   rm   s       r>   r  zBranch.dump  s    j00111afqj'222qss$ 	( 	(A&--00111FF6A:w''''	( 	(r?   c                     g }|D ]]}|                     | |          }t          |t                    r|                    |j                   H|                    |           ^|S r   )r   r/   r   r   r   r[   )r   r   r   new_branchesrm   s        r>   r  zBranch._flatten_branches  ss      	' 	'A

4))A!V$$ '##AJ////##A&&&&r?   c                 (  	
 g }|D ]H}t          |t                    r|                    |j                   2|                    |g           It	          d |D                       }|d         
d	|}	|k     rw
	                                         r]t          	
fd|D                       rA	dz  		|k     r6
	                                         rt          	
fd|D                       A	| j        t          z  rI	dk    rAt          fd|D                       s&dz  dk    rt          fd|D                       &dk    rg |fS g }|D ],}|                    t          |d                               -
d          |fS )Nc              3   4   K   | ]}t          |          V  d S r   r^   r   rl   s     r>   r  z.Branch._split_common_prefix.<locals>.<genexpr>  (      551A555555r?   r   c              3   <   K   | ]}|                  k    V  d S r   rD   )r   rl   r3   rJ  s     r>   r  z.Branch._split_common_prefix.<locals>.<genexpr>  R       C- C- DES6
+D C- C- C- C- C- C-r?   r.   c              3   N   K   | ]}t                               |          V   d S r   )r   
_can_splitr   rl   r4   s     r>   r  z.Branch._split_common_prefix.<locals>.<genexpr>  sC       ( ((9(9!U(C(C ( ( ( ( ( (r?   
r/   r   r[   r  minr}  r  r   r   rb  )r   r   alternativesrm   r	  end_posr  rl   r4   r3   rJ  s           @@@r>   r  zBranch._split_common_prefix  se     	) 	)A!X&& )##AG,,,,##QC(((( 5555555	 aGmms 8 8 : :ms C- C- C- C- C-+C- C- C- @- @-m1HC Gmms 8 8 : :ms C- C- C- C- C-+C- C- C- @- @-m : 	 E!))C ( ( ( (( ( ( % %)
 !))C ( ( ( (( ( ( % %)
 A::x<  	< 	<Aak : :;;;;ww--r?   c                 4  	
 g }|D ]H}t          |t                    r|                    |j                   2|                    |g           It	          d |D                       }|d         
d	d|z
  }	|k    rw
	                                         r]t          	
fd|D                       rA	dz  		|k    r6
	                                         rt          	
fd|D                       Ad	z
  | j        t          z  rGdk    rAt          fd|D                       s&dz  dk    rt          fd|D                       &dk    rg |fS g }|D ]-}|                    t          |d                                .
 d          |fS )Nc              3   4   K   | ]}t          |          V  d S r   r  r  s     r>   r  z.Branch._split_common_suffix.<locals>.<genexpr> 	  r   r?   r   r  c              3   <   K   | ]}|                  k    V  d S r   rD   )r   rl   r3   r  s     r>   r  z.Branch._split_common_suffix.<locals>.<genexpr>	  r"  r?   r.   c              3   N   K   | ]}t                               |          V   d S r   )r   _can_split_revr%  s     r>   r  z.Branch._split_common_suffix.<locals>.<genexpr>	  sC       ( (A(=(=a(G(G ( ( ( ( ( (r?   r&  )r   r   r(  rm   r	  r)  r  rl   r4   r3   r  s           @@@r>   r  zBranch._split_common_suffix  sl     	) 	)A!X&& )##AG,,,,##QC(((( 5555555	 ay.Gmms 8 8 : :ms C- C- C- C- C-+C- C- C- @- @-m1HC Gmms 8 8 : :ms C- C- C- C- C-+C- C- C- @- @-m S: 	 !))C ( ( ( (( ( ( % %)
 !))C ( ( ( (( ( ( % %)
 A::x<  	= 	=AaE6l ; ;<<<<ufhh ,..r?   c                    t                               | |dz
            sdS t                               | |          sdS t                               | |dz
  |dz                      rdS t                               | |dz             r*t                               | |dz
  |dz                      rdS t                               | |dz
            r*t                               | |dz
  |dz                      rdS dS )Nr.   TFrO   )r   _is_full_case
_is_folded)r  r4   s     r>   r$  zBranch._can_split	  s    ##E51955 	4##E511 	4 U519uqy#89:: 	5   	22 	


E%!)eai"78
9
9	5   	22 	


E%!)eai"78
9
9	5tr?   c                 N   t          |           }t                              | ||z
            sdS t                              | ||z
  dz
            sdS t                              | ||z
  dz
  ||z
  dz                      rdS t                              | ||z
  dz             r0t                              | ||z
  dz
  ||z
  dz                      rdS t                              | ||z
  dz
            r0t                              | ||z
  dz
  ||z
  dz                      rdS dS )NTr.   FrO   )r^   r   r0  r1  )r  r4   r  s      r>   r.  zBranch._can_split_rev6	  s?   %jj ##E3;77 	4##E3;?;; 	4 U3;?S5[1_#DEFF 	5   ea88 	


E#+/C%K!O"CD
E
E	5   ea88 	


E#+/C%K!O"CD
E
E	5tr?   c                    t          t                    }i }g }|D ]@}t                              |          rJ||j                                     |g           |                    |j        t          |                     gt          |t                    r|j
        rt                              |j
        d                   re||j
        d         j                                     |j
                   |                    |j
        d         j        t          |                     t                              | ||||           |                    |           Bt                              | |||           |S r  )r   r   r   _is_simple_characterr_   r[   
setdefaultr^   r/   r   r  _flush_char_prefix)r   r   r   prefixedorderr  rm   s          r>   _merge_common_prefixeszBranch._merge_common_prefixesQ	  s_   
 t$$ 	' 	'A**1-- '!((!---  #e**5555Q)) 	'ag 	'))!'!*55	' )*11!':::  !13u::>>>>))$5      ##A&&&&!!$%FFFr?   c                 J    t          | t                    o| j        o| j         S r   )r/   r   r   r   r   s    r>   r4  zBranch._is_simple_characterm	  s#    !Y''KAJKq|;KKr?   c                    g }t                      }t          }|D ]}t          |t          t          t
          f          r_|j        |k    r%t                              | ||||           |j        }|	                    |
                    t                               t                              | ||||           |                    |           t                              | ||||           |S )Nr   )r   r   r/   r   rC  SetBaser   r   _flush_set_membersr   r   r[   )r   r   r   r  r  r   rm   s          r>   r  zBranch._reduce_to_setq	  s    
 	' 	'A!i7;<< '<:----dGUJ"$ $ $ "#J		!,,&,99::::))$
      ##A&&&&!!$

	 	 	 r?   c           	         |sd S t          |                                fd          D ]\  }}t          |          dk    r)|                    t	          |d                              Bg }d}|D ]e}	t          |	          dk    r+|                    t	          |	dd                               @|s#|                    t                                 d}ft          t          |          t          |          g          }
|                    |
                    | |                     |	                                 	                                 d S )Nc                      | d                  S r  rD   )pairr8  s    r>   <lambda>z+Branch._flush_char_prefix.<locals>.<lambda>	  s    
Q. r?   keyr.   r   FT)
sortedr  r^   r[   rb  r   r   r   r   r   )r   r   r7  r8  r  r_   r   subbranchesoptionalrm   r   s      `       r>   r6  zBranch._flush_char_prefix	  si     	F%hnn&6&6 = = = =       	F 	FOE88}}!!##M(1+$>$>????  ! ( (A1vvzz#**=133+A+ABBBB% (#**8::666#'#Yu%5%5vk7J7J$KLL##H$5$5dG$D$DEEEEr?   c                 <   |sd S t          |          dk    rt          |          d         }n1t          | t          |                                        | |          }|                    |                    |                     |                                 d S )Nr.   r   r   )r^   r   r   r   r[   r   r   )r   r   r  r   r  r   s         r>   r>  zBranch._flush_set_members	  s      	Fu::??;;q>DDD$u++..77gFFDDOOzOBBCCCr?   c                     d|cxk    rt          |           k     sn dS | |         }t          |t                    o|j        o|j        t
          z  t
          k    S )Nr   F)r^   r/   r   r   r   FULLIGNORECASE)r  rp   r   s      r>   r0  zBranch._is_full_case	  se    A""""E

""""5Qx4++ ? ??^+
>	@r?   c                 j   t          |           dk     rdS | D ](}t          |t                    r|j        r|j        s dS )d                    d | D                       }t          j        t          |          }t          j	                    }|D ]#}|t          j        t          |          k    r dS $dS )NrO   Frg   c              3   >   K   | ]}t          |j                  V  d S r   )chrr_   r   rp   s     r>   r  z$Branch._is_folded.<locals>.<genexpr>	  s*      55!QW555555r?   T)
r^   r/   r   r   r   r]   r   r   FULL_CASE_FOLDINGget_expand_on_folding)r  rp   foldedexpanding_charsr   s        r>   r1  zBranch._is_folded	  s    u::>>5 	 	Aq),, AJ luu 55u55555!"3V<< !688  	 	A)*;Q????tt @ ur?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z"Branch.is_empty.<locals>.<genexpr>	  s*      77A1::<<777777r?   r  rg  s    r>   r  zBranch.is_empty	  s!    77777777r?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  r   r  s     r>   r  zBranch.__eq__	  s'    DzzT%[[(LT]en-LLr?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z#Branch.max_width.<locals>.<genexpr>	  r  r?   )r@  r   rg  s    r>   r  zBranch.max_width	  r  r?   N)r@   rA   rB   r:   ro  r   r  ru  rw  rz  r}  r  r  r  r  staticmethodr  r  r  r$  r.  r9  r4  r  r6  r>  r0  r1  r  r  r  rD   r?   r>   r   r   V  sH       ! ! !2 2 2!9 !9 !9FO O O    9 9 9< < <> > >! ! !  ( ( ( 
 
 \
 '. '. \'.R &/ &/ \&/P   \0   \4   \6 L L \L   \6   \2   \ @ @ \@   \*8 8 8M M M9 9 9 9 9r?   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
r  c                     t                               |            || _        || _        || _        | j        | j        f| _        d S r   )rd  r:   r   rj  r   rZ   rf  )r;   r   rj  r   s       r>   r:   zCallGroup.__init__	  s?    4   	
 NDJ.			r?   c                 *   	 t          | j                  | _        nR# t          $ rE 	 | j        j        | j                 | _        n$# t
          $ r t          d|| j                  w xY wY nw xY wd| j        cxk    r| j        j        k    sn t          d|| j                  | j        dk    r1| j        j	        | j                 dk    rt          d|| j                  | j        j
                            | ||f           | j        | j        f| _        d S )NrW  r   rX  r.   zambiguous group reference)r  rj  r6  r   group_indexr   r'   r   r  open_group_countgroup_callsr[   rZ   rf  rm  s       r>   ro  zCallGroup.fix_groups	  s4   	OTZDJJ 	O 	O 	OO!Y24:>

 O O O5wNNNO 
	O DJ7777$)"77777$-@@@:>>di8DqHH3WdmLLL	$$dGU%;<<<NDJ.			&    
A+AA+!A%%A+*A+c                 8    t          d| j        | j                  Nzgroup reference not allowedr'   r2   r   rg  s    r>   rw  zCallGroup.remove_captures	      14<OOOr?   c                 *    t           j        | j        fgS r   )r  
GROUP_CALLcall_refr  s      r>   r  zCallGroup._compile	  s    .//r?   c                 f    t          d                    t          |z  | j                             d S )Nz{}GROUP_CALL {})r  r8   r  rj  r  s      r>   r  zCallGroup.dump 
  s-    &&v
CCDDDDDr?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  rj  r  s     r>   r  zCallGroup.__eq__
  '    DzzT%[[(FTZ5;-FFr?   c                     t           S r   r  rg  s    r>   r  zCallGroup.max_width
      r?   c                     d | _         d S r   r   rg  s    r>   __del__zCallGroup.__del__	
      			r?   N)r@   rA   rB   r:   ro  rw  r  r  r  r  ro  rD   r?   r>   r  r  	  s        / / // / /&P P P0 0 0E E EG G G      r?   r  c                       e Zd Zd Zd ZdS )CallRefc                 "    || _         || _        d S r   )refparsed)r;   rt  ru  s      r>   r:   zCallRef.__init__
  s    r?   c                     t           j        | j        fg| j                            ||          z   t           j        fgz   S r   )r  CALL_REFrt  ru  r  r  r  s      r>   r  zCallRef._compile
  sB    +tx()DK,@,@
- - VJ<  	!r?   Nr@   rA   rB   r:   r  rD   r?   r>   rr  rr  
  s2          ! ! ! ! !r?   rr  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dedfdZd ZddZd Zd Zd Zd	 Zd
 Zd Zd ZdS )r   FTc                    t                               |            || _        t          |          | _        t
          |         | _        t          |          | _        | j        rJ| j        t          z  t          k    r2t          j
        t          t          | j                            | _        nt          | j                  | _        | j        | j        | j        | j        | j        f| _        d S r   )rd  r:   r_   r   r   ri  r   r   rJ  r   r   rO  rM  rQ  rZ   rf  )r;   r_   r   r   r   s        r>   r:   zCharacter.__init__
  s    4   
X1*=iM 	*t?
  *+<c$*ooNNDKKdj//DK^TZ
/4>+			r?   c                 0    t          | j        |||          S r   )r   r_   rk  s       r>   rj  zCharacter.rebuild-
  s    Xz9EEEr?   c                     | S r   rD   r;   r   r   r   s       r>   r   zCharacter.optimise0
  rr  r?   c                 "    t          | g          S r   r  r  s     r>   r  zCharacter.get_firstset3
  r  r?   c                     dS ry  rD   rg  s    r>   r  zCharacter.has_simple_start6
  r{  r?   c                 x   d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }t          | j        | j        |f         || j        g          }t          | j
                  dk    r4t          |t          d | j
        D             | j                  g          }|                    ||          S )Nr   r.   c                 ,    g | ]}t          |          S rD   r   r  s     r>   r   z&Character._compile.<locals>.<listcomp>G
  s    (E(E(EAQ(E(E(Er?   r   )r   r  r   ZEROWIDTH_OPr  PrecompiledCoder  r   r_   r^   rQ  r   r  r   )r;   r   rn  r   r   s        r>   r  zCharacter._compile9
  s    = 	![ E> 	"\!E 	XET_g-E F
*    t{a4(E(E(E(E(E"* "* "* + , ,D ||GU+++r?   c           	         t          t          | j                                                d          }t	          d                    t          |z  t          | j                 |t          | j
                                      d S )Nbuz{}CHARACTER {} {}{})asciirM  r_   lstripr  r8   r  r  r   	CASE_TEXTr   r;   r  r   displays       r>   r  zCharacter.dumpL
  sv    DJ((//55#**6F?
4=
!7Ido,FH H 	I 	I 	I 	I 	Ir?   c                 *    || j         k    | j        k    S r   )r_   r   r;   r   s     r>   matcheszCharacter.matchesQ
  s    dj T]22r?   c                 *    t          | j                  S r   )r^   rQ  rg  s    r>   r  zCharacter.max_widthT
  s    4;r?   c                 b    | j         sdS t          d | j        D                       | _        d| fS )Nr  c              3   4   K   | ]}t          |          V  d S r   r  r  s     r>   r  z0Character.get_required_string.<locals>.<genexpr>[
  s(      &C&C!s1vv&C&C&C&C&C&Cr?   r   )r   r|   rQ  folded_charactersr  s     r>   r  zCharacter.get_required_stringW
  s;    } 	7!&&C&Ct{&C&C&C!C!C$wr?   NF)r@   rA   rB   r   r  	CHARACTERr   CHARACTER_IGNr   rJ  CHARACTER_REVCHARACTER_IGN_REVr  r:   rj  r   r  r  r  r  r  r  r  rD   r?   r>   r   r   
  s3       z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G (,+ + + +"F F F       , , ,&I I I
3 3 3         r?   r   c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )rz  c                     t                               |            || _        || _        || _        || _        || _        d S r   )rd  r:   r   rj  yes_itemno_itemr   )r;   r   rj  r  r  r   s         r>   r:   zConditional.__init__`
  s=    4   	
  r?   c                    	 t          | j                  | _        ng# t          $ rZ 	 | j        j        | j                 | _        n9# t
          $ r, | j        dk    rd| _        nt          d|| j                  Y nw xY wY nw xY wd| j        cxk    r| j        j        k    sn t          d|| j                  | j	        
                    |||           | j        
                    |||           d S )NDEFINEr   rX  rW  )r  rj  r6  r   r]  r   r'   r   r  r  ro  r  rm  s       r>   ro  zConditional.fix_groupsh
  s   	ITZDJJ 		I 		I 		II!Y24:>

 I I I:)) "#DJJ$-HHH J	I		I DJ7777$)"7777717DMJJJ  '5999%88888s2    
B AB 3A:7B 9A::B ?B c                     | j                             ||          }| j                            ||          }t          || j        ||| j                  S r   )r  r   r  rz  rj  r   )r;   r   r   r  r  s        r>   r   zConditional.optimise|
  sJ    =))$88,''g664XwNNNr?   c                     | j                             |          | _         | j                            |          | _        | S r   )r  ru  r  rt  s     r>   ru  zConditional.pack_characters
  s5    55d;;|33D99r?   c                 ~    | j                                         | _         | j                                        | _        d S r   )r  rw  r  rg  s    r>   rw  zConditional.remove_captures
  s0    5577|3355r?   c                 f    | j                                         o| j                                        S r   )r  rz  r  rg  s    r>   rz  zConditional.is_atomic
  s)    }&&((ET\-C-C-E-EEr?   c                 f    | j                                         o| j                                        S r   )r  r}  r  rg  s    r>   r}  zConditional.can_be_affix
  s)    }))++K0I0I0K0KKr?   c                 f    | j                                         p| j                                        S r   )r  r  r  rg  s    r>   r  zConditional.contains_group
  s)    }++--N1L1L1N1NNr?   c                 l    | j                             |          | j                            |          z  S r   )r  r  r  r  s     r>   r  zConditional.get_firstset
  s2    **733
,
#
#G
,
,- 	.r?   c                 n   t           j        | j        fg}|                    | j                            ||                     | j                            ||          }|r5|                    t           j        f           |                    |           |                    t           j	        f           |S r   )
r  GROUP_EXISTSrj  r   r  r   r  r[   r  r  r;   r   rn  r   add_codes        r>   r  zConditional._compile
  s    $*-.DM))'599:::<''77 	"KK$$$KK!!!RVJr?   c                 h   t          d                    t          |z  | j                             | j                            |dz   |           | j                                        sJt          d                    t          |z                       | j                            |dz   |           d S d S )Nz{}GROUP_EXISTS {}r.   r  )r  r8   r  rj  r  r  r  r  r  s      r>   r  zConditional.dump
  s    !((&$*EEFFF6A:w///|$$&& 	3&--00111Lfqj'22222	3 	3r?   c                 f    | j                                         o| j                                        S r   )r  r  r  rg  s    r>   r  zConditional.is_empty
  s)    }%%''CDL,A,A,C,CCr?   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  rj  r  r  r  s     r>   r  zConditional.__eq__
  sJ    DzzT%[[( Hdj$-
,.!KG.H 	Hr?   c                 ~    t          | j                                        | j                                                  S r   r@  r  r  r  rg  s    r>   r  zConditional.max_width
  .    4=**,,dl.D.D.F.FGGGr?   c                     d | _         d S r   rn  rg  s    r>   ro  zConditional.__del__
  rp  r?   N)r@   rA   rB   r:   ro  r   ru  rw  rz  r}  r  r  r  r  r  r  r  ro  rD   r?   r>   rz  rz  _
  s
       ! ! !9 9 9(O O O  
6 6 6F F FL L LO O O. . .
 
 
3 3 3D D DH H HH H H    r?   rz  c                        e Zd Zej        ZdZdS )DefaultBoundaryDEFAULT_BOUNDARYN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  s        !G!HHHr?   r  c                        e Zd Zej        ZdZdS )DefaultEndOfWordDEFAULT_END_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  s        $G$HHHr?   r  c                        e Zd Zej        ZdZdS )DefaultStartOfWordDEFAULT_START_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  s        &G&HHHr?   r  c                        e Zd Zej        ZdZdS )r   END_OF_LINEN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
          nGHHHr?   r   c                        e Zd Zej        ZdZdS )r   END_OF_LINE_UN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
          GHHHr?   r   c                        e Zd Zej        ZdZdS )EndOfStringEND_OF_STRINGN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  r  r?   r  c                        e Zd Zej        ZdZdS )r   END_OF_STRING_LINEN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
  s        #G#HHHr?   r   c                        e Zd Zej        ZdZdS )r   END_OF_STRING_LINE_UN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
  s        %G%HHHr?   r   c                        e Zd Zej        ZdZdS )	EndOfWordEND_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  r  r?   r  c                       e Zd ZdZd ZdS )FailureFAILUREc                     t           j        fgS r   )r  r  r  s      r>   r  zFailure._compile
  s    r?   Nr@   rA   rB   r  r  rD   r?   r>   r  r  
  s(        H         r?   r  c                   X    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd ZdS )r  Nc                    t                               |            |i }|| _        || _        d|v r%dD ]"}||d         v r|                    |d           #t          |          t          d          z  rdD ]}|                    |d           ndD ]}|                    |d           |                    dd           d|v r#dD ]}|d                             |d           d S ddd|d         d         d|d<   d S )	Nr?  rC  r  r   rn   r   r.   )r   rp   rs   r@  )rd  r:   r  r   r5  r   )r;   r  r   rn   s       r>   r:   zFuzzy.__init__
  sp   4   K$& [   9 9F+++**1i888 {c%jj( 	5 2 2&&q&11112  5 5&&q)4444 	sI... [   5 5F#..q!44445 5 )*#q!## ##Kr?   c                 >    | j                             ||d           d S ry  r  rm  s       r>   ro  zFuzzy.fix_groups  s"    ""7GT:::::r?   c                 D    | j                             |          | _         | S r   r  rt  s     r>   ru  zFuzzy.pack_characters	  r  r?   c                 B    | j                                         | _         | S r   r  rg  s    r>   rw  zFuzzy.remove_captures  r  r?   c                 4    | j                                         S r   r  rz  rg  s    r>   rz  zFuzzy.is_atomic  r  r?   c                 4    | j                                         S r   r  rg  s    r>   r  zFuzzy.contains_group  r  r?   c                 4   g }dD ]T}| j         |         }|                    |d                    |                    |d         t          n|d                    UdD ](}|                    | j         d         |                    )| j         d         d         }|                    |t          n|           d}|r
|t          z  }| j                             d          }|rpt
          j        |ft          |          z   g|                    |d          z   t
          j	        fgz   | j
                            |d          z   t
          j        fgz   S t
          j        |ft          |          z   g| j
                            |d          z   t
          j        fgz   S )	Ndiser   r.   rC  r?  r@  r"  T)r   r[   r  r  r   r  	FUZZY_EXTr|   r   r  r  r  FUZZY)r;   r   rn  	argumentsrn   vr   r"  s           r>   r  zFuzzy._compile  s   	 	B 	BA #AQqT"""!A$,YYAaDAAAA  	: 	:AT-f5a89999 V$U+aiQ777 	 ZE##F++ 	DlE*U9-=-==>ll7D))*.0gZL9o%%gt4459;	{C D (E"U9%5%556
/
!
!'4
0
0157VI;? 	@r?   c                     |                                  }|rd|z   }t          d                    t          |z  |                     | j                            |dz   |           d S )NrU  z	{}FUZZY{}r.   )_constraints_to_stringr  r8   r  r  r  )r;   r  r   r   s       r>   r  z
Fuzzy.dump5  si    1133 	,+Kk  &+>>???VaZ11111r?   c                 4    | j                                         S r   r  rg  s    r>   r  zFuzzy.is_empty<  r  r?   c                 ~    t          |           t          |          u o| j        |j        k    o| j        |j        k    S r   )r  r  r   r  s     r>   r  zFuzzy.__eq__?  sE    T

d5kk) Edo

/ E#/53DD	Fr?   c                     t           S r   r  rg  s    r>   r  zFuzzy.max_widthC  rl  r?   c                 N   g }dD ]j}| j         |         \  }}|dk    rd}|dk    rd                    |          }||z  }||d                    |          z  }|                    |           kg }dD ]D}| j         d         |         }|dk    r)|                    d                    ||                     E| j         d         d         }|D|dk    r>d	                    d
                    |          |          }|                    |           d                    |          S )Nidsr   rg   z{}<=z<={}r?  r  r@  z{}<={}r  r  )r   r8   r[   r]   )	r;   r   r   r'  r@  conr?  rD  limits	            r>   r  zFuzzy._constraints_to_stringF  s@    	$ 	$D'-HCaxxCQwwmmC((4KCv}}S)))s#### 	8 	8D$V,T2EqyyFMM%66777 (/??388D>>599Dt$$$xx$$$r?   r   )r@   rA   rB   r:   ro  ru  rw  rz  r  r  r  r  r  r  r  rD   r?   r>   r  r  
  s        !# !# !# !#F; ; ;    + + +0 0 0@ @ @<2 2 2* * *F F F  % % % % %r?   r  c                        e Zd Zd Zd Zd ZdS )r  c           	          t          t          t          t                      dd           t	                      g                    }|                    ||          S r  )r  r   r  r   GraphemeBoundaryr   )r;   r   rn  grapheme_matchers       r>   r  zGrapheme._compileh  sX     "(JvxxD,I,I


, # #      ''777r?   c                 Z    t          d                    t          |z                       d S )Nz
{}GRAPHEME)r  r8   r  r  s      r>   r  zGrapheme.dumpp  s(    l!!&6/2233333r?   c                     t           S r   r  rg  s    r>   r  zGrapheme.max_widths  rl  r?   N)r@   rA   rB   r  r  r  rD   r?   r>   r  r  g  sA        8 8 84 4 4    r?   r  c                       e Zd Zd ZdS )r  c                      t           j        dfgS r  )r  GRAPHEME_BOUNDARYr  s      r>   r   zGraphemeBoundary.compilew  s    %q)**r?   N)r@   rA   rB   r   rD   r?   r>   r  r  v  s#        + + + + +r?   r  c                   z    e Zd Zej        ZdZd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )r  GREEDY_REPEATc                 d    t                               |            || _        || _        || _        d S r   )rd  r:   r  r  r	  )r;   r  r  r	  s       r>   r:   zGreedyRepeat.__init__~  s/    4   $""r?   c                 >    | j                             |||           d S r   r  rm  s       r>   ro  zGreedyRepeat.fix_groups  r  r?   c                     | j                             ||          } t          |           || j        | j                  S r   )r  r   r  r  r	  r;   r   r   r  s       r>   r   zGreedyRepeat.optimise  s7    _--dG<<
tDzz*dndnEEEr?   c                 D    | j                             |          | _         | S r   r  rt  s     r>   ru  zGreedyRepeat.pack_characters  r  r?   c                 B    | j                                         | _         | S r   r  rg  s    r>   rw  zGreedyRepeat.remove_captures  r  r?   c                 T    | j         | j        k    o| j                                        S r   )r  r	  r  rz  rg  s    r>   rz  zGreedyRepeat.is_atomic  s$    ~/ODO4M4M4O4OOr?   c                     dS r  rD   rg  s    r>   r}  zGreedyRepeat.can_be_affix  r  r?   c                 4    | j                                         S r   r  rg  s    r>   r  zGreedyRepeat.contains_group  r  r?   c                 z    | j                             |          }| j        dk    r|                    d            |S r  )r  r  r  r   )r;   r   r   s      r>   r  zGreedyRepeat.get_firstset  s8    _))'22>QFF4LLL	r?   c                    | j         | j        g}| j        |                    t                     n|                    | j                   | j                            ||          }|sg S t          |          g|z   t          j	        fgz   S r   )
r  r  r	  r[   r  r  r   r|   r  r  )r;   r   rn  repeatr  s        r>   r  zGreedyRepeat._compile  s    ,/>!MM)$$$$MM$.)))_,,We<<
 	Iv*,
|;<r?   c                     | j         d}n| j         }t          d                    t          |z  | j        | j        |                     | j                            |dz   |           d S )NINF
{}{} {} {}r.   )r	  r  r8   r  r  r  r  r  r;   r  r   r  s       r>   r  zGreedyRepeat.dump  sq    >!EENEl!!&6/4=
.%! ! 	" 	" 	" 	VaZ11111r?   c                 4    | j                                         S r   r  rg  s    r>   r  zGreedyRepeat.is_empty  r  r?   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  r  r  r	  r  s     r>   r  zGreedyRepeat.__eq__  sK    DzzT%[[( dot~
..#.
/. 	r?   c                 `    | j         t          S | j                                        | j         z  S r   )r	  r  r  r  rg  s    r>   r  zGreedyRepeat.max_width  s+    >!((**T^;;r?   c                 T   | j         t          n| j         }| j        dk    r3| j                                        |z  }t          |t                    d fS | j                            |          \  }}|r||fS | j                                        |z  }t          |t                    d fS r  )r	  r  r  r  r  r'  r  )r;   r   r	  ru   ofsreqs         r>   r  z GreedyRepeat.get_required_string  s    !%!7IIT^	>Q))++i7Aq)$$d**?66w??S 	8OO%%'')31i  $&&r?   N)r@   rA   rB   r  r  r  r  r:   ro  r   ru  rw  rz  r}  r  r  r  r  r  r  r  r  rD   r?   r>   r  r  z  s       GH# # #< < <F F F
    P P P  0 0 0  = = =2 2 2* * *  
< < <' ' ' ' 'r?   r  c                        e Zd Zd Zd Zd ZdS )r  c                     dS ry  rD   rg  s    r>   rz  zPossessiveRepeat.is_atomic  r{  r?   c                 H   | j                             ||          }|sg S | j        | j        g}| j        |                    t                     n|                    | j                   t          j        ft          |          g|z   t          j
        ft          j
        fgz   S r   )r  r   r  r  r	  r[   r  r  r  r|   r  )r;   r   rn  r  r  s        r>   r  zPossessiveRepeat._compile  s    _,,We<<
 	I,/>!MM)$$$$MM$.))))f.;z6*?  	r?   c                 ,   t          d                    t          |z                       | j        d}n| j        }t          d                    t          |dz   z  | j        | j        |                     | j                            |dz   |           d S )Nr  r  r  r.   rO   )r  r8   r  r	  r  r  r  r  r  s       r>   r  zPossessiveRepeat.dump  s    j00111>!EENEl!!&FQJ"7
.%! ! 	" 	" 	" 	VaZ11111r?   N)r@   rA   rB   rz  r  r  rD   r?   r>   r  r    sA            
2 
2 
2 
2 
2r?   r  c                   n    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )r  c                 r    t                               |            || _        || _        || _        d | _        d S r   )rd  r:   r   rj  r  rg  )r;   r   rj  r  s       r>   r:   zGroup.__init__  s6    4   	
$r?   c                 l    | ||f| j         j        | j        <   | j                            |||           d S r   )r   defined_groupsrj  r  ro  rm  s       r>   ro  zGroup.fix_groups  s:    04gu/E	 ,""7GU;;;;;r?   c                 n    | j                             ||          }t          | j        | j        |          S r   )r  r   r  r   rj  r  s       r>   r   zGroup.optimise  s/    _--dG<<
TY
J777r?   c                 D    | j                             |          | _         | S r   r  rt  s     r>   ru  zGroup.pack_characters  r  r?   c                 4    | j                                         S r   r  rg  s    r>   rw  zGroup.remove_captures
      ..000r?   c                 4    | j                                         S r   r  rg  s    r>   rz  zGroup.is_atomic  r  r?   c                     dS r  rD   rg  s    r>   r}  zGroup.can_be_affix  r  r?   c                     dS ry  rD   rg  s    r>   r  zGroup.contains_group  r{  r?   c                 6    | j                             |          S r   r  r  s     r>   r  zGroup.get_firstset  r  r?   c                 4    | j                                         S r   r  rg  s    r>   r  zGroup.has_simple_start  r  r?   c                    g }| j         x}}|dk     r!| j        j        |         }| j        j        |z
  }| j         ||f}| j        j                            |          }||t          j        |fgz  }|t          j        t          |           ||fgz  }|| j
                            ||          z  }|t          j        fgz  }||t          j        fgz  }|S r  )rj  r   private_groupsr  	call_refsr   r  rw  GROUPr  r  r   r  )r;   r   rn  r   public_groupprivate_grouprD  rt  s           r>   r  zGroup._compile  s    '+z1}193MBL I1MAMj'5(i!%%c**?bk3'((D"(CG,,m\JKK''777"&?bfZL Dr?   c                     | j         }|dk     r| j        j        |         }t          d                    t
          |z  |                     | j                            |dz   |           d S )Nr   z
{}GROUP {}r.   )rj  r   r  r  r8   r  r  r  )r;   r  r   rj  s       r>   r  z
Group.dump2  se    
199I,U3El!!&6/599:::VaZ11111r?   c                 z    t          |           t          |          u o| j        | j        f|j        |j        fk    S r   )r  rj  r  r  s     r>   r  zGroup.__eq__9  s=    T

d5kk) *tz4?.K;(
)/* 	+r?   c                 4    | j                                         S r   r  rg  s    r>   r  zGroup.max_width=  r  r?   c                 6    | j                             |          S r   r  r  s     r>   r  zGroup.get_required_string@  r  r?   c                     d | _         d S r   rn  rg  s    r>   ro  zGroup.__del__C  rp  r?   N)r@   rA   rB   r:   ro  r   ru  rw  rz  r}  r  r  r  r  r  r  r  r  ro  rD   r?   r>   r  r    s         < < <8 8 8
  1 1 1+ + +    5 5 52 2 2  ,2 2 2+ + ++ + +< < <    r?   r  c                        e Zd Zej        ZdZdS )KeepKEEPN)r@   rA   rB   r  r$  r  r  rD   r?   r>   r#  r#  F  s        gGHHHr?   r#  c                        e Zd Zej        ZdZdS )r  LAZY_REPEATN)r@   rA   rB   r  r&  r  r  rD   r?   r>   r  r  J  r  r?   r  c                   l    e Zd ZdddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd ZdS )ru  AHEADBEHINDr^  c                     t                               |            t          |          | _        t          |          | _        || _        d S r   )rd  r:   r   rv  r   r  )r;   rv  r   r  s       r>   r:   zLookAround.__init__Q  s;    4   6llX$r?   c                 H    | j                             || j        |           d S r   )r  ro  rv  rm  s       r>   ro  zLookAround.fix_groupsW  s$    ""7DK?????r?   c                     | j                             || j                  }| j        r|                                r|S t          | j        | j        |          S r   )r  r   rv  r   r  ru  r  s       r>   r   zLookAround.optimiseZ  sT    _--dDK@@
= 	Z0022 	$+t}jAAAr?   c                 D    | j                             |          | _         | S r   r  rt  s     r>   ru  zLookAround.pack_charactersa  r  r?   c                 4    | j                                         S r   r  rg  s    r>   rw  zLookAround.remove_capturese  r  r?   c                 4    | j                                         S r   r  rg  s    r>   rz  zLookAround.is_atomich  r  r?   c                 4    | j                                         S r   r  rg  s    r>   r}  zLookAround.can_be_affixk  r  r?   c                 4    | j                                         S r   r  rg  s    r>   r  zLookAround.contains_groupn  r  r?   c                 z    | j         r%| j        |k    r| j                            |          S t	          d g          S r   )r   rv  r  r  r   r  s     r>   r  zLookAround.get_firstsetq  s<    = 	9T[G33?//888D6{{r?   c                     d}| j         r
|t          z  }|r
|t          z  }|r
|t          z  }t          j        |t          | j                   fg| j        	                    | j                  z   t          j
        fgz   S r  )r   r  r  r  r  
LOOKAROUNDr  rv  r  r   r  r  s       r>   r  zLookAround._compilew  s    = 	![ E 	XE 	 ZE-O(<(<=>
/
!
!$+
.
./356*> 	?r?   c                     t          d                    t          |z  | j        | j                 t
          | j                                      | j                            |dz   | j                   d S )Nz{}LOOK{} {}r.   )	r  r8   r  	_dir_textrv  r  r   r  r  r  s      r>   r  zLookAround.dump  sj    m""6F?
.
%x'>@ @ 	A 	A 	AVaZ55555r?   c                 B    | j         o| j                                        S r   )r   r  r  rg  s    r>   r  zLookAround.is_empty  s    };!9!9!;!;;r?   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  rv  r   r  r  s     r>   r  zLookAround.__eq__  sK    DzzT%[[( Odk4=
/.$|U^U=MN.O 	Or?   c                     dS r  rD   rg  s    r>   r  zLookAround.max_width  r  r?   N)r@   rA   rB   r6  r:   ro  r   ru  rw  rz  r}  r  r  r  r  r  r  r  rD   r?   r>   ru  ru  N  s        x00I% % %@ @ @B B B  1 1 1+ + +. . .0 0 0  
? 
? 
?6 6 6
< < <O O O    r?   ru  c                   l    e Zd ZdddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd ZdS )r~  r(  r)  r^  c                     t                               |            t          |          | _        t          |          | _        || _        || _        || _        d S r   )rd  r:   r   rv  r   r  r  r  )r;   rv  r   r  r  r  s         r>   r:   zLookAroundConditional.__init__  sI    4   6llX$ r?   c                     | j                             |||           | j                            |||           | j                            |||           d S r   )r  ro  r  r  rm  s       r>   ro  z LookAroundConditional.fix_groups  sV    ""7GU;;;  '5999%88888r?   c                     | j                             || j                  }| j                            || j                  }| j                            || j                  }t          | j        | j        |||          S r   )r  r   rv  r  r  r~  r   )r;   r   r   r  r  r  s         r>   r   zLookAroundConditional.optimise  sn    _--dDK@@
=))$<<,''dk::$T[$-
G  	r?   c                     | j                             |          | _         | j                            |          | _        | j                            |          | _        | S r   )r  ru  r  r  rt  s     r>   ru  z%LookAroundConditional.pack_characters  sL    /99$??55d;;|33D99r?   c                     | j                                         | _         | j                                        | _        | j                                        | _        d S r   )r  rw  r  r  rg  s    r>   rw  z%LookAroundConditional.remove_captures  sE    /99;;5577|3355r?   c                     | j                                         o1| j                                        o| j                                        S r   )r  rz  r  r  rg  s    r>   rz  zLookAroundConditional.is_atomic  sC    ))++ #0G0G0I0I #
,
 
 
"
"	$r?   c                     | j                                         o1| j                                        o| j                                        S r   )r  r}  r  r  rg  s    r>   r}  z"LookAroundConditional.can_be_affix  sC    ,,.. *4=3M3M3O3O *l''))	+r?   c                     | j                                         p1| j                                        p| j                                        S r   )r  r  r  r  rg  s    r>   r  z$LookAroundConditional.contains_group  sG    ..00 J
-
&
&
(
(J,0L,G,G,I,I	Kr?   c                 V   t           j        t          | j                  t          | j                   fg}|                    | j                            | j        |                     |                    t           j	        f           |                    | j
                            ||                     | j                            ||          }|r5|                    t           j	        f           |                    |           |                    t           j        f           |S r   )r  CONDITIONALr  r   rv  r   r  r   r[   r  r  r  r  r  s        r>   r  zLookAroundConditional._compile  s    T]!3!3ST[5I5IJKDO++DK??@@@RWK   DM))'599:::<''77 	"KK$$$KK!!!RVJr?   c                 :   t          d                    t          |z  | j        | j                 t
          | j                                      | j                            |dz   | j                   t          d                    t          |z                       | j	                            |dz   |           | j
                                        sJt          d                    t          |z                       | j
                            |dz   |           d S d S )Nz{}CONDITIONAL {} {}r.   z{}EITHERr  )r  r8   r  r6  rv  r  r   r  r  r  r  r  r  s      r>   r  zLookAroundConditional.dump  s   #**6F?
.
%x'>@ @ 	A 	A 	AVaZ555j001116A:w///|$$&& 	3&--00111Lfqj'22222	3 	3r?   c                     | j                                         r| j                                        p| j                                        S r   )r  r  r  r  rg  s    r>   r  zLookAroundConditional.is_empty  sA    ((**Gt}/E/E/G/G "
,


!
!	#r?   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  r  r  r  r  s     r>   r  zLookAroundConditional.__eq__  sK    DzzT%[[( Mdot}
,.!,enemL.M 	Mr?   c                 ~    t          | j                                        | j                                                  S r   r  rg  s    r>   r  zLookAroundConditional.max_width  r  r?   c                 .    |                                  d fS r   r  r  s     r>   r  z)LookAroundConditional.get_required_string  r  r?   N)r@   rA   rB   r6  r:   ro  r   ru  rw  rz  r}  r  r  r  r  r  r  r  rD   r?   r>   r~  r~    s        x00I  9 9 9
    6 6 6
$ $ $+ + +K K K  3 3 3# # #M M MH H H& & & & &r?   r~  c                       e Zd Zd Zd ZdS )r  c                     || _         d S r   )r   )r;   r   s     r>   r:   zPrecompiledCode.__init__  rp  r?   c                 ,    t          | j                  gS r   )r|   r   r  s      r>   r  zPrecompiledCode._compile  s    di  !!r?   Nrx  rD   r?   r>   r  r    s2          " " " " "r?   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deddfdZd ZddZd Zd Zd	 Zd
 Zd Zd ZdS )rC  FTr   c                    t                               |            || _        t          |          | _        t
          |         | _        t          |          | _        || _        | j	        | j        | j        | j        | j        f| _
        d S r   )rd  r:   r_   r   r   ri  r   r   r  rZ   rf  )r;   r_   r   r   r   r  s         r>   r:   zProperty.__init__  sm    4   
X1*=i ^TZ
/4>+			r?   c                 <    t          | j        |||| j                  S r   )rC  r_   r  rk  s       r>   rj  zProperty.rebuild  s#    
Hj)
-  	r?   c                     | S r   rD   r}  s       r>   r   zProperty.optimise  rr  r?   c                 "    t          | g          S r   r  r  s     r>   r  zProperty.get_firstset  r  r?   c                     dS ry  rD   rg  s    r>   r  zProperty.has_simple_start  r{  r?   c                     d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }|| j        t          z  z  }| j        | j        |f         || j	        fgS r  )
r   r  r   r  r  r  r  r  r   r_   r  s       r>   r  zProperty._compile  ss    = 	![ E> 	"\!E 	XE"333dow67
KLLr?   c                 $   t           | j        dz	           }|d         |d         | j        dz           }}t          d                    t          |z  t
          | j                 ||t          | j                 ddg| j	                                      d S )NrR   r   r.   i  z{}PROPERTY {} {}:{}{}{}rg   r  )
PROPERTY_NAMESr_   r  r8   r  r  r   r  r   r  )r;   r  r   r   r   r_   s         r>   r  zProperty.dump  s    djB./1gtAwtzF':;e'..v
4=
!4	$/0Jx.
') ) 	* 	* 	* 	* 	*r?   c                 H    t          j        | j        |          | j        k    S r   )r   has_property_valuer_   r   r  s     r>   r  zProperty.matches   s    (R88DMIIr?   c                     dS r  rD   rg  s    r>   r  zProperty.max_width#  r  r?   Nr  )r@   rA   rB   r   r  PROPERTYr   PROPERTY_IGNr   rJ  PROPERTY_REVPROPERTY_IGN_REVr  r:   rj  r   r  r  r  r  r  r  rD   r?   r>   rC  rC    s       j%-@o%("+7No~rT8JHd+R_~
? 	"G (,
+ 
+ 
+ 
+         	M 	M 	M* * *J J J    r?   rC  c                       e Zd ZdZd ZdS )PrunePRUNEc                     t           j        fgS r   )r  r_  r  s      r>   r  zPrune._compile)  s    ~r?   Nr  rD   r?   r>   r^  r^  &  s(        H    r?   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dZdedfdZd ZddZd Zd Zd	 Zd
 ZdS )r  FTRANGEc                     t                               |            || _        || _        t	          |          | _        t          |         | _        t	          |          | _        | j	        | j        | j        | j        | j        | j        f| _
        d S r   )rd  r:   lowerr5  r   r   ri  r   r   rZ   rf  )r;   rd  r5  r   r   r   s         r>   r:   zRange.__init__3  sq    4   

X1*=i^TZT]
/4>+			r?   c                 <    t          | j        | j        |||          S r   )r  rd  r5  rk  s       r>   rj  zRange.rebuild?  s    TZXz9MMMr?   c                 <   | j         r| j        t          z  r|r| S |j        t          z  r| j        t
          z  t
          k    r| S t          j                    }g }|D ]v}| j        t          |          cxk    r| j
        k    rPn )t          j        t          |          }|                    t          d |D             | j                             w|s| S t          |          | j
        | j        z
  dz   k     r|                    d|            t#          |          S )Nc                 ,    g | ]}t          |          S rD   r  r  s     r>   r   z"Range.optimise.<locals>.<listcomp>T  s    $<$<$<SVV$<$<$<r?   r   r.   r   )r   r   r   r   r   rJ  r   rP  rd  r   r5  r   rO  r[   r  r^   r  r   )r;   r   r   r   rR  r  r   rQ  s           r>   r   zRange.optimiseB  sC   } 	T_z%A 	f 	K g% 	4?^+K
+ +K !688 ! 	/ 	/BzSWW2222
22222)*;R@@V$<$<V$<$<$<!_. . . / / /  	Ku::
TZ/!333LLD!!!e}}r?   c                     d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }| j        | j        |f         || j        | j        fgS r  )	r   r  r   r  r  r  r   rd  r5  r  s       r>   r  zRange._compilea  sl    = 	![ E> 	"\!E 	XEdow67

*  	r?   c           
      r   t          t          | j                                                d          }t          t          | j                                                d          }t          d                    t          |z  t          | j	                 ||t          | j                                      d S )Nr  z{}RANGE {} {} {}{})r  rM  rd  r  r5  r  r8   r  r  r   r  r   )r;   r  r   display_lowerdisplay_uppers        r>   r  z
Range.dumpl  s    c$*oo..55d;;c$*oo..55d;;"))&6/
4=
!=-
DO
$& & 	' 	' 	' 	' 	'r?   c                 H    | j         |cxk    o
| j        k    nc | j        k    S r   )rd  r5  r   r  s     r>   r  zRange.matchess  s/    
b....DJ....4=@@r?   c                     dS r  rD   rg  s    r>   r  zRange.max_widthv  r  r?   Nr  )r@   rA   rB   r   r  rb  r   	RANGE_IGNr   rJ  	RANGE_REVRANGE_IGN_REVr  r  r:   rj  r   r  r  r  r  rD   r?   r>   r  r  ,  s        :u*=r|NE#:BLtnblZ$68H~t&<b>NPG H.2v
+ 
+ 
+ 
+N N N   >	 	 	' ' 'A A A    r?   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Zd Zd Zd Zd Zd Zd	 Zd
S )r   FTc                     t                               |            || _        || _        || _        t
          |         | _        | j        | j        | j        f| _        d S r   )	rd  r:   r   rj  r   ri  r   rZ   rf  )r;   r   rj  r   r   s        r>   r:   zRefGroup.__init__  sO    4   	
 1*=NDJ?			r?   c                 z   	 t          | j                  | _        nR# t          $ rE 	 | j        j        | j                 | _        n$# t
          $ r t          d|| j                  w xY wY nw xY wd| j        cxk    r| j        j        k    sn t          d|| j                  | j	        | j        | j
        f| _        d S )NrX  r.   rW  )r  rj  r6  r   r]  r   r'   r   r  rZ   r   rf  rm  s       r>   ro  zRefGroup.fix_groups  s    	ETZDJJ 	E 	E 	EE!Y24:>

 E E EOWdmDDDE 
	E DJ7777$)"7777717DMJJJNDJ?			r`  c                 8    t          d| j        | j                  rb  rc  rg  s    r>   rw  zRefGroup.remove_captures  rd  r?   c                 X    d}|r
|t           z  }| j        | j        |f         || j        fgS r  )r  r  r   rj  r  s       r>   r  zRefGroup._compile  s9     	XEdow67
KLLr?   c                     t          d                    t          |z  | j        t          | j                                      d S )Nz{}REF_GROUP {}{})r  r8   r  rj  r  r   r  s      r>   r  zRefGroup.dump  sE     ''
DO
$& & 	' 	' 	' 	' 	'r?   c                     t           S r   r  rg  s    r>   r  zRefGroup.max_width  rl  r?   c                     d | _         d S r   rn  rg  s    r>   ro  zRefGroup.__del__  rp  r?   N)r@   rA   rB   r   r  	REF_GROUPr   REF_GROUP_IGNr   rJ  REF_GROUP_FLDREF_GROUP_REVREF_GROUP_IGN_REVREF_GROUP_FLD_REVr  r:   ro  rw  r  r  r  ro  rD   r?   r>   r   r   y  s       z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G :@ @ @ @ @@ @ @P P PM M M' ' '      r?   r   c                        e Zd Zej        ZdZdS )r  SEARCH_ANCHORN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r    r  r?   r  c                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zed             Zed             Zed             Zd Zd Zd Zd ZdS )r   Nc                 P    t                               |            |g }|| _        d S r   )rd  r:   r  )r;   r  s     r>   r:   zSequence.__init__  s+    4   =E


r?   c                 H    | j         D ]}|                    |||           d S r   )r  ro  )r;   r2   r   rn  rs   s        r>   ro  zSequence.fix_groups  s6     	2 	2ALL'51111	2 	2r?   c                     g }| j         D ]]}|                    ||          }t          |t                    r|                    |j                    H|                    |           ^t          |          S r   )r  r   r/   r   r   r[   rb  )r;   r   r   r  rs   s        r>   r   zSequence.optimise  ss     	  	 A

4))A!X&&  QW%%%%QU###r?   c                 Z   g }g }t           }| j        D ]k}t          |          t          u rt|j        rm|j        sf|j        |k    r@|j        st          |j                  r$t          
                    |||           |j        }|                    |j                   t          |          t          u st          |          t          u rm|j        |k    rF|j        st          fd|D                       r$t          
                    |||           |j        }|                    |j                   &t          
                    |||           |                    |                                         mt          
                    |||           t%          |          S )z+Packs sequences of characters into strings.c              3   8   K   | ]}t          |          V  d S r   r   r   r   r   s     r>   r  z+Sequence.pack_characters.<locals>.<genexpr>  s=       +" +"1:dA+>+> +" +" +" +" +" +"r?   )r   r  r  r   r   r   r   r   r_   r   _flush_charactersr[   r  r  r  r   r  ru  rb  )r;   r   r  r  r   rs   s    `    r>   ru  zSequence.pack_characters  s   

 	6 	6AAww)##
#1;#<:-- | 2z$'@'@ 2 224$e- - - &'\
!!!'****aF""d1gg&8&8<:-- | 2s +" +" +" +" +" +" +" (" (" 2 224$e- - - &'\
!!!,////**4ZOOOQ..t445555""4ZGGGU###r?   c                 2    d | j         D             | _         | S )Nc                 6    g | ]}|                                 S rD   r  r   rs   s     r>   r   z,Sequence.remove_captures.<locals>.<listcomp>  s$    >>>aa''))>>>r?   ra  rg  s    r>   rw  zSequence.remove_captures  s    >>4:>>>
r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r
  r  s     r>   r  z%Sequence.is_atomic.<locals>.<genexpr>  *      55Q1;;==555555r?   r  r  rg  s    r>   rz  zSequence.is_atomic  !    55$*555555r?   c                     dS r  rD   rg  s    r>   r}  zSequence.can_be_affix  r  r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z*Sequence.contains_group.<locals>.<genexpr>  s.      ::!1##%%::::::r?   )r  r  rg  s    r>   r  zSequence.contains_group  s!    ::tz::::::r?   c                     t                      }| j        }|r|                                 |D ]7}||                    |          z  }d |vr|c S |                    d            8|t          d g          z  S r   )r   r  r   r  discard)r;   r   r   r  rs   s        r>   r  zSequence.get_firstset  s    UU
 	MMOOO 	 	A!..)))B2~~			JJtCKKr?   c                 h    t          | j                  o| j        d                                         S r  )r   r  r  rg  s    r>   r  zSequence.has_simple_start  s)    DJDDJqM$B$B$D$DDr?   c                     | j         }|r|d d d         }g }|D ]+}|                    |                    ||                     ,|S r  )r  r   r   )r;   r   rn  seqr   rs   s         r>   r  zSequence._compile	  s\    j 	ddd)C 	3 	3AKK		'5112222r?   c                 F    | j         D ]}|                    ||           d S r   )r  r  )r;   r  r   rs   s       r>   r  zSequence.dump  s4     	$ 	$AFF67####	$ 	$r?   c                     |sd S |t           z  r"t           fd|D                       st          }|t          z  t          k    rt                              |          }|D ]u}|j        }t          |          dk    r0|                    t          |d         |j
                             L|                    t          ||j
                             vnbt          |          dk    r+|                    t          |d         |                     n$|                    t          ||                     g |d d <   d S )Nc              3   8   K   | ]}t          |          V  d S r   r  r  s     r>   r  z-Sequence._flush_characters.<locals>.<genexpr>  s-      ??qz$**??????r?   r.   r   r   )r   r  r   rJ  r   _fix_full_casefoldr  r^   r[   r   r   r  )r   r  r   r  literalsr   charss   `      r>   r  zSequence._flush_characters  sN    	F 
" 	$????J????? $#
'N::22:>>H  L Lu::??LL58!P!P!PQQQQLL$/!J!J!JKKKKL :!##Yz!}LLLMMMMVJ:FFFGGG
111r?   c                 2   d t          j                    D             }t          j        t          d                    d | D                                                                 }g }|D ]Y} |j        |          }|dk    rA|                    ||t          |          z   f            |j        ||dz             }|dk    AZd}g }t          
                    |          D ]o\  }}	||k     r1|                    t          | ||         t                               |                    t          | ||	         t                               |	}p|t          |           k     r1|                    t          | |d          t                               |S )Nc                 B    g | ]}t          j        t          |          S rD   )r   r   rO  r  s     r>   r   z/Sequence._fix_full_casefold.<locals>.<listcomp>8  s2     * * *qF$%6:: * * *r?   rg   c              3   4   K   | ]}t          |          V  d S r   rM  r  s     r>   r  z.Sequence._fix_full_casefold.<locals>.<genexpr>:  s=       = = >AVV = = = = = =r?   r   r.   r   )r   rP  r   rO  r]   rd  findr[   r^   r   _merge_chunksr  r   rJ  )
r  expandedr   chunksrn   foundr3   r  r  r  s
             r>   r  zSequence._fix_full_casefold4  s   * *

&
(
(* * *!"3RWW = == = = 6 6     % 	 	2 	2AFKNNE1**uec!ffn5666#Auqy11 1** "0088 	 	JE3U{{
3;(?'!) !) !) * * * OOGJus{$;') ) ) * * *CCZ  OOGJsuu$6:NNNOOOr?   c                 $   t          |           dk     r| S |                                  | d         \  }}g }| dd          D ]7\  }}||k    rt          ||          }|                    ||f           ||}}8|                    ||f           |S )NrO   r   r.   )r^   sortr@  r[   )r  r  r  
new_chunksrs   rn   s         r>   r  zSequence._merge_chunksV  s    v;;??MAY
s
133L 	" 	"DAqCxx#qkk!!5#,///s5#,'''r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   rU  rN  s     r>   r  z$Sequence.is_empty.<locals>.<genexpr>l  s*      44A1::<<444444r?   r  rg  s    r>   r  zSequence.is_emptyk  s!    44444444r?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  r  r  s     r>   r  zSequence.__eq__n  rj  r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z%Sequence.max_width.<locals>.<genexpr>r  r  r?   )sumr  rg  s    r>   r  zSequence.max_widthq  r  r?   c                     | j         }|r|d d d         }d}|D ]'}|                    |          \  }}||z  }|r||fc S (|d fS )Nr  r   )r  r  )r;   r   r  r  rs   r  r  s          r>   r  zSequence.get_required_stringt  s}    j 	ddd)C 	# 	#A,,W55HCcMF #s{"""# t|r?   r   )r@   rA   rB   r:   ro  r   ru  rw  rz  r}  r  r  r  r  r  rY  r  r  r  r  r  r  r  rD   r?   r>   r   r     sb          2 2 2
$ 
$ 
$$$ $$ $$L  6 6 6  ; ; ;     E E E	 	 	$ $ $   \6   \B   \(5 5 5G G G6 6 6    r?   r   c                   L    e Zd ZdedfdZd Zd Zd Zd Zd Z	d	 Z
d
 Zd ZdS )r=  TFc                 <   t                               |            || _        t          |          | _        t          |          | _        t          |         | _        t          |          | _	        d| _
        | j        | j        | j        | j        | j	        f| _        d S r  )rd  r:   r   r|   r  r   r   ri  r   r   
char_widthrZ   rf  )r;   r   r  r   r   r   s         r>   r:   zSetBase.__init__  sz    4   	5\\
X1*=i^TZ
/4>+			r?   c                      t          |           | j        | j        |||                              | j        d          S r  )r  r   r  r   rk  s       r>   rj  zSetBase.rebuild  s<    tDzz$)TZ:
 Xdi//	0r?   c                 "    t          | g          S r   r  r  s     r>   r  zSetBase.get_firstset  r  r?   c                     dS ry  rD   rg  s    r>   r  zSetBase.has_simple_start  r{  r?   c                 6   d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }| j        | j        |f         |fg}| j        D ])}|                    |	                                           *|
                    t          j        f           |S r  )r   r  r   r  r  r  r   r  r   r   r[   r  r  )r;   r   rn  r   r   rb   s         r>   r  zSetBase._compile  s    = 	![ E> 	"\!E 	XEdow67?@ 	% 	%AKK		$$$$RVJr?   c           	          t          d                    t          |z  | j        t          | j                 t          | j                                      | j        D ]}|	                    |dz   |           d S )Nr  r.   )
r  r8   r  r  r  r   r  r   r  r  )r;   r  r   rp   s       r>   r  zSetBase.dump  s|    k  &$-
4=
!9T_#=? ? 	@ 	@ 	@ 	( 	(AFF6A:w''''	( 	(r?   c                     | j         r| j        t          z  r|r| S | j        j        t
          z  r| j        t          z  t          k    r| S t          j                    }g }t                      }|D ]}| 
                    t          |                    rft          j        t          |          }||vrH|                    t          d |D             | j                             |                    |           |s| S t#          | g|z             S )Nc                 ,    g | ]}t          |          S rD   r  r  s     r>   r   z0SetBase._handle_case_folding.<locals>.<listcomp>  s    (@(@(@AQ(@(@(@r?   r   )r   r   r   r   r   r   rJ  r   rP  r   r  r   r   rO  r[   r  r   r   )r;   r   r   rR  r  seenr   rQ  s           r>   _handle_case_foldingzSetBase._handle_case_folding  s/   } 	T_z%A 	f 	K 7* 	
1+0, 0,K !688 uu! 	% 	%B||CGG$$ %)*;R@@%%LL(@(@(@(@(@!%"2 "2 "2 3 3 3HHV$$$ 	Ktfun%%%r?   c                    | j         r| j        t          z  sdS | j        j        t
          z  r| j        t          z  t          k    rdS t          j                    }t                      }|D ]S}| 
                    t          |                    r/t          j        t          |          }|                    |           T|sdS t          d |D                       S )Nr.   c              3   4   K   | ]}t          |          V  d S r   r  )r   rQ  s     r>   r  z$SetBase.max_width.<locals>.<genexpr>  s(      2263v;;222222r?   )r   r   r   r   r   r   rJ  r   rP  r   r  r   r   rO  r   r@  )r;   rR  r  r   rQ  s        r>   r  zSetBase.max_width  s    } 	T_z%A 	1 7* 	
1+0, 0,1 !688 uu! 	! 	!B||CGG$$ !)*;R@@    	122T222222r?   c                     d | _         d S r   rn  rg  s    r>   ro  zSetBase.__del__  rp  r?   N)r@   rA   rB   r   r:   rj  r  r  r  r  r  r  ro  rD   r?   r>   r=  r=    s        -1f+ + + +0 0 0       ( ( (& & &<3 3 32    r?   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dZddZd ZdS )r  FTSET_DIFFc                    | j         }t          |          dk    r |d         t          |dd                    g}t          |          dk    r<|d                             | j        | j                                      |          S t          fd|D                       | _         |                     |          S )NrO   r   r.   r   c              3   H   K   | ]}|                     d           V  dS )Tr   N)r   )r   rb   r   r   s     r>   r  z#SetDiff.optimise.<locals>.<genexpr>  sE        a1::dGD:AA      r?   )	r  r^   r   r   r   r   r   r|   r  )r;   r   r   r   r  s    ``  r>   r   zSetDiff.optimise  s    
u::>>1XxeACCk::;Eu::??8&&$/ ' ( ((0w(G(GH      
    
 ((v666r?   c                     | j         d                             |          o | j         d                             |           }|| j        k    S Nr   r.   r  r  r   r;   r   rb   s      r>   r  zSetDiff.matches  sD    JqM!!"%%Gdjm.C.CB.G.G*GDM!!r?   Nr  )r@   rA   rB   r   r  r  r   SET_DIFF_IGNr   rJ  SET_DIFF_REVSET_DIFF_IGN_REVr  r  r   r  rD   r?   r>   r  r    s        j%-@o%("+7No~rT8JHd+R_~
? 	"G
 H7 7 7 7" " " " "r?   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dZddZd ZdS )r  FT	SET_INTERc                    g }| j         D ]f}|                    ||d          }t          |t                    r"|j        r|                    |j                    Q|                    |           gt          |          dk    r<|d                             | j	        | j
                                      |||          S t          |          | _         |                     ||          S NTr   r.   r   r   )r  r   r/   r  r   r   r[   r^   r   r   r   r|   r  r;   r   r   r   r  rb   s         r>   r   zSetInter.optimise  s     	  	 A

4
66A!X&&  1:  QW%%%%Qu::??8&&$/ ' ( ((0w(G(GH 5\\
((v666r?   c                 Z    t          fd| j        D                       }|| j        k    S )Nc              3   B   K   | ]}|                               V  d S r   r  r   rp   r   s     r>   r  z#SetInter.matches.<locals>.<genexpr>!  -      22!		"222222r?   )r  r  r   r  s    ` r>   r  zSetInter.matches   4    2222tz22222DM!!r?   Nr  )r@   rA   rB   r   r  r  r   SET_INTER_IGNr   rJ  SET_INTER_REVSET_INTER_IGN_REVr  r  r   r  rD   r?   r>   r  r    s        z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G
 H7 7 7 7$" " " " "r?   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dZddZd ZdS )r	  FTSET_SYM_DIFFc                    g }| j         D ]f}|                    ||d          }t          |t                    r"|j        r|                    |j                    Q|                    |           gt          |          dk    r<|d                             | j	        | j
                                      |||          S t          |          | _         |                     ||          S r  )r  r   r/   r	  r   r   r[   r^   r   r   r   r|   r  r  s         r>   r   zSetSymDiff.optimise,  s     	  	 A

4
66A!Z((  QZ  QW%%%%Qu::??8&&$/ ' ( ((0w(G(GH 5\\
((v666r?   c                 b    d}| j         D ]}||                    |          k    }|| j        k    S r  r  )r;   r   rb   rp   s       r>   r  zSetSymDiff.matches>  s;     	# 	#AQYYr]]"AADM!!r?   Nr  )r@   rA   rB   r   r  r  r   SET_SYM_DIFF_IGNr   rJ  SET_SYM_DIFF_REVSET_SYM_DIFF_IGN_REVr  r  r   r  rD   r?   r>   r	  r	  $  s        *e1DHe,bo@!FD>23F4"1Hd3CND123J	LG
 H7 7 7 7$" " " " "r?   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dZddZd Zd ZdS )	r   FT	SET_UNIONc                 N   g }| j         D ]}|                    ||d          }t          |t                    r"|j        r|                    |j                    Qt          |t                    rt                      c S |                    |           t                      t                      f}|D ]I}t          |t                    r2||j                 
                    |j        |j        |j        f           J|d         |d         z  rt                      S t          |          dk    rM|d         }|                    |j        | j        k    | j        | j                                      |||          S t!          |          | _         |                     ||          S )NTr   r   r.   )r   r   r   )r  r   r/   r   r   r   r   r[   r   rC  r   r_   r   r   r^   r   r|   r  )r;   r   r   r   r  rb   
propertiesrp   s           r>   r   zSetUnion.optimiseM  s    	  	 A

4
66A!X&&  1:  QW%%%%Av&&  xxQ eeSUU^
 	Q 	QA!X&& Q1:&**AGQ\1;+OPPPa=:a=( 	88Ou::??aA<<t})D   ( ((0w(G(GH 5\\
((v666r?   c                 R   d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }t          t                    g }}| j        D ]R}t          |t                    r&||j                  
                    |j                   =|
                    |           S| j        | j        |f         |fg}|                                D ]\  }}	d}|r
|t          z  }t          |	          dk    r)|
                    t          j        ||	d         f           O|
                    t          j        |t          |	          ft%          |	          z              |D ])}|                    |                                           *|
                    t          j        f           |S r  )r   r  r   r  r  r   r   r  r/   r   r[   r_   r  r   r^   r  r  STRINGr|   r   r   r  )
r;   r   rn  r   r  othersrb   r   r   valuess
             r>   r  zSetUnion._compilem  s   = 	![ E> 	"\!E 	XE(..F
 	! 	!A!Y'' !1:&--ag6666a    dow67?@ * 0 0 2 2 	M 	MHfE %$6{{aR\5&)<====RYs6{{;eFmmKLLLL 	% 	%AKK		$$$$RVJr?   c                 Z    t          fd| j        D                       }|| j        k    S )Nc              3   B   K   | ]}|                               V  d S r   r  r  s     r>   r  z#SetUnion.matches.<locals>.<genexpr>  r  r?   )r  r  r   r  s    ` r>   r  zSetUnion.matches  r  r?   Nr  )r@   rA   rB   r   r  r  r   SET_UNION_IGNr   rJ  SET_UNION_REVSET_UNION_IGN_REVr  r  r   r  r  rD   r?   r>   r   r   E  s        z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G
 H7 7 7 7@     D" " " " "r?   r   c                        e Zd ZdZej        ZdS )SkipSKIPN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r    s        HgGGGr?   r  c                        e Zd Zej        ZdZdS )r   START_OF_LINEN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r     r  r?   r   c                        e Zd Zej        ZdZdS )r   START_OF_LINE_UN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r              G HHHr?   r   c                        e Zd Zej        ZdZdS )r   START_OF_STRINGN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r     r  r?   r   c                        e Zd Zej        ZdZdS )StartOfWordSTART_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r    r  r?   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Zd Zd Zd Zd Zd Zd	 Zd
S )r  FTc                    t          |          | _        t          |         | _        | j        t          z  t          k    rSg }| j        D ]H}t          j        t          t          |                    }|	                    d |D                        In| j        }t          |          | _
        d| _        | j        | j        | j        f| _        d S )Nc              3   4   K   | ]}t          |          V  d S r   r  r  s     r>   r  z"String.__init__.<locals>.<genexpr>  s(      (@(@AQ(@(@(@(@(@(@r?   F)r|   r  ri  r   rJ  r   r   rO  rM  r   r  requiredrZ   rf  )r;   r  r   r  r   rQ  s         r>   r:   zString.__init__  s    
++1*=On,?? " A A)*;SYYGG!(((@(@(@(@(@@@@@A !%!&'8!9!9NDOT_D			r?   c                 n    |rd}nd}t          t          | j        |         | j                  g          S )Nr  r   r   )r   r   r  r   )r;   r   r3   s      r>   r  zString.get_firstset  sL     	CCCIdoc2_& & & ' ( ( 	(r?   c                     dS ry  rD   rg  s    r>   r  zString.has_simple_start  r{  r?   c                     d}|r
|t           z  }| j        r
|t          z  }| j        | j        |f         |t          | j                  f| j        z   gS r  )r  r  REQUIRED_OPr  r   r^   r  r  s       r>   r  zString._compile  sk     	XE= 	![ Edow67
d$
%
%')-)?@ A 	Ar?   c                    t          d                    d | j        D                                                     d          }t	          d                    t          |z  |t          | j                                      d S )Nrg   c              3   4   K   | ]}t          |          V  d S r   r  r  s     r>   r  zString.dump.<locals>.<genexpr>  s(      @@1A@@@@@@r?   r  z{}STRING {}{})	r  r]   r  r  r  r8   r  r  r   r  s       r>   r  zString.dump  sz    @@@@@@@AAHHNNo$$Vf_g
DO
$& & 	' 	' 	' 	' 	'r?   c                 *    t          | j                  S r   )r^   r  rg  s    r>   r  zString.max_width  s    4)***r?   c                 
    d| fS r  rD   r  s     r>   r  zString.get_required_string  s    $wr?   N)r@   rA   rB   r   r  r  r   
STRING_IGNr   rJ  
STRING_FLD
STRING_REVSTRING_IGN_REVSTRING_FLD_REVr  r:   r  r  r  r  r  r  rD   r?   r>   r  r    s        	J+>^U$;R]tnbmj$%79J'=	G /5 E E E E"( ( (  A A A' ' '
+ + +    r?   r  c                       e Zd Zd ZdS )r  c                 
   d                     d | j        D                       }t          |                              d          }t	          d                    t          |z  |t          | j                                      d S )Nrg   c              3   4   K   | ]}t          |          V  d S r   r  r  s     r>   r  zLiteral.dump.<locals>.<genexpr>  s(      ::Q#a&&::::::r?   r  z{}LITERAL MATCH {}{})	r]   r  r  r  r  r8   r  r  r   )r;   r  r   literalr  s        r>   r  zLiteral.dump  s~    ''::$/:::::..''--$++FVOW
DO
$& & 	' 	' 	' 	' 	'r?   N)r@   rA   rB   r  rD   r?   r>   r  r    s#        ' ' ' ' 'r?   r  c                   $    e Zd ZefdZd Zd ZdS )r   c                 |   || _         || _        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          z  }|z  }g }|D ]D}	t          |	t                    rd |	D             }	|                    fd|	D                        E|                    t          d           d |D             | _        d S )Nc                 ,    g | ]}t          |          S rD   r  r  s     r>   r   z&StringSet.__init__.<locals>.<listcomp>  s    111Q#a&&111r?   c                 2    g | ]}t          |           S )r   r  )r   r   r   s     r>   r   z&StringSet.__init__.<locals>.<listcomp>  s2       AIaJ???   r?   T)rD  r   c                 ,    g | ]}t          |          S rD   )r   )r   choices     r>   r   z&StringSet.__init__.<locals>.<listcomp>  s     @@@f&))@@@r?   )r   r   ri  r   rZ   rf  set_keynamed_lists_usedr^   r  r   r   r/   r0   r[   r  r   )
r;   r   r   r   r\  r  r  
fold_flagschoicesr   s
      `      r>   r:   zStringSet.__init__  sU   		1*=NDIt>	do.<t44425d6K2L2LD!$,/	*4<8	 +_
9?^3
*
 	 	F&#&& 211&111NN           	d+++@@@@@r?   c                     t          d                    t          |z  | j        t          | j                                      d S )Nz{}STRING_SET {}{})r  r8   r  r   r  r   r  s      r>   r  zStringSet.dump  sE    !((&$)
DO
$& & 	' 	' 	' 	' 	'r?   c                     d | _         d S r   rn  rg  s    r>   ro  zStringSet.__del__  rp  r?   N)r@   rA   rB   r   r:   r  ro  rD   r?   r>   r   r     sN        .4 A A A AB' ' '    r?   r   c                   R    e Zd ZdZd ZddZddZddZdd	Zdd
Z	d Z
d Zd ZdS )Sourcez1Scanner for the regular expression source string.c                     t          |t                    r|| _        t          | _        n |j        d          | _        d | _        d| _        d| _        |d d         | _        d S )Nzlatin-1c                 "    t          | g          S r   )rP  r;  s    r>   rB  z!Source.__init__.<locals>.<lambda>  s    uaSzz r?   r   F)	r/   r0   r   rM  	char_typedecoder3   rZ  rO  )r;   r   s     r>   r:   zSource.__init__  sc    fc"" 	2 DK DNN'&-	22DK11DN!3Q3<r?   Fc                 "   | j         }| j        }	 | j        rC|sA	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@||         S # t
          $ r |d d         cY S t          $ r |d d         cY S w xY wNTr.   rN  r,   r   )r   r3   rZ  isspacer\  r[  r6  )r;   override_ignorer   r3   s       r>   rc  zSource.peek  s    h	   	 	c{**,, q++*fl455 #; 	  	  	 3Q3< 	  	  	 3Q3<	 s   AA" "B8BBc                 p   | j         }| j        }	 | j        rC|sA	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@||         }|dz   | _        |S # t
          $ r || _        |d d         cY S t          $ r! t          |          | _        |d d         cY S w xY wr$  )r   r3   rZ  r%  r\  r[  r6  r^   )r;   r&  r   r3   r   s        r>   r   z
Source.get4  s    h	   	 	c{**,, q++*fl455 BQwDHI 	  	  	 DH3Q3< 	  	  	 6{{DH3Q3<	 s   AA. .B5'B54B5r.   c                    | j         }| j        }	 | j        rg }t          |          |k     rt	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@|                    ||                    |dz  }t          |          |k     td                    |          }n||||z            }|t          |          z  }|| _        |S # t          $ r, t          |          | _        d                    |          cY S t          $ r, t          |          | _        d                    |          cY S w xY wNTr.   rN  r,   rg   )
r   r3   rZ  r^   r%  r\  r[   r]   r[  r6  )r;   r4   r   r3   	substrings        r>   get_manyzSource.get_manyP  s|   h 	&  &	)nnu,,"!#;..00 "1HCC#C[C//".&,tS"9"9CC!" $$VC[1111HC )nnu,, GGI..		"3u#45	s9~~%DH 	& 	& 	&6{{DH779%%%%% 	& 	& 	&6{{DH779%%%%%	&s   CC 3E2EETc                    | j         }| j        }| j        r|s	 g }	 ||                                         r|dz  }nN||         dk    r |j        d|          }n0||         |v |k    r!|                    ||                    |dz  }nno|| _        nC# t          $ r t          |          | _        Y n#t          $ r t          |          | _        Y nw xY wd	                    |          S 	 ||         |v |k    r|dz  }||         |v |k    || j        |         }|| _        |S # t          $ r || j        |         }|| _        |cY S w xY wr)  )
r   r3   rZ  r%  r\  r[   r[  r^   r6  r]   )r;   test_setrU  r  r   r3   r*  s          r>   rG  zSource.get_whilev  s   h *	![ *	!'	c{**,, 
q++*fl455 +1g==!((555q  ' ' 'v;; ' ' 'v;;' 779%%%!c{h.7::1HC c{h.7:: #48c>2	   ! ! !"48c>2	    !s*   A9B C3CC,8D% %"E
	E
c                    | j         }| j        }	 | j        rV	 ||                                         r|dz  }n3||         dk    r |j        d|          }n||         |v |k    r|dz  }nnTn!||         |v |k    r|dz  }||         |v |k    || _        d S # t
          $ r t          |          | _        Y d S t          $ r t          |          | _        Y d S w xY wNTr.   rN  r,   )r   r3   rZ  r%  r\  r[  r^   r6  )r;   r-  rU  r   r3   s        r>   
skip_whilezSource.skip_while  s+   h	#  
c{**,, 	q++*fl455 +1g==q
 c{h.7::1HC c{h.7:: DHHH 	# 	# 	#6{{DHHHH 	# 	# 	#6{{DHHHH	#s   BB C8CCc                    | j         }| j        }| j        r	 |D ]W}	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@||         |k    r dS |dz  }X|| _        dS # t
          $ r Y dS t          $ r Y dS w xY w |j        ||          sdS |t          |          z   | _        dS )NTr.   rN  r,   F)	r   r3   rZ  r%  r\  r[  r6  rE  r^   )r;   r*  r   r3   r   s        r>   r   zSource.match  s"   h !	"  A"!#;..00 "1HCC#C[C//".&,tS"9"9CC!" c{a''$uu1HCCt   uu   uu %6$Y44 uS^^+DH4s   AA: +A: :
B	BBc                     |                      |          s.t          d                    |          | j        | j                  d S )Nz
missing {})r   r'   r8   r   r3   )r;   r*  s     r>   rY  zSource.expect  sG    zz)$$ 	O++I66TXNNN	O 	Or?   c                    | j         }| j        }	 | j        rA	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@|t          |          k    S # t          $ r Y dS t          $ r Y dS w xY wr/  )r   r3   rZ  r%  r\  r^   r[  r6  )r;   r   r3   s      r>   at_endzSource.at_end  s    h	  c{**,, q++*fl455 #f++%% 	 	 	44 	 	 	44	s   AA+ +
B8	BBNr  r.   )TF)T)r@   rA   rB   rC   r:   rc  r   r+  rG  r0  r   rY  r4  rD   r?   r>   r  r    s        77
  
  
        0       8$& $& $& $&L.! .! .! .!`# # # #:% % %NO O O    r?   r  c                   4    e Zd ZdZddi fdZddZd Zd ZdS )	Infoz"Info about the regular expression.r   Nc                    |t           |t          z  pt                   z  }|| _        || _        d| _        || _        d| _        i | _        i | _	        || _
        i | _        g | _        i | _        i | _        g | _        i | _        d S NFr   )DEFAULT_FLAGSr  r  r   r  r  r  r  r]  
group_namer!  r  open_groupsr^  r  r_  r  )r;   r   r!  r  s       r>   r:   zInfo.__init__  s     5I/JJ
!"" " "  r?   c                    | j                             |          }|@	 | xj        dz  c_        || j        | j        vrn"| j        }|r|| j         |<   || j        |<   || j        v r$t          | j                  dz    }|| j        |<   |}| j                            |           | j                            |d          dz   | j        |<   |S )NTr.   r   )	r]  r   r  r;  r<  r^   r  r[   r^  )r;   r   rj  group_aliass       r>   rX  zInfo.open_group  s     $$T**=  A%  <4#34?#J#J
 $E .). &)-&D$$$   344q89K/4D,E&&&'+'<'@'@'J'JQ'Ne$r?   c                 8    | j                                          d S r   )r<  r  rg  s    r>   r[  zInfo.close_group4  s    r?   c                     | j         t          z  pt          }|t          k    rdS |                                rt          |          }n| j                            |          }|| j        v S r  )	r   r  r  r"   r  r  r]  r   r<  )r;   r   r  rj  s       r>   rr  zInfo.is_open_group7  sf     :-A/h5<<>> 	/IIEE$((..E(((r?   r   )r@   rA   rB   rC   r:   rX  r[  rr  rD   r?   r>   r7  r7    sg        (($r ! ! ! !&   4  ) ) ) ) )r?   r7  c                 6   i }g }| j         D ]\  }}}|j        ||f}|                    |          }||j        dk    rot          | j        t
          z            }	t          |t                    }
|	|
f||fk    r3|                    t          t          |          |          ||f           nB| j        |j                 }|d         }|dd         ||fk    r|                    |||f           t          |          }|||<   ||_        || _        || _        dS )zkChecks whether the reverse and fuzzy features of the group calls match
    the groups which they call.
    Nr   r.   )r_  rj  r   r   r   r   r/   r  r[   rr  r^   r  rg  r  additional_groups)r   ru  r  rB  callr   rn  rD  rt  revfuzdef_inforj  s                r>   _check_group_featuresrG  E  sF    I $ 0  guz7E*mmC  ;zQ4:/00 //:'5!111 &,,gc)nnf.M.Mu.& ' ' '  .tz: ACC>gu%555 &,,eWe-DEEEi..C IcNDN.Dr?   c                     |                      t          |t          z                      \  }}|r8d|_        |t          k    rd}|j        }|t          z  s|t           z  }|j        }nd}d}d}|||fS )z>Gets the required string and related info of a parsed pattern.Tr  r   rD   )r  r   r   r  r  r   r   r  )ru  r   
req_offsetr  	req_flags	req_charss         r>   _get_required_stringrL  l  s     "55d57?6K6KLLJ  ""J'	 	"'!I.		
		y)++r?   c                       e Zd ZddZd ZdS )r(   r   c                 P   || _         g }|D ]\  }}t          |          }t          ||j                  t	          j        t          z            |_        t          |          }|	                                st          d|j        |j                  |                    |                                           t          |          fdt          |          D             }t!          |          }t	          j        t"          z            }|                    |          }|                              }t)          |j                  \  }	}
}t+          |           j        rt          d|j        |j                  t	          j        t"          z            }|                    |          t0          j        fgz   }t5          |          }|                                sI	 t9          |                    |                    }t5          |          }||z   }n# t<          $ r Y nw xY wj        t>          z  pt@          }|dtB          tD          fvrtG          d          tI          j        d |tJ          z  |z  |i i i g |	|
|tM          |                    | _'        d S )Nzunbalanced parenthesisc                 >    g | ]\  }}t          |d z   |          S r5  )r  )r   r  rq   r   s      r>   r   z$Scanner.__init__.<locals>.<listcomp>  s-    JJJdaE$Aq))JJJr?   z(recursive regex not supported by Scannerr   z5VERSION0 and VERSION1 flags are mutually incompatible)(lexiconr  r7  r!  r   r   r&   rZ  r   r4  r'   r   r3   r[   rw  	enumerater   r   r   ru  rL  rG  r  r   r  SUCCESSr   r  r   r  rL   r  r  r    r"   r6  r   r  r^   scanner)r;   rP  r   patternsphraseactionr   ru  r   rI  rK  rJ  r   fs_coder  r   s                  @r>   r:   zScanner.__init__  s    % 	6 	6NFFF^^Fv/00D"&tzG';"<"<F#FD11F==?? 4fm*   OOF22445555 E{{JJJJi6I6IJJJ!! tzG+,,w//''-- ,@
*, ,(
Iy 	dF+++ > 	)BmVZ) ) ) tzG+,, ~~g&&2:.)99 T""&&(( 	+D&2E2Eg2N2NOO'00~!    :-A/1h111TUUU ~dU\-AW,L
BB
Iy
h-- s   -7H% %
H21H2c                    g }|j         }| j                            |          j        }d}	  |            }|sn{|                                }||k    rn`| j        |j        dz
           d         }t          |d          r%|| _         || |                                          }| ||           |}|||d          fS )Nr   Tr.   __call__)r[   rS  r   r  rP  	lastindexr   rj  )	r;   r   r0  r[   r   rp   rb   jrV  s	            r>   scanzScanner.scan  s    $$V,,2	A AAvv\!+/215Fvz** 1
aggii00!vA	 vacc|##r?   N)r   )r@   rA   rB   r:   r\  rD   r?   r>   r(   r(     s<        G G G GR$ $ $ $ $r?   r(   rC  r,   	)rl   rm   ro   nrr   tr  DigitTBlankSpaceWord)r   r	   hrs   r   ru   r#   r  )r   r	   rs   r   ru   r#   )r   rm   r   Krb   r   Z)rm   r   rb   r   )FAILr   r_  r  )ry   r  r  r9  (  enumr   r  collectionsr   regexr   __all__r9   r'   rF   rJ   rL   IntFlagr)   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  SCOPED_FLAGS	frozensetascii_lettersr*  r7  r.  r  	octdigitsr  	hexdigitsr  r   r  r  r  get_code_sizeBYTES_PER_CODEBITS_PER_CODEr  r  r   r   rJ  rO  ri  r  OPCODESrx   r  rQ  r*  rp   r  setattrr   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'  rA  r$  r  r   r\  r]  rV  r^  ry  r_  r`  ra  rd  rb  r  r  r  re  r  rW  r  r  r  r   r  r  r  r  r  r  r  r  r   r  r  r  r  r   r  r  r  r"  r1  r6  r   rA  rD  r  rR  rL  rN  rM  r  r  r  r  r  r  r  r  r  rb  rd  r  r   r   r   r  r  r   r  rr  r   rz  r  r  r  r   r   r  r   r   r  r  r  r  r  r  r  r  r#  r  ru  r~  r  rC  r^  r  r   r  r   r=  r  r  r	  r   r  r   r   r   r  r  r  r   r  r7  rG  rL  r(   get_propertiesrB  rU  r  r  rG  r  r   r   prop_valuesr@  r^   val_namerI  r  r  r  r  dictr  r   r  r  r  r  r  rg  rD   r?   r>   <module>r     sV          # # # # # #        * * * * *I * * *>	 	 	 	 	y 	 	 		 	 	 	 	 	 	 		 	 	 	 	Y 	 	 	1 1 1 1 1 1 1 1j 				%!
			





~KKKKKKKKKKKK\\KKK8#') 1h1 	)E1L@5H	
:%	1F:TAGK 		&&''	6=	!	!Yv'((
Yv'((
	*++iioo=))D//)YYw/// 
" &%''" -1$	 	8YUG88$	  
"
	
J&n, a1j*."  AA&&Rj	 	 	 	 	 	 	 	 Y[[Yw}}''  EArGBA0. 0. 0. 0.d+ + +; ; ;6 6 6    >    > > > >L L LC C C= = =  T T Tl    @5 5 5 ))<<  4 4 4     <  01 1 1; ; ;z
A 
A 
A      6
 
 
H H H4$ $ $Z* Z* Z*x"? "? "?H  "
4 
4 
4)F )F )FV  (
 
 
  $	' 	' 	'' ' '' ' '     "  &!@ !@ !@F5 5 5
   &2 2 2. . .2 2 2Q5 Q5 Q5f4 4 4B  *     .	1 	1 	1' ' '2 2 2 "1 "1 "1H  ,  4! ! !# # #! ! !     ! ! !.') ') ')R$ $ $LL L L	% 	% 	%  *E E E /5577880668899D? D? D? D?LF' F' F'P
$ 
$ 
$  "* * ** 

 g..R%:Hb%'	  C& C& C& C& C& C& C& C&L    I   :    )   &	2 	2 	2 	2 	2S 	2 	2 	2    3   6< 6< 6< 6< 6<Y 6< 6< 6<p    }   F9 F9 F9 F9 F9Y F9 F9 F9P, , , , ,	 , , ,\! ! ! ! !i ! ! !H H H H H	 H H HTW W W W W) W W Wr" " " " "m " " "% % % % %} % % %' ' ' ' ' ' ' '                  -   $ $ $ $ $m $ $ $& & & & & & & &                m      C% C% C% C% C%I C% C% C%J    y   + + + + + + + +Z' Z' Z' Z' Z'9 Z' Z' Z'x2 2 2 2 2| 2 2 2<P P P P PI P P Pd    =          B B B B B B B BHS& S& S& S& S&I S& S& S&j" " " " "i " " "6 6 6 6 6y 6 6 6p    M   K K K K KI K K KZ/ / / / /y / / /b    =   S S S S Sy S S Sjg g g g gi g g gR" " " " "g " " "4" " " " "w " " "<" " " " " " " "BL" L" L" L" L"w L" L" L"\    =       -   ! ! ! ! !; ! ! !! ! ! ! !M ! ! !    -   5 5 5 5 5Y 5 5 5n' ' ' ' 'f ' ' '' ' ' ' ' ' ' 'Rt t t t t t t tl?) ?) ?) ?) ?) ?) ?) ?)B%/ %/ %/N, , ,*^$ ^$ ^$ ^$ ^$ ^$ ^$ ^$B #V"$$
 $.$4$4$6$6   I &**7RH==D+3tYC(((D"K/N7"LLNN  &!c+//&""="=x  F 
						     
w	-	-	w	.	.	w	-	-	w	-	-	w	.	.	vt	,	,	vu	-	-  _--    	w~	F	F	F	w	G	G	G	w~	F	F	F	w	G	G	G	vtn	E	E	E	vu~	F	F	F     $//    	w7G	H	H	H	w8H	I	I	I	w7G	H	H	H	w8H	I	I	I	vt6F	G	G	G	vu7G	H	H	H       
		%				   .//    	>	*	*	*	%.	1	1	1	n	-	-	-	N	+	+	+	      4 011    	+	,	,	,	%"2	3	3	3	.	/	/	/	,	-	-	-	! !    -..    															     GII	UWWDFF		 	r?   