
    1yi\              	      x   d Z ddlmZ ddlZddlZddlZddlm	Z
 ddlZddlmZ ddlmZmZmZmZmZmZ ej,                  dk\  rddlmZ nddlZd	Z ed
      Z ed      Z ed      Z ed      Ze ed      z  Z e ez  Z! ed      Z" ed      Z# ed      Z$e!ez  e$z  Z% ed      Z& ed      Z' ed      Z( ed      Z) ed      Z*dZ+dZ,ddddddddd Z-d!Z. G d" d#e/      Z0 G d$ d%e/      Z1 G d& d'ee         Z2 G d( d)ee         Z3 G d* d+e
jh                  ee         Z5d, Z6 ejn                  e5e6       y)-zd
Backrefs Re parser.

Licensed under MIT
Copyright (c) 2011 - 2020 Isaac Muse <isaacmuse@gmail.com>
    )annotationsN   )util)uniprops)GenericAnyStrMatchAnyPatterncast)      )ReplaceTemplate)4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)
0123456789)rD   rE   rF   rG   rH   rI   rJ   rK   )r   r   r   r   r   r   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   )_)r   r   r   r   r!   r#   r%   ){}) -rN   )r   r   r5   r   r"   r$   r'   )r   r   r"   r'   ):)){   }   )alphalowerupperpunctdigitxdigitalnumspaceblankcntrlgraphprintword   	
\)z\az\bz\fz\rz\tz\nz\v\\)r   r!   r"   c                      e Zd ZdZy)LoopExceptionzLoop exception.N__name__
__module____qualname____doc__     U/var/www/html/content_weaver/venv/lib/python3.12/site-packages/backrefs/_bre_parse.pyro   ro   H   s    rv   ro   c                      e Zd ZdZy)GlobalRetryExceptionzGlobal retry exception.Nrp   ru   rv   rw   ry   ry   L   s    !rv   ry   c                  :   e Zd ZU dZdZdZdZdZdZe	j                  rdndZd	Zd
ed<   d
ed<   ded<   ded<   d
ed<   d
ed<   ded<   d&d'dZd(dZd)dZd*d+dZd*d,dZd-dZd*d.dZd/dZd0dZd)dZd)dZd)d Zd*d1d!Z	 	 d2	 	 	 	 	 	 	 	 	 d3d"Zd4d#Zd5d$Zd6d%Zy)7_SearchParserzSearch Template.)r   r,   r   r.   r   r   r5   r   r6   r7   r   r9   r:   r;   rA   z\x1bz\b(?=\w)z	\b(?<=\w)z+(?:\r\n|(?!\r\n)[\n\v\f\r\x85\u2028\u2029])z(?>\r\n|[\n\v\f\r\x85])z(?:\r\n|(?!\r\n)[\n\v\f\r\x85])z(?:{}{}*(?!{}))boolverboseunicodezdict[str, bool]global_flag_swaptemp_global_flag_swapasciiis_bytesr   searchNc                    t        |t              rd| _        nd| _        | j                  r| j                  | _        n| j
                  | _        || _        || _        || _        y)Initialize.TFN)	
isinstancebytesr   _bytes_line_break_re_line_break_line_breakr   
re_verbose
re_unicode)selfr   r   r   s       rw   __init__z_SearchParser.__init__c   sT     fe$ DM!DM=="&"8"8D"&"2"2D$$rv   c                v   d}d}g }g }t        j                  |      }|D ]  }|s|dk(  rd}|rvd}|dk(  r;|s|j                  t        j                  dj                  |                   g }d}Q|dk(  r|sd}[|r|j                  d|g       q|j                  d|g       |r|j                  |       |j                  |        |r|r|j                  d       n|r|j                  d       |r3|j                  t        j                  dj                  |                   dj                  |      S )zProcess quotes.Frl   Tr.    r:   )_util
StringIterappend_reescapejoinextend)r   textescaped	in_quotescurrentquotedr   r#   s           rw   process_quotesz_SearchParser.process_quotess   s    	T" 	"AqDy8 szz"''&/'BC!#$)	#Xi $IMM4),NND!9-a q!'	"* MM$NN4 NN3::bggfo67wwwrv   c                H   g }d}	 |dk7  rr|s|dk(  rd}|j                  |       nF|r3d}|| j                  v r|j                  d       |j                  |       n|j                  |       t        |      }|dk7  rr|dk(  r|j                  |       |S # t        $ r Y #w xY w)zHandle verbose comments.Frj   rl   T)r   	_new_refsnextStopIteration)r   r#   r   r   r   s        rw   verbose_commentz_SearchParser.verbose_comment   s     	t)19"GNN1%#GDNN*t,NN1%NN1%G t) 9NN1  		s   A6B 	B! B!c                   |j                  d      }|d   }t        |      dkD  r|d   nd}d}d|v sd|v r'| j                  rd| _        |sHd| j                  d	<   d}n6d
|v r2| j                  s&| j                  sd| _        |sd| j                  d	<   d}d|v r| j
                  rd| _        n*d|v r&| j
                  sd| _        |sd| j                  d<   d}|rt        d      y)zAnalyze flags.rR   r   r   r   Fr   r5   Tr~   r$   r'   r}   zGlobal RetryN)splitlenr~   r   r   r}   ry   )r   r   scopedflagsenabledisableglobal_retrys          rw   r   z_SearchParser.flags   s     

3q!%j1n%("6MSF] DL8<**95#F]4<<DL8<**95#'>dll DLF]4<<DL8<**95#&~66 rv   c                n   |j                   }g }g }	 t        |      }|j                         t        v r|j	                  |       nm|s|dk7  s|r!|dk7  rt        d|j                   dz
   d      t        |      }|dk(  r|j	                  |       t        |      }|dvrM|t        vrt        d|j                   dz
   d      |t        vr|j	                  |       t        |      }|dvrM|d	v rd
}|r|dk(  }t        |      }|r|dk(  rd}d}	nt        |      }d}	|s||	k7  rN|t        vrt        d|j                   dz
   d      |t        vr|j	                  |       t        |      }||	k7  rN|r1|dk(  r,t        |      }|dk7  rt        d|j                   dz
   d      |st        d      dj                  |      j                         }dj                  |      j                         }|r|t        v rd|z   }||fS # t        $ r'}
