
    1yi              	      f   d Z ddlm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 ddlmZm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,      Z- G d# d$e,      Z. G d% d&ee         Z/ G d' d(ee         Z0 G d) d*e	jb                  ee         Z2d+ Z3 ejh                  e2e3       y# e$ r
 ddlmZ Y w xY w),zg
Backrefs Regex parser.

Licensed under MIT
Copyright (c) 2011 - 2020 Isaac Muse <isaacmuse@gmail.com>
    )annotationsN   )util)_compile_replacement_helper)GenericAnyStrAnycast)PatternMatch)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)rA   rB   rC   rD   rE   rF   rG   rH   )r   r   r   r   r   r   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   )_)r   r   r   r   r   r    r"   ){}) -rK   )r   r   r   r   r!   )	r   r   r   r2   r   r   r!   r#   r$   rA   rB   ):)){   }      	
\)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__     X/var/www/html/content_weaver/venv/lib/python3.12/site-packages/backrefs/_bregex_parse.pyr`   r`   >   s    rg   r`   c                      e Zd ZdZy)GlobalRetryExceptionzGlobal retry exception.Nra   rf   rg   rh   rj   rj   B   s    !rg   rj   c                      e Zd ZU dZdZdZdZdZ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Zd'dZd"dZd"dZd"dZd(dZd)dZd*dZy)+_SearchParserzSearch Template.)r   r8   r7   r+   z\x1bz#(?>\r\n|[\n\v\f\r\x85\u2028\u2029])z(?>\r\n|[\n\v\f\r\x85])boolverboseintversionzdict[str, bool]global_flag_swaptemp_global_flag_swapis_bytesr   searchc                    t        |t              rd| _        nd| _        | j                  r| j                  | _        n| j
                  | _        || _        || _        || _        y)Initialize.TFN)	
isinstancebytesrs   _bytes_line_break_re_line_break_line_break
re_verbose
re_versionrt   )selfrt   r|   r}   s       rh   __init__z_SearchParser.__init__U   sT     fe$ DM!DM=="&"8"8D"&"2"2D$$rg   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.Fr]   Tr+    r7   )_util
StringIterappend_regexescapejoinextend)r~   textescaped	in_quotescurrentquotedr   r    s           rh   process_quotesz_SearchParser.process_quotese   s    	T" 	"AqDy8 v}}RWWV_'EF!#$)	#Xi $IMM4),NND!9-a q!'	"* MM$NN4 NN6==9:wwwrg   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.Fr[   r]   T)r   	_new_refsnextStopIteration)r~   r    r   r   r   s        rh   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}| j                  t        j                  k(  s|rd|v r| j
                  rd| _        nGd|v rC| j
                  s7d| _        |s.| j                  t        j                  k(  rd| j                  d<   d}d	|v rD| j                  t        j                  k(  r'd| j                  d
<   t        j                  | _        d}nGd|v rC| j                  t        j                  k(  r&d| j                  d
<   t        j                  | _        d}|rt        d      y)zAnalyze flags.rO   r   r   r   Fr$   Trn   V0rp   V1zGlobal RetryN)	splitlenrp   r   r   rn   r   rr   rj   )r~   r   scopedflagsenabledisableglobal_retrys          rh   r   z_SearchParser.flags   s    

3q!%j1n%("LLFII%SG^ DLF]4<<DLdllfii78<**95#6>dllfii7 59D&&y1!99DLLV^		 948D&&y1!99DLL&~66 rg   c                    g }|s"|dk(  r|j                  | j                         |S |dk(  r2t        j                  d       |j	                  | j
                         |S |j	                  d|g       |S )Handle references.r8   r   z=The \e reference has been deprecated, please use \x1b insteadr]   )r   rz   r   warn_deprecatedr   
_re_escape)r~   r    r   in_groupr   s        rh   	referencez_SearchParser.reference   sq     AHNN4../  #X!!"bcNN4??+  NND!9%rg   c                ^   |j                   }dg}	 t        |      }|dk7  rt        d      |j                  |       t        |      }|dk(  r|j                  |       t        |      }|dk7  r=|t        vrt        d      |t
        vr|j                  |       t        |      }|dk7  r=|j                  |       t        |      }|dk7  s|st        d      |j                  |       	 |rdj                  |      S dS # t        $ r# |j                  |j                   |z
         g }Y @w xY w)	z
Get POSIX.[rQ   zNot a valid property!^]zUnmatched ]r   N)	indexr   
ValueErrorr   	_PROPERTY_PROPERTY_STRIP	Exceptionrewindr   )r~   r   r   valuer   s        rh   	get_posixz_SearchParser.get_posix   s    	QACx !899QG8LLOQA3h	)()@AA/QQA 3h QG85$]33Q "'rwwu~0D0  	HHQWWu_%E	s   BD  +?D   )D,+D,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                  |       |rdj                  |      S dS # t        $ r}t        d|dz
   d      |d}~ww xY w)zGet comments.(F?r   N#rU   rR   Tr]   zUnmatched '(' at !r   )r   r   r   r   r   SyntaxErrorr   )r~   r   r   r   r   r   r   s          rh   get_commentsz_SearchParser.get_comments   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 "'rwwu~0D0  	G 1%!)A>?QF	Gs/   !C& 2C& (AC& ;C&  C& &	D/DDc                t   |j                   }dg}d}d}d}	 t        |      }|dk7  r|j                  d       y|j                  |       t        |      }|t        vr}|r|t
        vrNt        d      |r|t        vrt        d      d}n+|dk(  rd	}n#|d
k(  rd	}n|t        vr|t
        vrt        d      |j                  |       t        |      }|t        vr}|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.

        Regex is more difficult to determine when flags are used in a global and scoped context.
        There is a specific list of global flags, but they can be used in scoped notation and will still
        be considered global, but that does not mean other flags are global. Additionally, flags that can be
        scoped can also used be used in global syntax, but can be disabled with a minus unlike in RE.

        Bregex only cares about capturing the "verbose" flag and the version flags. Version flags are always
        global and verbose flags will be scoped based on whether they are in a scoped group. The returned
        "scoped" parameter only refers to "verbose".
        r   Fr   r   NFz	Bad scopezBad versionrO   Tr<   zBad flagrQ   r   N)r   r   r   r   _SCOPED_END_SCOPED_FLAGSr   	_VERSIONS_GLOBAL_FLAGSr   r   )r~   r   r   r   rp   togglesmells_scopedr   s           rh   	get_flagsz_SearchParser.get_flags  sG    	QACx"LLOQA;&-(55	)(77#G#X!F#X"Gm+0F$Z00QG ;&  Cx $LLO
 "'rwwu~-??D-??	  	HHQWWu_%E	s   !D B D D )D76D7c                   | j                  |      }|r|gS | 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 *w xY w)zHandle parenthesis.rU   )r   rR   )	r   rn   r   r   r   r   normalr   r   )r~   r    r   commentsrn   r   r   r   s           rh   subgroupz_SearchParser.subgroupC  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}	 	 |s	|dk(  rd}n	|r&d}|j                  | j                  ||d             n|dk(  r|s|dz  }|}|j                  |       n|dk(  r||rz| j                  t
        j                  k(  r]| j                  rdn| j                  |      }	|	r"|j                  |	       |j                   dz
  }nY|dz  }|}|j                  |       n?|dk(  rT| j                  rdn| j                  |      }	|	r!|j                  |	       |j                   dz
  }n|j                  |       n|d	k(  r!|dk(  r||dz   k(  r|j                  |       |}n| j                  t
        j                  k(  r&|d	k(  r!|dkD  r||dz   k(  r|j                  |       |}n}|d
k(  r!|dk(  r||dz   k7  r|j                  |       d}ni| j                  t
        j                  k(  r)|d
k(  r$|dkD  r||dz   k7  r|dz  }|j                  |       n|j                  |       |dz  }t        |      }&	 |r|j                  |       |S # t        $ r Y  w xY w)zHandle character groups.r   r   FTr]   r   NrU   r   r   )r   r   r   r   rp   r   r   rs   r   r   r   )
r~   r    r   r   posfound	sub_firstr   firstposixs
             rh   char_groupsz_SearchParser.char_groupsg  sP    ggk	2	19"G#GNN4>>!Q#=>#XeQJEENN1%#X%DLLFII,E$(MMDt~~a7HEu-ggk
$'	q)#X$(MMDt~~a7HEu-ggkq)#X%1*#2BNN1%E\\VYY.18	sV_bcVcOcNN1% #I#X%1*#2BNN1%E\\VYY.18	sV_bcVcOcQJENN1%NN1%qG_ N  NN1  		s   H'I 	I$#I$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.r]   r   r   r   )	r   r   r   r   r   r   rn   r   r   )r~   r    r   r   s       rh   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                    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       rh   
main_groupz_SearchParser.main_group  sO     	Gt{{1a01   		s   .2 	??c                   t        | j                        | _        | j                  r| j                  nt        j
                  | _        | j                  dk7  dd| _        dd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.r   F)rp   rn   Trp   zGlobal version flag recursion.rn   zGlobal verbose flag recursion.Nr   )rm   r|   rn   r}   r   DEFAULT_VERSIONrp   rq   rr   r   r   r   r   rj   r`   r   r   r   )r~   rt   new_patternr   retryr   s         rh   _parsez_SearchParser._parse  sa    DOO,*.//tv?U?U!+!

 &
