
    ʛ7i$>                       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j0                  Zej2                  Zej4                  Zej6                  Zej8                  Zej:                  Zej<                  Zej>                  Zej@                  Z ejB                  Z!ejD                  Z"ejF                  Z#ejH                  Z$ejJ                  Z%ejL                  Z&ejN                  Z'ejP                  Z(ejR                  Z)ejT                  Z*ejV                  Z+ejX                  Z,ejZ                  Z-ej\                  Z.ej^                  Z/ej`                  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jp                        Z9 e7ejt                        Z;e9e;z  Z< e7ejz                        Z> e7ej~                        Z@ e7d       e7dg      z  ZAe< e7d      z  ZBe< e7d      z  ZCdZD ej                         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 eSePj                               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/d0d1d2Zhd3 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 ZddPZdQ ZdR ZdS ZdT ZdU ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Zdg Zdh Z edij                               Z edjj                               ZddkZdl Zdm Zdn Zdo ZdpZdZdZdZdZdqZdZdrdsdtZeKdeduedeLdviZdw Z G dx dy      Z G dz d{e      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 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j                         D ]j  \  Z\  ZZej                  edi f      \  ZZ eeee      Zeefee<   ej                         D ]$  \  ZZ eej                  ed      ee      ee<   & l ddddddddZdZdZ eddd       eddd&       eddd       eddd       eddd&       eddd       eddd&      dZ ee      Zej                   eddde       eddd&e       eddde       eddd&e       eddde       eddd&e      d        ee      Zej                   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j                   ee       ed&e       ee       ee      d        ee       Zej                   ee       ed&e       ee       ee      d        ee       Zej                   e        ed&       e        e       d        eƫ        eƫ        eӫ        eݫ       dZy(       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y)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        |t              rdnd}|| _        || _        || _        |w|u|j                  |d|      dz   | _        ||j                  |d|      z
  | _        dj                  ||      }||v r)|dj                  | j                  | j                        z  }t        j                  | |       y )N
   
r      z{} at position {}z (line {}, column {}))
isinstancestrmsgpatternposcountlinenorfindcolnoformat	Exception__init__)selfmessager2   r3   newlines        N/home/rose/Desktop/poly/venv/lib/python3.12/site-packages/regex/_regex_core.pyr:   zerror.__init__*   s    $Wc2$3?!--C81<DKw}}Wa==DJ)00#>G'!299$++**  	4)    )NN)__name__
__module____qualname____doc__r:    r?   r>   r'   r'      s    	*r?   r'   c                       e Zd Zy)_UnscopedFlagSetNr@   rA   rB   rD   r?   r>   rF   rF   =       r?   rF   c                       e Zd Zy)
ParseErrorNrG   rD   r?   r>   rJ   rJ   A   rH   r?   rJ   c                       e Zd Zy)_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&jN                  Z'y)r)      i   i   i   i @           i   i          i       i   @   r.   c                    | j                   d| j                   z  S | j                  }g }|dk  }|r| }| j                  D ]@  }||j                  z  s||j                   z  }|j                  d|j                   z         B |r|j                  t	        |             dj                  |      }|rt        |      dkD  rd|z  }|S 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Aqyy !))#zAHH4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: nnGr?   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y)	NamespaceNrG   rD   r?   r>   rx   rx   )  rH   r?   rx      c                    t        | j                               }t        |      |z
  }|dk  ry||z  |z   }ddl}t	        |d      sy|j                  ||      D ]  }		 | |	=  |j                          i }
t        |       D ]   \  }}}}}}|||||||f<   	 |||f   |
||f<   " |j                          |j                  |
       y# t        $ r Y vw xY w# t        $ r Y _w xY w)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*o
*G{ 	7*W4N 68$ 	mmJ?
	:& @ OOGLZGXCudOVKO	'<GH	6F|U\G\6]\723 HY ,-  		  		s$   CC	CC	CCc                 |    | 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  s;    JJE1$$$$E6**r?   c                 Z    t        t        j                  | j                  |            dkD  S z$Checks whether a character is cased.r.   )r^   r   get_all_casesr   )r   chars     r>   
is_cased_ir   j  s#    v##DJJ56::r?   c                 F    t        t        j                  | |            dkD  S r   )r^   r   r   )r   r   s     r>   
is_cased_fr   n  s    v##E401A55r?   c                     t        | j                  t        z        }t        | ||      }|rt	        |t
              rg S |j                  |      S )z&Compiles the firstset for the pattern.)boolr   r   _check_firstsetr/   AnyAllcompile)r   fsreverses      r>   _compile_firstsetr   r  sE    4::'(G	w	+BB'	 ::gr?   c                 p   |rd|v ryt               }t        }|D ]T  }t        |t              r|j                  s y||j
                  z  }|j                  |j                  t                     V |t        t        z  k(  ryt        | t        |      |t         z  d      }|j                  | |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     eGJa#AJJ 	all"
ALLFL34  h+, 
$W*y2H
B	T74	0BIr?   c                 :    g }| D ]  }|j                  |        |S )z(Flattens the code from a list of tuples.)extend)code	flat_codecs      r>   _flatten_coder     s'    I  r?   c                 f    | 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     s/    JJ#E zzE(Lr?   Fc                 H    |rt        |      S t        |t        |             S )zMakes a character literal.r   )r   r   )r   r_   r   s      r>   make_characterr     s"    Ut'<==r?   c                 2    t        | ||t        |             S )zMakes a group reference.r   )RefGroupr   )r   namepositions      r>   make_ref_groupr     s    D$_T5JKKr?   c                 0    t        | |t        |             S )zMakes a string set.r   )	StringSetr   )r   r   s     r>   make_string_setr     s    T4OD,ABBr?   c                 @    |r|S |j                  t        |             S )zMakes a property.r   )r   r   )r   propr   s      r>   make_propertyr     s     ??od&;?<<r?   c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      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     sa    vt,-H
,,s
vt45 ,,s
 8}{(r?   c           	         dg}t        |      }	 | j                  }| j                         }|t        v r|dv r	|| _        n|dk(  r|j	                  t        | |d             n|dk(  r.t        | |      }|t        |      }n|j	                  |       n|dk(  rw|j                  t        z  r|j	                  t                      nh|j                  t        z  r|j	                  t                      n:|j	                  t                      n|dk(  r|j	                  t        | |             n|dk(  rw|j                  t        z  rI|j                  t        z  r|j	                  t                      n|j	                  t!                      n|j	                  t#                      n|d	k(  r|j                  t        z  rI|j                  t        z  r|j	                  t%                      n;|j	                  t'                      n |j                  t        z  r|j	                  t)                      n|j	                  t+                      n|d
v rt-        | ||      }|r#t/        | ||||||       |j	                  d       nt1        | |||      }|r"t3        | |||||       |j	                  d       nq|j	                  t5        t7        |      |             nK|j	                  t5        t7        |      |             n%|j	                  t5        t7        |      |             %|D 	cg c]  }	|	|		 }}	t9        |      S c c}	w )zParses a sequence, eg. 'abc'.Nz)|\F(.[^$z?*+{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apply_constraintr   ordSequence)
r   r   sequencer   	saved_poschelementcountsconstraintsitems
             r>   r   r     s   vH &J
JJ	ZZ\Tz&
tVT5 ABs%fd3?!0!6JOOG,s::&OOFH-ZZ$&OODF+OOCE*s	&$ 78s::	)zzD( 7 6OOMO4s::	)zzD( 
5 	4zzD( (8(:; (9:v)&$;$VT6:r+OOD) #.fdB
"KK"({J#X/ - !	#b'%/)1 2 	#b'j IJ OOIc"g*EFW Z "*>T-=H>H ?s   9MMc                    |j                         }|0|rt        d| j                  |      t        d| j                  |      t        |t        t
        t        f      rt        d| j                  |      |\  }}	| j                  }| j                         }|dk(  rt
        }
n|dk(  rt        }
n|| _        t        }
|j                         s|dk7  s|	dk7  r
 |
|||	      }|j                  |       y )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    llnG)6==)DD'	BB'L*6FGH%v}}i@@!Iy

I	B	Sy	s# 
 9>Y!^7Iy9OOGr?   c                    |j                         }|t        d| j                  |      t        |t              r-t        |j                  |      |_        |j                  |       y |j                  t        ||             y )Nznothing for fuzzy constraint)r   r'   r   r/   GroupFuzzy
subpatternr[   )r   r   r   r   r   r   r   s          r>   r   r   B  sf    llnG2FMM9MM '5!"7#5#5{C g{34r?   )r   r.   r   Nr.   N)r   *r   c                 ^    t         j                  |      }|r|S |dk(  rt        |       }|r|S y)zParses a quantifier.{N)_QUANTIFIERSr   parse_limited_quantifier)r   r   r   qr   s        r>   r   r   R  s6    A	Sy)&1Mr?   c                      | duxr	 | t         k\  S )z,Checks whether a count is above the maximum.N	UNLIMITED)r4   s    r>   is_above_limitr  a  s    3)!33r?   c                    | j                   }t        |       }| j                  d      r*t        |       }t        |xs d      }|rt        |      nd}n|s|| _         yt        |      x}}| j                  d      s|| _         yt	        |      st	        |      rt        d| j                  |      |||kD  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  e  s    

IF#I||C'	 	Q'	&/C	NT	"FJ #I.	I<<
i N9$=*FMM9EEY!68&--
 	 ir?   c                 x   | j                   }|dk7  ryi }	 t        | |       | j                  d      rt        | |       | j                  d      r| j                  d      rt	        | ||      |d<   | j                  d      s!t        d| j                  | j                         |S # t        $ r
 || _         Y yw xY w)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	SyK-ll3V[1 ll3 ||C.vtZHF<<L&--<<  
s   :B& &B98B9c                 z    | j                   }	 t        | |       y# t        $ r || _         t        | |       Y y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 1
FK01s    ::c                    | j                   }| j                         }|t        v rbt        | ||      }t	        |       }|d||<   y| j                   }t        |       }|s|dz  }|dk  rt        d| j                  |      d|f||<   y|t        v r|| _         | j                   }t        |       }t	        |       }	|	
t               t        | || j                               }t	        |       }|
t               | j                   }t        |       }|	s|dz  }|s|dz  }d|cxk  r|k  sn t        d| j                  |      ||f||<   y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
# zzH'/H A!|2FMM8LL&'kK
#	v
 ::#F+%f-?,%fk6::<H
%f-?, ::#F+ MHMHH((.xHH"*H"4Jl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   r)  digitss      r>   r%  r%    sL    zzH F6{  &x
@@s   
$ 	00c                 >    |dvr
t               ||v r
t               |S )zParses a constraint.deis)rJ   )r   r   r   s      r>   r#  r#    s'    	l	[lIr?   c                 L    | j                  d      ry| j                  d      ryy)zParses a cost comparator.z<=T<FNr   r   s    r>   r$  r$    s#    ||D	c	r?   c                    d|v r!t        d| j                  | j                        i }t        | |       | j	                  d      rt        | |       | j	                  d      rt        |       }|
t               t        t        |             }|s|dz  }|dk  r!t        d| j                  | j                        ||d<   ||d<   y)	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   r7  r(  r*  s        r>   r  r    s    16==&**MMDFD!
,,s
% ,,s
 "&)Gl;v&'HA!|*FMM6::FFDKKr?   c                     t        |       }| j                         }|dvr
t               ||v r!t        d| j                  | j
                        t        |xs d      ||<   y)zParses a cost equation term.diszrepeated fuzzy costr.   N)r  r   rJ   r'   r   r3   r  )r   r7  coeffr   s       r>   r9  r9    sV    E	B	l	Tz)6==&**EE5:ADHr?   c                    | j                   }| j                         }|t        v r|dk(  rt        | |d      S |dk(  rD|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  (  s    

I	B	]:e443YzzF"xd"vu3YVT**0&--KK	RZ88,fmmYGGr?   c                 ,    | j                  t              S )z0Parses a quantifier's count, which can be empty.)	get_whiler&  r5  s    r>   r  r  B  s    F##r?   c                    | j                   }| j                  d      }|dk(  r| j                   }| j                  d      }|dk(  r| j                   }| j                         }|dv rt        | |d|dk(        S || _         t        |       }|j	                  |      }| j                  d       |j                  }	 t        | |      }	| j                  d       ||_        t        |j                  t        z        | _
        |j                          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$| j)                         t*        v rt-        | |||      S || _         t/        | |      S |dk(  r|| j                   }| j1                  t3        d      d      }
|
dd j5                         rAt6        j                  |
      }|st9        d| j:                  |      | j                  d       |S || _         |j	                         }|j                  }	 t        | |      }	| j                  d       ||_        t        |j                  t        z        | _
        |j                          t        |||	      S # ||_        t        |j                  t        z        | _
        w xY w# ||_        t        |j                  t        z        | _
        w xY w)z[Parses a parenthesised subpattern or a flag. Returns FLAGS if it's an
    inline flag.
    Tr   r3  =!rB  >)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_subpatternr?  r   isalphaVERBSr'   r   )r   r   r   r   saved_pos_2saved_pos_3r   groupsaved_flagsr  wordverbs               r>   r   r   F  s    

I	D	B	SyjjZZ9 **KBZ'dB#IFF %FJf%DOOD)EMM#**KA+FD9
c"(
&*4::+?&@#uj11#FD%sCC9"64009 ((9$VT229--9--9r(S(#FD"kBB9)&$DD#Is(?'b+FF !
%fd33	SyjjD	591:99T?DNFMM;GGMM#K FJOOE**K9#FD1
c 
"4::#78uj))} )
&*4::+?&@#p !
"4::#78s   8K> L+ >*L(+*Mc                    | j                   }| j                         }|dk(  rt        |       }|j                  |      }| j	                  d       |j
                  }	 t        | |      }| j	                  d       ||_        t        |j
                  t        z        | _	        |j                          t        |||      S |dk(  rSt        | d      }| j	                  d       |j                  |      rt        d| j                  |      t        |||      S |dk(  s|dk(  rt!        | ||      S || _         t        d	| j                  |      # ||_        t        |j
                  t        z        | _	        w xY w)
zParses a Python extension.r3  rD  rE  rB  T)allow_numericcannot refer to an open grouprI  unknown extension)r3   r   rO  rP  rQ  r   r   r   r&   rR  rS  r  is_open_groupr'   r   r   rZ  )r   r   r   r   r   rb  rc  r  s           r>   rT  rT    sN   

I	B	Sy&!%cjj	='5JMM#$DJ"&tzzG';"<FT5*--	Sy&5cd#7  dD)44	SyB#I%fdI>>FJ
#V]]I
>>) %DJ"&tzzG';"<Fs   E *E5c                     	 | j                   }| j                  d      }|r|dk(  rn|dk(  r| j                  d      }<|| _         | j                  d       y)zParses a comment.TrE  r   N)r3   r   rQ  )r   r   r   s      r>   rU  rU    sZ    
JJ	JJtAH9

4 A  FJ
MM#r?   c                    |j                   }	 t        | |      }| j                  d       ||_         t        |j                   t        z        | _        t        |||      S # ||_         t        |j                   t        z        | _        w xY w)zParses a lookaround.rE  )r   r   rQ  r   r&   rR  
LookAround)r   r   behindr   rc  r  s         r>   rN  rN    su    **K9#FD1
c 
"4::#78fh
33 !
"4::#78s   A   *B
c                 :   |j                   }| j                  }| j                         }|dk(  rw| j                         }|dv rt        | |d|dk(        S |dk(  r%| j                         }|dv rt        | |d|dk(        S || _        t	        d| j
                  | j                        || _        	 t        | d      }| j                  d       t        | |      }| j                  d	      rt        | |      }n