|rt        d| d      |
t        d| d      |
d}
~
ww xY w)zGet Unicode property.rO   rS   z Unicode property missing '{' at r   !^)rS   =rP   z&Invalid Unicode property character at )rS   r   F]TrP   zInvalid Unicode property!zMissing or unmatched ':]' at zMissing or unmatched '{' at Nr   posix)indexr   rY   _ASCII_LETTERSr   SyntaxError	_PROPERTY_PROPERTY_STRIPr   r   rX   _COMPATIBILITY_PROPERTIES)r   r   bracketsr   propvaluer   skipis_colonendr   r   r%   s                rw   get_unicode_propertyz"_SearchParser.get_unicode_property   sp    3	SQAwwyN*A18a3h!$EaggPQk]RS"TUUG8KKNQA.	)),RSTSZSZ]^S^R__`*abb/AQA . 
? D#$8 G#S#'D! G!  3h 	1&14Z[\[b[bef[fZggh2i&j j 7 %Q $QA  3h $S $QA Cx&14Z[\[b[bef[fZggh2i&j j$"-.I"JJ GGDM!GGEN  " 66!A!t  	S!$A%"JKQRR!$A%"JKQRR		Ss&   CH -BH 3A H 	H4"H//H4c                <   |j                   }g }	 t        |      dk7  rt        d|j                   dz
   d      t        |      }|dk7  r"|j                  |       t        |      }|dk7  r"dj                  |      S # t        $ r}t        d| d      |d}~ww xY w)	zGet Unicode name.rO   zNamed Unicode missing '{' r   r   rP   Unmatched '{' at Nr   )r   r   
ValueErrorr   	Exceptionr   r   r   r   r   r   r   r   s         rw   get_named_unicodez_SearchParser.get_named_unicode  s     	DAw#~ #>qww{m1!MNNQAs(QG s( wwu~  	D 25';<!C	D   AA= =	BBBc                z   g }|s"|dk(  r|j                  | j                         |S |s"|dk(  r|j                  | j                         |S |s"|dk(  r|j                  | j                         |S |sa|dk(  r\| j	                  ddd      d	   }| j	                  ddd      d	   }|j                  | j                  j                  |||             |S |d
k(  r2t        j                  d       |j                  | j                         |S |dk(  rCt        j                  d       |j                  | j	                  dd|             |rd| _        |S |dk(  rE| j                  |      }|j                  | j	                  |d	   |d   |             |rd| _        |S |dk(  rF| j                  |      }|j                  | j	                  |d	   |d   |d             |rd| _        |S |dk(  r=| j                  |      }|j                  | j                  ||             |rd| _        |S |j                  d|g       |S )Handle references.r   r6   r;   rA   z^mNFin_groupr   r   z=The \e reference has been deprecated, please use \x1b insteadr   zHThe \h reference has been deprecated, please use \p{Horiz_Space} insteadr_   Tr   r   r9   )r   negater7   rl   )r   _re_start_wb
_re_end_wbr   unicode_propsr   _grapheme_clusterformatr   warn_deprecated
_re_escapefound_propertyr   r   unicode_namefound_named_unicode)	r   r#   r   r   r   no_markmarkr   r   s	            rw   	referencez_SearchParser.reference'  sV    AHNN4,,-D C a3hNN4??+@ ? a3hNN4../< ; a3h((te(DQGG%%c4%%@CDNN41188$MN4 3 #X!!"bcNN4??+. - #X!!"mnNN4--gth-OP&*#$ # #X,,Q/DNN4--d1gtAw-RS&*#  #X,,Q/DNN4--d1gtAwZ^-_`&*#  #X))!,DNN4,,T8<=+/(  NND!9%rv   c                   |j                   }dg}d}	 t        |      }|dk7  r|j                  d       y|j                  |       t        |      }|dk7  r|j                  d       y|j                  |       t        |      }|dk7  s|d	u r3|rd}n|d
k(  rd	}|j                  |       t        |      }|dk7  r.|d	u r3|j                  |       dj                  |      S # t        $ r}t        d|dz
   d      |d}~ww xY w)zGet comments.(F?r   N#rd   rT   Trl   zUnmatched '(' at r   r   )r   r   rewindr   r   r   r   )r   r   r   r   r   r   r   s          rw   get_commentsz_SearchParser.get_commentsQ  s
    	GQACxLLOQACxLLOQAs(go#G$Y"GQG s(go LLO wwu~  	G 1%!)A>?QF	Gs/   !C" 2C" (AC" ;C"  C" "	D+C>>Dc                H   |j                   }dg}d}d}	 t        |      }|dk7  r|j                  d       y|j                  |       t        |      }|t        vrW|r|t
        vr(t        d      |dk(  rd}d}n|t        vrt        d	      |j                  |       t        |      }|t        vrW|r|d
k7  rt        d	      |d
k(  rd}|j                  |       |rdj                  |      |fS d|fS # t        $ r# |j                  |j                   |z
         g }Y Dw xY w)a  
        Get flags.

        In Re, flags are quite predictable when global or scoped.
        Global can never be disabled with minus, and never have a `:` after them.
        The global flag set is also very specific, but can be used as enablers in scoped.

        The returned scoped status will indicate whether flags are generally considered
        scoped flags or global flags.
        r   Fr   r   NFz	Bad scoperR   TzBad flagrS   r   N)
r   r   r   r   _SCOPED_END_SCOPED_FLAGSr   _GLOBAL_FLAGSr   r   )r   r   r   r   togglesmells_scopedr   s          rw   	get_flagsz_SearchParser.get_flagsp  s-    	QACx"LLOQA;&-(55#X$(M!Fm+$Z00QG ;& c ,,c $LLO
 "'rwwu~-??D-??	  	HHQWWu_%E	s   !C5 A:C5 2*C5 5)D! D!c                   g }| j                  |      }|r|gS | j                  }| j                  }| j                  |      \  }}|r|}| j	                  |dd |       |s|gS g }	 |dk7  rF|s|j                  |       n!|j                  | j                  ||             t        |      }|dk7  rF|| _        || _        |dk(  r|j                  |       |S # t        $ r Y 1w xY w)zHandle parenthesis.rd   )r   rT   )