"
 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   B; ;	E'BE""E'c                    t        | j                  t              r9| j                  | j                  j	                  d            j                  d      S | j                  | j                        S )zApply search template.latin-1)rw   rt   rx   r   decodeencoder~   s    rh   parsez_SearchParser.parse  sN     dkk5);;t{{11)<=DDYOO;;t{{++rg   N)Fr   )rt   r   r|   rm   r}   ro   returnNone)r   strr   r   )r    r   r   _util.StringIterr   	list[str]F)r   r   r   rm   r   r   )r    r   r   r   r   rm   r   r   )r   r   r   
str | None)r   r   r   ztuple[str | None, bool])r   r   r   r   )rt   r   r   r   r   r   )rb   rc   rd   re   r   r   r{   ry   __annotations__r   r   r   r   r   r   r   r   r   r   r   r   r   r   rf   rg   rh   rl   rl   F   s    $IJ8K2ML%%**NN & P4781>1>2@h"H@D*
)$V,rg   rl   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)rv   Fr   N)pattern	_original	_template
use_format	end_foundgroup_slotsliteral_slotsresult
span_stacksingle_stackliteralsgroupsslotmanualauto
auto_indexrw   rx   rs   )r~   r   templater   s       rh   r   z_ReplaceParser.__init__  s     !!$		"4>>59rg   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   rO   r      NrU   rA   r   r   r      r$      )ro   r   )r~   r   baseprefixcharidxs         rh   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   rM   Nr   r   )r   .r   r   zUnmatched '[' at r   zInvalid conversion type at rQ   )<>r   r   zInvalid format spec char at r   rA   z'=' alignment is not supported!rN   r   Unmatched '{' at )r   r   r   	FMT_FIELD	FMT_INDEX_LETTERS_UNDERSCOREformat_next_WORD_DIGITr   stripr   ro   r   r   r   r   FMT_ATTR_FMT_CONV_TYPEFMT_CONVr   FMT_SPECrs   r   )r~   r   r   r   fieldr   tempfindexsindexr   r   fillwidthalignconverts                  rh   
get_formatz_ReplaceParser.get_format)  sm    E	HCxeoor23eoot45 ++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.rL   rM   zUnmatched '}' at rU   r   N)r	  get_single_stackr   r   r  handle_format_groupr   r   )r~   r    r   r  r   s        rh   handle_formatz_ReplaceParser.handle_format  s     8  #ACx%%'""1%"ooa3t((5  #ACx%%'""1%!$6qww{m1"EFFrg   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   rA   r   r   r   N)
r   ranger   r   r   _OCTALr   r   r   r   )r~   r   r   r   r   
zero_countrK   octal_counts           rh   	get_octalz_ReplaceParser.get_octal  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.r      ,octal escape value outside of range 0-0o377!r   Nr]   03o)ro   rs   r   r  r   convert_casechrordr   _CURLY_BRACKETS_ORDr  r   r   )r~   r   r   r   singles        rh   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:.rg   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.rL   zNamed Unicode missing '{' at r   r   rM   r  Nr   )r   r   r   r   r   r   )r~   r   r   r   r   r   s         rh   get_named_unicodez _ReplaceParser.get_named_unicode   s     	DAw#~!$B177Q;-q"QRRQAs(QG s( wwu~  	D 25';<!C	Ds   AA= =	BBB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%  r]   r'  )r*  _unicodedatalookupr/  r  r   r(  r)  r   r+  r  r   r   r~   r   r   r,  r   s        rh   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*rg   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   rA   z"Invalid wide Unicode character at r   r   rP      r   )r  r   r   r   r   lower_HEXr   r~   r   r   rK   r   s        rh   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~rg   c                    g }t        d      D ]P  }t        |      }|j                         t        v r|j	                  |       6t        d|j                  dz
   d       dj                  |      S )r6  r7  zInvalid Unicode character at r   r   r   r  r   r8  r9  r   r   r   r   r:  s        rh   get_narrow_unicodez!_ReplaceParser.get_narrow_unicode;  sm     q 	RAQAwwyD Q!$A!''A+a"PQQ	R wwu~rg   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.r   r   Nr%  r]   r'  )r;  r>  ro   r  r   r(  r)  r*  r   r+  r  r   r   )r~   r   wider   r   r,  s         rh   parse_unicodez_ReplaceParser.parse_unicodeG  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*rg   c                    g }t        d      D ]P  }t        |      }|j                         t        v r|j	                  |       6t        d|j                  dz
   d       dj                  |      S )z	Get byte.rU   zInvalid byte character at r   r   r   r=  r:  s        rh   get_bytez_ReplaceParser.get_byteY  sm     q 	OAQAwwyD Q!$>qww{m1"MNN	O wwu~rg   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.r   r   Nr]   r'  )ro   rC  r  r   r(  r)  r*  r   r+  r  r   r   r3  s        rh   parse_bytesz_ReplaceParser.parse_bytese  s     DMM!$b)&&(??$$SZ1DED<B<NC))$78TWX\T]E))#e*f=>E??u(;;s5z1-KKE#;/0rg   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   r  r  r
  r   r   )r~   r    r   r   r   r   r   s          rh   get_named_groupz_ReplaceParser.get_named_groupt  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)rG  rA   r   r   N)r  r   r   r   r   r   )r~   r    r   r   s       rh   	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.r]   )r   format_references)r~   r   r   s      rh   r	  z_ReplaceParser.format_next  s/     G56$Yt%%d1gq1EAErg   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.r   r%  r&  r]   r;   r   r!   r4   r$   r   )r#  ro   rs   r   r)  _STANDARD_ESCAPES_BACK_SLASH_TRANSLATIONr;  r>  r1  r2  r/  rC  r   )r~   r    r   octalr   r   s         rh   rL  z _ReplaceParser.format_references  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rg   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   r]   r   r2   r   r)   r+   Tr;   r!   r4   r$   r^   r   N)r#  r   r-  r  r   rJ  rH  handle_grouprN  r  r   r   single_case_LOWER	span_case_UPPERr   rs   rA  r4  rE  _CURLY_BRACKETSr  r   r(  )r~   r    r   rP  groupr   s         rh   r   z_ReplaceParser.reference  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%rg   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   r]   r   N)r   r   r   r   r   rW  r  r   r   r   r   r   r   r   )r~   r   r   r    s       rh   _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                2   t        | j                  t              r?| j                  | j                  j	                  d            j                  d      | _        n | j                  | j                        | _        d}t        | j                  | j                        D ]y  }t        |t              r9| j                  j                  d       | j                  j                  ||f       n)| j                  j                  t        t        |             |dz  }{ y)rZ  r   r   Nr   )rw   r   rx   r[  r   r   r   r   r   ro   r   r   r   r
   r   )r~   countparts      rh   parse_templatez_ReplaceParser.parse_template  s     dnne,!11$..2G2G	2RSZZ[deDN!11$..ADN/dnnM 	D$$$$T*""E4=1$$T&$%78QJE	rg   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.Fr]   N)r   popr   r   r   r   r   r   rW  r  r   r   r   r(  )r~   r   caser]  r    s        rh   rU  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   )rs   _ASCII_LETTERSr   rT  r8  upperr   )r~   r   rb  casedr   s        rh   r(  z_ReplaceParser.convert_caseC  s     ==E $&LLdfn!'')LLLO	$
 775>!$(FN5;;=EErg   c                    | j                   r| j                   j                          | j                   j                  |       	 t        |      }| j                  r|t
        v r| j                  ||       y|dk(  r	 t        |      }| j                  ||       y| j                         }|,| j                  j                  | j                  ||             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.r]   N)r   ra  r   r   r   rW  r  r   r   r   r  r(  )r~   r   rb  r    	this_cases        rh   rS  z_ReplaceParser.single_caseQ  s     !!#  &	QA1#7""1a(dQANN1a(
 !113	(KK&&t'8'8I'FG ) % KK&&q)  		s0   1D 5D ;C =D &C>>D 	DDc                p    d}| j                   r'| j                   j                         }| j                   r'|S )z)Get the correct single stack item to use.N)r   ra  )r~   r,  s     rh   r  z_ReplaceParser.get_single_stackj  s6     &&**,F rg   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)	r   r   r   r   r  r   r   rR  tuple)r~   r  r   s      rh   r  z"_ReplaceParser.handle_format_groupr  s     B;yyDOO, ??E2Q1$[[ 	DOO, ??E2Q1$ !UVVTYYDKQRR%td3rg   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   rf   )r   r   r   r   r   r   r   r   r   r  rs   )r~   r   capture	is_formats       rh   rR  z_ReplaceParser.handle_group  s)    t{{a%%bggdkk&:;""))64*=>""))$/AKKr"IINI%%vtS&9:%%d+		,0OOT__R())+5<_4==Rb'		
 			Q	rg   c                    | j                   S )z0Return the unmodified template before expansion.)r   r   s    rh   get_base_templatez _ReplaceParser.get_base_template  s     ~~rg   c                ~   t        | j                  j                  t        | j                              st	        d      | j                          t        t        | j                        t        | j                        t        | j                        t        | j                        | j                  | j                        S )rZ  z<Pattern string type must match replace template string type!)rw   r   typer   	TypeErrorr_  ReplaceTemplaterk  r   r   r   hashr   rs   r   s    rh   r   z_ReplaceParser.parse  s     $,,..T^^0DEZ[[$++$""#$-- OOMM
 	
rg   r   )r   zPattern[AnyStr]r   r   r   rm   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   r   )r   r   r@  rm   r   r   )r    r   r   r   r   r   )r    r   r   r   r   r   )r   r   r   r   )r   r   )r   r   rb  ro   r   r   )r   r   rb  ro   r   r   )r   z
int | None)r  r   r   zlist[tuple[int, Any]]r   r   r   )r   r   rm  z"tuple[tuple[int, Any], ...] | Nonern  rm   r   r   r   )r   zReplaceTemplate[AnyStr]) rb   rc   rd   re   r   r   r  r  r#  r-  r/  r4  r;  r>  rA  rC  rE  rH  rJ  r	  rL  r   r[  r_  rU  r(  rS  r  r  rR  rp  r   rf   rg   rh   r   r     s    :*&N`G&1>/*"+"2
+$
1 D1 F2*&X+@""BF244 7;	   4  	 
 
 D

