
    {Mg&                       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                                ej                   eZeez  Zeez  ez  Zed eeiZeez  ez  ez  ez  e z  Z!ee"z  e#z  e$z  e%z  e&z  ez  Z' e(ej)                  Z* e(ej+                  Z,e*e,z  Z- e(ej.                  Z/ e(ej0                  Z1 e(d           e(dg          z  Z2e- e(d          z  Z3e- e(d          z  Z4dZ5 ej6                    Z7e7dz  Z8de8z  dz
  Z9eeeee"ee#ee e$eeee%e&dZ:ee"z  Z;d Z<ee"z  Z=ee=z  Z>d d ed e"e"e=e=iZ?ddddZ@dZA G d d          ZB eB            ZC eDeAE                                          D ]\  ZFZG eHeCeGeF           ddZId ZJd ZKd  ZLd! ZMd" ZNd# ZOd$ ZPdd&ZQd' ZRd( ZSd) ZTd* ZUd+ ZVd, ZWd- ZXd.d/d0d1ZYd2 ZZd3 Z[d4 Z\d5 Z]d6 Z^d7 Z_d8 Z`d9 Zad: Zbd; Zcd< Zdd= Zed> Zfd? Zgd@ ZhdA ZidB ZjdC ZkdD ZldE ZmdF ZndG ZodH ZpdI ZqdJ ZrdK ZsdL ZtdM ZuddNZvdO ZwdP ZxdQ ZydR ZzdS Z{dT Z|dU Z}dV Z~dW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Z edgE                                          Z edhE                                          ZddiZdj Zdk Zdl Zdm ZdnZdZdZdZdZdoZdpdqdrZe<de"dsede=dtiZdu Z G dv dw          Z G dx dye          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 d          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G dĄ de          Z G dƄ deǦ          Z G dȄ deǦ          Z G dʄ deǦ          Z G d̄ deǦ          Z G d΄ de          Z G dЄ de          Z G d҄ deͦ          Z G dԄ de          Z G dք de          Z G d؄ de          Z G dڄ deѦ          Z G d܄ de          Z G dބ dߦ          Z G d d          Zd Zd Z G d d          Z ej                    Zi Zeڠ                                D ]w\  Z\  ZZe۠                    edi f          \  ZZ eeee          Zeefee<   eߠ                                D ]*\  ZZ ee                    ed          ee          ee<   +xddddddddZ eddd           eddd%           eddd           eddd           eddd%           eddd           eddd%          dZ eϦ             e             ed%           e             eЦ             e             e            dZ ee          Ze                     e             ed%           e             e            d            e             e             e¦             e̦            dZdS )    N)defaultdict)%AASCIIB	BESTMATCHDDEBUGEENHANCEMATCHFFULLCASEI
IGNORECASELLOCALEM	MULTILINEPPOSIXRREVERSESDOTALLTTEMPLATEUUNICODEV0VERSION0V1VERSION1WWORDXVERBOSEerrorScanner	RegexFlagc                       e Zd ZdZddZdS )r&   a  Exception raised for invalid regular expressions.

    Attributes:

        msg: The unformatted error message
        pattern: The regular expression pattern
        pos: The position in the pattern where compilation failed, or None
        lineno: The line number where compilation failed, unless pos is None
        colno: The column number where compilation failed, unless pos is None
    Nc                    t          |t                    rdnd}|| _        || _        || _        |}|{|                    |d|          dz   | _        ||                    |d|          z
  | _        d	                    ||          }||v r#|d	                    | j        | j                  z  }t                              | |           d S )N
   
r      z{} at position {}z (line {}, column {}))
isinstancestrmsgpatternposcountlinenorfindcolnoformat	Exception__init__)selfmessager1   r2   newlines        C/var/www/api/venv/lib/python3.11/site-packages/regex/_regex_core.pyr9   zerror.__init__*   s    $Wc22=$$3?!--C881<DKw}}Wa===DJ)00#>>G'!!299$+*   	4)))))    )NN)__name__
__module____qualname____doc__r9    r>   r=   r&   r&      s2        	 	* * * * * *r>   r&   c                       e Zd ZdS )_UnscopedFlagSetNr?   r@   rA   rC   r>   r=   rE   rE   =           Dr>   rE   c                       e Zd ZdS )
ParseErrorNrF   rC   r>   r=   rI   rI   A   rG   r>   rI   c                       e Zd ZdS )_FirstSetErrorNrF   rC   r>   r=   rK   rK   E   rG   r>   rK   c                       e Zd ZdxZZdxZZdxZZdxZ	Z
dxZZdxZZdxZZdxZZd	xZZd
xZZdxZZdxZZdxZZdxZZdxZZ dxZ!Z"dxZ#Z$d Z%e&j'        Z'dS )r(      i   i   i   i @           i   i          i       i   @   r-   c                 z   | j         
d| j         z  S | j        }g }|dk     }|r| }| j        D ]4}||j        z  r(||j         z  }|                    d|j         z             5|r"|                    t	          |                     d                    |          }|rt          |          dk    rd|z  }nd|z  }|S )Nzregex.%sr   |r-   z~(%s)z~%s)_name__value_	__class__appendhexjoinlen)r:   valuemembersnegativemress         r=   __repr__zRegexFlag.__repr__]   s    ;"++19 	FE 	6 	6Aqy  6!)#zAH4555 	'NN3u::&&&hhw 	"7||amck
r>   N)(r?   r@   rA   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   rc   object__str__rC   r>   r=   r(   r(   I   s        AA	AAAA
AA	AAAABBAAA  : nGGGr>   r(   z()|?*+{^$.[\# z -z &_-.)||~~&&--rP   r-   )abefir   ra   prsur   r    wxrN   rO   )ru   rs   r   a  
FAILURE
SUCCESS
ANY
ANY_ALL
ANY_ALL_REV
ANY_REV
ANY_U
ANY_U_REV
ATOMIC
BOUNDARY
BRANCH
CALL_REF
CHARACTER
CHARACTER_IGN
CHARACTER_IGN_REV
CHARACTER_REV
CONDITIONAL
DEFAULT_BOUNDARY
DEFAULT_END_OF_WORD
DEFAULT_START_OF_WORD
END
END_OF_LINE
END_OF_LINE_U
END_OF_STRING
END_OF_STRING_LINE
END_OF_STRING_LINE_U
END_OF_WORD
FUZZY
GRAPHEME_BOUNDARY
GREEDY_REPEAT
GROUP
GROUP_CALL
GROUP_EXISTS
KEEP
LAZY_REPEAT
LOOKAROUND
NEXT
PROPERTY
PROPERTY_IGN
PROPERTY_IGN_REV
PROPERTY_REV
PRUNE
RANGE
RANGE_IGN
RANGE_IGN_REV
RANGE_REV
REF_GROUP
REF_GROUP_FLD
REF_GROUP_FLD_REV
REF_GROUP_IGN
REF_GROUP_IGN_REV
REF_GROUP_REV
SEARCH_ANCHOR
SET_DIFF
SET_DIFF_IGN
SET_DIFF_IGN_REV
SET_DIFF_REV
SET_INTER
SET_INTER_IGN
SET_INTER_IGN_REV
SET_INTER_REV
SET_SYM_DIFF
SET_SYM_DIFF_IGN
SET_SYM_DIFF_IGN_REV
SET_SYM_DIFF_REV
SET_UNION
SET_UNION_IGN
SET_UNION_IGN_REV
SET_UNION_REV
SKIP
START_OF_LINE
START_OF_LINE_U
START_OF_STRING
START_OF_WORD
STRING
STRING_FLD
STRING_FLD_REV
STRING_IGN
STRING_IGN_REV
STRING_REV
FUZZY_EXT
c                       e Zd ZdS )	NamespaceNrF   rC   r>   r=   rw   rw     rG   r>   rw      c                    t          |                                           }t          |          |z
  }|dk     rdS ||z  |z   }ddl}t	          |d          sdS |                    ||          D ]}		 | |	= # t          $ r Y w xY w|                                 i }
t          |           D ]3\  }}}}}}|||||||f<   	 |||f         |
||f<   $# t          $ r Y 0w xY w|                                 |                    |
           dS )aC  Make room in the given cache.

    Args:
        cache_dict: The cache dictionary to modify.
        args_dict: The dictionary of named list args used by patterns.
        max_length: Maximum # of entries in cache_dict before it is shrunk.
        divisor: Cache will shrink to max_length - 1/divisor*max_length items.
    r   Nsample)	tuplekeysr]   randomhasattrrz   KeyErrorclearupdate)
cache_dict	args_dictlocale_sensitive
max_lengthdivisor
cache_keysoveragenumber_to_tossr}   
doomed_keysensitivity_dictr1   pattern_typeflagsargsdefault_versionlocales                    r=   _shrink_cacher     s~    z(())J*oo
*G{{ 	7*W4N MMM68$$  	mmJ??  
	:&& 	 	 	D	
 OOGLZGXGX  CudOVKO	'<GH	6F|U\G\6]\7233 	 	 	D	 ,-----s$   3A77
BB C
CCc                 j    | j         }|t          z  dk    r
|| j        z  }t          j        ||          S )zFolds the case of a string.r   )r   _ALL_ENCODINGSguess_encoding_regex	fold_case)infostringr   s      r=   
_fold_caser   ?  s9    JE1$$$$E6***r>   c                 X    t          t          j        | j        |                    dk    S z$Checks whether a character is cased.r-   )r]   r   get_all_casesr   )r   chars     r=   
is_cased_ir   G  s$    v#DJ5566::r>   c                 N    t          t          j        | |                    dk    S r   )r]   r   r   )r   r   s     r=   
is_cased_fr   K  s"    v#E40011A55r>   c                     t          | j        t          z            }t          | ||          }|sg S |                    |          S )z&Compiles the firstset for the pattern.)boolr   r   _check_firstsetcompile)r   fsreverses      r=   _compile_firstsetr   O  sH    4:'((G	w	+	+B 	 ::gr>   c                    |rd|v rdS t                      }t          }|D ]Y}t          |t                    r
|j        s dS ||j        z  }|                    |                    t                               Z|t          t          z  k    rdS t          | t          |          |t           z  d          }|                    | |d          }|S )z$Checks the firstset for the pattern.N
case_flagsTr   	zerowidthin_set)setNOCASEr.   	Characterpositiver   add
with_flagsr   r   SetUnionlistoptimise)r   r   r   r_   r   ro   s         r=   r   r   Y  s     t eeGJ 5 5a## 	AJ 	44 	al"
ALLFL334444h+,,t 
$W*y2H
 
 
B	T74	0	0BIr>   c                 >    g }| D ]}|                     |           |S )z(Flattens the code from a list of tuples.)extend)code	flat_codecs      r=   _flatten_coder   x  s3    I  r>   c                 X    | j         t          z  }| j         t          z  r|t           z  }|S )zMakes the case flags.)r   
CASE_FLAGSr   r   )r   r   s     r=   make_case_flagsr     s0    J#E zE (Lr>   Fc                 `    |rt          |          S t          |t          |                     S )zMakes a character literal.r   )r   r   )r   r^   r   s      r=   make_characterr     s3      Ut'<'<====r>   c                 B    t          | ||t          |                     S )zMakes a group reference.r   )RefGroupr   )r   namepositions      r=   make_ref_groupr     s!    D$_T5J5JKKKKr>   c                 @    t          | |t          |                     S )zMakes a string set.r   )	StringSetr   )r   r   s     r=   make_string_setr     s    T4OD,A,ABBBBr>   c                 P    |r|S |                     t          |                     S )zMakes a property.r   )r   r   )r   propr   s      r=   make_propertyr     s+     ??od&;&;?<<<r>   c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          |          S )zParses a pattern, eg. 'a|b|c'.rV   r-   r   )parse_sequencematchrZ   r]   Branch)sourcer   branchess      r=   _parse_patternr     s    vt,,-H
,,s

 6vt44555 ,,s

 6 8}}{(r>   c           	         dg}t          |          }	 | j        }|                                 }|t          v ra|dv r	|| _        n|dk    r&|                    t          | |d                     nY|dk    r:t          | |          }|t          |          }n0|                    |           n|dk    r|j        t          z  r#|                    t                                 n|j        t          z  r#|                    t                                 n|                    t                                 n|dk    r%|                    t          | |                     na|d	k    r|j        t          z  rU|j        t          z  r#|                    t                                 n|                    t!                                 n|                    t#                                 n|d