r   r}   r~   r   r   r   r   normalr   r   )	r   r#   r   r   commentsr}   unicode_flagr   r   s	            rw   subgroupz_SearchParser.subgroup  s      $$Q':,,|| q)vAJJuQr{6J2w		s(NN1%NN4;;q!#45G s( #8NN1  		s   'A
C 	C$#C$c                   g }|j                   dz
  }d}d}d}d}d| _        d| _        	 	 | j                  rA|dk(  r<|j                  t	        j
                  |             |dz  }t        |      }d| _        Nd| _        |s	|dk(  rd}ns|rhd}t        |      dz
  }	|j                  | j                  ||d             | j                  r2|	dk\  r ||	   dk(  rt	        j
                  d      ||	<   d}n	|dk(  r|sd}|}|j                  |       n|dk(  r|j                   }
	 | j                  |d      }|]| j                  |d   |d   d	      }|d
   dk(  rt	        j
                  d      |d
<   |j                  |       d}|j                   dz
  }ni|j                  |       nW|dk(  r|r||dz   k(  r|}|j                  |       n4|dk(  r|r||dz   k7  rd}|j                  |       n#|j                  |       |dz  }t        |      }	 |r|j                  |       |s| j                  rdj                  |      }|dk(  r3d| j                   rt"        j$                  nt"        j&                   dg}|S |dk(  r3d| j                   rt"        j$                  nt"        j&                   dg}|S |g}|S # t        $ r$ d}|j                  |j                   |
z
         Y w xY w# t        $ r Y w xY w)zHandle character groups.r   Fr   TrR   rl   [Nr   r   rd   r   r   r   z[][^z[^])r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	_unipropsASCII_RANGEUNICODE_RANGE)r   r#   r   r   posfoundr   firstr   idxr   r   r   temps                 rw   char_groupsz_SearchParser.char_groups  s	    ggk##( 7	&&18NN3::a=11HCQA*/D'*/D'19"G#Gg,*CNN4>>!Q#=>**!8(;+.::c?GCL)-#Xe EENN1%#XGGE2#88DA ' $ 2 247DGd 2 S"2;#-*-**S/GBKu-)-ggkq)#X%SEAI-=ENN1%#X%SEAI-=!ENN1%NN1%qGi `  NN1 T55777#Dt|  	 5 5ILcLcddefg  y449KbKbccdef   &Y % 2#512.  		s7   C8K& "J6 4CK& 6)K#K& "K##K& &	K21K2c                   g }|dk(  r/	 t        |      }|j                  | j                  ||             |S |dk(  r#|j                  | j                  ||             |S | j                  r(|dk(  r#|j                  | j                  ||             |S |dk(  r#|j                  | j                  ||             |S |j	                  |       |S # t        $ r |j	                  |       Y |S w xY w)zHandle normal chars.rl   r   r   r   )	r   r   r   r   r   r   r}   r   r   )r   r#   r   r   s       rw   r   z_SearchParser.normal  s     9"Gt~~a34  #XNN4==A./  \\a3hNN4//156
 	 #XNN4++Aq12  NN1 ! "q! "s   ,C C,+C,c                    t        t        j                  |            }| j                  r;|dkD  r6|s1d| j                  rt        j
                  nt        j                   dgS dgS |dk  rd|dgS t        |      gS )z!Insert Unicode value by its name.   r   r   r   rl   03o)ord_unicodedatalookupr   r   r   r   chr)r   namer   r   s       rw   r   z_SearchParser.unicode_name4  s|     L''-.==UT\dmmY22I`I`aabcddt$)TM"U3K BBs5zBBrv   c                   |j                  d      r|r|dd }n|rd|z   }|s|d}| j                  rt        j                  }n-| j                  st        j
                  }nt        j                  }t        j                  |||      }|s7|s/d| j                  rt        j                  nt        j                   }d| d}|g}|S )z
        Insert Unicode properties.

        Unicode properties are very forgiving.
        Case doesn't matter and `[ -_]` will be stripped out.
        r   r   Nr   r   )

startswithr   r   
MODE_ASCIIr~   MODE_NORMALMODE_UNICODEr   r   r   )r   props
prop_valuer   r   moder%   
propertiess           rw   r   z_SearchParser.unicode_props?  s     C ab	%KEj4J==''D((D))D**5*dC	--ID[D[\]A3aAS
rv   c                    g }	 	 t        |      }|j                  | j                  ||             -# t        $ r Y |S w xY w)zThe main group: group 0.)r   r   r   r   )r   r   r   r#   s       rw   
main_groupz_SearchParser.main_groupe  sO     	Gt{{1a01   		s   .2 	??c                   t        | j                        | _        t        | j                        | _        ddd| _        ddd| _        | j                  duxr | j                   | _        | j                  s| j                  sd| _        g }t        j                  | j                  |            }d}|rd}	 | j                  |      }|rd	j!                  |      S # t        $ r}| j                  d   r*| j
                  d   rt        d      |d| j
                  d<   | j                  d   r*| j
                  d   rt        d      |d| j
                  d<   ddd| _        |j                  |j                         d}Y d}~d}~ww xY w)
zBegin parsing.F)r~   r}   NTr~   zGlobal unicode flag recursion.r}   zGlobal verbose flag recursion.r   )r|   r   r}   r   r~   r   r   r   r   r   r   r
  ry   ro   r   r   r   )r   r   new_patternr   retryr   s         rw   _parsez_SearchParser._parseq  s    DOO,DOO,!

 &