rg   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 )rt  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   ro   rw  rm   r   rx  ry  c                d    t         |   ||||||t        t        |       ||||||f             y)rv   )r   r   r   r   rw  ry  rx  N)superr   ru  rr  )r~   r   r   r   rw  r   rs   	__class__s          rh   r   zReplaceTemplate.__init__  sK     	!#%JK *h 	 	
rg   c                $    | j                  |      S )zCall.)expand)r~   r   s     rh   __call__zReplaceTemplate.__call__  s     {{1~rg   c                    | j                   S )zHash.)rx  r   s    rh   __hash__zReplaceTemplate.__hash__  s     zzrg   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.rw   rt  r   r   r   rw  r   ry  r~   others     rh   __eq__zReplaceTemplate.__eq__  s     uo. (KK5<<'( 1 11( MMU^^+( !3!33	(
 OOu///( KK5<<'	
rg   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     rh   __ne__zReplaceTemplate.__ne__  s     5/22 (KK5<<'( 1 11( MMU^^+( !3!33	(
 OOu///( KK5<<'	
rg   c           	         dj                  | j                  | j                  j                  | j                  | j
                  | j                  | j                  | j                        S )zRepresentation.z#{}.{}({!r}, {!r}, {!r}, {!r}, {!r}))	formatrc   r  rb   r   r   r   rw  r   r   s    rh   __repr__zReplaceTemplate.__repr__  sN     5;;OOT^^44KK))4==t
 	
rg   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_indexrX  s       rh   _get_group_indexz ReplaceTemplate._get_group_index  s@     [[ 	EQx5 (		 rg   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_caserX  s       rh   _get_group_attributesz%ReplaceTemplate._get_group_attributes!  sB     "%% 	EQx5 q		 rg   c           	        |t        d      |j                  j                  dd }t        |t              | j
                  k7  rt        d      g }t        dt        | j                              D ]E  }| j                  |   }|| j                  |      }| j                  |      \  }}}	| j                  s!	 t        d|j                  |            }||}nb	 t        d|j!                  |            }t#        j$                  ||	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   }|j1                  |       H |j3                  |      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AnyStr | None'z' is out of range!zlist[AnyStr]r   )r   rer   rw   rx   ry  rs  r  r   r   r  r  r   r
   rX  