t               }| j                  d       ||_         t        |j                   t        z        | _        |j                         r|j                         r
t               S t        |||||      S # ||_         t        |j                   t        z        | _        w xY w)
z Parses a conditional subpattern.r   rA  FrB  r3  Tzexpected lookaround conditionalrE  rW   )r   r3   r   parse_lookaround_conditionalr'   r   rO  rQ  r   r   r   r   r&   rR  r   Conditional)r   r   rc  r   r   rb  
yes_branch	no_branchs           r>   rV  rV    sy   **K

I	B	SyZZ\/eR3YOO9BZ3FD$I   
5v}}
** 	 FJ964(c#FD1
<<&vt4I 
Ic 
"4::#78!3!3!5ztUJ	9EE !
"4::#78s   -A"E0 0*Fc                    |j                   }	 t        | |      }| j                  d       ||_         t        |j                   t        z        | _        t        | |      }| j                  d      rt        | |      }n
t               }| j                  d       t        |||||      S # ||_         t        |j                   t        z        | _        w xY w)NrE  rW   )
r   r   rQ  r   r&   rR  r   r   r   LookAroundConditional)r   r   rn  r   rc  r  rr  rs  s           r>   rp  rp    s    **K9#FD1
c 
"4::#78-J||C"640	J	
MM# :z  !
"4::#78s   B' '*Cc                    |j                   }	 t        | |      }| j                  d       ||_         t        |j                   t        z        | _        t        |      S # ||_         t        |j                   t        z        | _        w xY w)zParses an atomic subpattern.rE  )r   r   rQ  r   r&   rR  Atomic)r   r   rc  r  s       r>   rW  rW  "  sq    **K9#FD1
c 
"4::#78* !
"4::#78s   A *Bc                 n   |j                   }t        | |      g}|j                   }| j                  d      rJ||_         |j                  t        | |             t	        ||j                         }| j                  d      rJ||_         | j                  d       t        |      dk(  r|d   S t        |      S )zParses a common groups branch.rW   rE  r.   r   )group_countr   r   r[   r8  rQ  r^   r   )r   r   initial_group_countr   final_group_counts        r>   rX  rX  .  s     **vt,-H((
,,s
.vt45 143C3CD ,,s

 )D
MM#
8}{(r?   c                 ~    |dk(  rd}n|| j                  t              z   }| j                  d       t        |||      S )zParses a call to a group.r   rG  rE  )r?  r&  rQ  	CallGroup)r   r   r   r3   rb  s        r>   rY  rY  @  s>    	SyV%%f--
MM#T5#&&r?   c                 \   | j                  t              }|s!t        d| j                  | j                        t        |      }|dk(  r|j                  |z   n|j                  |z
  dz   }|dk  r!t        d| j                  | j                        | j                  d       t        |||      S )z"Parses a relative call to a group.zmissing relative group numberr   r.   r   zinvalid relative group numberrE  )	r?  r&  r'   r   r3   r  ry  rQ  r}  )r   r   r   r3   r/  offsetrb  s          r>   r\  r\  K  s    f%F3V]]FJJOO[F)+sDv%8H8H68QTU8UEz3V]]FJJOO
MM#T5#&&r?   c                 T    t        |       }| j                  d       t        |||      S )zParses a call to a named group.rE  )rO  rQ  r}  )r   r   r3   rb  s       r>   rZ  rZ  Z  s'    vE
MM#T5#&&r?   c                     d}	 	 | j                   }| j                         }|dk(  r|| j                         z  }|t        |   z  }A# t        $ r | _         Y |S w xY w)zParses a set of inline flags.r   V)r3   r   REGEX_FLAGSr   )r   r   r   r   s       r>   parse_flag_setr  a  sj    E

IBSyfjjl"[_$E   
Ls   AA AAc                     t        |       }| j                  d      r.t        |       }|s#t        d| j                  | j                        d}|t
        z  rd|_        ||fS )z!Parses flags being turned on/off.rJ  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  q  sd    f%H||C"6*	>jj  	&!Yr?   c                    |j                   }|j                   |z  | z  |_         |j                   t        t        z  t        z  z  r|j                   t         z  |z  |_         t        |j                   t        z        | _        	 t        | |      }| j                  d       ||_         t        |j                   t        z        | _        |S # ||_         t        |j                   t        z        | _        w xY w)z&Parses a subpattern with scoped flags.rE  )
r   r   r   r   r   r   r&   rR  r   rQ  )r   r   r  r  rc  r  s         r>   parse_subpatternr    s    **K**x'I:5DJ zzUV^g-.jjN?2h>
tzzG34F9#FD1
c 
"4::#78 !
"4::#78s   C *C5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  }| j                  d      rt        | |||      S | j                  d      rt        | |||       y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  rE  Nri  )
r  GLOBAL_FLAGSr'   r   r3   global_flagsrF   r   r  parse_positional_flags)r   r   r  r  new_global_flagss        r>   r]  r]    s   
 &fd3Hi<C
--% 	% )>
** 	 !D$5$5#55E-- t0011 H||Ch	BB||CvtXyA
#V]]FJJ
??r?   c                 v    |j                   |z  | z  |_         t        |j                   t        z        | _        y)zParses positional flags.N)r   r   r&   rR  r  s       r>   r  r    s/    **x'I:5DJtzzG34Fr?   c                 x   | j                  t        d      d      }|s!t        d| j                  | j                        |j                         r9|rdnd}|rt        |      |k  r!t        d| j                  | j                        |S |j                         s!t        d| j                  | j                        |S )zParses a name.rK  FrL  zmissing group namer   r.   zbad character in group name)r?  r   r'   r   r3   isdigitr  isidentifier)r   rg  allow_group_0r   	min_groups        r>   rO  rO    s    CIu5D(&--DD||~&AA	D	I 55v}}jj  K	   "5v}}jj  Kr?   c                 &    t        d | D              S )z!Checks whether a string is octal.c              3   ,   K   | ]  }|t         v   y wN)
OCT_DIGITS.0r   s     r>   	<genexpr>zis_octal.<locals>.<genexpr>       1&BrZ&   allr   s    r>   is_octalr        1&111r?   c                 &    t        d | D              S )z#Checks whether a string is decimal.c              3   ,   K   | ]  }|t         v   y wr  )r&  r  s     r>   r  zis_decimal.<locals>.<genexpr>  s     -frV|fr  r  r  s    r>   
is_decimalr    s    -f---r?   c                 &    t        d | D              S )z'Checks whether a string is hexadecimal.c              3   ,   K   | ]  }|t         v   y wr  )
HEX_DIGITSr  s     r>   r  z!is_hexadecimal.<locals>.<genexpr>  r  r  r  r  s    r>   is_hexadecimalr    r  r?   c                 $   | j                   }d| _         | j                         }|| _         |s!t        d| j                  | j                        |t
        v rt        | ||t
        |   ||      S |dk(  r|s| j                  }	 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(  rn|slg d
}|j                  t        k(  r|j!                  g d       t#        t%        t'        ddg      t)        ||D cg c]  }t+        |       c}      g            S |dk(  r|s
t-               S |t.        v rP|s|j0                  t2        z  rt4        j                  |      }ng|j0                  t6        z  rt8        j                  |      }n>|j0                  t        z  rt:        j                  |      }nt<        j                  |      }|r|S |j0                  t6        z  rt>        j                  |      }n>|j0                  t        z  rt@        j                  |      }ntB        j                  |      }|r|S tD        j                  |      }|rt+        t        |            S t        d|z  | j                  | j                        |tF        v rtI        | |||      S t        |t        |      |      S # t        $ r
 || _        Y nw xY wt        |t        |      |      S c c}w )zParses an escape sequence.Fbad escape (end of pattern)gGr   NpPrq   r   )
            )   i(   i)   r  r  r%   bad escape \%s)%rR  r   r'   r   r3   HEX_ESCAPESparse_hex_escapeparse_group_refr   r   SearchAnchorparse_string_setparse_named_charparse_propertyr   r   r   rw  r   Stringr   r   Graphemer"  r   r$   WORD_POSITION_ESCAPESr   ASCII_POSITION_ESCAPESUNICODE_POSITION_ESCAPESPOSITION_ESCAPESASCII_CHARSET_ESCAPESUNICODE_CHARSET_ESCAPESCHARSET_ESCAPESCHARACTER_ESCAPESr&  parse_numeric_escape)	r   r   r   saved_ignorer   r   charsetr   r_   s	            r>   r   r     s   &&LF	B&F16==&**MM	[b+b/62NN	s6JJ		#"6400 
s6~	s6--	sf55	tfdB#Iv>>	s6*')NN12ffdD\2HTDa ENaLD 5     	 	s6z	u zzD -11"5e#.2226g%044R8(,,R0::)--b1EZZ'!+//3E#''+EL!%%b)SZ((%*FMM6::FF	v#FD"f== dCGV44A  	#"FJ	# dCGV44&Ds   K! )L!K43K4c                    |s|dk(  rt        | ||g|      S |}| j                  }| j                         }|t        v r|||z  }| j                  }| j                         }t	        |      rP|t
        v rH|j                  t        z  }|t        k(  s	|t        k(  rd}nd}t        ||z   d      |z  }t        ||      S || _        |j                  |      r!t        d| j                  | j                        t        ||| j                        S )z!Parses a numeric escape sequence.rG       rQ   rh  )parse_octal_escaper3   r   r&  r  r  r   r   r   r   r  r   rj  r'   r   r   )	r   r   r   r   r/  r   encoding
octal_maskr_   s	            r>   r  r  /  s    s!&$f== F

I	B	V|"JJ	ZZ\Fj 0zzN2H5 H$6!
"
Q'*4E!$.. FJ&!3V]]FJJOO$

33r?   c                 2   | j                   }| j                         }t        |      dk  rL|t        v rD|j	                  |       | j                   }| j                         }t        |      dk  r	|t        v rD|| _         	 t        dj                  |      d      }t        |||      S # t        $ rf |d   t        v r3t        ddj                  |      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   r.  r'   r   )r   r   r/  r   r   r   r_   s          r>   r  r  P  s    

I	B
f+/bJ.bJJ	ZZ\ f+/bJ.
 FJ	BGGFOQ'dE622 !9
"02776?BmmVZZ) ) )F1I5v}}jj s   ?'B' 'A/Dc                    | j                   }g }t        |      D ]V  }| j                         }	|	t        vr+t	        d|dj                  |      | j                  |      |j                  |	       X 	 t        dj                  |      d      }
|
dk  rt        ||
|      S t	        d|dj                  |      | j                  |      # t        $ r Y 6w xY w)zParses a hex escape sequence.incomplete escape \rg   rR   i   zbad hex escape \)r3   ranger   r  r'   r]   r   r[   r  r   r.  )r   r   escexpected_lenr   typer   r/  rp   r   r_   s              r>   r  r  e  s    

IF< ZZ\ZdBGGFOLmmY( (b !7BGGFOR( 8!$v66 3@mmY     s   4C 	CCc                     | j                  d       | j                  }t        | d      }| j                  d       |j                  |      r!t	        d| j
                  | j                        t        |||      S )zParses a group reference.r3  TrD  rh  )rQ  r3   rO  rj  r'   r   r   )r   r   r   r   s       r>   r  r  |  sd    
MM#

Ifd#D
MM#$3V]]FJJOO$i00r?   c                     | j                  d       t        | d      }| j                  d       |||j                  vr!t        d| j                  | j
                        t        ||      S )zParses a string set reference.r3  TrD  zundefined named list)rQ  rO  kwargsr'   r   r3   r   )r   r   r   s      r>   r  r    s[    
MM#fd#D
MM#|t4;;.*FMM6::FF4&&r?   c                 z   | j                   }| j                  d      rT| j                  t        d      }| j                  d      r,	 t	        j
                  |      }t        |t        |      |      S || _         t        |t        d      |      S # t        $ r" t        d| j                  | j                         w xY w)zParses a named character.r  T)keep_spacesr  undefined character namer  )r3   r   r?  NAMED_CHAR_PARTunicodedatalookupr   r   r   r'   r   )r   r   r   r   r   r_   s         r>   r  r    s    

I||CTB<<#**40%dCJ??
 FJ$C&11  6** s   *B +B:c                 H   | j                   }| j                         }|dk(  r| j                  d      }t        |       \  }}| j                  d      r|j                  t
        z  rt        }	n|j                  t        z  rt        }	nd}	t        ||||k7  | |	      }
t        ||
|      S |rW|dv rS|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	Syc"-f5	4<<zzE!)g%+"9dH4F!D tV44	i::%HZZ'!'HHtR6HMT400 FJcB$B00r?   c                    | j                  t              }| j                  }| j                         }|rI|dv rE|}| j                  t        t        d      z        j                         }|r| j                  }nd|}}nd}|| _        ||fS )z/Parses a property name, which may be qualified.z:=z &_-./N)r?  PROPERTY_NAME_PARTr3   r   ALNUMr   strip)r   r   r   r   r  s        r>   r  r    s    ./D

I	B	bDj	H 56<<>

I #ItI	FJd?r?   c                    |j                   t        z  xs t        }| j                  }d| _        | j	                  d      }	 |t
        k(  rt        | |      }nt        | |      }| j	                  d      s!t        d| j                  | j                        	 || _        |r|j                  |j                         }|j                  t        |            }|S # || _        w xY w)zParses a character set.Fr   ]	missing ]r   r   )r   _ALL_VERSIONSDEFAULT_VERSIONrR  r   r    parse_set_imp_unionparse_set_unionr'   r   r3   r   r   r   )r   r   versionr  r  r   s         r>   r   r     s    zzM)=oG&&LF\\#F	+h&vt4D"640D||C V]]FJJ?? ! +DMM(9:??od&;?<DK +s   AC 	C"c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      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    sb     ./E
,,t
(67 ,,t
 5zQQxD%  r?   c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      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    sa    VT*+E
,,t
_VT23 ,,t
 5zQQxdE""r?   c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      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  	  sa    FD)*E
,,t
^FD12 ,,t
 5zQQxD%  r?   c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      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    sb     ./E
,,t
(67 ,,t
 5zQQx4r?   c                 h    |j                   t        z  xs t        }t         |      g}	  j                  } j                  d      r| _        nE|t        k(  r t         fdt        D              r| _        n|j                  t         |             jt        |      dk(  r|d   S t        ||      S )z#Parses a set implicit union ([xy]).r  c              3   @   K   | ]  }j                  |        y wr  r4  )r  opr   s     r>   r  z&parse_set_imp_union.<locals>.<genexpr>)  s     &J'Bv||B'7'   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    zzM)=oGfd+,E
JJ	<<"FJh3&J'&J#J"FJ%fd34  5zQQxD%  r?   c           	         t        | |      }| j                  }t        |t              r|j                  r| j                  d      s|S |j                  t        z  xs t        }| j                  }|t        k(  r| j                  d      r	|| _        |S | j                  d      r'|| _        t        ||t        t        d            g      S t        | |      }t        |t              r|j                  s!t        ||t        t        d            |g      S |j                  |j                  kD  r!t        d| j                  | j                        |j                  |j                  k(  r|S t        |j                  |j                        S )z#Parses a member in a character set.rJ  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
  4  s8    64(EJui(ll3zzM)=oG J(v||C0  
||C  
uiC&9:;; 
&Cc9%S\\uiC&93?@@ {{SYY)6==&**EE{{ciicii((r?   c                    |j                   t        z  xs t        }| j                  d      rt	        | |d      S | j
                  }| j                  d      r	 t        | |      S |t        k(  r| j                  d      rp| j                  d      }t        | |      }| j                  d      s!t        d| j                  | j
                        |r|j                  |j                         }|S | j                         }|s!t        d	| j                  | j
                        t        t!        |            S # t        $ r
 || _        Y w xY w)
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  ]  s   zzM)=oG||DFD$//