" __D0H5H
||DJJDLT0089E"ooa0 . ww{##' (  --i8,,Y7+,LMSTT;?--i8--i8,,Y7+,LMSTT;?--i8$$.* !%s   7C 	F%BFFc                    t        | j                  t              r9| j                  | j                  j	                  d            j                  d      S | j                  | j                        S )zApply search template.latin-1)r   r   r   r  decodeencoder   s    rw   parsez_SearchParser.parse  sN     dkk5);;t{{11)<=DDYOO;;t{{++rv   )FN)r   r   r   r|   r   zbool | NonereturnNone)r   strr  r  )r#   r  r   _util.StringIterr  	list[str]F)r   r  r   r|   r  r  )r   r  r   r|   r  ztuple[str, str]r   r  r  r  )r#   r  r   r  r   r|   r  r  )r   r  r  
str | None)r   r  r  ztuple[str | None, bool])r   r  r   r|   r  r  )FF)
r  r  r  r  r   r|   r   r|   r  r  )r   r  r  r  )r   r  r  r  r  r   )rq   rr   rs   rt   r   r   r   r   r   r   PY311r   r   __annotations__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  ru   rv   rw   r{   r{   P   s    [IJLJ@K6;kk2Gi*MM%%**KNN% & P478CJ"(T>+@Z'RWr*	C $$ $ 	$
 $ 
$L
,$\,rv   r{   c                     e Zd ZdZdd dZd!dZd"dZd#dZd$dZd%dZ	d&dZ
d'd	Zd&d
Zd&dZdd(dZd&dZd'dZd)dZd*dZd&dZd)dZd#dZd+dZd,dZd-dZd.dZd-dZd/dZd0dZ	 	 d1	 	 	 	 	 	 	 d2dZd3dZd4dZy)5_ReplaceParserzPre-replace template.c                "   || _         || _        || _        || _        d| _        g | _        g | _        g | _        g | _        g | _	        g | _
        g | _        d| _        d| _        d| _        d| _        t!        | j                  t"              | _        y)r   Fr   N)pattern	_original	_template
use_format	end_foundgroup_slotsliteral_slotsresult
span_stacksingle_stackliteralsgroupsslotmanualauto
auto_indexr   r   r   )r   r#  templater&  s       rw   r   z_ReplaceParser.__init__  s     !!$		"4>>59rv   c                    d}|d   dk(  r|dd n|dd }|dd dk(  r|d	   }|d
k(  rd}n|dk(  rd}n|dk(  rd}	 t        ||      }|S # t        $ r |}Y |S w xY w)zParse format index.
   r   rR   r   r   Nrd   rD   r   r   r      r'      )intr   )r   r   baseprefixcharr   s         rw   parse_format_indexz!_ReplaceParser.parse_format_index  s     "1gna$r(!A;#":Ds{	dD/C 
  	C
	s   A AAc           
     
   |j                   }d}g }	 |dk(  rD|j                  t        j                  df       |j                  t        j                  df       ng }|t
        v rV|j                  |       | j                  |      }|t        v r|j                  |       | j                  |      }|t        v r+n]|t        v rU|j                  |       | j                  |      }|t        v r+|j                  |       | j                  |      }|t        v r+dj                  |      j                         }	 t        j                  t        t        |d            fg}|dk7  r!|j                  t        j                  df       |dv r$|dk(  rg }|j                   dz
  }| j                  |      }	 |d	k7  r(|j                  |       | j                  |      }|d	k7  r(| j!                  dj                  |            }
|j                  t        j                  |
f       | j                  |      }nvg }| j                  |      }|t        v r+|j                  |       | j                  |      }|t        v r+|j                  t        j"                  dj                  |      f       |dv r$|dk(  rg| j                  |      }|t$        vrt        d|j                   dz
   d      |j                  t        j&                  |f       | j                  |      }|dk(  rd}g }d}d}| j                  |      }|dv r-|}| j                  |      }|dv r|}|}| j                  |      }n|t        v r?|}| j                  |      }|dv r|}| j                  |      }nj|j                  |       d}nV|}| j                  |      }|dk(  r	|dk(  r|}d}|3|dvrt        d|j                   dz
   d      |}| j                  |      }|t        v r+|j                  |       | j                  |      }|t        v r+|st)        |      r|d   dk(  rt        d      |r|st)        |      r
|d   dk(  rd}|dk(  r|}| j                  |      }|sd}|j                  t        j*                  | j,                  r|j/                  d      n|||rt        dj                  |            nd|ff       |dk7  rt        d|dz
         	 ||fS # t        $ r t        j                  |fg}Y w xY w# t        $ r}	t        d
|dz
         |	d}	~	ww xY w# t        $ r}	t        d|dz
   d      |	d}	~	ww xY w)zGet format group.r   rP   r   r5  r   N)r   .r   r   zUnmatched '[' at r   zInvalid conversion type at rS   )<>r   r"   zInvalid format spec char at r   rD   z'=' alignment is not supported!rQ   r  r   )r   r   r   	FMT_FIELD	FMT_INDEX_LETTERS_UNDERSCOREformat_next_WORD_DIGITr   stripr  r8  r   r   r   r<  FMT_ATTR_FMT_CONV_TYPEFMT_CONVr   FMT_SPECr   r  )r   r   r   r   fieldr   r   findexsindexr   r   fillwidthalignconverts                  rw   