k    r|j        t          z  rU|j        t          z  r#|                    t%                                 n|                    t'                                 nj|j        t          z  r#|                    t)                                 n8|                    t+                                 n|dv rt-          | ||          }|r+t/          | ||||||           |                    d           nt1          | |||          }|r*t3          | |||||           |                    d           n|                    t5          t7          |          |                     nc|                    t5          t7          |          |                     n1|                    t5          t7          |          |                     d |D             }t9          |          S )zParses a sequence, eg. 'abc'.NTz)|\F(.[^$z?*+{r   c                     g | ]}||S NrC   ).0items     r=   
<listcomp>z"parse_sequence.<locals>.<listcomp>  s    >>>T-=-=-=-=r>   )r   r2   getSPECIAL_CHARSrZ   parse_escapeparse_parenr   r   AnyAllr#   AnyUAny	parse_setr   StartOfLineUStartOfLineStartOfString
EndOfLineU	EndOfLineEndOfStringLineUEndOfStringLineparse_quantifierapply_quantifierparse_fuzzyapply_constraintr   ordSequence)	r   r   sequencer   	saved_poschelementcountsconstraintss	            r=   r   r     s   vH &&JKGJ	ZZ\\Tzz&
tVT5 A ABBBBs%fd33?!0!6!6JJOOG,,,,s:& +OOFHH----Z$& +OODFF++++OOCEE****s	&$ 7 78888s:	) 5zD( 7 7777 6666OOMOO4444s:	) 	;zD( 5 
5555 	4444zD( ; (8(:(:;;;; (9(9::::v)&$;; 2$VT6:r+ + +OOD)))) #.fdB
"K"KK" 2({J#X/ / / ---- !	#b''%/)1 )1 )1 2 2 2 2 	#b''j I I IJJJJ OOIc"gg*EEEFFFWKGZ ?>>>>HHr>   c                    |                                 }|.|rt          d| j        |          t          d| j        |          t          |t          t
          t          f          rt          d| j        |          |\  }}	| j        }|                                 }|dk    rt
          }
n|dk    rt          }
n|| _        t          }
|	                                s|dk    s|	dk    r |
|||	          }|
                    |           d S )Nzmultiple repeatznothing to repeat?+r-   )popr&   r   r.   GreedyRepeat
LazyRepeatPossessiveRepeatr2   r   is_emptyrZ   )r   r   r   r   r   r   r   r   	min_count	max_countrepeateds              r=   r   r     s   llnnG 	E)6=)DDD'	BBB'L*6FGHH A%v}i@@@!Iy
I	B	Syy	s# 
  :9>>Y!^^(7Iy99OOGr>   c                 0   |                                 }|t          d| j        |          t          |t                    r1t          |j        |          |_        |                    |           d S |                    t          ||                     d S )Nznothing for fuzzy constraint)r   r&   r   r.   GroupFuzzy
subpatternrZ   )r   r   r   r   r   r   r   s          r=   r   r     s    llnnG2FM9MMM '5!! 5"7#5{CC     g{3344444r>   )r   r-   r   Nr-   N)r   *r   c                 t    t                               |          }|r|S |dk    rt          |           }|r|S dS )zParses a quantifier.{N)_QUANTIFIERSr   parse_limited_quantifier)r   r   r   qr   s        r=   r   r   /  sJ    A 	Syy)&11 	M4r>   c                      | duo
| t           k    S )z,Checks whether a count is above the maximum.N	UNLIMITED)r3   s    r=   is_above_limitr  >  s    3)!33r>   c                    | j         }t          |           }|                     d          r4t          |           }t          |pd          }|rt          |          nd}n|s	|| _         dS t          |          x}}|                     d          s	|| _         dS t	          |          st	          |          rt          d| j        |          |||k    rt          d| j        |          ||fS )zParses a limited quantifier.,r   N}zrepeat count too bigz"min repeat greater than max repeat)r2   parse_countr   intr  r&   r   )r   r   r  r  s       r=   r  r  B  s   
IF##I||C /''	 	Q''	&/9C	NNNT		 	"FJ4 #I.	I<< 
ti   FN9$=$= F*FM9EEEY!6!68&-
  	 ir>   c                    | j         }|dk    rdS i }	 t          | |           |                     d          r%t          | |           |                     d          %n# t          $ r || _         Y dS w xY w|                     d          rt	          | ||          |d<   |                     d          st          d| j        | j                   |S )z#Parses a fuzzy setting, if present.r  Nr  :testr  z