I||D	#$VT22
 (v||C0 c"vt,||C V]]FJJ????,=?>D	B0&--LLSW/  	#"FJ	#s   D5 5EEc                     | j                  d      }t        |       \  }}| j                  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    sG    \\#F)&1OIt<<l9dJd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    sP    3xH(NE
5zF{ u-HCc>C$$r?   c                 z   | dd dk(  r| d   | dd } }nd}| j                  d      }t        |      dk(  r*t        t        |d         t        |d         z        \  }}n3t        |      dk(  rt        t        |d               \  }}n
t	               dj                  |||      }|j                  d	      r|dd
 S |S )z<Converts a numeric string to a rational string, if possible.Nr.   rJ  r   rg   /rO   z{}{}/{}z/1)splitr^   r  floatr.  r8   endswith)numericsignpartsr  r  results         r>   numeric_to_rationalr)    s    !}
GACMgMM#E
5zQ$U58_uU1X%FGS	Uq$U58_5SldC-Ftt}Mr?   c                     	 t        dj                  |             S # t        t        f$ r) dj                  d | D              j	                         cY S w xY w)z&Standardises a property or value name.rg   c              3   *   K   | ]  }|d vs|  yw)z_- NrD   r  s     r>   r  z#standardise_name.<locals>.<genexpr>  s     <DbBeOrDs   	)r)  r]   r.  ZeroDivisionErrorupper)r   s    r>   standardise_namer.    sP    E"2774=11)* Eww<D<<BBDDEs    5AAzALNUM DIGIT PUNCT XDIGITzYES Y NO N TRUE T FALSE Fc                    | rt        |       nd} t        |      }| |fdk(  rdd| }}} |r| s|j                         t        v rd|z   }| rt        j	                  |       }|s.|st        d      t        d|j                  |j                        |\  }}|j	                  |      }	|	.|st        d      t        d|j                  |j                        t        |dz  |	z  ||	      S d
D ]C  } t        j	                  |       \  }}|j	                  |      }	|	/t        |dz  |	z  ||	      c S  t        j	                  |      }|r=|\  }}t        |      t        k(  rt        |dz  dz  ||	      S t        |dz  | |	      S |j                  d      r7t        j	                  |dd       }|r|\  }}d|v rt        |dz  dz  ||	      S dD ][  \  }
} |j                  |
      st        j	                  |       \  }}|j	                  |dd       }	|	Gt        |dz  |	z  ||	      c S  |st        d      t        d|j                  |j                        )zLooks up a property.N)GENERALCATEGORYASSIGNEDr0  
UNASSIGNEDr   zunknown propertyzunknown property valuerR   r  )GCSCRIPTBLOCKr.   ISrO   YES))r6  r4  )INr5  )r.  r-  _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    sm    .6)4HU#E%;;$5|\%X%++->"A%~~h'.//*FMM6::FF"&>4550&--LLB&0(XNN .(nnX6&W]f4hRR	 . >>% D"z?n,W]a/HMM28|hGG ~~eACk*"&GZ
"B! 3XQQ @F#",..":GZ^^E!#K0F!B& 8(XVV @ &''
"FMM6::
>>r?   c                 $   | j                         }|t        v rt        j                  |      }|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(  rb|}t        |      d
k  r@| j                  }| j                         }|t        vr|| _
        n||z  }t        |      d
k  r@dt!        |d      |z  gfS |t"        v r|}| j                  }| j                         }|t"        v rF||z  }| j                  }| 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  r  r  r  rG  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  r/  r   s           r>   _compile_replacementrJ    s"   	B	U{!%%b)3u:,&&")z0R"MNNN9,VW=>>>9)&1E ug~%%*FMM6::FF&**e$

	Sy&kAo

IB#&
bLF &kAo s61~
2333	V| JJ	ZZ\<bLF

IBhv{+s6B;2Z?@@@ 
c&k]""	Tzs4yk!!16==&**MM 3t9c"g&&&r?   c                    g }t        |      D ]`  }| j                         }|t        vr5t        d|dj	                  |      | j
                  | j                        |j                  |       b t        dj	                  |      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  r/  rp   r   s         r>   rD  rD  E  su    F< ZZ\ZdBGGFOLmmVZZ) )b ! rwwv##r?   c                 N   | j                   }| j                  d      rS| j                  t        t	        d      z        }| j                  d      r!	 t        j                  |      }t        |      S || _         y# t        $ r" t        d| j                  | j                         w xY w)z1Parses a named character in a replacement string.r   r  r  N)r3   r   r?  r"  r   r  r  r   r   r'   r   )r   r   r   r_   s       r>   rF  rF  Q  s    

I||CC 01<<#**405z!
 FJ  6** s   A9 9+B$c                 Z   | j                  d       t        | dd      }| j                  d       |j                         rEt        |      }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.r3  TrD  r   invalid group referenceunknown group)rQ  rO  r  r  groupsr'   r   r3   
groupindexr   
IndexError)r   r2   r   indexs       r>   rE  rE  b  s    
MM#fdD)D
MM#||~D	E+W^^+16==&**MM*!!$'' *))*s   B B*z  rR   z	NON-MATCHMATCHFTz SIMPLE_IGNORE_CASEz FULL_IGNORE_CASEc                 >    t        |       dk(  r| d   S t        |       S Nr.   r   )r^   r   )r  s    r>   make_sequencerY    s     
5zQQxE?r?   c                   v    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y)	RegexBasec                 &    | j                   | _        y r  )rZ   _keyr;   s    r>   r:   zRegexBase.__init__  s    NN	r?   Nc                 ,   || j                   }nt        |      }|| j                  }nt        |t        z     }|| j
                  }nt        |      }|| j                   k(  r || j                  k(  r|| j
                  k(  r| S | j                  |||      S r  )r   r   r   CASE_FLAGS_COMBINATIONSr   r   rebuildr;   r   r   r   s       r>   r   zRegexBase.with_flags  s    }}HH~HJ0j1HIJIYI%**G
t~~
%K||Hj)<<r?   c                      y 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  ri  r?   c                     | S r  rD   r^  s    r>   remove_captureszRegexBase.remove_captures  ri  r?   c                      yNTrD   r^  s    r>   	is_atomiczRegexBase.is_atomic      r?   c                      yrp  rD   r^  s    r>   can_be_affixzRegexBase.can_be_affix  rr  r?   c                      yNFrD   r^  s    r>   contains_groupzRegexBase.contains_group      r?   c                     t               r  )rL   r;   r   s     r>   get_firstsetzRegexBase.get_firstset  s    r?   c                      yrv  rD   r^  s    r>   has_simple_startzRegexBase.has_simple_start  rx  r?   c                 &    | j                  ||      S r  )_compiler;   r   re  s      r>   r   zRegexBase.compile  s    }}We,,r?   c                      yrv  rD   r^  s    r>   r   zRegexBase.is_empty  rx  r?   c                 ,    t        | j                        S r  )hashr]  r^  s    r>   __hash__zRegexBase.__hash__  s    DIIr?   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  r]  r;   others     r>   __eq__zRegexBase.__eq__  s'    DzT%[(DTYY%**-DDr?   c                 &    | j                  |       S r  )r  r  s     r>   __ne__zRegexBase.__ne__  s    ;;u%%%r?   c                 &    | j                         d fS r  	max_widthrz  s     r>   get_required_stringzRegexBase.get_required_string      ~~%%r?   )NNNFF)r@   rA   rB   r:   r   rf  r   rl  rn  rq  rt  rw  r{  r}  r   r   r  r  r  r  rD   r?   r>   r[  r[    sX    #=(-E&&r?   r[  c                   ,    e Zd ZddZd Zd Zd Zd Zy)ZeroWidthBasec                     t         j                  |        t        |      | _        || _        | j
                  | j                  f| _        y r  )r[  r:   r   r   r  rZ   r]  )r;   r   r  s      r>   r:   zZeroWidthBase.__init__  s6    4 X NNDMM1	r?   c                     t        d g      S r  r   rz  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   re  r   s       r>   r  zZeroWidthBase._compile  sX    ==[ EXEZE"333u%&&r?   c           	          t        dj                  t        |z  | j                  t        | j
                     ddg| j                                  y )N	{}{} {}{}rg    ASCII)printr8   INDENT_op_namePOS_TEXTr   r  r;   indentr   s      r>   dumpzZeroWidthBase.dump  s@    k  &$--
4==
!B>$--#@B 	Cr?   c                      yr  rD   r^  s    r>   r  zZeroWidthBase.max_width      r?   N)Tr   )r@   rA   rB   r:   r{  r  r  r  rD   r?   r>   r  r    s    2	'Cr?   r  c                   Z    e Zd Zej                  ej
                  dZdZd Zd Z	d Z
d Zy)r   rV  ANYc                      yrp  rD   r^  s    r>   r}  zAny.has_simple_start  rr  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                 \    t        dj                  t        |z  | j                               y )N{}{})r  r8   r  r  r  s      r>   r  zAny.dump  s    fmmFVOT]];<r?   c                      yNr.   rD   r^  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     s-    ffBJJ/GH0=r?   r   c                   H    e Zd Zej                  ej
                  dZdZd Zy)r   rV  ANY_ALLc                 h    d| _         d| _        d| _        | j                  | j                   f| _        y )NTFr   )r   r   r   rZ   r]  r^  s    r>   r:   zAnyAll.__init__  s+    NNDMM1	r?   N)	r@   rA   rB   r  r  ANY_ALL_REVr  r  r:   rD   r?   r>   r   r     s    jj7GH2r?   r   c                   B    e Zd Zej                  ej
                  dZdZy)r   rV  ANY_UN)r@   rA   rB   r  r  	ANY_U_REVr  r  rD   r?   r>   r   r   
  s    hhbll3GHr?   r   c                   f    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y)rw  c                 <    t         j                  |        || _        y r  )r[  r:   r  )r;   r  s     r>   r:   zAtomic.__init__  s    4 $r?   c                 >    | j                   j                  |||       y r  r  rf  rd  s       r>   rf  zAtomic.fix_groups      ""7GU;r?   c                     | j                   j                  ||      | _         | j                   j                         r| j                   S | S r  )r  r   r   rh  s      r>   r   zAtomic.optimise  s9    //224A??##%??"r?   c                 F    | j                   j                  |      | _         | S r  r  rl  rk  s     r>   rl  zAtomic.pack_characters      //99$?r?   c                 D    | j                   j                         | _         | S r  r  rn  r^  s    r>   rn  zAtomic.remove_captures!      //99;r?   c                 6    | j                   j                         S r  r  rt  r^  s    r>   rt  zAtomic.can_be_affix%      ++--r?   c                 6    | j                   j                         S r  r  rw  r^  s    r>   rw  zAtomic.contains_group(      --//r?   c                 8    | j                   j                  |      S r  r  r{  rz  s     r>   r{  zAtomic.get_firstset+      ++G44r?   c                 6    | j                   j                         S r  r  r}  r^  s    r>   r}  zAtomic.has_simple_start.      //11r?   c                     t         j                  fg| j                  j                  ||      z   t         j                  fgz   S r  )r  ATOMICr  r   ENDr  s      r>   r  zAtomic._compile1  s8    ))$//"9"9'5"IIFF:, 	r?   c                     t        dj                  t        |z               | j                  j	                  |dz   |       y )N{}ATOMICr.   )r  r8   r  r  r  r  s      r>   r  zAtomic.dump5  s1    j01VaZ1r?   c                 6    | j                   j                         S r  r  r   r^  s    r>   r   zAtomic.is_empty9      ''))r?   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  r  r  s     r>   r  zAtomic.__eq__<  s0    T
d5k) doo


/ 	r?   c                 6    | j                   j                         S r  r  r  r^  s    r>   r  zAtomic.max_width@      ((**r?   c                 8    | j                   j                  |      S r  r  r  rz  s     r>   r  zAtomic.get_required_stringC      227;;r?   N)r@   rA   rB   r:   rf  r   rl  rn  rt  rw  r{  r}  r  r  r   r  r  r  rD   r?   r>   rw  rw    sM    %<.0522*+<r?   rw  c                   (    e Zd Zej                  ZdZy)BoundaryBOUNDARYN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  F  s    kkGHr?   r  c                   &   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y)r   c                 <    t         j                  |        || _        y r  )r[  r:   r   )r;   r   s     r>   r:   zBranch.__init__K  s    4  r?   c                 L    | j                   D ]  }|j                  |||        y r  )r   rf  )r;   r2   r   re  rm   s        r>   rf  zBranch.fix_groupsO  s     ALL'51 r?   c                    | j                   st        g       S t        j                  ||| j                         }|rt        j	                  ||      \  }}g }nt        j                  ||      \  }}g }t        j                  |||      }t        |      dkD  rLt        |      g}|r|s>| j                  |||      }|r)|r|j                  |       n|j                  d|       n|}t        ||z   |z         S rX  )r   r   r   _flatten_branches_split_common_suffix_split_common_prefix_reduce_to_setr^   _add_precheckr[   insertrY  )r;   r   r   r   suffixrB  r   firstsets           r>   r   zBranch.optimiseS  s    }}B< ++D'4==I %::4JFHF%::4JFHF ((wAx=1x()H--dGXF 1 84HVh.788r?   c           
         t               }|rdnd}|D ]F  }t        |      t        u r2|j                  t        k(  r|j                  |j                  |          F y  |sy t        |||D cg c]  }t        |       c}      S c c}w Nr   )	r   r  Literalr   r   r   
charactersr   r   )r;   r   r   r   r  r3   branchr   s           r>   r  zBranch._add_precheckv  s|    %bFF|w&6+<+<+FF--c23	  tWW.MWy|W.MNN.Ms   *Bc                 l    | j                   D cg c]  }|j                  |       c}| _         | S c c}w r  )r   rl  )r;   r   rm   s      r>   rl  zBranch.pack_characters  s2    :>--H-Q**40-H Is   1c                 j    | j                   D cg c]  }|j                          c}| _         | S c c}w r  )r   rn  )r;   rm   s     r>   rn  zBranch.remove_captures  s0    6:mmDm**,mD E   0c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  rq  r  rm   s     r>   r  z#Branch.is_atomic.<locals>.<genexpr>       8-Q1;;=-   r  r   r^  s    r>   rq  zBranch.is_atomic      8$--888r?   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  )rt  r  s     r>   r  z&Branch.can_be_affix.<locals>.<genexpr>  s     ;]1>>#]r   r  r^  s    r>   rt  zBranch.can_be_affix  s    ;T]];;;r?   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  rw  r  s     r>   r  z(Branch.contains_group.<locals>.<genexpr>  s     =}!1##%}r   )r  r   r^  s    r>   rw  zBranch.contains_group  s    =t}}===r?   c                     t               }| j                  D ]  }||j                  |      z  } |xs t        d g      S r  )r   r   r{  )r;   r   r   rm   s       r>   r{  zBranch.get_firstset  s=    UA!..))B   S$[ r?   c                    | j                   sg S t        j                  fg}| j                   D ]C  }|j                  |j	                  ||             |j                  t        j                  f       E t        j                  f|d<   |S Nr  )r   r  BRANCHr   r   r[   NEXTr  )r;   r   re  r   rm   s        r>   r  zBranch._compile  sh    }}IAKK		'512KK$  FF:Rr?   c                    t        dj                  t        |z               | j                  d   j	                  |dz   |       | j                  dd  D ]8  }t        dj                  t        |z               |j	                  |dz   |       : y )Nz{}BRANCHr   r.   {}OR)r  r8   r  r   r  )r;   r  r   rm   s       r>   r  zBranch.dump  sr    j01afqj'2qs$A&--01FF6A:w' %r?   c                     g }|D ]Q  }|j                  | |      }t        |t              r|j                  |j                         A|j                  |       S |S r  )r   r/   r   r   r   r[   )r   r   r   new_branchesrm   s        r>   r  zBranch._flatten_branches  sU     A