get_formatz_ReplaceParser.get_format  sm    E	HCxeoor23eoor23 ++KKN((+Au*A ,,Q/ u* &[KKN((+Av+A ,,Q/ v+
 ++-#oos3ub>/BCDE
 8LL%//4!89 :oCx!#!"1 ,,Q/W"#s( &a 0$($4$4Q$7 #$s(
 #55bggfoFeoos%;< ,,Q/!# ,,Q/5j"MM!, $ 0 0 3A  5j ennbggfo%FG) :o. 8((+A.),GRS}TU*VWWLL%..!!45((+A 8DE E"G((+AO+ ! ,,Q//#(D$%E $ 0 0 3Af  ,,Q//$%E $ 0 0 3A!LL.#'D  ,,Q/3;18&*G#'D+ 7&14PQRQXQX[\Q\P]]^2_&` `$%E $ 0 0 3Av+Q ,,Q/ v+ !SZE!HO()JKKTc%jU1X_"Cx"# ,,Q/"LL!NN:>--I 6T %8=RWWU^!41 '	
 Cx!$6uqyk"BCC 
 e|[ " #oou56E"  - W"-0A&1*.N"OUVVWr  	H 2519+Q?@aG	Hs   B'U :AU U 8&T AU 1,T* BU 74U -FU 9C	U T'#U &T''U *	U
3UU

U 	U.U))U.c                   |dk(  rj| j                  |      }|dk(  r,| j                          | j                  j                  |       y| j	                  ||      \  }}| j                  ||       y| j                  |      }|dk(  r,| j                          | j                  j                  |       yt        d|j                  dz
   d      )zHandle format.rO   rP   Unmatched '}' at rd   r   N)rD  get_single_stackr*  r   rS  handle_format_groupr   r   )r   r#   r   rL  r   s        rw   handle_formatz_ReplaceParser.handle_formatc  s     8  #ACx%%'""1%"ooa3t((5  #ACx%%'""1%!$6qww{m1"EFFrv   c                   |j                   }g }d}	 |dk(  r3t        d      D ]%  }|dk7  r n|j                  |       t        |      }' t	        |      }|dk  r9t        d|z
        D ](  }|t
        vr n|j                  |       t        |      }* |j                  d       t	        |      }| j                  r|s,|r|dk  s%|dk7  r |j                  |j                   |z
         g }|rdj                  |      S dS # t        $ r Y ew xY w)z
Get octal.r   rD   r   r   r   N)
r   ranger   r   r   _OCTALr   r   r&  r   )r   r   r   r   r   
zero_countrN   octal_counts           rw   	get_octalz_ReplaceParser.get_octalv  s    
	Cxq  ACxLLOQA	 
 UJA~q:~.  ALLOQA	 
 HHQK %jK*WX^imn^nHHQWWu_%E!&rwwu~0D0  		s   BC> >	D
	D