expected })r2   parse_fuzzy_itemr   rI   parse_fuzzy_testr&   r   )r   r   r   r   r   r   s         r=   r   r   `  s    
I	SyytK---ll3 	2V[111 ll3 	2   
tt ||C I.vtZHHF<< =L&-<<<s   A
A A32A3c                     | j         }	 t          | |           dS # t          $ r || _         t          | |           Y dS w xY w)zParses a fuzzy setting item.N)r2   parse_cost_constraintrI   parse_cost_equation)r   r   r   s      r=   r  r  x  s_    
I1fk22222 1 1 1
FK0000001s    !A A c                    | j         }|                                 }|t          v rkt          | ||          }t	          |           }|d||<   dS | j         }t          |           }|s|dz  }|dk     rt          d| j        |          d|f||<   dS |t          v r|| _         | j         }t          |           }t	          |           }	|	t                      t          | ||                                           }t	          |           }|t                      | j         }t          |           }|	s|dz  }|s|dz  }d|cxk    r|k    sn t          d| j        |          ||f||<   dS t                      )zParses a cost constraint.Nr  r-   r   bad fuzzy cost limit)
r2   r   ALPHAparse_constraintparse_fuzzy_compareparse_cost_limitr&   r   DIGITSrI   )
r   r   r   r   
constraintmax_inccost_posmax_costmin_costmin_incs
             r=   r"  r"    s   
I	B	U{{%fk2>>
%f--?&-K
### zH'//H  A!||2FM8LLL&'kK
###	v
 :#F++%f--?,,%fk6::<<HH
%f--?,, :#F++  	MH 	MHH((((((((.xHHH"*H"4Jllr>   c                     | j         }t          |           }	 t          |          S # t          $ r Y nw xY wt	          d| j        |          )zParses a cost limit.r%  )r2   r  r  
ValueErrorr&   r   )r   r-  digitss      r=   r)  r)    s^    zH  F6{{    &x
@
@@s   ' 
44c                 N    |dvrt                      ||v rt                      |S )zParses a constraint.deis)rI   )r   r   r   s      r=   r'  r'    s1    	ll	[llIr>   c                 b    |                      d          rdS |                      d          rdS dS )zParses a cost comparator.z<=T<FNr   r   s    r=   r(  r(    s9    ||D t	c		 utr>   c                    d|v rt          d| j        | j                  i }t          | |           |                     d          r%t          | |           |                     d          %t          |           }|t                      t          t          |                     }|s|dz  }|dk     rt          d| j        | j                  ||d<   ||d<   dS )	zParses a cost equation.costzmore than one cost equationr   Nr-   r   r%  max)	r&   r   r2   parse_cost_termr   r(  rI   r  r  )r   r   r;  r,  r.  s        r=   r#  r#    s    16=&*MMMDFD!!!
,,s

 &%%% ,,s

 & "&))Gll;v&&''H A!||*FM6:FFFDKKr>   c                     t          |           }|                                 }|dvrt                      ||v rt          d| j        | j                  t          |pd          ||<   dS )zParses a cost equation term.diszrepeated fuzzy costr-   N)r  r   rI   r&   r   r2   r  )r   r;  coeffr   s       r=   r=  r=    sf    E	B	ll	Tzz)6=&*EEE5:ADHHHr>   c                    | j         }|                                 }|t          v r|dk    rt          | |d          S |dk    rH|j        t
          z  rt                      S |j        t          z  rt                      S t                      S |dk    rt          | |          S t          d| j        |          |rt          t          |          |          S t          d| j        |          )Nr   Fr   r   zexpected character setr   )r2   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43YYzF" xxd" vvuu3YYVT***0&-KKK	 HRZ8888,fmYGGGr>   c                 6    |                      t                    S )z0Parses a quantifier's count, which can be empty.)	get_whiler*  r9  s    r=   r  r    s    F###r>   c                 4   | j         }|                     d          }|dk    r| j         }|                     d          }|dk    r| j         }|                                 }|dv rt          | |d|dk              S || _         t          |           }|                    |          }|                     d           |j        }	 t          | |          }	|                     d           ||_        t          |j        t          z            | _
        n-# ||_        t          |j        t          z            | _
        w xY w|                                 t          |||	          S |dv rt          | |d|dk              S |d	k    rt          | |          S |d
k    rt          |           S |dk    rt          | |          S |dk    rt!          | |          S |dk    rt#          | |          S |dk    sd|cxk    rdk    rn nt%          | |||          S |dk    rt'          | ||          S || _         t)          | |          S |dk    r| j         }|                     t-          d          d          }
|
dd                                         rIt0                              |
          }|st3          d| j        |          |                     d           |S || _         |                                }|j        }	 t          | |          }	|                     d           ||_        t          |j        t          z            | _
        n-# ||_        t          |j        t          z            | _
        w xY w|                                 t          |||	          S )z[Parses a parenthesised subpattern or a flag. Returns FLAGS if it's an
    inline flag.
    Tr   r7  =!rF  >)Fr   #r   rV   r   09&r  )>includeNr-   zunknown verb)r2   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parse_flags_subpatternrC  r   isalphaVERBSr&   r   )r   r   r   r   saved_pos_2saved_pos_3r   groupsaved_flagsr
  wordverbs               r=   r   r   #  s    
I	D		B	SyyjZZ99 *KBZ'dB#IFFF %FJf%%DOOD))EMM#*KA+FD99
c"""(
&*4:+?&@&@## )
&*4:+?&@&@#@@@@uj111#FD%sCCC99"6400099 (((99$VT22299---99---99r((((S(((((#FD"kBBB99)&$DDD !
%fd333	SyyjD		5991: 	99T??D HNFM;GGGMM#K FJOOE*K9#FD11
c 
"4:#788 !
"4:#7888888uj)))s   %D *D<:%M *M2c                 J   | j         }|                                 }|dk    rt          |           }|                    |          }|                     d           |j        }	 t          | |          }|                     d           ||_        t          |j        t          z            | _	        n-# ||_        t          |j        t          z            | _	        w xY w|
                                 t          |||          S |dk    rbt          | d          }|                     d           |                    |          rt          d| j        |          t          |||          S |dk    s|dk    rt!          | ||          S || _         t          d	| j        |          )
zParses a Python extension.r7  rH  rI  rF  T)allow_numericcannot refer to an open grouprM  unknown extension)r2   r   rR  rS  rT  r   r   r   r%   rU  rV  r  is_open_groupr&   r   r   r]  )r   r   r   r   r   rc  rd  r
  s           r=   rW  rW  }  s   
I	B	Syy&!!%%cj	='55JMM#$DJ"&tzG';"<"<F %DJ"&tzG';"<"<F<<<<T5*---	Syy&555cd## 	7   dD)444	SyyB#II%fdI>>>FJ
#V]I
>
>>s   #%B1 1*Cc                     	 | j         }|                     d          }|r|dk    rn|dk    r|                     d          }A|| _         |                     d           dS )zParses a comment.TrI  r   N)r2   r   rT  )r   r   r   s      r=   rX  rX    sq    !J	JJt 	AHH99

4  A! FJ
MM#4r>   c                 *   |j         }	 t          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY wt          |||          S )zParses a lookaround.rI  )r   r   rT  r   r%   rU  
LookAround)r   r   behindr   rd  r
  s         r=   rQ  rQ    s    *K9#FD11
c 
"4:#788 !
"4:#7888888fh
333   %A *Bc                    |j         }| j        }|                                 }|dk    r|                                 }|dv rt          | |d|dk              S |dk    r.|                                 }|dv rt          | |d|dk              S || _        t	          d| j        | j                  || _        	 t          | d          }|                     d           t          | |          }| 	                    d	          rt          | |          }nt                      }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY w|                                r"|                                rt                      S t          |||||          S )
z Parses a conditional subpattern.r   rE  FrF  r7  Tzexpected lookaround conditionalrI  rV   )r   r2   r   parse_lookaround_conditionalr&   r   rR  rT  r   r   r   r   r%   rU  r  Conditional)r   r   rd  r   r   rc  
yes_branch	no_branchs           r=   rY  rY    s   *K
I	B	SyyZZ\\/eR3YOOO99BZ3FD$I    
5v}
*  	 FJ964((c#FD11
<< 	#&vt44II 

Ic 
"4:#788 !
"4:#7888888 !3!3!5!5 zztUJ	9EEEs   5A>E *Fc                    |j         }	 t          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY wt          | |          }|                     d          rt          | |          }nt                      }|                     d           t          |||||          S )NrI  rV   )
r   r   rT  r   r%   rU  r   r   r   LookAroundConditional)r   r   ro  r   rd  r
  rt  ru  s           r=   rr  rr    s    *K9#FD11
c 
"4:#788 !
"4:#7888888--J||C "6400		JJ	
MM# :z  rp  c                 &   |j         }	 t          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY wt          |          S )zParses an atomic subpattern.rI  )r   r   rT  r   r%   rU  Atomic)r   r   rd  r
  s       r=   rZ  rZ    s    *K9#FD11
c 
"4:#788 !
"4:#7888888*rp  c                    |j         }t          | |          g}|j         }|                     d          rT||_         |                    t          | |                     t	          ||j                   }|                     d          T||_         |                     d           t          |          dk    r|d         S t          |          S )zParses a common groups branch.rV   rI  r-   r   )group_countr   r   rZ   r<  rT  r]   r   )r   r   initial_group_countr   final_group_counts        r=   r[  r[  	  s     *vt,,-H(
,,s

 E.vt44555 143CDD ,,s

 E
 )D
MM#
8}}{(r>   c                     |dk    rd}n||                      t                    z   }|                     d           t          |||          S )zParses a call to a group.r   rK  rI  )rC  r*  rT  	CallGroup)r   r   r   r2   rc  s        r=   r\  r\    sN    	SyyV%%f---
MM#T5#&&&r>   c                 l    t          |           }|                     d           t          |||          S )zParses a call to a named group.rI  )rR  rT  r  )r   r   r2   rc  s       r=   r]  r]  &  s3    vE
MM#T5#&&&r>   c                     d}	 	 | j         }|                                 }|dk    r||                                 z  }|t          |         z  }I# t          $ r
 || _         Y nw xY w|S )zParses a set of inline flags.r   TV)r2   r   REGEX_FLAGSr   )r   r   r   r   s       r=   parse_flag_setr  -  s    E	%
IBSyyfjjll"[_$E	%    


 Ls   A
A A"!A"c                     t          |           }|                     d          r-t          |           }|st          d| j        | j                  nd}|t
          z  rd|_        ||fS )z!Parses flags being turned on/off.-z$bad inline flags: no flags after '-'r   T)r  r   r&   r   r2   r   inline_localer   r   flags_on	flags_offs       r=   parse_flagsr  =  s    f%%H||C "6**	 	>j  	 	& "!Yr>   c                 t   |j         }|j         |z  | z  |_         t          |j         t          z            | _        	 t	          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY w|S )z&Parses a subpattern with scoped flags.rI  )r   r   r%   rU  r   rT  )r   r   r  r  rd  r
  s         r=   parse_subpatternr  N  s    *K*x'I:5DJtzG344F9#FD11
c 
"4:#788 !
"4:#7888888s   %B *B5c                    t          | |          \  }}|t          z  rt          d| j        | j                  ||z  rt          d| j        | j                  ||j         z  t          z  }|r$|xj        |z  c_        t          |j                  |t           z  }|                     d          rt          | |||          S |                     d          rt          | |||           dS t          d| j        | j                  )zParses a flags subpattern. It could be inline flags or a subpattern
    possibly with local flags. If it's a subpattern, then that's returned;
    if it's a inline flags, then None is returned.
    z-bad inline flags: cannot turn off global flagz(bad inline flags: flag turned on and offr  rI  Nrj  )
r  GLOBAL_FLAGSr&   r   r2   global_flagsrE   r   r  parse_positional_flags)r   r   r  r  new_global_flagss        r=   r^  r^  \  s3   
 &fd33Hi< %C
-% % 	% ) >
*  	 !D$5#55E 2-- t0111 H||C Ch	BBB||C vtXyAAAt
#V]FJ
?
??r>   c                 n    |j         |z  | z  |_         t          |j         t          z            | _        dS )zParses positional flags.N)r   r   r%   rU  r  s       r=   r  r    s4    *x'I:5DJtzG344Fr>   c                 |   |                      t          d          d          }|st          d| j        | j                  |                                r7|rdnd}|rt          |          |k     rt          d| j        | j                  n/|                                st          d| j        | j                  |S )zParses a name.rN  FrO  zmissing group namer   r-   zbad character in group name)rC  r   r&   r   r2   isdigitr  isidentifier)r   rh  allow_group_0r   	min_groups        r=   rR  rR    s    CIIu55D E(&-DDD||~~ &-AAA	 	D		I 5 55v}j   !6   "" 	5v}j   Kr>   c                 4    t          d | D                       S )z!Checks whether a string is octal.c              3   (   K   | ]}|t           v V  d S r   )
OCT_DIGITSr   r   s     r=   	<genexpr>zis_octal.<locals>.<genexpr>  '      11BrZ111111r>   allr   s    r=   is_octalr        11&111111r>   c                 4    t          d | D                       S )z#Checks whether a string is decimal.c              3   (   K   | ]}|t           v V  d S r   )r*  r  s     r=   r  zis_decimal.<locals>.<genexpr>  s&      --rV|------r>   r  r  s    r=   
is_decimalr    s    --f------r>   c                 4    t          d | D                       S )z'Checks whether a string is hexadecimal.c              3   (   K   | ]}|t           v V  d S r   )
HEX_DIGITSr  s     r=   r  z!is_hexadecimal.<locals>.<genexpr>  r  r>   r  r  s    r=   is_hexadecimalr    r  r>   c           
      b   | j         }d| _         |                                 }|| _         |st          d| j        | j                  |t
          v rt          | ||t
          |         ||          S |dk    rO|sM| j        }	 t          | |          S # t          $ r
 || _        Y nw xY wt          |t          |          |          S |dk    r|st                      S |dk    r|st          | |          S |dk    rt          | ||          S |dv rt          | ||dk    |          S |d	k    rr|spg d
}|j        t          k    r|                    g d           t#          t%          t'          ddg          t)          |d |D                       g                    S |dk    r|st+                      S |t,          v r|sH|j        t0          z  rt2                              |          }nt4                              |          }|r|S t6                              |          }|r|S t8                              |          }|rt;          t          |                    S t          d|z  | j        | j                  |t<          v rt?          | |||          S t          |t          |          |          S )zParses an escape sequence.Fbad escape (end of pattern)gGr   NpPrp   r   )
            )   i(   i)   r  r  c                 ,    g | ]}t          |          S rC   r   r   r   s     r=   r   z parse_escape.<locals>.<listcomp>  s6     D D D ENaLL D D Dr>   r$   bad escape \%s) rU  r   r&   r   r2   HEX_ESCAPESparse_hex_escapeparse_group_refr   r   SearchAnchorparse_string_setparse_named_charparse_propertyr   r   r   ry  r   Stringr   Graphemer&  r   r#   WORD_POSITION_ESCAPESPOSITION_ESCAPESCHARSET_ESCAPESCHARACTER_ESCAPESr   r*  parse_numeric_escape)r   r   r   saved_ignorer   r   charsetr^   s           r=   r   r     s   &LF	B&F N16=&*MMM	[b+b/62NNN	s6J		#"64000 	# 	# 	#"FJJJ	# dCGGV444	s6~~	s6---	sf555	tfdB#Iv>>>	s6***'))NN111222ffdD\22HT D DD D D 5 5        	 	s6zz	u  	zD  1-11"55(,,R00 ##B'' 	L!%%b)) 	)SZZ(((%*FM6:FFF	v#FD"f=== dCGGV444s   ?B B#"B#c                 .   |s|dk    rt          | ||g|          S |}| j        }|                                 }|t          v r||z  }| j        }|                                 }t	          |          rY|t
          v rP|j        t          z  }|t          k    s|t          k    rd}nd}t          ||z   d          |z  }t          ||          S || _        |                    |          rt          d| j        | j                  t          ||| j                  S )z!Parses a numeric escape sequence.rK       rP   ri  )parse_octal_escaper2   r   r*  r  r  r   r   r   r   r  r   rk  r&   r   r   )	r   r   r   r   r3  r   encoding
octal_maskr^   s	            r=   r  r    s#    >s!&$f=== F
I	B	V||"J	ZZ\\F 		/j 0 0zN2H5  H$6$6!

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


	Syy&kkAoo
IB##&
bLF &kkAoo s61~~
2333	V|| J	ZZ\\<<bLF
IB Ahv{++ As6B;22Z?@@@ 
c&kk]""	Tzzs4yyk!! N16=&*MMM 3t99c"gg&&&r>   c                 :   g }t          |          D ]g}|                                 }|t          vr3t          d|d                    |          | j        | j                  |                    |           ht          d                    |          d          S )z5Parses a hex escape sequence in a replacement string.r  rf   rQ   )	r  r   r  r&   r\   r   r2   rZ   r  )r   r  r  r3  ro   r   s         r=   r=  r=    s    F<    ZZ\\Z%ddBGGFOOOLmVZ) ) )brwwv###r>   c                 d   | j         }|                     d          r|                     t          t	          d          z            }|                     d          rM	 t          j        |          }t          |          S # t          $ r t          d| j
        | j                   w xY w|| _         dS )z1Parses a named character in a replacement string.r   r  r  N)r2   r   rC  r&  r   r  r  r   r   r&   r   )r   r   r   r^   s       r=   r?  r?    s    
I||C 	C 011<< 	#*4005zz!   6*   FJ4s   "B   &B&c                 v   |                      d           t          | dd          }|                      d           |                                r@t          |          }d|cxk    r|j        k    sn t          d| j        | j                  |S 	 |j        |         S # t          $ r t          d          w xY w)z0Compiles a replacement template group reference.r7  TrH  r   invalid group referenceunknown group)rT  rR  r  r  groupsr&   r   r2   
groupindexr   
IndexError)r   r1   r   indexs       r=   r>  r>    s    
MM#fdD))D
MM#||~~ D		E++++W^++++16=&*MMM*!$'' * * *)))*s   B B8z  rQ   z	NON-MATCHMATCHFTz SIMPLE_IGNORE_CASEz FULL_IGNORE_CASEc                 V    t          |           dk    r| d         S t          |           S Nr-   r   )r]   r   r  s    r=   make_sequencerS  0  s&    
5zzQQxE??r>   c                   x    e Zd Zd ZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZddZd Zd Zd Zd Zd ZdS )	RegexBasec                     | j         | _        d S r   )rY   _keyr:   s    r=   r9   zRegexBase.__init__7  s    N			r>   Nc                    || j         }nt          |          }|| j        }nt          |t          z           }|| j        }nt          |          }|| j         k    r|| j        k    r|| j        k    r| S |                     |||          S r   )r   r   r   CASE_FLAGS_COMBINATIONSr   r   rebuildr:   r   r   r   s       r=   r   zRegexBase.with_flags:  s    }HHH~~HJJ0j1HIJIIYI%%**G*G
t~
%
%K||Hj)<<<r>   c                     d S r   rC   r:   r1   r   fuzzys       r=   
fix_groupszRegexBase.fix_groupsN  s    r>   c                     | S r   rC   r:   r   r   s      r=   r   zRegexBase.optimiseQ      r>   c                     | S r   rC   r:   r   s     r=   pack_characterszRegexBase.pack_charactersT  rc  r>   c                     | S r   rC   rX  s    r=   remove_captureszRegexBase.remove_capturesW  rc  r>   c                     dS NTrC   rX  s    r=   	is_atomiczRegexBase.is_atomicZ      tr>   c                     dS rj  rC   rX  s    r=   can_be_affixzRegexBase.can_be_affix]  rl  r>   c                     dS NFrC   rX  s    r=   contains_groupzRegexBase.contains_group`      ur>   c                     t                      r   )rK   r:   r   s     r=   get_firstsetzRegexBase.get_firstsetc  s    r>   c                     dS rp  rC   rX  s    r=   has_simple_startzRegexBase.has_simple_startf  rr  r>   Fc                 .    |                      ||          S r   )_compiler:   r   r_  s      r=   r   zRegexBase.compilei  s    }}We,,,r>   c                     dS rp  rC   rX  s    r=   r  zRegexBase.is_emptyl  rr  r>   c                 *    t          | j                  S r   )hashrW  rX  s    r=   __hash__zRegexBase.__hash__o  s    DIr>   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  rW  r:   others     r=   __eq__zRegexBase.__eq__r  s'    DzzT%[[(DTY%*-DDr>   c                 .    |                      |           S r   )r  r  s     r=   __ne__zRegexBase.__ne__u  s    ;;u%%%%r>   c                 .    |                                  d fS r   	max_widthrt  s     r=   get_required_stringzRegexBase.get_required_stringx      ~~%%r>   )NNNFF)r?   r@   rA   r9   r   r`  r   rf  rh  rk  rn  rq  ru  rw  r   r  r~  r  r  r  rC   r>   r=   rU  rU  6  s        # # #= = = =(                  - - - -    E E E& & && & & & &r>   rU  c                   .    e Zd ZddZd Zd Zd Zd ZdS )	ZeroWidthBaseTc                     t                               |            t          |          | _        | j        | j        f| _        d S r   )rU  r9   r   r   rY   rW  )r:   r   s     r=   r9   zZeroWidthBase.__init__}  s7    4   XNDM1			r>   c                 "    t          d g          S r   r   rt  s     r=   ru  zZeroWidthBase.get_firstset      D6{{r>   c                 l    d}| j         r
|t          z  }|r
|t          z  }|r
|t          z  }| j        |fgS Nr   )r   POSITIVE_OPFUZZY_OP
REVERSE_OP_opcoder:   r   r_  r   s       r=   ry  zZeroWidthBase._compile  sO    = 	![ E 	XE 	 ZEu%&&r>   c                     t          d                    t          |z  | j        t          | j                                      d S )Nz{}{} {})printr7   INDENT_op_namePOS_TEXTr   r:   indentr   s      r=   dumpzZeroWidthBase.dump  sD    iv
4=
!# # 	$ 	$ 	$ 	$ 	$r>   c                     dS r  rC   rX  s    r=   r  zZeroWidthBase.max_width      qr>   NT)r?   r@   rA   r9   ru  ry  r  r  rC   r>   r=   r  r  |  sd        2 2 2 2  ' ' '$ $ $    r>   r  c                   H    e Zd Zej        ej        dZdZd Zd Z	d Z
d ZdS )r   rO  ANYc                     dS rj  rC   rX  s    r=   rw  zAny.has_simple_start  rl  r>   c                 >    d}|r
|t           z  }| j        |         |fgS r  )r  r  r  s       r=   ry  zAny._compile  s.     	XEg&.//r>   c                 f    t          d                    t          |z  | j                             d S )N{}{})r  r7   r  r  r  s      r=   r  zAny.dump  s*    fmmFVOT];;<<<<<r>   c                     dS Nr-   rC   rX  s    r=   r  zAny.max_width  r  r>   N)r?   r@   rA   OPr  ANY_REVr  r  rw  ry  r  r  rC   r>   r=   r   r     sf        fBJ//GH  0 0 0= = =    r>   r   c                   0    e Zd Zej        ej        dZdZdS )r   rO  ANY_ALLN)r?   r@   rA   r  r  ANY_ALL_REVr  r  rC   r>   r=   r   r     s$        j77GHHHr>   r   c                   0    e Zd Zej        ej        dZdZdS )r   rO  ANY_UN)r?   r@   rA   r  r  	ANY_U_REVr  r  rC   r>   r=   r   r     s$        hbl33GHHHr>   r   c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )ry  c                 H    t                               |            || _        d S r   )rU  r9   r
  )r:   r
  s     r=   r9   zAtomic.__init__  s!    4   $r>   c                 >    | j                             |||           d S r   r
  r`  r^  s       r=   r`  zAtomic.fix_groups  "    ""7GU;;;;;r>   c                     | j                             ||          | _         | j                                         r| j         S | S r   )r
  r   r  rb  s      r=   r   zAtomic.optimise  s>    /224AA?##%% 	#?"r>   c                 D    | j                             |          | _         | S r   r
  rf  re  s     r=   rf  zAtomic.pack_characters      /99$??r>   c                 B    | j                                         | _         | S r   r
  rh  rX  s    r=   rh  zAtomic.remove_captures      /99;;r>   c                 4    | j                                         S r   r
  rn  rX  s    r=   rn  zAtomic.can_be_affix      ++---r>   c                 4    | j                                         S r   r
  rq  rX  s    r=   rq  zAtomic.contains_group      --///r>   c                 6    | j                             |          S r   r
  ru  rt  s     r=   ru  zAtomic.get_firstset      ++G444r>   c                 4    | j                                         S r   r
  rw  rX  s    r=   rw  zAtomic.has_simple_start      //111r>   c                 t    t           j        fg| j                            ||          z   t           j        fgz   S r   )r  ATOMICr
  r   ENDrz  s      r=   ry  zAtomic._compile  s5    )$/"9"9'5"I"IIF:, 	r>   c                     t          d                    t          |z                       | j                            |dz   |           d S )N{}ATOMICr-   )r  r7   r  r
  r  r  s      r=   r  zAtomic.dump  sD    j00111VaZ11111r>   c                 4    | j                                         S r   r
  r  rX  s    r=   r  zAtomic.is_empty      '')))r>   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  r
  r  s     r=   r  zAtomic.__eq__  s/    T