4)A!V$##AJJ/##A&  r?   c                   	
 g }|D ]@  }t        |t              r|j                  |j                         /|j                  |g       B t	        d |D              }|d   
d	|}	|k  r[
	   j                         rHt        	
fd|D              r3	dz  		|k  r)
	   j                         rt        	
fd|D              r3	| j                  t        z  r:	dkD  r3t        fd|D              sdz  dkD  rt        fd|D              sdk(  rg |fS g }|D ]  }|j                  t        |d               ! 
d  |fS )Nc              3   2   K   | ]  }t        |        y wr  r^   r  rl   s     r>   r  z.Branch._split_common_prefix.<locals>.<genexpr>       51A   r   c              3   4   K   | ]  }|      k(    y wr  rD   )r  rl   r3   rB  s     r>   r  z.Branch._split_common_prefix.<locals>.<genexpr>  -      C-+! DES6
+D+   r.   c              3   J   K   | ]  }t         j                  |        y wr  )r   
_can_splitr  rl   r4   s     r>   r  z.Branch._split_common_prefix.<locals>.<genexpr>  s(      ( IJ(9(9!U(C    #
r/   r   r[   r  minrt  r  r   r   rY  )r   r   alternativesrm   r  end_posr  rl   r4   r3   rB  s           @@@r>   r  zBranch._split_common_prefix  sx    A!X&##AGG,##QC(	  555	 aGms 8 8 :s C-+C- @-1HC Gms 8 8 :s C-+C- @- :: E!)C (( %
 !)C (( %
 A:x< Aak :;  w--r?   c                   	
 g }|D ]@  }t        |t              r|j                  |j                         /|j                  |g       B t	        d |D              }|d   
d	d|z
  }	|kD  r[
	   j                         rHt        	
fd|D              r3	dz  		|kD  r)
	   j                         rt        	
fd|D              r3d	z
  | j                  t        z  r8dkD  r3t        fd|D              sdz  dkD  rt        fd|D              sdk(  rg |fS g }|D ]   }|j                  t        |d                " 
 d  |fS )Nc              3   2   K   | ]  }t        |        y wr  r  r  s     r>   r  z.Branch._split_common_suffix.<locals>.<genexpr>  r  r  r   r  c              3   4   K   | ]  }|      k(    y wr  rD   )r  rl   r3   r  s     r>   r  z.Branch._split_common_suffix.<locals>.<genexpr>  r  r  r.   c              3   J   K   | ]  }t         j                  |        y wr  )r   _can_split_revr  s     r>   r  z.Branch._split_common_suffix.<locals>.<genexpr>	  s(      ( MN(=(=a(Gr  r  )r   r   r   rm   r  r!  r  rl   r4   r3   r  s           @@@r>   r  zBranch._split_common_suffix  s    A!X&##AGG,##QC(	  555	 ay.Gms 8 8 :s C-+C- @-1HC Gms 8 8 :s C-+C- @- S:: !)C (( %
 !)C (( %
 A:x< AaE6l ;<  ufh ,..r?   c                    t         j                  | |dz
        syt         j                  | |      syt         j                  | |dz
  |dz          ryt         j                  | |dz         rt         j                  | |dz
  |dz          ryt         j                  | |dz
        rt         j                  | |dz
  |dz          ryy)Nr.   TFrO   )r   _is_full_case
_is_folded)r  r4   s     r>   r  zBranch._can_split	  s     ##E5195##E51 U519uqy9:   	2


E%!)eai8
9   	2


E%!)eai8
9r?   c                    t        |       }t        j                  | ||z
        syt        j                  | ||z
  dz
        syt        j                  | ||z
  dz
  ||z
  dz          ryt        j                  | ||z
  dz         r%t        j                  | ||z
  dz
  ||z
  dz          ryt        j                  | ||z
  dz
        r%t        j                  | ||z
  dz
  ||z
  dz          ryy)NTr.   FrO   )r^   r   r(  r)  )r  r4   r  s      r>   r&  zBranch._can_split_rev*	  s    %j ##E3;7##E3;?; U3;?S5[1_EF   ea8


E#+/C%K!OD
E   ea8


E#+/C%K!OD
Er?   c                    t        t              }i }g }|D ].  }t        j                  |      rE||j                     j                  |g       |j                  |j                  t        |             ^t        |t              r|j                  rt        j                  |j                  d         ri||j                  d   j                     j                  |j                         |j                  |j                  d   j                  t        |             t        j                  | ||||       |j                  |       1 t        j                  | |||       |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_prefixesE	  s   
 t$A**1-!((!-  #e*5Q)agg))!''!*5))*11!'':  !1!13u:>))$5  ##A&   	!!$%Fr?   c                 \    t        | t              xr | j                  xr | j                   S r  )r/   r   r   r   r   s    r>   r,  zBranch._is_simple_charactera	  s$    !Y'KAJJKq||;KKr?   c                    g }t               }t        }|D ]  }t        |t        t        t
        f      rZ|j                  |k7  r%t        j                  | ||||       |j                  }|j                  |j                  t                     xt        j                  | ||||       |j                  |        t        j                  | ||||       |S Nr   )r   r   r/   r   r;  SetBaser   r   _flush_set_membersr   r   r[   )r   r   r   r  r  r   rm   s          r>   r  zBranch._reduce_to_sete	  s     
A!i7;<<<:---dGUJ"$ "#J		!,,&,9:))$
  ##A& " 	!!$

	 r?   c           	         |sy t        |j                         fd      D ]  \  }}t        |      dk(  r|j                  t	        |d                2g }d}|D ]L  }	t        |	      dkD  r|j                  t	        |	dd               /|r2|j                  t                      d}N t        t        |      t        |      g      }
|j                  |
j                  | |              |j                          j                          y )Nc                     | d      S r  rD   )pairr0  s    r>   <lambda>z+Branch._flush_char_prefix.<locals>.<lambda>	  s    
Q.r?   keyr.   r   FT)
sortedr  r^   r[   rY  r   r   r   r   r   )r   r   r/  r0  r  r_   r   subbranchesoptionalrm   r   s      `       r>   r.  zBranch._flush_char_prefix	  s     %hnn&6 =  OE88}!##M(1+$>?  !A1vz#**=13+AB%#**8:6#' " $Yu%5vk7J$KL##H$5$5dG$DE " 	r?   c                     |sy t        |      dk(  rt        |      d   }n%t        | t        |            j                  | |      }|j	                  |j                  |             |j                          y )Nr.   r   r   )r^   r   r   r   r[   r   r   )r   r   r  r   r  r   s         r>   r7  zBranch._flush_set_members	  sa     u:?;q>DD$u+.77gFDDOOzOBCr?   c                     d|cxk  rt        |       k  sy y| |   }t        |t              xr( |j                  xr |j                  t
        z  t
        k(  S )Nr   F)r^   r/   r   r   r   FULLIGNORECASE)r  rp   r   s      r>   r(  zBranch._is_full_case	  sX    A"E
" #Qx4+ ? ???^+
>	@r?   c                 \   t        |       dk  ry| D ],  }t        |t              r|j                  r|j                  r, y dj                  d | D              }t        j                  t        |      }t        j                         }|D ]!  }|t        j                  t        |      k(  s! y y)NrO   Frg   c              3   F   K   | ]  }t        |j                          y wr  )chrr_   r  rp   s     r>   r  z$Branch._is_folded.<locals>.<genexpr>	  s     5u!QWWus   !T)
r^   r/   r   r   r   r]   r   r   FULL_CASE_FOLDINGget_expand_on_folding)r  rp   foldedexpanding_charsr   s        r>   r)  zBranch._is_folded	  s    u:>Aq),AJJll 
 5u55!!"3V< !668 A))*;Q?? ! r?   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r   r  s     r>   r  z"Branch.is_empty.<locals>.<genexpr>	  s     7A1::<r   r  r^  s    r>   r   zBranch.is_empty	  s    7777r?   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  r   r  s     r>   r  zBranch.__eq__	  s'    DzT%[(LT]]enn-LLr?   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r  r  s     r>   r  z#Branch.max_width.<locals>.<genexpr>	  r  r   )r8  r   r^  s    r>   r  zBranch.max_width	  r  r?   N)r@   rA   rB   r:   rf  r   r  rl  rn  rq  rt  rw  r{  r  r  staticmethodr  r  r  r  r&  r1  r,  r  r.  r7  r(  r)  r   r  r  rD   r?   r>   r   r   J  sF   !2!9FO9<>!( 
 
 '. '.R &/ &/P  0  4  6 L L  6  2   @ @  *8M9r?   r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
r}  c                     t         j                  |        || _        || _        || _        | j
                  | j                  f| _        y r  )r[  r:   r   rb  r   rZ   r]  )r;   r   rb  r   s       r>   r:   zCallGroup.__init__	  s9    4 	
 NNDJJ.	r?   c                    	 t        | j                        | _        d| j                  cxk  r| j                  j                  k  sn t        d|| j                        | j                  dkD  r=| j                  j                  | j                     dkD  rt        d|| j                        | j                  j                  j                  | ||f       | j                  | j                  f| _        y # t        $ rR 	 | j                  j                  | j                     | _        n$# t
        $ r t        d|| j                        w xY wY .w xY w)NrO  r   rP  r.   zambiguous group reference)r  rb  r.  r   group_indexr   r'   r   ry  open_group_countgroup_callsr[   rZ   r]  rd  s       r>   rf  zCallGroup.fix_groups	  s   	OTZZDJ DJJ7$))"7"77$--@@::>dii88DqH3WdmmLL		$$dGU%;<NNDJJ.	  	OO!YY224::>
 O5wNNO 	Os)   C0 0	E:(D#"E#!EE
Ec                 D    t        d| j                  | j                        Nzgroup reference not allowedr'   r2   r   r^  s    r>   rn  zCallGroup.remove_captures	      14<<OOr?   c                 <    t         j                  | j                  fgS r  )r  
GROUP_CALLcall_refr  s      r>   r  zCallGroup._compile	  s    .//r?   c                 \    t        dj                  t        |z  | j                               y )Nz{}GROUP_CALL {})r  r8   r  rb  r  s      r>   r  zCallGroup.dump	  s     &&v

CDr?   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  rb  r  s     r>   r  zCallGroup.__eq__	  '    DzT%[(FTZZ5;;-FFr?   c                     t         S r  r  r^  s    r>   r  zCallGroup.max_width	      r?   c                     d | _         y r  r   r^  s    r>   __del__zCallGroup.__del__	  	    	r?   N)r@   rA   rB   r:   rf  rn  r  r  r  r  rg  rD   r?   r>   r}  r}  	  s-    //&P0EGr?   r}  c                       e Zd Zd Zd Zy)CallRefc                      || _         || _        y r  )refparsed)r;   rl  rm  s      r>   r:   zCallRef.__init__
  s    r?   c                     t         j                  | j                  fg| j                  j	                  ||      z   t         j
                  fgz   S r  )r  CALL_REFrl  rm  r  r  r  s      r>   r  zCallRef._compile
  sE    ++txx()DKK,@,@
- VVJ<  	!r?   Nr@   rA   rB   r:   r  rD   r?   r>   rj  rj   
  s    !r?   rj  c                   6   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y)r   FTc                    t         j                  |        || _        t        |      | _        t
        |   | _        t        |      | _        | j                  rM| j                  t        z  t        k(  r3t        j                  t        t        | j                              | _        nt        | j                        | _        | j                  | j                  | j                  | j                  | j                  f| _        y r  )r[  r:   r_   r   r   r`  r   r   rC  r   r   rH  rF  rJ  rZ   r]  )r;   r_   r   r   r   s        r>   r:   zCharacter.__init__
  s    4 
X1*=iMMt?
 **+<c$**oNDKdjj/DK^^TZZ
//4>>+	r?   c                 2    t        | j                  |||      S r  )r   r_   rb  s       r>   ra  zCharacter.rebuild!
  s    Xz9EEr?   c                     | S r  rD   r;   r   r   r   s       r>   r   zCharacter.optimise$
  ri  r?   c                     t        | g      S r  r  rz  s     r>   r{  zCharacter.get_firstset'
  r  r?   c                      yrp  rD   r^  s    r>   r}  zCharacter.has_simple_start*
  rr  r?   c                    d}| j                   r	|t        z  }| j                  r	|t        z  }|r	|t        z  }t        | j                  | j                  |f   || j                  g      }t        | j                        dkD  rCt        |t        | j                  D cg c]  }t        |       c}| j                        g      }|j                  ||      S c c}w )Nr   r.   r   )r   r  r   ZEROWIDTH_OPr  PrecompiledCoder  r   r_   r^   rJ  r   r  r   r   )r;   r   re  r   r   r   s         r>   r  zCharacter._compile-
  s    ==[ E>>\!EXET__g-E F
**   t{{a4(EAQ(E"* + ,D ||GU++ )Fs   Cc           	          t        t        | j                              j                  d      }t	        dj                  t        |z  t        | j                     |t        | j                                  y )Nbuz{}CHARACTER {} {}{})asciirF  r_   lstripr  r8   r  r  r   	CASE_TEXTr   r;   r  r   displays       r>   r  zCharacter.dump@
  sV    DJJ(//5#**6F?
4==
!7Idoo,FH 	Ir?   c                 :    || j                   k(  | j                  k(  S r  )r_   r   r;   r   s     r>   matcheszCharacter.matchesE
  s    djj T]]22r?   c                 ,    t        | j                        S r  )r^   rJ  r^  s    r>   r  zCharacter.max_widthH
  s    4;;r?   c                 f    | j                   syt        d | j                  D              | _        d| fS )Nr  c              3   2   K   | ]  }t        |        y wr  r   r  r   s     r>   r  z0Character.get_required_string.<locals>.<genexpr>O
  s     &C{!s1v{r  r   )r   r|   rJ  folded_charactersrz  s     r>   r  zCharacter.get_required_stringK
  s,    }}!&&Ct{{&C!C$wr?   NF)r@   rA   rB   r   r  	CHARACTERr   CHARACTER_IGNr   rC  CHARACTER_REVCHARACTER_IGN_REVr  r:   ra  r   r{  r}  r  r  r  r  r  rD   r?   r>   r   r   	
  s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G (,+"F,&I
3 r?   r   c                   f    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y)rq  c                 t    t         j                  |        || _        || _        || _        || _        || _        y r  )r[  r:   r   rb  yes_itemno_itemr   )r;   r   rb  r  r  r   s         r>   r:   zConditional.__init__T
  s3    4 	
  r?   c                    	 t        | j                        | _        d| j                  cxk  r| j                  j                  k  sn t        d|| j                        | j                  j                  |||       | j                  j                  |||       y # t        $ rj 	 | j                  j                  | j                     | _        n=# t
        $ r1 | j                  dk(  rd| _        nt        d|| j                        Y nw xY wY w xY w)NDEFINEr   rP  rO  )r  rb  r.  r   rV  r   r'   r   ry  r  rf  r  rd  s       r>   rf  zConditional.fix_groups\
  s    	ITZZDJ DJJ7$))"7"7717DMMJJ  '59%8  		II!YY224::>
 I::) "#DJ$--HH 	I		Is5   B 	D#(CD7DDDDDc                     | j                   j                  ||      }| j                  j                  ||      }t        || j                  ||| j
                        S r  )r  r   r  rq  rb  r   )r;   r   r   r  r  s        r>   r   zConditional.optimisep
  sI    ==))$8,,''g64XwNNr?   c                     | j                   j                  |      | _         | j                  j                  |      | _        | S r  )r  rl  r  rk  s     r>   rl  zConditional.pack_charactersv
  s3    55d;||33D9r?   c                     | j                   j                         | _         | j                  j                         | _        y r  )r  rn  r  r^  s    r>   rn  zConditional.remove_captures{
  s*    557||335r?   c                 n    | j                   j                         xr | j                  j                         S r  )r  rq  r  r^  s    r>   rq  zConditional.is_atomic
  s'    }}&&(ET\\-C-C-EEr?   c                 n    | j                   j                         xr | j                  j                         S r  )r  rt  r  r^  s    r>   rt  zConditional.can_be_affix
  s'    }}))+K0I0I0KKr?   c                 n    | j                   j                         xs | j                  j                         S r  )r  rw  r  r^  s    r>   rw  zConditional.contains_group
  s'    }}++-N1L1L1NNr?   c                 p    | j                   j                  |      | j                  j                  |      z  S r  )r  r{  r  rz  s     r>   r{  zConditional.get_firstset
  s0    **73