c                l   t        |d      }|dkD  r| j                  rt        d      | j                         }| j                  rQ| j                  t        |      | j                  d         }|t        | j                  ||            n
t        |      }n&|r$t        | j                  t        |      |            }| j                  r$|t        v r| j                  t        |      |       y|dk  r | j                  j                  d|d       y| j                  j                  t        |             y)zParse octal value.r6  r   ,octal escape value outside of range 0-0o377!r   Nrl   r   )r8  r   r   rV  r+  convert_caser   r   r&  _CURLY_BRACKETS_ORDrX  r*  r   )r   r   r   r   singles        rw   parse_octalz_ReplaceParser.parse_octal  s     D!4<DMMKLL**,F((UT__R5HI@F@RD--dF;<X[\`XaD--c%j&AB5,?#?""3u:q1$""Rc{#34""3u:.rv   c                <   |j                   }g }	 t        |      dk7  rt        d|j                   dz
   d      t        |      }|dk7  r"|j                  |       t        |      }|dk7  r"dj                  |      S # t        $ r}t        d| d      |d}~ww xY w)	zGet named Unicode.rO   zNamed Unicode missing '{' at r   r   rP   rU  Nr   )r   r   r   r   r   r   r   s         rw   r   z _ReplaceParser.get_named_unicode  s     	DAw#~!$B177Q;-q"QRRQAs(QG s( wwu~  	D 25';<!C	Dr   c                v   t        t        j                  | j                  |                  }| j	                         }| j
                  rQ| j                  t        |      | j
                  d         }|t        | j                  ||            n
t        |      }n&|r$t        | j                  t        |      |            }| j                  r$|t        v r| j                  t        |      |       y|dk  r | j                  j                  d|d       y| j                  j                  t        |             y)zParse named Unicode.r   Nr   rl   r   )r   r   r   r   rV  r+  ra  r   r&  rb  rX  r*  r   r   r   r   rc  r   s        rw   parse_named_unicodez"_ReplaceParser.parse_named_unicode  s     L''(>(>q(ABC&&(??$$SZ1DED<B<NC))$78TWX\T]E))#e*f=>E??u(;;s5z1-d]KKE#;/0KKs5z*rv   c                   g }t        d      D ]?  }t        |      }|dk(  r|j                  |       %t        d|j                  dz
   d       t        |      }|dv r|j                  |       nt        d|j                  dz
   d      t        d      D ]P  }t        |      }|j                         t        v r|j                  |       6t        d|j                  dz
   d       dj                  |      S )	Get narrow Unicode.r   rD   z"Invalid wide Unicode character at r   r   )rD   rE      r   )rZ  r   r   r   r   rX   _HEXr   r   r   r   rN   r   s        rw   get_wide_unicodez_ReplaceParser.get_wide_unicode  s     q 	WAQACxQ!$FqwwQR{mST"UVV	W G
?LLO B177Q;-qQRRq 	WAQAwwyD Q!$FqwwQR{mST"UVV	W wwu~rv   c                    g }t        d      D ]P  }t        |      }|j                         t        v r|j	                  |       6t        d|j                  dz
   d       dj                  |      S )rj  rk  zInvalid Unicode character at r   r   r   rZ  r   rX   rl  r   r   r   r   rm  s        rw   get_narrow_unicodez!_ReplaceParser.get_narrow_unicode  sm     q 	RAQAwwyD Q!$A!''A+a"PQQ	R wwu~rv   c                |   |r| j                  |      n| j                  |      }t        |d      }| j                         }| j                  rQ| j                  t        |      | j                  d         }|t        | j                  ||            n
t        |      }n&|r$t        | j                  t        |      |            }| j                  r$|t        v r| j                  t        |      |       y|dk  r | j                  j                  d|d       y| j                  j                  t        |             y)zParse Unicode.r7  r   Nr   rl   r   )rn  rq  r8  rV  r+  ra  r   r   r&  rb  rX  r*  r   )r   r   wider   r   rc  s         rw   parse_unicodez_ReplaceParser.parse_unicode  s     ,0t$$Q'T5L5LQ5OD"&&(??$$SZ1DED<B<NC))$78TWX\T]E))#e*f=>E??u(;;s5z1-d]KKE#;/0KKs5z*rv   c                    g }t        d      D ]P  }t        |      }|j                         t        v r|j	                  |       6t        d|j                  dz
   d       dj                  |      S )z	Get byte.rd   zInvalid byte character at r   r   r   rp  )r   r   r   _xr   s        rw   get_bytez_ReplaceParser.get_byte  sm     ( 	OBQAwwyD Q!$>qww{m1"MNN	O wwu~rv   c                   t        | j                  |      d      }| j                         }| j                  rQ| j	                  t        |      | j                  d         }|t        | j	                  ||            n
t        |      }n&|r$t        | j	                  t        |      |            }| j                  r$|t        v r| j                  t        |      |       y| j                  j                  d|d       y)zParse byte.r7  r   Nrl   r   )r8  rw  rV  r+  ra  r   r   r&  rb  rX  r*  r   rg  s        rw   parse_bytesz_ReplaceParser.parse_bytes  s     DMM!$b)&&(??$$SZ1DED<B<NC))$78TWX\T]E))#e*f=>E??u(;;s5z1-KKE#;/0rv   c                   |j                   }|g}	 t        |      }|dk7  rt        d|j                   dz
   d      |j                  |       t        |      }|t        v r]|j                  |       t        |      }|dk7  r*|t        v r|j                  |       t        |      }|dk7  r*|j                  |       n|t
        v r]|j                  |       t        |      }|dk7  r*|t        v r|j                  |       t        |      }|dk7  r*|j                  |       nt        d|j                   dz
   d      d	j                  |      S # t        $ r}t        d| d      |d}~ww xY w)
Get group number.r?  zGroup missing '<' at r   r   r@  zInvalid group character at zUnmatched '<' at Nr   )	r   r   r   r   rF  rC  rE  r   r   )r   r#   r   r   r   r   r   s          rw   get_named_groupz_ReplaceParser.get_named_group  s[    	CQACx!$9!''A+a"HIILLOQAF{QG3hF{QQA 3h Q))QG3hEzQQA 3h Q!$?!}A"NOO wwu~  	C 1%:;B	Cs%   BE ,A$E .E 	E.E))E.c                    g }	 |t         v rL|dk7  rG|j                  |       t        |      }|t         v r|j                  |       n|j                  d       |rdj                  |      S dS # t        $ r Y  w xY w)r{  rD   r   r   N)rF  r   r   r   r   r   )r   r#   r   r   s       rw   	get_groupz_ReplaceParser.get_group@  sw     		F{qCxQG;LLOHHQK "'rwwu~0D0  		s   AA- -	A98A9c                \    t        |      }|dk(  r| j                  t        |      |      S |S )zGet next format char.rl   )r   format_references)r   r   r   s      rw   rD  z_ReplaceParser.format_nextP  s/     G56$Yt%%d1gq1EAErv   c                   | j                  ||      }|r5t        |d      }|dkD  r| j                  rt        d      t	        |      }|S |t
        v s|dk(  rt        d|z      }|S | j                  s+|dk(  r&t	        t        | j                  |      d            }|S | j                  s+|dk(  r&t	        t        | j                  |      d            }|S | j                  s+|dk(  r&t        j                  | j                  |            }|S |d	k(  r&t	        t        | j                  |      d            }|S |j                  d
       d}|S )zHandle format references.r6  r   r`  rl   r>   r7  r$   r7   r'   r   )r^  r8  r   r   r   _STANDARD_ESCAPES_BACK_SLASH_TRANSLATIONrn  rq  r   r   r   rw  r   )r   r#   r   octalr   r   s         rw   r  z _ReplaceParser.format_referencesV  sG    q!$E1A4xDMM !OPPFE  ##qDy+D1H5E  18D11!4b9:E  18D33A6;<E  18 ''(>(>q(ABE  #XDMM!,b12E  HHQKErv   c                >   | j                  ||      }|t        v r|r| j                  ||       y|t        v s|dk(  rG| j                  s;| j                  ||      }|s| j                  ||      }| j                  d|z          y|t        v r/| j                          | j                  j                  d|z          y|dk(  r| j                  |t               y|dk(  r| j                  |t               y|dk(  r| j                  |t               y|dk(  r| j                  |t               y|dk(  rd| _        y| j"                  s|d	k(  r| j%                  |d       y| j"                  s|d
k(  r| j%                  |       y| j"                  s|dk(  r| j'                  |       y|dk(  r| j)                  |       y| j                  r6|t*        v r.| j                  j                  d       | j-                  ||       y| j                  r<|dk(  r7| j                  j                  d       | j                  j                  |       yd|z   }| j                          | j.                  r| j1                  || j.                  d         }| j                  j                  |       y)r   r   rl   r   r5   r   r,   r.   Tr>   r$   r7   r'   rm   r   N)r^  r[  rd  rF  r&  r~  r|  handle_groupr  rV  r*  r   single_case_LOWER	span_case_UPPERr'  r   rt  rh  ry  _CURLY_BRACKETSrX  r+  ra  )r   r#   r   r  groupr   s         rw   r   z_ReplaceParser.referenceo  s   q!$;5UA&6kQ#XtNN1a(E,,Q2dUl+##!!#KKtax(#XQ'#XNN1f%#XQ'#XNN1f%#X!DN18q$'18q!18$$Q'#XQ__o!5KKv&q!$__cKKv&KKq!1HE!!#))%1DEKKu%rv   c                   dg| _         t        j                  |      }	 	 t        |      }| j                  r|t
        v r| j                  ||       n?|dk(  r	 t        |      }| j                  ||       n| j                   j                  |       r# t        $ r | j                   j                  |        w xY w# t        $ r Y nw xY wt        | j                         dkD  rs| j                  j                  dj                  | j                                | j                   dd= | j                   j                  d       | xj                  dz  c_        dj                  | j                        S )Parse template.r   rl   r   N)r*  r   r   r   r&  r  rX  r   r   r   r   r)  r   r/  )r   r3  r   r#   s       rw   _parse_templatez_ReplaceParser._parse_template  s4    dX&	G??qO';&&q!,$Y Gq!,
 KK&&q)  ) **1-
  		 t{{a%%bggdkk&:;AKKr"IINIwwt))**s)   8B; B 5B; &B88B; ;	CCc                   t        | j                  t              r?| j                  | j                  j	                  d            j                  d      | _        n | j                  | j                        | _        t        j                  rd}t        j                  | j                  | j                        D ]}  }t        |t              r9| j                  j                  ||f       | j                  j                  d       n-|r*| j                  j                  t!        t"        |             ny|dz  } yt        j                  | j                  | j                        \  | _        | _        y)r  r  r   Nr   )r   r$  r   r  r  r  r%  r   PY312_parserparse_templater#  r8  r.  r   r-  r   r   )r   countparts      rw   r  z_ReplaceParser.parse_template  s    dnne,!11$..2G2G	2RSZZ[deDN!11$..ADN;;E..t~~t||L dC(KK&&t}5MM((.MM((fd);<
 *1)?)?PTP\P\)]&DKrv   c                n   | j                   r| j                   j                          | j                  r| j                  j                          | j                   j                  |       t	        | j                         }d| _        	 | j
                  st        |      }| j                  r|t        v r| j                  ||       nO|dk(  r	 t        |      }| j                  ||       n+| j                  j                  | j                  ||             | j
                  s|t	        | j                         kD  rd| _        n| j
                  s|t	        | j                         k(  r| j                   j                          yy# t        $ r | j                  j                  |        w xY w# t        $ r Y hw xY w)zNUppercase or lowercase the next range of characters until end marker is found.Frl   N)r+  popr,  r   r   r'  r   r&  r  rX  r   r   r*  ra  )r   r   caser  r#   s        rw   r  z_ReplaceParser.span_case  s_    ??OO!!!#t$DOO$	nnG??qO';&&q!,$Y Gq!,
 KK&&t'8'8D'AB>>US-A%A%*DN nn$ C((OO! ) ) **1-  		s,   AF( 	E? &A$F( ?&F%%F( (	F43F4c                D   | j                   rlg }|D ]T  }|t        v r9|j                  |t        k(  r|j	                         n|j                                D|j                  |       V dj                  |      S |t        k(  r|j	                         S |j                         S )zConvert case.r   )r   r   r   r  rX   rY   r   )r   r   r  casedr   s        rw   ra  z_ReplaceParser.convert_case  s     ==E $&LLdfn!'')LLLO	$
 775>!$(FN5;;=EErv   c                :   | j                   r| j                   j                          | j                   j                  |       	 t        |      }| j                  r|t
        v r| j                  ||       y|dk(  r	 t        |      }| j                  ||       y| j                   r?| j                         }|,| j                  j                  | j                  ||             yyy# t        $ r | j                  j                  |        w xY w# t        $ r Y yw xY w)z*Uppercase or lowercase the next character.rl   N)r,  r  r   r   r&  r  rX  r   r   r*  rV  ra  )r   r   r  r#   	this_cases        rw   r  z_ReplaceParser.single_case   s    !!#  &	QA1#7""1a(dQANN1a( "" 113	(KK&&t'8'8I'FG ) # % KK&&q)  		s1   1D 5D ;C% A	D %&DD 	DDc                p    d}| j                   r'| j                   j                         }| j                   r'|S )z)Get the correct single stack item to use.N)r,  r  )r   rc  s     rw   rV  z_ReplaceParser.get_single_stack  s6     &&**,F rv   c                    |dk(  r| j                   r@t        | j                        }t        j                  |f|d<   | xj                  dz  c_        n| j
                  sS| j                   sGd| _         t        | j                        }t        j                  |f|d<   | xj                  dz  c_        nBt        d      | j
                  s| j                   sd| _        n| j
                  st        d      | j                  |t        |      d       y)zHandle format group.r   r   r   Tz2Cannot switch to auto format during manual format!z2Cannot switch to manual format during auto format!N)	r1  r  r2  r   rA  r0  r   r  tuple)r   rL  r   s      rw   rW  z"_ReplaceParser.handle_format_group!  s     B;yyDOO, ??E2Q1$[[ 	DOO, ??E2Q1$ !UVVTYYDKQRR%td3rv   Nc                    t        | j                        dkD  r| j                  j                  dj	                  | j                               |r| j                  j                  d|dg       n| j                  j                  |       | j                  dd= | j                  j                  d       | xj                  dz  c_        n<|r| j                  j                  d|dg       n| j                  j                  |       | j                  j                  | j                  | j                  r| j                  d   nd| j                         || j                  rdndn|ff       | xj                  dz  c_        y)zHandle groups.r   r   z\g<r@  Nr   ru   )r   r*  r)  r   r   r   r/  r(  r+  rV  r   )r   r   capture	is_formats       rw   r  z_ReplaceParser.handle_group8  s)    t{{a%%bggdkk&:;""))64*=>""))$/AKKr"IINI%%vtS&9:%%d+		,0OOT__R())+5<_4==Rb'		
 			Q	rv   c                    | j                   S )z0Return the unmodified template before expansion.)r$  r  s    rw   get_base_templatez _ReplaceParser.get_base_templateZ  s     ~~rv   c                ~   t        | j                  j                  t        | j                              st	        d      | j                          t        t        | j                        t        | j                        t        | j                        t        | j                        | j                  | j                        S )r  z<Pattern string type must match replace template string type!)r   r#  typer$  	TypeErrorr  r   r  r.  r(  r-  hashr&  r   r  s    rw   r  z_ReplaceParser.parse_  s     $,,..T^^0DEZ[[$++$""#$-- OOMM
 	