IndexErrorcapturesr   format_captures_to_bstr_to_strrT  r8  re  r   r   )r~   r   sepr   r   r   r  rU  rS  rm  r   objs               rh   r  zReplaceTemplate.expand+  s    9-..ddll2Ac5!T[[0TUU1c$--01 #	Ee$Ay//6262L2LU2S/	;Q !'''2BC9 #A
Q">1::g3FG --*4S%*@emm	A ( F*GGIGGI*"f,aFLLNQqrU2aFLLNQqrU2KKNG#	J xx~5 & Q(1WI5G)HIqPQ & Q(1WI5G)HIqPQs0   9G
G+
	G(G##G(+	H	4HH	)r   rz  r   r{  r   r|  rw  ro   r   rm   rs   rm   r   r   )r   zMatch[AnyStr] | Noner   r   )r   ro   )r  r	   r   rm   )r   r   )r   ro   r   ro   )r   ro   r   z"tuple[int | None, int | None, Any])rb   rc   rd   re   	__slots__r   r   r  r  r  r  r  r  r  r  __classcell__)r  s   @rh   rt  rt    s    (fI''KK''JL
+
 P
 ,	

 
 
 
 

6




0rg   rt  c                    t         | j                  | j                  | j                  | j                  | j
                  | j                  ffS )zPickle.)rt  r   r   r   rw  r   ry  )r   s    rh   _pickler  ^  s:     QXXq}}ajj!..RSR^R^`a`h`hiiirg   )5re   
__future__r   unicodedatar1  copyreg_copyregr   r   r   regexr   regex.regexr   ImportErrorregex._maintypingr   r   r	   r
   _bregex_typingr   r   	frozensetrd  r  r   r9  r  r
  rN  rW  r   r   r   r   r   r   r+  rV  rT  rO  r  r   r`   rj   rl   r   	Immutablert  r  picklerf   rg   rh   <module>r     s   # "   87 . - * 
E	F	;	<ab$y'88 f$AB J'O,FN_,	34GHj!	
#-  
	
 	  !I "9 "u,GFO u,pA
WV_ A
HYeoowv Yxj  )m*  8778s   D! !D0/D0