,,
#
#G
,- 	.r?   c                 t   t         j                  | j                  fg}|j                  | j                  j                  ||             | j                  j                  ||      }|r1|j                  t         j                  f       |j                  |       |j                  t         j                  f       |S r  )
r  GROUP_EXISTSrb  r   r  r   r  r[   r  r  r;   r   re  r   add_codes        r>   r  zConditional._compile
  s    $**-.DMM))'59:<<''7KK$KK!RVVJr?   c                 P   t        dj                  t        |z  | j                               | j                  j                  |dz   |       | j                  j                         sAt        dj                  t        |z               | j                  j                  |dz   |       y y )Nz{}GROUP_EXISTS {}r.   r  )r  r8   r  rb  r  r  r  r   r  s      r>   r  zConditional.dump
  sz    !((&$**EF6A:w/||$$&&--01LLfqj'2 'r?   c                 n    | j                   j                         xr | j                  j                         S r  )r  r   r  r^  s    r>   r   zConditional.is_empty
  s'    }}%%'CDLL,A,A,CCr?   c                     t        |       t        |      u xrG | j                  | j                  | j                  f|j                  |j                  |j                  fk(  S r  )r  rb  r  r  r  s     r>   r  zConditional.__eq__
  sR    DzT%[( Hdjj$--
,,.!KKG.H 	Hr?   c                 z    t        | j                  j                         | j                  j                               S r  r8  r  r  r  r^  s    r>   r  zConditional.max_width
  )    4==**,dll.D.D.FGGr?   c                     d | _         y r  rf  r^  s    r>   rg  zConditional.__del__
  rh  r?   N)r@   rA   rB   r:   rf  r   rl  rn  rq  rt  rw  r{  r  r  r   r  r  rg  rD   r?   r>   rq  rq  S
  sT    !9(O
6FLO.
3DHHr?   rq  c                   (    e Zd Zej                  ZdZy)DefaultBoundaryDEFAULT_BOUNDARYN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  s    !!G!Hr?   r  c                   (    e Zd Zej                  ZdZy)DefaultEndOfWordDEFAULT_END_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  s    $$G$Hr?   r  c                   (    e Zd Zej                  ZdZy)DefaultStartOfWordDEFAULT_START_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  s    &&G&Hr?   r  c                   (    e Zd Zej                  ZdZy)r   END_OF_LINEN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
      nnGHr?   r   c                   (    e Zd Zej                  ZdZy)r   END_OF_LINE_UN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
      GHr?   r   c                   (    e Zd Zej                  ZdZy)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y)r   END_OF_STRING_LINEN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
  s    ##G#Hr?   r   c                   (    e Zd Zej                  ZdZy)r   END_OF_STRING_LINE_UN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
  s    %%G%Hr?   r   c                   (    e Zd Zej                  ZdZy)	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y)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                   V    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y)r  Nc                    t         j                  |        |i }|| _        || _        d|v r!dD ]  }||d   v s|j	                  |d        t        |      t        d      z  rdD ]  }|j	                  |d        ndD ]  }|j	                  |d        |j	                  dd       d|v rdD ]  }|d   j	                  |d        y ddd|d   d   d|d<   y )	Nr7  r;  r  )r   r   rn   r   r.   )drp   rs   r8  )r[  r:   r  r   r-  r   )r;   r  r   rn   s       r>   r:   zFuzzy.__init__
  s   4 K$& [ F++**1i8  {c%j(&&q&1  &&q)4  	sI. [ F#..q!4  )*#q!##Kr?   c                 >    | j                   j                  ||d       y rp  r  rd  s       r>   rf  zFuzzy.fix_groups
  s    ""7GT:r?   c                 F    | j                   j                  |      | _         | S r  r  rk  s     r>   rl  zFuzzy.pack_characters
  r  r?   c                 D    | j                   j                         | _         | S r  r  r^  s    r>   rn  zFuzzy.remove_captures  r  r?   c                 6    | j                   j                         S r  r  rq  r^  s    r>   rq  zFuzzy.is_atomic  r  r?   c                 6    | j                   j                         S r  r  r^  s    r>   rw  zFuzzy.contains_group  r  r?   c                    g }dD ]D  }| j                   |   }|j                  |d          |j                  |d   t        n|d          F dD ]#  }|j                  | j                   d   |          % | j                   d   d   }|j                  |t        n|       d}|r	|t        z  }| j                   j	                  d      }|rut
        j                  |ft        |      z   g|j                  |d      z   t
        j                  fgz   | j                  j                  |d      z   t
        j                  fgz   S t
        j                  |ft        |      z   g| j                  j                  |d      z   t
        j                  fgz   S )	Ndiser   r.   r;  r7  r8  r  T)r   r[   r  r  r   r  	FUZZY_EXTr|   r   r  r  r  FUZZY)r;   r   re  	argumentsrn   vr   r  s           r>   r  zFuzzy._compile  s   	A  #AQqT"!A$,YAaDA  AT--f5a89  V$U+aiQ7ZE##F+llE*U9-==>ll7D)*.0ggZL9oo%%gt459;	{C D ((E"U9%556
//
!
!'4
0157VVI;? 	@r?   c                     | j                         }|rd|z   }t        dj                  t        |z  |             | j                  j                  |dz   |       y )NrM  z	{}FUZZY{}r.   )_constraints_to_stringr  r8   r  r  r  )r;   r  r   r   s       r>   r  z
Fuzzy.dump)  sN    113+Kk  &+>?VaZ1r?   c                 6    | j                   j                         S r  r  r^  s    r>   r   zFuzzy.is_empty0  r  r?   c                     t        |       t        |      u xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r  )r  r  r   r  s     r>   r  zFuzzy.__eq__3  sL    T
d5k) Edoo


/ E#//53D3DD	Fr?   c                     t         S r  r  r^  s    r>   r  zFuzzy.max_width7  rd  r?   c                    g }dD ]^  }| j                   |   \  }}|dk(  rd}|dkD  rdj                  |      }||z  }||dj                  |      z  }|j                  |       ` g }dD ];  }| j                   d   |   }|dkD  s|j                  dj                  ||             = | j                   d   d   }|7|dkD  r2d	j                  d
j                  |      |      }|j                  |       dj                  |      S )Nidsr   rg   z{}<=z<={}r7  r  r8  z{}<={}r   r  )r   r8   r[   r]   )	r;   r   r   r  r8  conr7  r<  limits	            r>   r  zFuzzy._constraints_to_string:  s   D''-HCaxCQwmmC(4KCv}}S))s# " D$$V,T2EqyFMM%67 
   (/??388D>59Dt$xx$$r?   r  )r@   rA   rB   r:   rf  rl  rn  rq  rw  r  r  r   r  r  r  rD   r?   r>   r  r  
  sA    !#F;+0@<2*F%r?   r  c                       e Zd Zd Zd Zd Zy)r  c           	          t        t        t        t               dd       t	               g            }|j                  ||      S r  )rw  r   r   r   GraphemeBoundaryr   )r;   r   re  grapheme_matchers       r>   r  zGrapheme._compile\  sC     "(JvxD,I

, #    ''77r?   c                 F    t        dj                  t        |z               y )Nz
{}GRAPHEME)r  r8   r  r  s      r>   r  zGrapheme.dumpd  s    l!!&6/23r?   c                     t         S r  r  r^  s    r>   r  zGrapheme.max_widthg  rd  r?   N)r@   rA   rB   r  r  r  rD   r?   r>   r  r  [  s    84r?   r  c                       e Zd Zd Zy)r  c                 (    t         j                  dfgS r  )r  GRAPHEME_BOUNDARYr  s      r>   r   zGraphemeBoundary.compilek  s    %%q)**r?   N)r@   rA   rB   r   rD   r?   r>   r  r  j  s    +r?   r  c                       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y)r   GREEDY_REPEATc                 X    t         j                  |        || _        || _        || _        y r  )r[  r:   r  r   r  )r;   r  r   r  s       r>   r:   zGreedyRepeat.__init__r  s%    4 $""r?   c                 >    | j                   j                  |||       y r  r  rd  s       r>   rf  zGreedyRepeat.fix_groupsx  r  r?   c                     | j                   j                  ||      } t        |       || j                  | j                        S r  )r  r   r  r   r  r;   r   r   r  s       r>   r   zGreedyRepeat.optimise{  s5    __--dG<
tDz*dnndnnEEr?   c                 F    | j                   j                  |      | _         | S r  r  rk  s     r>   rl  zGreedyRepeat.pack_characters  r  r?   c                 D    | j                   j                         | _         | S r  r  r^  s    r>   rn  zGreedyRepeat.remove_captures  r  r?   c                 l    | j                   | j                  k(  xr | j                  j                         S r  )r   r  r  rq  r^  s    r>   rq  zGreedyRepeat.is_atomic  s'    ~~/ODOO4M4M4OOr?   c                      yrv  rD   r^  s    r>   rt  zGreedyRepeat.can_be_affix  rx  r?   c                 6    | j                   j                         S r  r  r^  s    r>   rw  zGreedyRepeat.contains_group  r  r?   c                 |    | j                   j                  |      }| j                  dk(  r|j                  d        |S r  )r  r{  r   r   )r;   r   r   s      r>   r{  zGreedyRepeat.get_firstset  s2    __))'2>>QFF4L	r?   c                 0   | j                   | j                  g}| j                  |j                  t               n|j                  | j                         | 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   re  repeatr  s        r>   r  zGreedyRepeat._compile  sv    ,,/>>!MM)$MM$..)__,,We<
Iv*,
|;<r?   c                     | j                   d}n| j                   }t        dj                  t        |z  | j                  | j
                  |             | j                  j                  |dz   |       y )NINF
{}{} {} {}r.   )r  r  r8   r  r  r   r  r  r;   r  r   r  s       r>   r  zGreedyRepeat.dump  s^    >>!ENNEl!!&6/4==
..%! 	" 	VaZ1r?   c                 6    | j                   j                         S r  r  r^  s    r>   r   zGreedyRepeat.is_empty  r  r?   c                     t        |       t        |      u xrG | j                  | j                  | j                  f|j                  |j                  |j                  fk(  S r  )r  r  r   r  r  s     r>   r  zGreedyRepeat.__eq__  sT    DzT%[( doot~~
...#..
//. 	r?   c                 t    | j                   t        S | j                  j                         | j                   z  S r  )r  r  r  r  r^  s    r>   r  zGreedyRepeat.max_width  s.    >>!((*T^^;;r?   c                 `   | j                   t        n| j                   }| j                  dk(  r/| j                  j	                         |z  }t        |t              d fS | j                  j                  |      \  }}|r||fS | j                  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    !%!7IT^^	>>Q))+i7Aq)$d**??66w?S8OOO%%')31i $&&r?   N)r@   rA   rB   r  r  r  r  r:   rf  r   rl  rn  rq  rt  rw  r{  r  r  r   r  r  r  rD   r?   r>   r   r   n  s_    GH#<F
P0=2*
<'r?   r   c                       e Zd Zd Zd Zd Zy)r   c                      yrp  rD   r^  s    r>   rq  zPossessiveRepeat.is_atomic  rr  r?   c                 p   | j                   j                  ||      }|sg S | j                  | j                  g}| j                  |j                  t               n|j                  | 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   re  r  r  s        r>   r  zPossessiveRepeat._compile  s    __,,We<
I,,/>>!MM)$MM$..)))f.;z66*?  	r?   c                 0   t        dj                  t        |z               | j                  d}n| j                  }t        dj                  t        |dz   z  | j                  | j
                  |             | j                  j                  |dz   |       y )Nr  r  r  r.   rO   )r  r8   r  r  r  r   r  r  r  s       r>   r  zPossessiveRepeat.dump  sz    j01>>!ENNEl!!&FQJ"7
..%! 	" 	VaZ1r?   N)r@   rA   rB   rq  r  r  rD   r?   r>   r   r     s    
2r?   r   c                   l    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y)r  c                 f    t         j                  |        || _        || _        || _        d | _        y r  )r[  r:   r   rb  r  r_  )r;   r   rb  r  s       r>   r:   zGroup.__init__  s,    4 	
$r?   c                     | ||f| j                   j                  | j                  <   | j                  j	                  |||       y r  )r   defined_groupsrb  r  rf  rd  s       r>   rf  zGroup.fix_groups  s7    04gu/E		  ,""7GU;r?   c                 |    | j                   j                  ||      }t        | j                  | j                  |      S r  )r  r   r  r   rb  r  s       r>   r   zGroup.optimise  s/    __--dG<
TYY

J77r?   c                 F    | j                   j                  |      | _         | S r  r  rk  s     r>   rl  zGroup.pack_characters  r  r?   c                 6    | j                   j                         S r  r  r^  s    r>   rn  zGroup.remove_captures      ..00r?   c                 6    | j                   j                         S r  r  r^  s    r>   rq  zGroup.is_atomic  r  r?   c                      yrv  rD   r^  s    r>   rt  zGroup.can_be_affix  rx  r?   c                      yrp  rD   r^  s    r>   rw  zGroup.contains_group  rr  r?   c                 8    | j                   j                  |      S r  r  rz  s     r>   r{  zGroup.get_firstset
  r  r?   c                 6    | j                   j                         S r  r  r^  s    r>   r}  zGroup.has_simple_start  r  r?   c                    g }| j                   x}}|dk  r2| j                  j                  |   }| j                  j                  |z
  }| j                   ||f}| j                  j                  j                  |      }||t        j                  |fgz  }|t        j                  t        |       ||fgz  }|| j                  j                  ||      z  }|t        j                  fgz  }||t        j                  fgz  }|S r  )rb  r   private_groupsry  	call_refsr   r  ro  GROUPr  r  r   r  )r;   r   re  r   public_groupprivate_groupr=  rl  s           r>   r  zGroup._compile  s    '+zz1}19933MBL II11MAMjj'5(ii!!%%c*?bkk3'((D"((CG,m\JKK''77"&&?bffZL Dr?   c                     | j                   }|dk  r| j                  j                  |   }t        dj	                  t
        |z  |             | j                  j                  |dz   |       y )Nr   z
{}GROUP {}r.   )rb  r   r  r  r8   r  r  r  )r;   r  r   rb  s       r>   r  z
Group.dump&  sW    