rv   r  )r#  zPattern[AnyStr]r3  r   r&  r|   r  r  )r   r  r  z	int | str)r   r  r   r  r  z!tuple[str, list[tuple[int, Any]]])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  rs  r|   r  r  )r#   r  r   r  r  r  )r#   r  r   r  r  r  )r3  r  r  r  )r  r  )r   r  r  r8  r  r  )r   r  r  r8  r  r  )r  z
int | None)rL  r  r   zlist[tuple[int, Any]]r  r  r   )r   r  r  z"tuple[tuple[int, Any], ...] | Noner  r|   r  r  r  )r  zReplaceTemplate[AnyStr]) rq   rr   rs   rt   r   r<  rS  rX  r^  rd  r   rh  rn  rq  rt  rw  ry  r|  r~  rD  r  r   r  r  r  ra  r  rV  rW  r  r  r  ru   rv   rw   r!  r!    s    :*&N`G&1>/*"+"2
+$
1 D1 F2*&X+@^,"BF244 7;	   4  	 
 
 D

rv   r!  c                       e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ded<   d	ed<   ded<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZddZddZddZ	ddZ
ddZddZddZddZ xZS )r   zReplacement template expander.)r.  r(  r-  pattern_hashr&  _hash_bytestuple[tuple[int, int], ...]r.  :tuple[tuple[int, tuple[int | None, int | None, Any]], ...]r(  tuple[AnyStr | None, ...]r-  r8  r  r|   r&  r  r  c                d    t         |   ||||||t        t        |       ||||||f             y)r   )r&  r.  r(  r-  r  r  r  N)superr   r  r  )r   r.  r(  r-  r  r&  r   	__class__s          rw   r   zReplaceTemplate.__init__~  sK     	!#%JK *h 	 	
rv   c                $    | j                  |      S )zCall.)expand)r   r   s     rw   __call__zReplaceTemplate.__call__  s     {{1~rv   c                    | j                   S )zHash.)r  r  s    rw   __hash__zReplaceTemplate.__hash__  s     zzrv   c                f   t        |t              xr | j                  |j                  k(  xr | j                  |j                  k(  xrj | j                  |j                  k(  xrO | j
                  |j
                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S zEqual.r   r   r.  r(  r-  r  r&  r  r   others     rw   __eq__zReplaceTemplate.__eq__  s     uo. (KK5<<'( 1 11( MMU^^+( !3!33	(
 OOu///( KK5<<'	
rv   c                h   t        |t               xs | j                  |j                  k7  xs | j                  |j                  k7  xsj | j                  |j                  k7  xsO | j
                  |j
                  k7  xs4 | j                  |j                  k7  xs | j                  | j                  k7  S r  r  r  s     rw   __ne__zReplaceTemplate.__ne__  s     5/22 'KK5<<'' 1 11' MMU^^+' !3!33	'
 OOu///' KK4;;&	
rv   c           	         dj                  | j                  | j                  j                  | j                  | j
                  | j                  | j                  | j                        S )zRepresentation.z#{}.{}({!r}, {!r}, {!r}, {!r}, {!r}))	r   rr   r  rq   r.  r(  r-  r  r&  r  s    rw   __repr__zReplaceTemplate.__repr__  sN     5;;OOT^^44KK))4==t
 	
rv   c                L    d}| j                   D ]  }|d   |k(  s|d   } |S  |S )z,Find and return the appropriate group index.r   r   )r.  )r   r   g_indexr  s       rw   _get_group_indexz ReplaceTemplate._get_group_index  s@     [[ 	EQx5 (		 rv   c                L    d}| j                   D ]  }|d   |k(  s|d   } |S  |S )z+Find and return the appropriate group case.)NNr   r   r   )r(  )r   r   g_caser  s       rw   _get_group_attributesz%ReplaceTemplate._get_group_attributes  sB     "%% 	EQx5 q		 rv   c           	        |t        d      |j                  dd }t        || j                  rt        nt
              st        d      g }t        dt        | j                              D ]8  }|}| j                  |   }|| j                  |      }| j                  |      \  }}	}