d5kk) do

/ 	r>   c                 4    | j                                         S r   r
  r  rX  s    r=   r  zAtomic.max_width      ((***r>   c                 6    | j                             |          S r   r
  r  rt  s     r=   r  zAtomic.get_required_string      227;;;r>   N)r?   r@   rA   r9   r`  r   rf  rh  rn  rq  ru  rw  ry  r  r  r  r  r  rC   r>   r=   ry  ry    s        % % %< < <      . . .0 0 05 5 52 2 2  2 2 2* * *  + + +< < < < <r>   ry  c                        e Zd Zej        ZdZdS )BoundaryBOUNDARYN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r    s        kGHHHr>   r  c                   p   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zd Zd Zd ZdS )r   c                 H    t                               |            || _        d S r   )rU  r9   r   )r:   r   s     r=   r9   zBranch.__init__  s!    4    r>   c                 H    | j         D ]}|                    |||           d S r   )r   r`  )r:   r1   r   r_  rl   s        r=   r`  zBranch.fix_groups  s6     	2 	2ALL'51111	2 	2r>   c                 :   | j         st          g           S t                              ||| j                   }|r!t                              ||          \  }}g }n t                              ||          \  }}g }t                              |||          }t          |          dk    r\t          |          g}|r|sG|                     |||          }|r.|r|	                    |           n|
                    d|           n|}t          ||z   |z             S rQ  )r   r   r   _flatten_branches_split_common_suffix_split_common_prefix_reduce_to_setr]   _add_precheckrZ   insertrS  )r:   r   r   r   suffixr;  r   firstsets           r=   r   zBranch.optimise  s4   } 	 B<< ++D'4=II  	%::4JJFHFF%::4JJFHF ((wAAx==1x(()H 5 5--dGXFF 5 5 1111 8444HVh.7888r>   c                    t                      }|rdnd}|D ]K}t          |          t          u r1|j        t          k    r!|                    |j        |                    I d S |sd S t          ||d |D                       S )Nr   c                 ,    g | ]}t          |          S rC   r  r  s     r=   r   z(Branch._add_precheck.<locals>.<listcomp>'  s    .M.M.My||.M.M.Mr>   )r   r  Literalr   r   r   
charactersr   )r:   r   r   r   r  r2   branchs          r=   r  zBranch._add_precheck  s    %%"bb 	 	FF||w&&6+<+F+FF-c23333 	4tW.M.MW.M.M.MNNNr>   c                 8    fd| j         D             | _         | S )Nc                 :    g | ]}|                               S rC   )rf  )r   rl   r   s     r=   r   z*Branch.pack_characters.<locals>.<listcomp>*  s'    HHHQ**400HHHr>   r   re  s    `r=   rf  zBranch.pack_characters)  s%    HHHH$-HHHr>   c                 2    d | j         D             | _         | S )Nc                 6    g | ]}|                                 S rC   rh  r   rl   s     r=   r   z*Branch.remove_captures.<locals>.<listcomp>.  s$    DDD**,,DDDr>   r  rX  s    r=   rh  zBranch.remove_captures-  s    DDdmDDDr>   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   rk  r  s     r=   r  z#Branch.is_atomic.<locals>.<genexpr>2  *      88Q1;;==888888r>   r  r   rX  s    r=   rk  zBranch.is_atomic1  !    88$-888888r>   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   )rn  r  s     r=   r  z&Branch.can_be_affix.<locals>.<genexpr>5  s,      ;;1>>##;;;;;;r>   r  rX  s    r=   rn  zBranch.can_be_affix4  s!    ;;T];;;;;;r>   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   rq  r  s     r=   r  z(Branch.contains_group.<locals>.<genexpr>8  s.      ==!1##%%======r>   )r  r   rX  s    r=   rq  zBranch.contains_group7  s!    ==t}======r>   c                     t                      }| j        D ]}||                    |          z  }|pt          d g          S r   )r   r   ru  )r:   r   r   rl   s       r=   ru  zBranch.get_firstset:  sG    UU 	* 	*A!..)))BB S$[[ r>   c                     | j         sg S t          j        fg}| j         D ]K}|                    |                    ||                     |                    t          j        f           Lt          j        f|d<   |S Nr  )r   r  BRANCHr   r   rZ   NEXTr  )r:   r   r_  r   rl   s        r=   ry  zBranch._compileA  sx    } 	I 	% 	%AKK		'511222KK$$$$F:Rr>   c                 L   t          d                    t          |z                       | j        d                             |dz   |           | j        dd          D ]E}t          d                    t          |z                       |                    |dz   |           Fd S )Nz{}BRANCHr   r-   {}OR)r  r7   r  r   r  )r:   r  r   rl   s       r=   r  zBranch.dumpN  s    j00111afqj'222qss$ 	( 	(A&--00111FF6A:w''''	( 	(r>   c                     g }|D ]]}|                     | |          }t          |t                    r|                    |j                   H|                    |           ^|S r   )r   r.   r   r   r   rZ   )r   r   r   new_branchesrl   s        r=   r  zBranch._flatten_branchesU  ss      	' 	'A

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

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