19II,,U3El!!&6/59:VaZ1r?   c                     t        |       t        |      u xr1 | j                  | j                  f|j                  |j                  fk(  S r  )r  rb  r  r  s     r>   r  zGroup.__eq__-  sB    T
d5k) *tzz4??.K;;((
)/* 	+r?   c                 6    | j                   j                         S r  r  r^  s    r>   r  zGroup.max_width1  r  r?   c                 8    | j                   j                  |      S r  r  rz  s     r>   r  zGroup.get_required_string4  r  r?   c                     d | _         y r  rf  r^  s    r>   rg  zGroup.__del__7  rh  r?   N)r@   rA   rB   r:   rf  r   rl  rn  rq  rt  rw  r{  r}  r  r  r  r  r  rg  rD   r?   r>   r  r    sR    <8
1+52,2++<r?   r  c                   (    e Zd Zej                  ZdZy)KeepKEEPN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  :  s    ggGHr?   r  c                   (    e Zd Zej                  ZdZy)r   LAZY_REPEATN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   >  r  r?   r   c                   j    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y)rm  AHEADBEHINDrV  c                 |    t         j                  |        t        |      | _        t        |      | _        || _        y r  )r[  r:   r   rn  r   r  )r;   rn  r   r  s       r>   r:   zLookAround.__init__E  s-    4 6lX$r?   c                 R    | j                   j                  || j                  |       y r  )r  rf  rn  rd  s       r>   rf  zLookAround.fix_groupsK  s    ""7DKK?r?   c                     | j                   j                  || j                        }| j                  r|j	                         r|S t        | j                  | j                  |      S r  )r  r   rn  r   r   rm  r  s       r>   r   zLookAround.optimiseN  sK    __--dDKK@
==Z002$++t}}jAAr?   c                 F    | j                   j                  |      | _         | S r  r  rk  s     r>   rl  zLookAround.pack_charactersU  r  r?   c                 6    | j                   j                         S r  r  r^  s    r>   rn  zLookAround.remove_capturesY  r
  r?   c                 6    | j                   j                         S r  r  r^  s    r>   rq  zLookAround.is_atomic\  r  r?   c                 6    | j                   j                         S r  r  r^  s    r>   rt  zLookAround.can_be_affix_  r  r?   c                 6    | j                   j                         S r  r  r^  s    r>   rw  zLookAround.contains_groupb  r  r?   c                     | j                   r*| j                  |k(  r| j                  j                  |      S t	        d g      S r  )r   rn  r  r{  r   rz  s     r>   r{  zLookAround.get_firstsete  s5    ==T[[G3??//88D6{r?   c                    d}| j                   r	|t        z  }|r	|t        z  }|r	|t        z  }t        j
                  |t        | j                         fg| j                  j                  | j                        z   t        j                  fgz   S r  )r   r  r  r  r  
LOOKAROUNDr  rn  r  r   r  r  s       r>   r  zLookAround._compilek  s~    ==[ EXEZE--O(<=>
//
!
!$++
./3566*> 	?r?   c                     t        dj                  t        |z  | j                  | j                     t
        | j                                  | j                  j                  |dz   | j                         y )Nz{}LOOK{} {}r.   )	r  r8   r  	_dir_textrn  r  r   r  r  r  s      r>   r  zLookAround.dumpw  sV    m""6F?
..
%x'>@ 	AVaZ5r?   c                 R    | j                   xr | j                  j                         S r  )r   r  r   r^  s    r>   r   zLookAround.is_empty|  s    }};!9!9!;;r?   c                     t        |       t        |      u xrG | j                  | j                  | j                  f|j                  |j                  |j                  fk(  S r  )r  rn  r   r  r  s     r>   r  zLookAround.__eq__  sT    DzT%[( Odkk4==
//.$||U^^U=M=MN.O 	Or?   c                      yr  rD   r^  s    r>   r  zLookAround.max_width  r  r?   N)r@   rA   rB   r/  r:   rf  r   rl  rn  rq  rt  rw  r{  r  r  r   r  r  rD   r?   r>   rm  rm  B  sU    x0I%@B1+.0
?6
<Or?   rm  c                   j    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y)ru  r!  r"  rV  c                     t         j                  |        t        |      | _        t        |      | _        || _        || _        || _        y r  )r[  r:   r   rn  r   r  r  r  )r;   rn  r   r  r  r  s         r>   r:   zLookAroundConditional.__init__  s;    4 6lX$ r?   c                     | j                   j                  |||       | j                  j                  |||       | j                  j                  |||       y r  )r  rf  r  r  rd  s       r>   rf  z LookAroundConditional.fix_groups  sD    ""7GU;  '59%8r?   c                 ,   | j                   j                  || j                        }| j                  j                  || j                        }| j                  j                  || j                        }t        | j                  | j                  |||      S r  )r  r   rn  r  r  ru  r   )r;   r   r   r  r  r  s         r>   r   zLookAroundConditional.optimise  sp    __--dDKK@
==))$<,,''dkk:$T[[$--
G 	r?   c                     | j                   j                  |      | _         | j                  j                  |      | _        | j                  j                  |      | _        | S r  )r  rl  r  r  rk  s     r>   rl  z%LookAroundConditional.pack_characters  sI    //99$?55d;||33D9r?   c                     | j                   j                         | _         | j                  j                         | _        | j                  j                         | _        y r  )r  rn  r  r  r^  s    r>   rn  z%LookAroundConditional.remove_captures  s>    //99;557||335r?   c                     | j                   j                         xr6 | j                  j                         xr | j                  j                         S r  )r  rq  r  r  r^  s    r>   rq  zLookAroundConditional.is_atomic  s@    ))+ #0G0G0I #
,,
 
 
"	$r?   c                     | j                   j                         xr6 | j                  j                         xr | j                  j                         S r  )r  rt  r  r  r^  s    r>   rt  z"LookAroundConditional.can_be_affix  s@    ,,. *4==3M3M3O *ll'')	+r?   c                     | j                   j                         xs6 | j                  j                         xs | j                  j                         S r  )r  rw  r  r  r^  s    r>   rw  z$LookAroundConditional.contains_group  sD    ..0 J
--
&
&
(J,0LL,G,G,I	Kr?   c                 Z   t         j                  t        | j                        t        | j                         fg}|j                  | j                  j                  | j                  |             |j                  t         j                  f       |j                  | j                  j                  ||             | j                  j                  ||      }|r1|j                  t         j                  f       |j                  |       |j                  t         j                  f       |S r  )r  CONDITIONALr  r   rn  r   r  r   r[   r  r  r  r  r  s        r>   r  zLookAroundConditional._compile  s    T]]!3ST[[5IJKDOO++DKK?@RWWK DMM))'59:<<''7KK$KK!RVVJr?   c                 "   t        dj                  t        |z  | j                  | j                     t
        | j                                  | j                  j                  |dz   | j                         t        dj                  t        |z               | j                  j                  |dz   |       | j                  j                         sAt        dj                  t        |z               | j                  j                  |dz   |       y y )Nz{}CONDITIONAL {} {}r.   z{}EITHERr  )r  r8   r  r/  rn  r  r   r  r  r  r  r   r  s      r>   r  zLookAroundConditional.dump  s    #**6F?
..
%x'>@ 	AVaZ5j016A:w/||$$&&--01LLfqj'2 'r?   c                     | j                   j                         xr | j                  j                         xs | j                  j                         S r  )r  r   r  r  r^  s    r>   r   zLookAroundConditional.is_empty  s>    ((*Gt}}/E/E/G "
,,


!	#r?   c                     t        |       t        |      u xrG | j                  | j                  | j                  f|j                  |j                  |j                  fk(  S r  )r  r  r  r  r  s     r>   r  zLookAroundConditional.__eq__  sT    DzT%[( Mdoot}}
,,.!,,ennemmL.M 	Mr?   c                 z    t        | j                  j                         | j                  j                               S r  r  r^  s    r>   r  zLookAroundConditional.max_width  r  r?   c                 &    | j                         d fS r  r  rz  s     r>   r  z)LookAroundConditional.get_required_string  r  r?   N)r@   rA   rB   r/  r:   rf  r   rl  rn  rq  rt  rw  r  r  r   r  r  r  rD   r?   r>   ru  ru    sU    x0I9
6
$+K3#MH&r?   ru  c                       e Zd Zd Zd Zy)rz  c                     || _         y r  )r   )r;   r   s     r>   r:   zPrecompiledCode.__init__  rh  r?   c                 .    t        | j                        gS r  )r|   r   r  s      r>   r  zPrecompiledCode._compile  s    dii !!r?   Nrp  rD   r?   r>   rz  rz    s    "r?   rz  c                   2   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y)r;  FTr   c                 "   t         j                  |        || _        t        |      | _        t
        |   | _        t        |      | _        || _        | j                  | j                  | j                  | j                  | j                  f| _
        y r  )r[  r:   r_   r   r   r`  r   r   r  rZ   r]  )r;   r_   r   r   r   r  s         r>   r:   zProperty.__init__  si    4 
X1*=i ^^TZZ
//4>>+	r?   c                 H    t        | j                  |||| j                        S r  )r;  r_   r  rb  s       r>   ra  zProperty.rebuild  s"    

Hj)
-- 	r?   c                     | S r  rD   ru  s       r>   r   zProperty.optimise  ri  r?   c                     t        | g      S r  r  rz  s     r>   r{  zProperty.get_firstset  r  r?   c                      yrp  rD   r^  s    r>   r}  zProperty.has_simple_start  rr  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   ry  r  r  r  r  r   r_   r  s       r>   r  zProperty._compile  sp    ==[ E>>\!EXE"333doow67

KLLr?   c                    t         | j                  dz	     }|d   |d   | j                  dz     }}t        dj                  t        |z  t
        | j                     ||t        | j                     ddg| j                                  y )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{    djjB./1gtAwtzzF':;e'..v
4==
!4	$//0Jx.
') 	*r?   c                 \    t        j                  | j                  |      | j                  k(  S r  )r   has_property_valuer_   r   r  s     r>   r  zProperty.matches  s"    ((R8DMMIIr?   c                      yr  rD   r^  s    r>   r  zProperty.max_width  r  r?   Nr  )r@   rA   rB   r   r  PROPERTYr   PROPERTY_IGNr   rC  PROPERTY_REVPROPERTY_IGN_REVr  r:   ra  r   r{  r}  r  r  r  r  rD   r?   r>   r;  r;    s    j%-@oo%("++7Noo~rT8JHd+R__~
?  	"G (,
+	M*Jr?   r;  c                       e Zd ZdZd Zy)PrunePRUNEc                 &    t         j                  fgS r  )r  rX  r  s      r>   r  zPrune._compile  s    ~r?   Nr  rD   r?   r>   rW  rW    s    Hr?   rW  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y)r  FTRANGEc                 8   t         j                  |        || _        || _        t	        |      | _        t        |   | _        t	        |      | _        | j                  | j                  | j                  | j
                  | j                  | j                  f| _
        y r  )r[  r:   lowerr-  r   r   r`  r   r   rZ   r]  )r;   r]  r-  r   r   r   s         r>   r:   zRange.__init__'  so    4 

X1*=i^^TZZT]]
//4>>+	r?   c                 H    t        | j                  | j                  |||      S r  )r  r]  r-  rb  s       r>   ra  zRange.rebuild3  s    TZZXz9MMr?   c                    | j                   r| j                  t        z  r|r| S |j                  t        z  r| j                  t
        z  t
        k7  r| S t        j                         }g }|D ]  }| j                  t        |      cxk  r| j                  k  s,n /t        j                  t        |      }|j                  t        |D cg c]  }t        |       c}| j                                |s| S t        |      | j                  | j                  z
  dz   k  r|j!                  d|        t#        |      S c c}w )Nr   r.   r   )r   r   r   r   r   rC  r   rI  r]  r   r-  r   rH  r[   r  r^   r  r   )	r;   r   r   r   rK  r  r   rJ  r   s	            r>   r   zRange.optimise6  s   }}T__z%AfK g%4??^+K
+K !668 !BzzSW2

2))*;R@VV$<VSVV$<!__. / " Ku:

TZZ/!33LLD!e} %=s   D<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   ry  r  r  r   r]  r-  r  s       r>   r  zRange._compileU  si    ==[ E>>\!EXEdoow67


**  	r?   c           
      F   t        t        | j                              j                  d      }t        t        | j                              j                  d      }t        dj                  t        |z  t        | j                     ||t        | j                                  y )Nr|  z{}RANGE {} {} {}{})r}  rF  r]  r~  r-  r  r8   r  r  r   r  r   )r;   r  r   display_lowerdisplay_uppers        r>   r  z
Range.dump`  st    c$**o.55d;c$**o.55d;"))&6/
4==
!=-
DOO
$& 	'r?   c                 ~    | j                   |cxk  xr | j                  k  | j                  k(  S c | j                  k(  S r  )r]  r-  r   r  s     r>   r  zRange.matchesg  s2    

b.DJJ.4==@@.4==@@r?   c                      yr  rD   r^  s    r>   r  zRange.max_widthj  r  r?   Nr  )r@   rA   rB   r   r  r[  r   	RANGE_IGNr   rC  	RANGE_REVRANGE_IGN_REVr  r  r:   ra  r   r  r  r  r  rD   r?   r>   r  r     s    :u*=r||NE#:BLLtnbllZ$68H8H~t&<b>N>NPG H.2v
+N>	'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y
)r   FTc                     t         j                  |        || _        || _        || _        t
        |   | _        | j                  | j                  | j                  f| _        y r  )	r[  r:   r   rb  r   r`  r   rZ   r]  )r;   r   rb  r   r   s        r>   r:   zRefGroup.__init__t  sK    4 	
 1*=NNDJJ?	r?   c                    	 t        | j                        | _        d| j                  cxk  r| j                  j                  k  sn t        d|| j                        | j                  | j                  | j                  f| _        y # t        $ rQ 	 | j                  j                  | j                     | _        n$# t
        $ r t        d|| j                        w xY wY w xY w)NrP  r.   rO  )r  rb  r.  r   rV  r   r'   r   ry  rZ   r   r]  rd  s       r>   rf  zRefGroup.fix_groups}  s    	ETZZDJ DJJ7$))"7"7717DMMJJNNDJJ?	  	EE!YY224::>
 EOWdmmDDE 	Es)   B 	C!(B:9C!:!CC! C!c                 D    t        d| j                  | j                        rZ  r[  r^  s    r>   rn  zRefGroup.remove_captures  r\  r?   c                 n    d}|r	|t         z  }| j                  | j                  |f   || j                  fgS r  )r  r  r   rb  r  s       r>   r  zRefGroup._compile  s:    XEdoow67

KLLr?   c                     t        dj                  t        |z  | j                  t        | j
                                  y )Nz{}REF_GROUP {}{})r  r8   r  rb  r  r   r  s      r>   r  zRefGroup.dump  s0     ''
DOO
$& 	'r?   c                     t         S r  r  r^  s    r>   r  zRefGroup.max_width  rd  r?   c                     d | _         y r  rf  r^  s    r>   rg  zRefGroup.__del__  rh  r?   N)r@   rA   rB   r   r  	REF_GROUPr   REF_GROUP_IGNr   rC  REF_GROUP_FLDREF_GROUP_REVREF_GROUP_IGN_REVREF_GROUP_FLD_REVr  r:   rf  rn  r  r  r  rg  rD   r?   r>   r   r   m  s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G :@ @@PM'r?   r   c                   (    e Zd Zej                  ZdZy)r  SEARCH_ANCHORN)r@   rA   rB   r  rx  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y)r   Nc                 D    t         j                  |        |g }|| _        y r  )r[  r:   r  )r;   r  s     r>   r:   zSequence.__init__  s!    4 =E
r?   c                 L    | j                   D ]  }|j                  |||        y r  )r  rf  )r;   r2   r   re  rs   s        r>   rf  zSequence.fix_groups  s     ALL'51 r?   c                     g }| j                   D ]Q  }|j                  ||      }t        |t              r|j	                  |j                          A|j                  |       S t        |      S r  )r  r   r/   r   r   r[   rY  )r;   r   r   r  rs   s        r>   r   zSequence.optimise  sW    A

4)A!X&QWW%Q  U##r?   c                 L   g }g }t         }| j                  D ]g  }t        |      t        u r|j                  r}|j
                  sq|j                  |k7  rF|j                  st        |j                        r$t        j                  |||       |j                  }|j                  |j                         t        |      t        u st        |      t        u rp|j                  |k7  rD|j                  st        fd|D              r$t        j                  |||       |j                  }|j                  |j                          0t        j                  |||       |j                  |j#                               j t        j                  |||       t%        |      S )z+Packs sequences of characters into strings.c              3   6   K   | ]  }t        |        y wr  r   r  r   r   s     r>   r  z+Sequence.pack_characters.<locals>.<genexpr>  s"      +"  DE:dA+>    )r   r  r  r   r   r   r   r   r_   r   _flush_charactersr[   r  r  r  r   r  rl  rY  )r;   r   r  r  r   rs   s    `    r>   rl  zSequence.pack_characters  sN   

AAw)#

1;;<<:- ||z$'@ 224$e- &'\\
!!!''*aF"d1g&8<<:- ||s +" +" (" 224$e- &'\\
!!!,,/**4ZOQ..t457 : 	""4ZGU##r?   c                 j    | j                   D cg c]  }|j                          c}| _         | S c c}w r  )r  rn  )r;   rs   s     r>   rn  zSequence.remove_captures  s/    37::>:aa''):>
 ?r  c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r  r  rs   s     r>   r  z%Sequence.is_atomic.<locals>.<genexpr>       5*Q1;;=*r   r  r  r^  s    r>   rq  zSequence.is_atomic      5$**555r?   c                      yrv  rD   r^  s    r>   rt  zSequence.can_be_affix  rx  r?   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r  r  s     r>   r  z*Sequence.contains_group.<locals>.<genexpr>  s     :z!1##%zr   )r  r  r^  s    r>   rw  zSequence.contains_group  s    :tzz:::r?   c                     t               }| j                  }|r|j                          |D ]/  }||j                  |      z  }d |vr|c S |j	                  d        1 |t        d g      z  S r  )r   r  r   r{  discard)r;   r   r   r  rs   s        r>   r{  zSequence.get_firstset  sf    U

MMOA!..))B2~	JJt	  CKr?   c                 j    t        | j                        xr | j                  d   j                         S r  )r   r  r}  r^  s    r>   r}  zSequence.has_simple_start  s'    DJJDDJJqM$B$B$DDr?   c                     | j                   }|r|d d d   }g }|D ]#  }|j                  |j                  ||             % |S r
  )r  r   r   )r;   r   re  seqr   rs   s         r>   r  zSequence._compile  sH    jjdd)CAKK		'512  r?   c                 J    | j                   D ]  }|j                  ||        y r  )r  r  )r;   r  r   rs   s       r>   r  zSequence.dump  s    AFF67# r?   c                     |sy |t         z  rt         fd|D              st        }|t        z  t        k(  rt        j                  |      }|D ]l  }|j                  }t        |      dk(  r*|j                  t        |d   |j                               G|j                  t        ||j                               n nJt        |      dk(  r |j                  t        |d   |             n|j                  t        ||             g |d d  y )Nc              3   6   K   | ]  }t        |        y wr  r  r  s     r>   r  z-Sequence._flush_characters.<locals>.<genexpr>  s     ?Jqz$*Jr  r.   r   r   )r   r  r   rC  r   _fix_full_casefoldr  r^   r[   r   r   r  )r   r  r   r  literalsr   charss   `      r>   r  zSequence._flush_characters  s     
"?J??#
'N:22:>H u:?LL58!PQLL$//!JK ! :!#Yz!}LMVJ:FG
1r?   c                    t        j                         D cg c]  }t        j                  t        |       }}t        j                  t        dj	                  d | D                    j                         }g }|D ]U  } |j                  |      }|dk\  s|j                  ||t        |      z   f        |j                  ||dz         }|dk\  r;W d}g }t        j                  |      D ]R  \  }	}
||	k  r#|j                  t        | ||	 t                     |j                  t        | |	|
 t                     |
}T |t        |       k  r#|j                  t        | |d  t                     |S c c}w )Nrg   c              3   2   K   | ]  }t        |        y wr  rF  r  s     r>   r  z.Sequence._fix_full_casefold.<locals>.<genexpr>.  s      =a >AVr  r   r.   r   )r   rI  r   rH  r]   r]  findr[   r^   r   _merge_chunksr  r   rC  )r  r   expandedr   chunksrn   foundr3   r  r  r  s              r>   r  zSequence._fix_full_casefold(  sr   
 
&
&
(*
( @AF$$%6:
( 	 *!!"3RWW == 6   % 	AFKKNE1*uec!fn56#Auqy1 1*  "008JE3U{
3(?'!) * OOGJus$;') *C 9 Z OOGJsu$6:NO9*s   !E5c                     t        |       dk  r| S | j                          | d   \  }}g }| dd  D ].  \  }}||k  rt        ||      }|j                  ||f       ||}}0 |j                  ||f       |S )NrO   r   r.   )r^   sortr8  r[   )r  r  r  
new_chunksrs   rn   s         r>   r  zSequence._merge_chunksJ  s    v;?MAY
s
13LDAqCx#qk!!5#,/s ! 	5#,'r?   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  rN  rG  s     r>   r  z$Sequence.is_empty.<locals>.<genexpr>`  s     4A1::<r   r  r^  s    r>   r   zSequence.is_empty_  s    4444r?   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  r  r  s     r>   r  zSequence.__eq__b  rb  r?   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r  r  s     r>   r  z%Sequence.max_width.<locals>.<genexpr>f  r  r   )sumr  r^  s    r>   r  zSequence.max_widthe  r  r?   c                     | j                   }|r|d d d   }d}|D ]#  }|j                  |      \  }}||z  }|s||fc S  |d fS r  )r  r  )r;   r   r  r  rs   r  r  s          r>   r  zSequence.get_required_stringh  s`    jjdd)CA,,W5HCcMFs{"	  t|r?   r  )r@   rA   rB   r:   rf  r   rl  rn  rq  rt  rw  r{  r}  r  r  rR  r  r  r  r   r  r  r  rD   r?   r>   r   r     s    2
$$$L6; E	$  6  B  (5G6r?   r   c                   J    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y)r6  TFc                 B   t         j                  |        || _        t        |      | _        t        |      | _        t        |   | _        t        |      | _	        d| _
        | j                  | j                  | j                  | j                  | j                  f| _        y r  )r[  r:   r   r|   r  r   r   r`  r   r   
char_widthrZ   r]  )r;   r   r  r   r   r   s         r>   r:   zSetBase.__init__x  st    4 	5\
X1*=i^^TZZ
//4>>+	r?   c                      t        |       | j                  | j                  |||      j                  | j                  d      S rv  )r  r   r  r   rb  s       r>   ra  zSetBase.rebuild  s8    tDz$))TZZ:
Xdii/	0r?   c                     t        | g      S r  r  rz  s     r>   r{  zSetBase.get_firstset  r  r?   c                      yrp  rD   r^  s    r>   r}  zSetBase.has_simple_start  rr  r?   c                 P   d}| j                   r	|t        z  }| j                  r	|t        z  }|r	|t        z  }| j
                  | j                  |f   |fg}| j                  D ]!  }|j                  |j                                # |j                  t        j                  f       |S r  )r   r  r   ry  r  r  r   r  r   r   r[   r  r  )r;   r   re  r   r   rb   s         r>   r  zSetBase._compile  s    ==[ E>>\!EXEdoow67?@AKK		$  	RVVJr?   c           	          t        dj                  t        |z  | j                  t        | j
                     t        | j                                  | j                  D ]  }|j                  |dz   |        y )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                 H   | j                   r| j                  t        z  r|r| S | j                  j                  t
        z  r| j                  t        z  t        k7  r| S t        j                         }g }t               }|D ]  }| j                  t        |            st        j                  t        |      }||vs=|j                  t        |D cg c]  }t        |       c}| j                               |j!                  |        |s| S t#        | g|z         S c c}w r5  )r   r   r   r   r   r   rC  r   rI  r   r  r   r   rH  r[   r  r   r   )	r;   r   r   rK  r  seenr   rJ  r   s	            r>   _handle_case_foldingzSetBase._handle_case_folding  s    }}T__z%AfK 7*
1+0,K !668 u!B||CG$))*;R@%LL(@AQ(@!%"2 3HHV$ " Ktfun%% )As   Dc                    | j                   r| j                  t        z  sy| j                  j                  t
        z  r| j                  t        z  t        k7  ryt        j                         }t               }|D ]H  }| j                  t        |            st        j                  t        |      }|j                  |       J |syt        d |D              S )Nr.   c              3   2   K   | ]  }t        |        y wr  r  )r  rJ  s     r>   r  z$SetBase.max_width.<locals>.<genexpr>  s     2T63v;Tr  )r   r   r   r   r   r   rC  r   rI  r   r  r   r   rH  r   r8  )r;   rK  r  r   rJ  s        r>   r  zSetBase.max_width  s    }}T__z%A 7*
1+0, !668 u!B||CG$))*;R@  "
 2T222r?   c                     d | _         y r  rf  r^  s    r>   rg  zSetBase.__del__  rh  r?   N)r@   rA   rB   r   r:   ra  r{  r}  r  r  r  r  rg  rD   r?   r>   r6  r6  w  s7    -1f+0 (&<32r?   r6  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y)r  FTSET_DIFFc                 L   | j                   }t        |      dkD  r|d   t        |dd        g}t        |      dk(  r;|d   j                  | j                  | j
                        j                  |      S t        fd|D              | _         | j                  |      S )NrO   r   r.   r   c              3   F   K   | ]  }|j                  d         yw)Tr   N)r   )r  rb   r   r   s     r>   r  z#SetDiff.optimise.<locals>.<genexpr>  s*      
 GH1::dGD:A
s   !)	r  r^   r   r   r   r   r   r|   r  )r;   r   r   r   r  s    ``  r>   r   zSetDiff.optimise  s    

u:>1XxeACk:;Eu:?8&&$// ' ((0w(GH  
 
 ((v66r?   c                     | j                   d   j                  |      xr | j                   d   j                  |       }|| j                  k(  S Nr   r.   r  r  r   r;   r   rb   s      r>   r  zSetDiff.matches  sD    JJqM!!"%Gdjjm.C.CB.G*GDMM!!r?   Nr  )r@   rA   rB   r   r  r  r   SET_DIFF_IGNr   rC  SET_DIFF_REVSET_DIFF_IGN_REVr  r  r   r  rD   r?   r>   r  r    s    j%-@oo%("++7Noo~rT8JHd+R__~
?  	"G
 H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y)r  FT	SET_INTERc                    g }| j                   D ]_  }|j                  ||d      }t        |t              r(|j                  r|j                  |j                          O|j                  |       a t        |      dk(  r;|d   j                  | j                  | j                        j                  |||      S t        |      | _         | j                  ||      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
6A!X&1::QWW%Q  u:?8&&$// ' ((0w(GH 5\
((v66r?   c                 ^    t        fd| j                  D              }|| j                  k(  S )Nc              3   @   K   | ]  }|j                          y wr  r  r  rp   r   s     r>   r  z#SetInter.matches.<locals>.<genexpr>       2z!		"zr	  )r  r  r   r  s    ` r>   r  zSetInter.matches  &    2tzz22DMM!!r?   Nr  )r@   rA   rB   r   r  r  r   SET_INTER_IGNr   rC  SET_INTER_REVSET_INTER_IGN_REVr  r  r   r  rD   r?   r>   r  r    s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G
 H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y)r   FTSET_SYM_DIFFc                    g }| j                   D ]_  }|j                  ||d      }t        |t              r(|j                  r|j                  |j                          O|j                  |       a t        |      dk(  r;|d   j                  | j                  | j                        j                  |||      S t        |      | _         | j                  ||      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
6A!Z(QZZQWW%Q  u:?8&&$// ' ((0w(GH 5\
((v66r?   c                 n    d}| j                   D ]  }||j                  |      k7  } || j                  k(  S rv  r  )r;   r   rb   rp   s       r>   r  zSetSymDiff.matches2  s8    AQYYr]"A  DMM!!r?   Nr  )r@   rA   rB   r   r  r  r   SET_SYM_DIFF_IGNr   rC  SET_SYM_DIFF_REVSET_SYM_DIFF_IGN_REVr  r  r   r  rD   r?   r>   r   r     s    *e1DHe,boo@!!FD>23F3F4"11Hd3CND123J3J	LG
 H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y)	r   FT	SET_UNIONc                 $   g }| j                   D ]{  }|j                  ||d      }t        |t              r(|j                  r|j                  |j                          Ot        |t              rt               c S |j                  |       } t               t               f}|D ]R  }t        |t              s||j                     j                  |j                  |j                  |j                  f       T |d   |d   z  r
t               S t        |      dk(  rU|d   }|j                  |j                  | j                  k(  | j                  | j                        j                  |||      S t!        |      | _         | j#                  ||      S )NTr   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  rb   
propertiesrp   s           r>   r   zSetUnion.optimiseA  sA   A

4
6A!X&1::QWW%Av&xQ  eSU^
A!X&1::&**AGGQ\\1;;+OP  a=:a=(8Ou:?aA<<t}})D   ((0w(GH 5\
((v66r?   c                 4   d}| j                   r	|t        z  }| j                  r	|t        z  }|r	|t        z  }t        t              g }}| j                  D ]L  }t        |t              r)||j                      j                  |j                         <|j                  |       N | j                  | j                  |f   |fg}|j                         D ]}  \  }}	d}|r	|t        z  }t        |	      dk(  r&|j                  t        j                   ||	d   f       G|j                  t        j"                  |t        |	      ft%        |	      z           |D ]!  }|j'                  |j)                                # |j                  t        j*                  f       |S r  )r   r  r   ry  r  r   r   r  r/   r   r[   r_   r  r   r^   r  r  STRINGr|   r   r   r  )
r;   r   re  r   r  othersrb   r   r   valuess
             r>   r  zSetUnion._compilea  sP   ==[ E>>\!EXE(.F
A!Y'1::&--agg6a 	  doow67?@ * 0 0 2HfE$6{aR\\5&)<=RYYs6{;eFmKL !3 AKK		$  	RVVJr?   c                 ^    t        fd| j                  D              }|| j                  k(  S )Nc              3   @   K   | ]  }|j                          y w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   rC  SET_UNION_REVSET_UNION_IGN_REVr  r  r   r  r  rD   r?   r>   r   r   9  s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G
 H7@ D"r?   r   c                   (    e Zd ZdZej
                  Zy)SkipSKIPN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r    s    HggGr?   r  c                   (    e Zd Zej                  ZdZy)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y)r   START_OF_LINE_UN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r           G Hr?   r   c                   (    e Zd Zej                  ZdZy)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y)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y
)r  FTc                    t        |      | _        t        |   | _        | j                  t        z  t        k(  rOg }| j                  D ]=  }t        j                  t        t        |            }|j                  d |D               ? n| j                  }t        |      | _
        d| _        | j                  | j                  | j                  f| _        y )Nc              3   2   K   | ]  }t        |        y wr  r  r  s     r>   r  z"String.__init__.<locals>.<genexpr>  s     (@AQr  F)r|   r  r`  r   rC  r   r   rH  rF  r   r  requiredrZ   r]  )r;   r  r   r  r   rJ  s         r>   r:   zString.__init__  s    
+1*=OOn,? "))*;SYG!(((@(@@ ( !%!&'8!9NNDOOT__D	r?   c                 l    |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  s:    CCIdooc2__& ' ( 	(r?   c                      yrp  rD   r^  s    r>   r}  zString.has_simple_start  rr  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  sj    XE==[ Edoow67
d$$
%')-)?)?@ A 	Ar?   c                     t        dj                  d | j                  D                    j                  d      }t	        dj                  t        |z  |t        | j                                  y )Nrg   c              3   2   K   | ]  }t        |        y w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  sS    @@@AHHNo$$Vf_g
DOO
$& 	'r?   c                 ,    t        | j                        S r  )r^   r  r^  s    r>   r  zString.max_width  s    4))**r?   c                 
    d| fS r  rD   rz  s     r>   r  zString.get_required_string  s    $wr?   N)r@   rA   rB   r   r  r  r   
STRING_IGNr   rC  
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]]tnbmmj$%79J9J'=	G /5 E"(A'
+r?   r  c                       e Zd Zd Zy)r  c                     dj                  d | j                  D              }t        |      j                  d      }t	        dj                  t        |z  |t        | j                                  y )Nrg   c              3   2   K   | ]  }t        |        y w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  sX    '':$//::.''-$++FVOW
DOO
$& 	'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y)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 ]T  }	t        |	t              r|	D 
cg c]  }
t        |
       }	}
|j                  |	D 
cg c]  }
t!        |
|       c}
       V |j#                  t        d       |D cg c]  }t%        |       c}| _        y c c}
w c c}
w c c}w )Nr   T)r=  r   )r   r   r`  r   rZ   r]  set_keynamed_lists_usedr^   r  r   r   r/   r0   r   r[   r   r  r   r   )r;   r   r   r   rT  r  r  
fold_flagschoicesr   r   choices               r>   r:   zStringSet.__init__  sj   		1*=NNDIIt>	doo.<<t44425d6K6K2LD!!$,,/		**4<<8		  +__
99??^3
*
F&#&*01&Q#a&&1NN EFIaJ? 	  	d+8?@f&)@ 2 As   +F!F&
F+c                     t        dj                  t        |z  | j                  t        | j
                                  y )Nz{}STRING_SET {}{})r  r8   r  r   r  r   r  s      r>   r  zStringSet.dump  s0    !((&$))
DOO
$& 	'r?   c                     d | _         y r  rf  r^  s    r>   rg  zStringSet.__del__  rh  r?   N)r@   rA   rB   r   r:   r  rg  rD   r?   r>   r   r     s    .4 AB'r?   r   c                   P    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y)Sourcez1Scanner for the regular expression source string.c                     t        |t              r|| _        t        | _        n |j
                  d      | _        d | _        d| _        d| _        |d d | _        y )Nzlatin-1c                     t        | g      S r  )rH  r3  s    r>   r;  z!Source.__init__.<locals>.<lambda>
  s
    uaSzr?   r   F)	r/   r0   r   rF  	char_typedecoder3   rR  rG  )r;   r   s     r>   r:   zSource.__init__  sO    fc" DK DN'&--	2DK1DN!3Q<r?   c                    | j                   }| j                  }	 | j                  r:|s8	 ||   j                         r|dz  }n||   dk(  r |j                  d|      }nn7||   S # t
        $ r |d d cY S t        $ r |d d cY S w xY wNr.   rF  r,   r   )r   r3   rR  isspacerT  rS  r.  )r;   override_ignorer   r3   s       r>   r[  zSource.peek  s    hh	   c{**,q+*fll45  #; 	 3Q< 	 3Q<	 s   A
A% %B5BBc                 V   | j                   }| j                  }	 | j                  r:|s8	 ||   j                         r|dz  }n||   dk(  r |j                  d|      }nn7||   }|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   rR  r  rT  rS  r.  r^   )r;   r  r   r3   r   s        r>   r   z
Source.get(  s    hh	   c{**,q+*fll45  BQwDHI 	 DH3Q< 	 6{DH3Q<	 s   AA1 1B(B('B(c                 D   | j                   }| j                  }	 | j                  rg }t        |      |k  r`	 ||   j	                         r|dz  }n||   dk(  r |j
                  d|      }nn7|j                  ||          |dz  }t        |      |k  r`dj                  |      }n||||z    }|t        |      z  }|| _        |S # t        $ r$ t        |      | _        dj                        cY S t        $ r$ t        |      | _        dj                        cY S w xY wNr.   rF  r,   rg   )
r   r3   rR  r^   r  rT  r[   r]   rS  r.  )r;   r4   r   r3   	substrings        r>   get_manyzSource.get_manyD  s&   hh 	&  	)nu,!#;..01HC#C[C/".&,,tS"9C!  $$VC[11HC )nu, GGI.	"3u5	s9~%DH 	&6{DH779%% 	&6{DH779%%	&s   A;C 0C *D3)DDc                 b   | j                   }| j                  }| j                  ry|sw	 g }	 ||   j                         r|dz  }nA||   dk(  r |j                  d|      }n%||   |v |k(  r|j                  ||          |dz  }nn[|| _        dj                        S 	 ||   |v |k(  r|dz  }||   |v |k(  r|| j                  | }|| _        |S # t        $ r t        |      | _        Y _t        $ r t        |      | _        Y yw xY w# t        $ r || j                  | }|| _        |cY S w xY wr  )
r   r3   rR  r  rT  r[   rS  r^   r.  r]   )r;   test_setrM  r  r   r3   r  s          r>   r?  zSource.get_whilej  s^   hh['	c{**,q+*fll45 +1g=!((5q   779%%!c{h.7:1HC c{h.7: #488c2	  #  'v; 'v;'  !"488c2	  !s0   A%C D
 9D
 D,DD
!D.-D.c                    | j                   }| j                  }	 | j                  rH	 ||   j                         r|dz  }n-||   dk(  r |j                  d|      }n||   |v |k(  r|dz  }nnG||   |v |k(  r|dz  }||   |v |k(  r|| _        y # t
        $ r t        |      | _        Y y t        $ r t        |      | _        Y y w xY w)Nr.   rF  r,   )r   r3   rR  r  rT  rS  r^   r.  )r;   r   rM  r   r3   s        r>   
skip_whilezSource.skip_while  s    hh	#  c{**,q+*fll45 +1g=q  c{h.7:1HC c{h.7: DH 	#6{DH 	#6{DH	#s   A-B B C+CCc                 z   | j                   }| j                  }| j                  rW	 |D ]I  }	 ||   j                         r|dz  }n||   dk(  r |j                  d|      }nn7||   |k7  r y|dz  }K || _        y |j                  ||      sy|t        |      z   | _        y# t
        $ r Y yt        $ r Y yw xY w)NTr.   rF  r,   F)	r   r3   rR  r  rT  rS  r.  r=  r^   )r;   r  r   r3   r   s        r>   r   zSource.match  s    hh"A!#;..01HC#C[C/".&,,tS"9C!  c{a'$1HC #   %6$$Y4S^+DH   s   AB$ -B$ $	B:/B:9B:c                     | j                  |      s0t        dj                  |      | j                  | j                        y )Nz
missing {})r   r'   r8   r   r3   )r;   r  s     r>   rQ  zSource.expect  s5    zz)$++I6TXXNN %r?   c                 
   | j                   }| j                  }	 | j                  r8	 ||   j                         r|dz  }n||   dk(  r |j                  d|      }nn7|t        |      k\  S # t        $ r Y yt        $ r Y yw xY w)NTr.   rF  r,   )r   r3   rR  r  rT  r^   rS  r.  )r;   r   r3   s      r>   at_endzSource.at_end  s    hh	  c{**,q+*fll45  #f+%% 	 		s   AA, ,	B7BBNr  )r.   )TF)T)r@   rA   rB   rC   r:   r[  r   r  r?  r"  r   rQ  r&  rD   r?   r>   r  r    s6    7
  0 8$&L.!`#:%NOr?   r  c                   2    e Zd ZdZddi fdZddZd Zd Zy)	Infoz"Info about the regular expression.r   Nc                     |t         |t        z  xs t           z  }|| _        || _        d| _        || _        d| _        i | _        i | _	        || _
        i | _        g | _        i | _        i | _        g | _        i | _        y NFr   )DEFAULT_FLAGSr  r  r   r  r  r  ry  rV  
group_namer  r
  open_groupsrW  r  rX  r  )r;   r   r  r  s       r>   r:   zInfo.__init__  s     5I/JJ
!"" " "  r?   c                    | j                   j                  |      }|^	 | xj                  dz  c_        || j                  | j                  vrn1| j                  }|r|| j                   |<   || j                  |<   || j                  v r*t        | j                        dz    }|| j                  |<   |}| j                  j                  |       | j                  j                  |d      dz   | j                  |<   |S rX  )	rV  r   ry  r,  r-  r^   r  r[   rW  )r;   r   rb  group_aliass       r>   rP  zInfo.open_group  s      $$T*=  A% <4#3#34??#J 
 $$E).  &)-&D$$$   3 34q89K/4D,E&'+'<'<'@'@'JQ'Ne$r?   c                 8    | j                   j                          y r  )r-  r   r^  s    r>   rS  zInfo.close_group(  s    r?   c                     | j                   t        z  xs t        }|t        k(  ry|j	                         rt        |      }n| j                  j                  |      }|| j                  v S rv  )	r   r  r  r"   r  r  rV  r   r-  )r;   r   r  rb  s       r>   rj  zInfo.is_open_group+  s[     ::-A/h<<>IE$$((.E((((r?   r  )r@   rA   rB   rC   r:   rP  rS  rj  rD   r?   r>   r(  r(    s     ($r !&4)r?   r(  c                    i }g }| j                   D ]  \  }}}|j                  ||f}|j                  |      }||j                  dk(  r]t        | j                  t
        z        }	t        |t              }
|	|
f||fk7  rd|j                  t        t        |      |      ||f       n<| j                  |j                     }|d   }|dd ||fk7  r|j                  |||f       t        |      }|||<   ||_         || _        || _        y)zkChecks whether the reverse and fuzzy features of the group calls match
    the groups which they call.
    Nr   r.   )rX  rb  r   r   r   r   r/   r  r[   rj  r^   r  r_  r  additional_groups)r   rm  r  r3  callr   re  r=  rl  revfuzdef_inforb  s                r>   _check_group_featuresr8  9  s    I $ 0 0guzz7E*mmC ;zzQ4::/0 /:'5!11 &,,gc)nf.Mu.& '  ..tzz: AC>gu%55 &,,eWe-DEi.C IcN9 !1< DN.Dr?   c                     | j                  t        |t        z              \  }}|r>d|_        |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  )rm  r   
req_offsetr  	req_flags	req_charss         r>   _get_required_stringr=  `  s     "55d57?6KLJ "J''	'!I..	
		y)++r?   c                       e Zd ZddZd Zy)r(   c                    || _         g }|D ]  \  }}t        |      }t        ||j                        }t	        |j
                  t        z        |_        t        ||      }|j                         s!t        d|j                  |j                        |j                  |j                                 t        |      }t        |      D 	
cg c]  \  }	}
t!        ||	dz   |
       }}	}
t#        |      }t	        |j
                  t$        z        }|j'                  ||      }|j)                  |      }t+        ||j
                        \  }}}t-        ||       |j.                  r!t        dj                  |j                        t	        |j
                  t$        z        }|j1                  |      t2        j4                  fgz   }t7        |      }|j9                         s,	 t;        ||j=                  |            }t7        |      }||z   }|j
                  t@        z  xs tB        }|dtD        tF        fvrtI        d      tK        j0                  d |tL        z  |z  |i i i g |||tO        |            | _(        y c c}
}	w # t>        $ r Y ~w xY w)Nzunbalanced parenthesisr.   z(recursive regex not supported by Scannerr   z5VERSION0 and VERSION1 flags are mutually incompatible))lexiconr  r(  r  r   r   r&   rR  r   r&  r'   r   r3   r[   rn  	enumerater  r   r   r   rl  r=  r8  r  r   r  SUCCESSr   r}  r   r{  rL   r  r  r    r"   r.  r   r  r^   scanner)r;   r@  r   patternsphraseactionr   r   rm  r  rq   r   r:  r<  r;  r   fs_coder  s                     r>   r:   zScanner.__init__v  s[    %NFFF^Fv//0D"&tzzG';"<F#FD1F==?4fmm**  OOF2245 & E{6?6IJ6IdaE$Aq)6IJ! tzzG+,w/''- ,@
**,(
Iy 	dF+ >>BmmVZZ) ) tzzG+, ~~g&2::.)99 T"&&(+D&2E2Eg2NO'0~
 ::-A/1h11TUU ~~dU\-AW,L
BB
Iy
h-c KF " s   I9!+I? ?	J
Jc                 h   g }|j                   }| j                  j                  |      j                  }d}	  |       }|snl|j                         }||k(  rnV| j                  |j
                  dz
     d   }t        |d      r|| _         || |j                               }| ||       |}v|||d  fS )Nr   r.   __call__)r[   rC  r   r  r@  	lastindexr   rb  )	r;   r   r(  r[   r   rp   rb   jrF  s	            r>   scanzScanner.scan  s    $$V,22AAAv\\!++/215Fvz*
aggi0!vA  vac|##r?   N)r   )r@   rA   rB   r:   rL  rD   r?   r>   r(   r(   u  s    GR$r?   r(   r<  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   rX  r  )ry   r  r  r*  (  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"  r/  r&  r  	octdigitsr  	hexdigitsr  r   r  r  r  get_code_sizeBYTES_PER_CODEBITS_PER_CODEr  r  r   r   rC  rH  r`  r  OPCODESrx   r  rA  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  r9  r  r  r   rT  rU  rN  rV  rp  rW  rX  rY  r\  rZ  r  r  r  r]  r  rO  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   r9  r<  r  rJ  rD  rF  rE  r  r  ry  r  r  r  r  r  r  rY  r[  r  r   r   r   rw  r  r   r}  rj  r   rq  r  r  r  r   r   r  r   r   r  r  r  r  r  r   r   r  r  r   rm  ru  rz  r;  rW  r  r   r  r   r6  r  r  r   r   r  r   r   r   r  r  r  r   r  r(  r8  r=  r(   get_propertiesr:  rN  r  r  r?  r  r   r   prop_valuesr8  r^   val_namerA  r  r  r  r  dictr  r   r  r  r  r  r  r_  rD   r?   r>   <module>rp     s       # *I *>	y 		 		Y 	1 1j 					%%!!
				








~~KKKKKKKKKKKKKKKKKKKKKKKK\\\\KKKKKK8#') 1h1 	)E1L@5H	
:%	1F:TAGK 	&&&'	6==	!v''(
v''(
*+io=)D/)Yw// 
" &%%'" -1$	 	8YUG88$	 
"
	
J&n, a1j*."  AA&Rj	 	 [w}}'EArBA (0.d+;6>>LC=Rh@5 ))<4 <01;z
A6
H4$Z*x"?H"
4)FV(
$	''' "&!@F5
&2.2Q5f4B* .	1'2 "1H,4!#! !.')R$LL	%*E /557806689D?LF'P
$"** 

 g.R%:Hb%'	C& C&LI :) &	2S 	23 6<Y 6<p} F9Y F9P,	 ,\!i !H	 HTW) Wr"m "%} %' '  - $m $& &  m  C%I C%Jy + +Z'9 Z'x2| 2<PI Pd=  B BHS&I S&j"i "6y 6pM KI KZ/y /b= Sy Sjgi gR"g "4"w "<" "BL"w L"\= - !; !!M !- 5Y 5n'f '' 'Rt tl?) ?)B%/N,*^$ ^$B #V""$
 $.$4$4$6 I &**7RH=D+tYC(D"K/N7"LLN&!+//&""=xF + %7 
						    
w	-	w	.	w	-	w	-	w	.	vt	,	vu	- _-    	w~	F	w	G	w~	F	w	G	vtn	E	vu~	F  /    	w7G	H	w8H	I	w7G	H	w8H	I	vt6F	G	vu7G	H   
		%				  ./    	>	*	%.	1	n	-	N	+	    01    	+	,	%"2	3	.	/	,	-	!  -.    									  I	WF		r?   