| j                  s	 |j                  |      }||}n]	 |j                  |      }t        j                   |g n|g|
t        |t              rt        j"                  nt        j$                  |      }|*|t&        k(  r|j)                         }n|j+                         }|	<|	t&        k(  r|dd j)                         |dd z   }n|dd j+                         |dd z   }|j-                  |       ; |j/                  |      S # t        $ r}t        d| d      |d}~ww xY w# t        $ r}t        d| d      |d}~ww xY w)z&Using the template, expand the string.NzMatch is None!r   z6Match string type does not match expander string type!'z' is out of range!r   )r   stringr   r  r   r  r  rZ  r   r-  r  r  r&  r  
IndexErrorr   format_captures_to_bstr_to_strr  rX   rY   r   r   )r   r   sepr   r'   r   r   r  r  r  r  r   objs                rw   r  zReplaceTemplate.expand  s    9-..hhrl#u=TUUq#dmm,- $	AEa Ay//6262L2LU2S/	;QGGG,9 #A
Qggg. --!ku*4S%*@emm	A ( F*GGIGGI*"f,aFLLNQqrU2aFLLNQqrU2KKNI$	L xx~5 & Q(1WI5G)HIqPQ & Q(1WI5G)HIqPQs0   6F8G8	GGG	G7"G22G7)r.  r  r(  r  r-  r  r  r8  r&  r|   r   r|   r  r  )r   zMatch[AnyStr] | Noner  r   )r  r8  )r  r
   r  r|   )r  r  )r   r8  r  r8  )r   r8  r  z"tuple[int | None, int | None, Any])rq   rr   rs   rt   	__slots__r  r   r  r  r  r  r  r  r  r  __classcell__)r  s   @rw   r   r   q  s    (fI''KK''JL
+
 P
 ,	

 
 
 
 

6




1rv   r   c                    t         | j                  | j                  | j                  | j                  | j
                  | j                  ffS )zPickle.)r   r.  r(  r-  r  r&  r  )r!   s    rw   _pickler    s:     QXXq}}ajj!..RSR^R^`a`h`hiiirv   )8rt   
__future__r   rer   syscopyreg_copyregr   r   r   unicodedatar   r   r   typingr   r   r	   r
   r   r   version_info
re._parserr  	sre_parse__all__	frozensetr   rF  r[  rl  rC  rE  r  r  r   r   r   r   r   rb  r   r  r  r  rI  r   ro   ry   r{   r!  	Immutabler   r  pickleru   rv   rw   <module>r     s   #  
   " # = =w 
 
E	F	;	<ab$y'88 f$AB J'O,FN_,	=>./
#- %  
	
 	  !I "9 "U	,GFO U	,pF
WV_ F
RZeoowv Zzj  )rv   