""""5Qx4++ ? ??^+
>	@r>   c                 j   t          |           dk     rdS | D ](}t          |t                    r|j        r|j        s dS )d                    d | D                       }t          j        t          |          }t          j	                    }|D ]#}|t          j        t          |          k    r dS $dS )NrN   Frf   c              3   >   K   | ]}t          |j                  V  d S r   )chrr^   r   ro   s     r=   r  z$Branch._is_folded.<locals>.<genexpr>a	  s*      55!QW555555r>   T)
r]   r.   r   r   r   r\   r   r   FULL_CASE_FOLDINGget_expand_on_folding)r  ro   foldedexpanding_charsr   s        r=   r  zBranch._is_foldedW	  s    u::>>5 	 	Aq),, AJ luu 55u55555!"3V<< !688  	 	A)*;Q????tt @ ur>   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r=   r  z"Branch.is_empty.<locals>.<genexpr>n	  s*      77A1::<<777777r>   r  rX  s    r=   r  zBranch.is_emptym	  s!    77777777r>   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  r   r  s     r=   r  zBranch.__eq__p	  s'    DzzT%[[(LT]en-LLr>   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r=   r  z#Branch.max_width.<locals>.<genexpr>t	  r  r>   )r<  r   rX  s    r=   r  zBranch.max_widths	  r  r>   N)r?   r@   rA   r9   r`  r   r  rf  rh  rk  rn  rq  ru  ry  r  staticmethodr  r  r  r  r  r'  r"  r  r$  r,  r  r  r  r  r  rC   r>   r=   r   r     sH       ! ! !2 2 2!9 !9 !9FO O O    9 9 9< < <> > >! ! !  ( ( ( 
 
 \
 '. '. \'.R &/ &/ \&/P   \0   \4   \6 L L \L   \6   \2   \ @ @ \@   \*8 8 8M M M9 9 9 9 9r>   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
r  c                     t                               |            || _        || _        || _        | j        | j        f| _        d S r   )rU  r9   r   rc  r   rY   rW  )r:   r   rc  r   s       r=   r9   zCallGroup.__init__w	  s?    4   	
 NDJ.			r>   c                 *   	 t          | j                  | _        nR# t          $ rE 	 | j        j        | j                 | _        n$# t
          $ r t          d|| j                  w xY wY nw xY wd| j        cxk    r| j        j        k    sn t          d|| j                  | j        dk    r1| j        j	        | j                 dk    rt          d|| j                  | j        j
                            | ||f           | j        | j        f| _        d S )NrH  r   rI  r-   zambiguous group reference)r  rc  r2  r   group_indexr   r&   r   r{  open_group_countgroup_callsrZ   rY   rW  r^  s       r=   r`  zCallGroup.fix_groups	  s4   	OTZDJJ 	O 	O 	OO!Y24:>

 O O O5wNNNO 
	O DJ7777$)"77777$-@@@:>>di8DqHH3WdmLLL	$$dGU%;<<<NDJ.			&    
A+AA+!A%%A+*A+c                 8    t          dt          | j                  Nzgroup reference not allowedr&   r1   r   rX  s    r=   rh  zCallGroup.remove_captures	      17DMJJJr>   c                 *    t           j        | j        fgS r   )r  
GROUP_CALLcall_refrz  s      r=   ry  zCallGroup._compile	  s    .//r>   c                 f    t          d                    t          |z  | j                             d S )Nz{}GROUP_CALL {})r  r7   r  rc  r  s      r=   r  zCallGroup.dump	  s-    &&v
CCDDDDDr>   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  rc  r  s     r=   r  zCallGroup.__eq__	  '    DzzT%[[(FTZ5;-FFr>   c                     t           S r   r  rX  s    r=   r  zCallGroup.max_width	      r>   c                     d | _         d S r   r   rX  s    r=   __del__zCallGroup.__del__	      			r>   N)r?   r@   rA   r9   r`  rh  ry  r  r  r  r]  rC   r>   r=   r  r  v	  s        / / // / /&K K K0 0 0E E EG G G      r>   r  c                       e Zd Zd Zd ZdS )CallRefc                 "    || _         || _        d S r   )refparsed)r:   rb  rc  s      r=   r9   zCallRef.__init__	  s    r>   c                     t           j        | j        fg| j                            ||          z   t           j        fgz   S r   )r  CALL_REFrb  rc  ry  r  rz  s      r=   ry  zCallRef._compile	  sB    +tx()DK,@,@
- - VJ<  	!r>   Nr?   r@   rA   r9   ry  rC   r>   r=   r`  r`  	  s2          ! ! ! ! !r>   r`  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdedfdZd ZddZd Zd Zd Zd	 Zd
 Zd Zd ZdS )r   FTc                    t                               |            || _        t          |          | _        t
          |         | _        t          |          | _        | j        rJ| j        t          z  t          k    r2t          j
        t          t          | j                            | _        nt          | j                  | _        | j        | j        | j        | j        | j        f| _        d S r   )rU  r9   r^   r   r   rZ  r   r   r8  r   r   r=  r;  r?  rY   rW  r:   r^   r   r   r   s        r=   r9   zCharacter.__init__	  s    4   
X1*=iM 	*t?
  *+<c$*ooNNDKKdj//DK^TZ
/4>+			r>   c                 0    t          | j        |||          S r   )r   r^   r\  s       r=   r[  zCharacter.rebuild	  s    Xz9EEEr>   c                     | S r   rC   r:   r   r   r   s       r=   r   zCharacter.optimise	  rc  r>   c                 "    t          | g          S r   r  rt  s     r=   ru  zCharacter.get_firstset	  r  r>   c                     dS rj  rC   rX  s    r=   rw  zCharacter.has_simple_start	  rl  r>   c                 x   d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }t          | j        | j        |f         || j        g          }t          | j
                  dk    r4t          |t          d | j
        D             | j                  g          }|                    ||          S )Nr   r-   c                 ,    g | ]}t          |          S rC   r   r  s     r=   r   z&Character._compile.<locals>.<listcomp>	  s    (E(E(EAQ(E(E(Er>   r   )r   r  r   ZEROWIDTH_OPr  PrecompiledCoder  r   r^   r]   r?  r   r  r   )r:   r   r_  r   r   s        r=   ry  zCharacter._compile	  s    = 	![ E> 	"\!E 	XET_g-E F
*    t{a4(E(E(E(E(E"* "* "* + , ,D ||GU+++r>   c           	         t          t          | j                                                d          }t	          d                    t          |z  t          | j                 |t          | j
                                      d S )Nbuz{}CHARACTER {} {}{})asciir;  r^   lstripr  r7   r  r  r   	CASE_TEXTr   r:   r  r   displays       r=   r  zCharacter.dump	  sv    DJ((//55#**6F?
4=
!7Ido,FH H 	I 	I 	I 	I 	Ir>   c                 *    || j         k    | j        k    S r   )r^   r   r:   r   s     r=   matcheszCharacter.matches	  s    dj T]22r>   c                 *    t          | j                  S r   )r]   r?  rX  s    r=   r  zCharacter.max_width	  s    4;r>   c                 b    | j         sdS t          d | j        D                       | _        d| fS )Nr  c              3   4   K   | ]}t          |          V  d S r   rq  r  s     r=   r  z0Character.get_required_string.<locals>.<genexpr>	  s(      &C&C!s1vv&C&C&C&C&C&Cr>   r   )r   r{   r?  folded_charactersrt  s     r=   r  zCharacter.get_required_string	  s;    } 	7!&&C&Ct{&C&C&C!C!C$wr>   NF)r?   r@   rA   r   r  	CHARACTERr   CHARACTER_IGNr   r8  CHARACTER_REVCHARACTER_IGN_REVr  r9   r[  r   ru  rw  ry  r  r}  r  r  rC   r>   r=   r   r   	  s3       z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G (,+ + + +"F F F       , , ,&I I I
3 3 3         r>   r   c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )rs  c                     t                               |            || _        || _        || _        || _        || _        d S r   )rU  r9   r   rc  yes_itemno_itemr   )r:   r   rc  r  r  r   s         r=   r9   zConditional.__init__	  s=    4   	
  r>   c                    	 t          | j                  | _        ng# t          $ rZ 	 | j        j        | j                 | _        n9# t
          $ r, | j        dk    rd| _        nt          d|| j                  Y nw xY wY nw xY wd| j        cxk    r| j        j        k    sn t          d|| j                  | j	        
                    |||           | j        
                    |||           d S )NDEFINEr   rI  rH  )r  rc  r2  r   rK  r   r&   r   r{  r  r`  r  r^  s       r=   r`  zConditional.fix_groups 
  s   	ITZDJJ 		I 		I 		II!Y24:>

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

d5kk) Edo

/ E#/53DD	Fr>   c                     t           S r   r  rX  s    r=   r  zFuzzy.max_width
  rZ  r>   c                 N   g }dD ]j}| j         |         \  }}|dk    rd}|dk    rd                    |          }||z  }||d                    |          z  }|                    |           kg }dD ]D}| j         d         |         }|dk    r)|                    d                    ||                     E| j         d         d         }|D|dk    r>d	                    d
                    |          |          }|                    |           d                    |          S )Nidsr   rf   z{}<=z<={}r;  r  r<  z{}<={}r   r  )r   r7   rZ   r\   )	r:   r   r   r  r<  conr;  r@  limits	            r=   r  zFuzzy._constraints_to_string
  s@    	$ 	$D'-HCaxxCQwwmmC((4KCv}}S)))s#### 	8 	8D$V,T2EqyyFMM%66777 (/??388D>>599Dt$$$xx$$$r>   r   )r?   r@   rA   r9   r`  rf  rh  rk  rq  ry  r  r  r  r  r  rC   r>   r=   r	  r	  z
  s        !# !# !# !#F; ; ;    + + +0 0 0@ @ @<2 2 2* * *F F F  % % % % %r>   r	  c                        e Zd Zd Zd Zd ZdS )r  c           	          t          t          t          t                      dd           t	                      g                    }|                    ||          S r  )ry  r   r  r   GraphemeBoundaryr   )r:   r   r_  grapheme_matchers       r=   ry  zGrapheme._compile   sX     "(JvxxD,I,I


, # #      ''777r>   c                 Z    t          d                    t          |z                       d S )Nz
{}GRAPHEME)r  r7   r  r  s      r=   r  zGrapheme.dump  s(    l!!&6/2233333r>   c                     t           S r   r  rX  s    r=   r  zGrapheme.max_width  rZ  r>   N)r?   r@   rA   ry  r  r  rC   r>   r=   r  r  
  sA        8 8 84 4 4    r>   r  c                       e Zd Zd ZdS )r  c                      t           j        dfgS r  )r  GRAPHEME_BOUNDARYrz  s      r=   r   zGraphemeBoundary.compile  s    %q)**r>   N)r?   r@   rA   r   rC   r>   r=   r  r    s#        + + + + +r>   r  c                   z    e Zd Zej        ZdZd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )r   GREEDY_REPEATc                 d    t                               |            || _        || _        || _        d S r   )rU  r9   r
  r  r  )r:   r
  r  r  s       r=   r9   zGreedyRepeat.__init__  s/    4   $""r>   c                 >    | j                             |||           d S r   r  r^  s       r=   r`  zGreedyRepeat.fix_groups  r  r>   c                     | j                             ||          } t          |           || j        | j                  S r   )r
  r   r  r  r  r:   r   r   r
  s       r=   r   zGreedyRepeat.optimise  s7    _--dG<<
tDzz*dndnEEEr>   c                 D    | j                             |          | _         | S r   r  re  s     r=   rf  zGreedyRepeat.pack_characters$  r  r>   c                 B    | j                                         | _         | S r   r  rX  s    r=   rh  zGreedyRepeat.remove_captures(  r  r>   c                 T    | j         | j        k    o| j                                        S r   )r  r  r
  rk  rX  s    r=   rk  zGreedyRepeat.is_atomic,  s$    ~/ODO4M4M4O4OOr>   c                     dS rp  rC   rX  s    r=   rn  zGreedyRepeat.can_be_affix/  rr  r>   c                 4    | j                                         S r   r  rX  s    r=   rq  zGreedyRepeat.contains_group2  r  r>   c                 z    | j                             |          }| j        dk    r|                    d            |S r  )r
  ru  r  r   )r:   r   r   s      r=   ru  zGreedyRepeat.get_firstset5  s8    _))'22>QFF4LLL	r>   c                    | j         | j        g}| j        |                    t                     n|                    | j                   | j                            ||          }|sg S t          |          g|z   t          j	        fgz   S r   )
r  r  r  rZ   r  r
  r   r{   r  r  )r:   r   r_  repeatr
  s        r=   ry  zGreedyRepeat._compile<  s    ,/>!MM)$$$$MM$.)))_,,We<<
 	Iv*,
|;<r>   c                     | j         d}n| j         }t          d                    t          |z  | j        | j        |                     | j                            |dz   |           d S )NINF
{}{} {} {}r-   )r  r  r7   r  r  r  r
  r  r:   r  r   r  s       r=   r  zGreedyRepeat.dumpI  sq    >!EENEl!!&6/4=
.%! ! 	" 	" 	" 	VaZ11111r>   c                 4    | j                                         S r   r  rX  s    r=   r  zGreedyRepeat.is_emptyS  r  r>   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  r
  r  r  r  s     r=   r  zGreedyRepeat.__eq__V  sK    DzzT%[[( dot~
..#.
/. 	r>   c                 `    | j         t          S | j                                        | j         z  S r   )r  r  r
  r  rX  s    r=   r  zGreedyRepeat.max_width[  s+    >!((**T^;;r>   c                 T   | j         t          n| j         }| j        dk    r3| j                                        |z  }t          |t                    d fS | j                            |          \  }}|r||fS | j                                        |z  }t          |t                    d fS r  )r  r  r  r
  r  r  r  )r:   r   r  rt   ofsreqs         r=   r  z GreedyRepeat.get_required_stringa  s    !%!7IIT^	>Q))++i7Aq)$$d**?66w??S 	8OO%%'')31i  $&&r>   N)r?   r@   rA   r  r  r  r  r9   r`  r   rf  rh  rk  rn  rq  ru  ry  r  r  r  r  r  rC   r>   r=   r   r     s       GH# # #< < <F F F
    P P P  0 0 0  = = =2 2 2* * *  
< < <' ' ' ' 'r>   r   c                        e Zd Zd Zd Zd ZdS )r  c                     dS rj  rC   rX  s    r=   rk  zPossessiveRepeat.is_atomico  rl  r>   c                 H   | j                             ||          }|sg S | j        | j        g}| j        |                    t                     n|                    | j                   t          j        ft          |          g|z   t          j
        ft          j
        fgz   S r   )r
  r   r  r  r  rZ   r  r  r  r{   r  )r:   r   r_  r
  r  s        r=   ry  zPossessiveRepeat._compiler  s    _,,We<<
 	I,/>!MM)$$$$MM$.))))f.;z6*?  	r>   c                 ,   t          d                    t          |z                       | j        d}n| j        }t          d                    t          |dz   z  | j        | j        |                     | j                            |dz   |           d S )Nr  r  r  r-   rN   )r  r7   r  r  r  r  r
  r  r  s       r=   r  zPossessiveRepeat.dump  s    j00111>!EENEl!!&FQJ"7
.%! ! 	" 	" 	" 	VaZ11111r>   N)r?   r@   rA   rk  ry  r  rC   r>   r=   r  r  n  sA            
2 
2 
2 
2 
2r>   r  c                   n    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )r  c                 r    t                               |            || _        || _        || _        d | _        d S r   )rU  r9   r   rc  r
  rU  )r:   r   rc  r
  s       r=   r9   zGroup.__init__  s6    4   	
$r>   c                 l    | ||f| j         j        | j        <   | j                            |||           d S r   )r   defined_groupsrc  r
  r`  r^  s       r=   r`  zGroup.fix_groups  s:    04gu/E	 ,""7GU;;;;;r>   c                 n    | j                             ||          }t          | j        | j        |          S r   )r
  r   r  r   rc  r  s       r=   r   zGroup.optimise  s/    _--dG<<
TY
J777r>   c                 D    | j                             |          | _         | S r   r  re  s     r=   rf  zGroup.pack_characters  r  r>   c                 4    | j                                         S r   r  rX  s    r=   rh  zGroup.remove_captures      ..000r>   c                 4    | j                                         S r   r  rX  s    r=   rk  zGroup.is_atomic  r  r>   c                     dS rp  rC   rX  s    r=   rn  zGroup.can_be_affix  rr  r>   c                     dS rj  rC   rX  s    r=   rq  zGroup.contains_group  rl  r>   c                 6    | j                             |          S r   r  rt  s     r=   ru  zGroup.get_firstset  r  r>   c                 4    | j                                         S r   r  rX  s    r=   rw  zGroup.has_simple_start  r  r>   c                    g }| j         x}}|dk     r!| j        j        |         }| j        j        |z
  }| j         ||f}| j        j                            |          }||t          j        |fgz  }|t          j        t          |           ||fgz  }|| j
                            ||          z  }|t          j        fgz  }||t          j        fgz  }|S r  )rc  r   private_groupsr{  	call_refsr   r  re  GROUPr  r
  r   r  )r:   r   r_  r   public_groupprivate_groupr2  rb  s           r=   ry  zGroup._compile  s    '+z1}193MBL I1MAMj'5(i!%%c**?bk3'((D"(CG,,m\JKK''777"&?bfZL Dr>   c                     | j         }|dk     rt          |         }t          d                    t          |z  |                     | j                            |dz   |           d S )Nr   z
{}GROUP {}r-   )rc  r  r  r7   r  r
  r  )r:   r  r   rc  s       r=   r  z
Group.dump  s`    
199"5)El!!&6/599:::VaZ11111r>   c                 z    t          |           t          |          u o| j        | j        f|j        |j        fk    S r   )r  rc  r
  r  s     r=   r  zGroup.__eq__  s=    T

d5kk) *tz4?.K;(
)/* 	+r>   c                 4    | j                                         S r   r  rX  s    r=   r  zGroup.max_width  r  r>   c                 6    | j                             |          S r   r  rt  s     r=   r  zGroup.get_required_string  r  r>   c                     d | _         d S r   r\  rX  s    r=   r]  zGroup.__del__  r^  r>   N)r?   r@   rA   r9   r`  r   rf  rh  rk  rn  rq  ru  rw  ry  r  r  r  r  r]  rC   r>   r=   r  r    s         < < <8 8 8
  1 1 1+ + +    5 5 52 2 2  ,2 2 2+ + ++ + +< < <    r>   r  c                        e Zd Zej        ZdZdS )KeepKEEPN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r    s        gGHHHr>   r  c                        e Zd Zej        ZdZdS )r  LAZY_REPEATN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r    r  r>   r  c                   l    e Zd ZdddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd ZdS )rn  AHEADBEHINDrO  c                     t                               |            t          |          | _        t          |          | _        || _        d S r   )rU  r9   r   ro  r   r
  )r:   ro  r   r
  s       r=   r9   zLookAround.__init__  s;    4   6llX$r>   c                 H    | j                             || j        |           d S r   )r
  r`  ro  r^  s       r=   r`  zLookAround.fix_groups  s$    ""7DK?????r>   c                     | j                             || j                  }| j        r|                                r|S t          | j        | j        |          S r   )r
  r   ro  r   r  rn  r  s       r=   r   zLookAround.optimise  sT    _--dDK@@
= 	Z0022 	$+t}jAAAr>   c                 D    | j                             |          | _         | S r   r  re  s     r=   rf  zLookAround.pack_characters  r  r>   c                 4    | j                                         S r   r  rX  s    r=   rh  zLookAround.remove_captures  r  r>   c                 4    | j                                         S r   r  rX  s    r=   rk  zLookAround.is_atomic   r  r>   c                 4    | j                                         S r   r  rX  s    r=   rn  zLookAround.can_be_affix  r  r>   c                 4    | j                                         S r   r  rX  s    r=   rq  zLookAround.contains_group  r  r>   c                 z    | j         r%| j        |k    r| j                            |          S t	          d g          S r   )r   ro  r
  ru  r   rt  s     r=   ru  zLookAround.get_firstset	  s<    = 	9T[G33?//888D6{{r>   c                     d}| j         r
|t          z  }|r
|t          z  }|r
|t          z  }t          j        |t          | j                   fg| j        	                    | j                  z   t          j
        fgz   S r  )r   r  r  r  r  
LOOKAROUNDr  ro  r
  r   r  r  s       r=   ry  zLookAround._compile  s    = 	![ E 	XE 	 ZE-O(<(<=>
/
!
!$+
.
./356*> 	?r>   c                     t          d                    t          |z  | j        | j                 t
          | j                                      | j                            |dz   | j                   d S )Nz{}LOOK{} {}r-   )	r  r7   r  	_dir_textro  r  r   r
  r  r  s      r=   r  zLookAround.dump  sj    m""6F?
.
%x'>@ @ 	A 	A 	AVaZ55555r>   c                 B    | j         o| j                                        S r   )r   r
  r  rX  s    r=   r  zLookAround.is_empty   s    };!9!9!;!;;r>   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  ro  r   r
  r  s     r=   r  zLookAround.__eq__#  sK    DzzT%[[( Odk4=
/.$|U^U=MN.O 	Or>   c                     dS r  rC   rX  s    r=   r  zLookAround.max_width'  r  r>   N)r?   r@   rA   r&  r9   r`  r   rf  rh  rk  rn  rq  ru  ry  r  r  r  r  rC   r>   r=   rn  rn    s        x00I% % %@ @ @B B B  1 1 1+ + +. . .0 0 0  
? 
? 
?6 6 6
< < <O O O    r>   rn  c                   l    e Zd ZdddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd ZdS )rw  r  r  rO  c                     t                               |            t          |          | _        t          |          | _        || _        || _        || _        d S r   )rU  r9   r   ro  r   r
  r  r  )r:   ro  r   r
  r  r  s         r=   r9   zLookAroundConditional.__init__-  sI    4   6llX$ r>   c                     | j                             |||           | j                            |||           | j                            |||           d S r   )r
  r`  r  r  r^  s       r=   r`  z LookAroundConditional.fix_groups5  sV    ""7GU;;;  '5999%88888r>   c                     | j                             || j                  }| j                            || j                  }| j                            || j                  }t          | j        | j        |||          S r   )r
  r   ro  r  r  rw  r   )r:   r   r   r
  r  r  s         r=   r   zLookAroundConditional.optimise:  sn    _--dDK@@
=))$<<,''dk::$T[$-
G  	r>   c                     | j                             |          | _         | j                            |          | _        | j                            |          | _        | S r   )r
  rf  r  r  re  s     r=   rf  z%LookAroundConditional.pack_charactersB  sL    /99$??55d;;|33D99r>   c                     | j                                         | _         | j                                        | _        | j                                        | _        d S r   )r
  rh  r  r  rX  s    r=   rh  z%LookAroundConditional.remove_capturesH  sE    /99;;5577|3355r>   c                     | j                                         o1| j                                        o| j                                        S r   )r
  rk  r  r  rX  s    r=   rk  zLookAroundConditional.is_atomicM  sC    ))++ #0G0G0I0I #
,
 
 
"
"	$r>   c                     | j                                         o1| j                                        o| j                                        S r   )r
  rn  r  r  rX  s    r=   rn  z"LookAroundConditional.can_be_affixQ  sC    ,,.. *4=3M3M3O3O *l''))	+r>   c                     | j                                         p1| j                                        p| j                                        S r   )r
  rq  r  r  rX  s    r=   rq  z$LookAroundConditional.contains_groupU  sG    ..00 J
-
&
&
(
(J,0L,G,G,I,I	Kr>   c                 V   t           j        t          | j                  t          | j                   fg}|                    | j                            | j        |                     |                    t           j	        f           |                    | j
                            ||                     | j                            ||          }|r5|                    t           j	        f           |                    |           |                    t           j        f           |S r   )r  CONDITIONALr  r   ro  r   r
  r   rZ   r  r  r  r  r  s        r=   ry  zLookAroundConditional._compileY  s    T]!3!3ST[5I5IJKDO++DK??@@@RWK   DM))'599:::<''77 	"KK$$$KK!!!RVJr>   c                 :   t          d                    t          |z  | j        | j                 t
          | j                                      | j                            |dz   | j                   t          d                    t          |z                       | j	                            |dz   |           | j
                                        sJt          d                    t          |z                       | j
                            |dz   |           d S d S )Nz{}CONDITIONAL {} {}r-   z{}EITHERr  )r  r7   r  r&  ro  r  r   r
  r  r  r  r  r  s      r=   r  zLookAroundConditional.dumpg  s   #**6F?
.
%x'>@ @ 	A 	A 	AVaZ555j001116A:w///|$$&& 	3&--00111Lfqj'22222	3 	3r>   c                     | j                                         r| j                                        p| j                                        S r   )r
  r  r  r  rX  s    r=   r  zLookAroundConditional.is_emptyq  sA    ((**Gt}/E/E/G/G "
,


!
!	#r>   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  r
  r  r  r  s     r=   r  zLookAroundConditional.__eq__u  sK    DzzT%[[( Mdot}
,.!,enemL.M 	Mr>   c                 ~    t          | j                                        | j                                                  S r   r  rX  s    r=   r  zLookAroundConditional.max_widthy  r  r>   c                 .    |                                  d fS r   r  rt  s     r=   r  z)LookAroundConditional.get_required_string|  r  r>   N)r?   r@   rA   r&  r9   r`  r   rf  rh  rk  rn  rq  ry  r  r  r  r  r  rC   r>   r=   rw  rw  *  s        x00I  9 9 9
    6 6 6
$ $ $+ + +K K K  3 3 3# # #M M MH H H& & & & &r>   rw  c                       e Zd Zd Zd ZdS )rs  c                     || _         d S r   )r   )r:   r   s     r=   r9   zPrecompiledCode.__init__  r^  r>   c                 ,    t          | j                  gS r   )r{   r   rz  s      r=   ry  zPrecompiledCode._compile  s    di  !!r>   Nrf  rC   r>   r=   rs  rs    s2          " " " " "r>   rs  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdedfdZd ZddZd Zd Zd Zd	 Zd
 Zd ZdS )r4  FTc                    t                               |            || _        t          |          | _        t
          |         | _        t          |          | _        | j        | j        | j        | j        | j        f| _	        d S r   )
rU  r9   r^   r   r   rZ  r   r   rY   rW  ri  s        r=   r9   zProperty.__init__  sf    4   
X1*=i^TZ
/4>+			r>   c                 0    t          | j        |||          S r   )r4  r^   r\  s       r=   r[  zProperty.rebuild  s    
Hj)DDDr>   c                     | S r   rC   rl  s       r=   r   zProperty.optimise  rc  r>   c                 "    t          | g          S r   r  rt  s     r=   ru  zProperty.get_firstset  r  r>   c                     dS rj  rC   rX  s    r=   rw  zProperty.has_simple_start  rl  r>   c                     d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }| j        | j        |f         || j        fgS r  )r   r  r   rr  r  r  r   r^   r  s       r=   ry  zProperty._compile  sa    = 	![ E> 	"\!E 	XEdow67
KLLr>   c           
         t           | j        dz	           }|d         |d         | j        dz           }}t          d                    t          |z  t
          | j                 ||t          | j                                      d S )NrQ   r   r-   i  z{}PROPERTY {} {}:{}{})	PROPERTY_NAMESr^   r  r7   r  r  r   rx  r   )r:   r  r   r   r   r^   s         r=   r  zProperty.dump  s    djB./1gtAwtzF':;e%,,Vf_
4=
!4	$/0JL L 	M 	M 	M 	M 	Mr>   c                 H    t          j        | j        |          | j        k    S r   )r   has_property_valuer^   r   r|  s     r=   r}  zProperty.matches  s    (R88DMIIr>   c                     dS r  rC   rX  s    r=   r  zProperty.max_width  r  r>   Nr  )r?   r@   rA   r   r  PROPERTYr   PROPERTY_IGNr   r8  PROPERTY_REVPROPERTY_IGN_REVr  r9   r[  r   ru  rw  ry  r  r}  r  rC   r>   r=   r4  r4    s"       j%-@o%("+7No~rT8JHd+R_~
? 	"G (,	+ 	+ 	+ 	+E E E       M M MM M MJ J J    r>   r4  c                       e Zd ZdZd ZdS )PrunePRUNEc                     t           j        fgS r   )r  rO  rz  s      r=   ry  zPrune._compile  s    ~r>   Nr  rC   r>   r=   rN  rN    s(        H    r>   rN  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdZdedfdZd ZddZd Zd Zd	 Zd
 ZdS )r  FTRANGEc                     t                               |            || _        || _        t	          |          | _        t          |         | _        t	          |          | _        | j	        | j        | j        | j        | j        | j        f| _
        d S r   )rU  r9   lowerr&  r   r   rZ  r   r   rY   rW  )r:   rT  r&  r   r   r   s         r=   r9   zRange.__init__  sq    4   

X1*=i^TZT]
/4>+			r>   c                 <    t          | j        | j        |||          S r   )r  rT  r&  r\  s       r=   r[  zRange.rebuild  s    TZXz9MMMr>   c                 <   | j         r| j        t          z  r|r| S |j        t          z  r| j        t
          z  t
          k    r| S t          j                    }g }|D ]v}| j        t          |          cxk    r| j
        k    rPn )t          j        t          |          }|                    t          d |D             | j                             w|s| S t          |          | j
        | j        z
  dz   k     r|                    d|            t#          |          S )Nc                 ,    g | ]}t          |          S rC   rq  r  s     r=   r   z"Range.optimise.<locals>.<listcomp>  s    $<$<$<SVV$<$<$<r>   r   r-   r   )r   r   r   r   r   r8  r   r>  rT  r   r&  r   r=  rZ   r  r]   r  r   )r:   r   r   r   r@  r  r   r?  s           r=   r   zRange.optimise  sC   } 	T_z%A 	f 	K g% 	4?^+K
+ +K !688 ! 	/ 	/BzSWW2222
22222)*;R@@V$<$<V$<$<$<!_. . . / / /  	Ku::
TZ/!333LLD!!!e}}r>   c                     d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }| j        | j        |f         || j        | j        fgS r  )	r   r  r   rr  r  r  r   rT  r&  r  s       r=   ry  zRange._compile  sl    = 	![ E> 	"\!E 	XEdow67

*  	r>   c           
      r   t          t          | j                                                d          }t          t          | j                                                d          }t          d                    t          |z  t          | j	                 ||t          | j                                      d S )Nru  z{}RANGE {} {} {}{})rv  r;  rT  rw  r&  r  r7   r  r  r   rx  r   )r:   r  r   display_lowerdisplay_uppers        r=   r  z
Range.dump   s    c$*oo..55d;;c$*oo..55d;;"))&6/
4=
!=-
DO
$& & 	' 	' 	' 	' 	'r>   c                 H    | j         |cxk    o
| j        k    nc | j        k    S r   )rT  r&  r   r|  s     r=   r}  zRange.matches  s/    
b....DJ....4=@@r>   c                     dS r  rC   rX  s    r=   r  zRange.max_width
  r  r>   Nr  )r?   r@   rA   r   r  rR  r   	RANGE_IGNr   r8  	RANGE_REVRANGE_IGN_REVr  r  r9   r[  r   ry  r  r}  r  rC   r>   r=   r  r    s        :u*=r|NE#:BLtnblZ$68H~t&<b>NPG H.2v
+ 
+ 
+ 
+N N N   >	 	 	' ' 'A A A    r>   r  c                       e Zd Zedfej        edfej        edfej        e	dfej
        edfej        edfej        edfej        e	dfej        iZefdZd Zd Zd Zd Zd Zd	 Zd
S )r   FTc                     t                               |            || _        || _        || _        t
          |         | _        | j        | j        | j        f| _        d S r   )	rU  r9   r   rc  r   rZ  r   rY   rW  )r:   r   rc  r   r   s        r=   r9   zRefGroup.__init__  sO    4   	
 1*=NDJ?			r>   c                 z   	 t          | j                  | _        nR# t          $ rE 	 | j        j        | j                 | _        n$# t
          $ r t          d|| j                  w xY wY nw xY wd| j        cxk    r| j        j        k    sn t          d|| j                  | j	        | j        | j
        f| _        d S )NrI  r-   rH  )r  rc  r2  r   rK  r   r&   r   r{  rY   r   rW  r^  s       r=   r`  zRefGroup.fix_groups  s    	ETZDJJ 	E 	E 	EE!Y24:>

 E E EOWdmDDDE 
	E DJ7777$)"7777717DMJJJNDJ?			rN  c                 8    t          dt          | j                  rP  rQ  rX  s    r=   rh  zRefGroup.remove_captures+  rR  r>   c                 X    d}|r
|t           z  }| j        | j        |f         || j        fgS r  )r  r  r   rc  r  s       r=   ry  zRefGroup._compile.  s9     	XEdow67
KLLr>   c                     t          d                    t          |z  | j        t          | j                                      d S )Nz{}REF_GROUP {}{})r  r7   r  rc  rx  r   r  s      r=   r  zRefGroup.dump4  sE     ''
DO
$& & 	' 	' 	' 	' 	'r>   c                     t           S r   r  rX  s    r=   r  zRefGroup.max_width8  rZ  r>   c                     d | _         d S r   r\  rX  s    r=   r]  zRefGroup.__del__;  r^  r>   N)r?   r@   rA   r   r  	REF_GROUPr   REF_GROUP_IGNr   r8  REF_GROUP_FLDREF_GROUP_REVREF_GROUP_IGN_REVREF_GROUP_FLD_REVr  r9   r`  rh  ry  r  r  r]  rC   r>   r=   r   r     s       z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G :@ @ @ @ @@ @ @K K KM M M' ' '      r>   r   c                        e Zd Zej        ZdZdS )r  SEARCH_ANCHORN)r?   r@   rA   r  rp  r  r  rC   r>   r=   r  r  >  r  r>   r  c                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zed             Zed             Zed             Zd Zd Zd Zd ZdS )r   Nc                 P    t                               |            |g }|| _        d S r   )rU  r9   r  )r:   r  s     r=   r9   zSequence.__init__C  s+    4   =E


r>   c                 H    | j         D ]}|                    |||           d S r   )r  r`  )r:   r1   r   r_  rr   s        r=   r`  zSequence.fix_groupsJ  s6     	2 	2ALL'51111	2 	2r>   c                     g }| j         D ]]}|                    ||          }t          |t                    r|                    |j                    H|                    |           ^t          |          S r   )r  r   r.   r   r   rZ   rS  )r:   r   r   r  rr   s        r=   r   zSequence.optimiseN  ss     	  	 A

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

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

4
66A!Z((  QZ  QW%%%%Qu::??8&&$/ ' ( ((0w(G(GH 5\\
((v666r>   c                 b    d}| j         D ]}||                    |          k    }|| j        k    S rp  r  )r:   r   ra   ro   s       r=   r}  zSetSymDiff.matches  s;     	# 	#AQYYr]]"AADM!!r>   Nr  )r?   r@   rA   r   r  r  r   SET_SYM_DIFF_IGNr   r8  SET_SYM_DIFF_REVSET_SYM_DIFF_IGN_REVr  r  r   r}  rC   r>   r=   r  r    s        *e1DHe,bo@!FD>23F4"1Hd3CND123J	LG
 H7 7 7 7$" " " " "r>   r  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdZddZd Zd ZdS )	r   FT	SET_UNIONc                    g }| j         D ]f}|                    ||d          }t          |t                    r"|j        r|                    |j                    Q|                    |           gt          |          dk    rM|d         }|                    |j        | j        k    | j	        | j
                                      |||          S t          |          | _         |                     ||          S )NTr   r-   r   )r   r   r   )r  r   r.   r   r   r   rZ   r]   r   r   r   r{   r  )r:   r   r   r   r  ra   ro   s          r=   r   zSetUnion.optimise  s     	  	 A

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