U
    ad&                     @   s  d Z ddlT dZdZedZedZedZedZed	Z	ee
ehZeeeeeeehZeed
feedfeedfeedfeedfeedfeedfeedfdZeefeefeefeeefgfeeefgfeeefgfeeefgfeeefgfeeefgfee fd
Z!e"e#e$e%e&e'e(e)dZ*e'e#B e)B Z+e,e(B Z-G dd de.Z/G dd dZ0G dd dZ1G dd dZ2dd Z3dd  Z4d!d" Z5d#d$ Z6d3d&d'Z7d(d) Z8d*d+ Z9d4d-d.Z:d/d0 Z;d1d2 Z<d,S )5zInternal support module for sre    )*z.\[{()*+?^$|z*+?{
0123456789Z01234567Z0123456789abcdefABCDEFZ4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz 	

	\)z\a\bz\fz\nz\rz\tz\vz\\)
z\Ar   z\Bz\dz\Dz\sz\Sz\wz\Wz\Z)iLmsxatuc                   @   s   e Zd ZdS )VerboseN)__name__
__module____qualname__ r   r   /usr/lib/python3.8/sre_parse.pyr   G   s   r   c                   @   sB   e Zd Zdd Zedd ZdddZdd	 Zd
d Zdd Z	dS )Statec                 C   s   d| _ i | _d g| _d | _d S )Nr   )flags	groupdictgroupwidthslookbehindgroupsselfr   r   r   __init__L   s    zState.__init__c                 C   s
   t | jS N)lenr   r    r   r   r   groupsQ   s    zState.groupsNc                 C   sb   | j }| jd  | j tkr$td|d k	r^| j|d }|d k	rTtd|||f || j|< |S )Nztoo many groupsz7redefinition of group name %r as group %d; was group %d)r%   r   append	MAXGROUPSerrorr   get)r!   namegidogidr   r   r   	opengroupT   s    

zState.opengroupc                 C   s   |  | j|< d S r#   )getwidthr   )r!   r+   pr   r   r   
closegroup`   s    zState.closegroupc                 C   s   || j k o| j| d k	S r#   )r%   r   )r!   r+   r   r   r   
checkgroupb   s    zState.checkgroupc                 C   s6   | j d k	r2| |s|d|| j kr2|dd S )Ncannot refer to an open groupz?cannot refer to group defined in the same lookbehind subpattern)r   r1   r(   )r!   r+   sourcer   r   r   checklookbehindgroupe   s
    



zState.checklookbehindgroup)N)
r   r   r   r"   propertyr%   r-   r0   r1   r4   r   r   r   r   r   J   s   

r   c                   @   s`   e Z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S )
SubPatternNc                 C   s"   || _ |d krg }|| _d | _d S r#   )statedatawidth)r!   r7   r8   r   r   r   r"   o   s
    zSubPattern.__init__r   c                 C   s  d}t tf}| jD ]t\}}t|d t| dd |tkrlt  |D ]"\}}t|d d t| | qFq|tkrt  t|d D ]*\}}|rt|d d  ||d  qq|t	kr|\}}	}
td| |	|d  |
rt|d d  |
|d  qt
||r~d}|D ]T}t
|trJ|s6t  ||d  d}n"|s\td	dd t|dd d}q|st  qtd| qd S )
NTz   )end   ORELSEF )tuplelistr8   printstrINBRANCH	enumeratedumpGROUPREF_EXISTS
isinstancer6   )r!   levelnlseqtypesopavr   r   	condgroupitem_yesitem_nor   r   r   rG   v   sH    


zSubPattern.dumpc                 C   s
   t | jS r#   )reprr8   r    r   r   r   __repr__   s    zSubPattern.__repr__c                 C   s
   t | jS r#   )r$   r8   r    r   r   r   __len__   s    zSubPattern.__len__c                 C   s   | j |= d S r#   r8   r!   indexr   r   r   __delitem__   s    zSubPattern.__delitem__c                 C   s&   t |trt| j| j| S | j| S r#   )rI   slicer6   r7   r8   rV   r   r   r   __getitem__   s    
zSubPattern.__getitem__c                 C   s   || j |< d S r#   rU   r!   rW   coder   r   r   __setitem__   s    zSubPattern.__setitem__c                 C   s   | j || d S r#   )r8   insertr[   r   r   r   r^      s    zSubPattern.insertc                 C   s   | j | d S r#   )r8   r&   )r!   r\   r   r   r   r&      s    zSubPattern.appendc           	      C   s  | j d k	r| j S d }}| jD ]\}}|tkr|td }d}|d D ]$}| \}}t||}t||}qD|| }|| }q|tkr| \}}|| }|| }q|tkr|d  \}}|| }|| }q|t	kr|d  \}}|||d   }|||d   }q|t
kr$|d }|d }q|tkrP| jj| \}}|| }|| }q|tkr|d  \}}|d d k	r|d  \}}t||}t||}nd}|| }|| }q|tkr qqt|td t|tf| _ | j S )Nr   r<      )r9   r8   rE   	MAXREPEATr.   minmaxCALL
SUBPATTERN_REPEATCODES
_UNITCODESGROUPREFr7   r   rH   SUCCESS)	r!   lohirM   rN   r   jlhr   r   r   r.      sZ    












zSubPattern.getwidth)N)r   )r   r   r   r"   rG   rS   rT   rX   rZ   r]   r^   r&   r.   r   r   r   r   r6   m   s   

(r6   c                   @   sb   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	dd Z
dd Zdd ZdddZdS )	Tokenizerc                 C   s@   t |t| _|| _| js"t|d}|| _d| _d | _|   d S )Nlatin1r   )rI   rC   istextstringdecoded_stringrW   next_Tokenizer__next)r!   rr   r   r   r   r"      s    
zTokenizer.__init__c                 C   s   | j }z| j| }W n tk
r0   d | _Y d S X |dkr|d7 }z|| j| 7 }W n. tk
r   td| jt| jd d Y nX |d | _ || _d S )Nr   r<   zbad escape (end of pattern))rW   rs   
IndexErrorrt   r(   rr   r$   )r!   rW   charr   r   r   __next   s&     
zTokenizer.__nextc                 C   s   || j kr|   dS dS )NTFrt   ru   )r!   rw   r   r   r   match   s    
zTokenizer.matchc                 C   s   | j }|   |S r#   ry   )r!   thisr   r   r   r)      s    zTokenizer.getc                 C   s8   d}t |D ]&}| j}||kr" q4||7 }|   q|S Nr:   )rangert   ru   )r!   ncharsetresult_cr   r   r   getwhile  s    
zTokenizer.getwhilec                 C   sl   d}| j }|   |d kr@|s,| d| | d| t|||kr^|sh| d| dqh||7 }q|S )Nr:   zmissing zmissing %s, unterminated namer<   )rt   ru   r(   r$   )r!   
terminatorr*   r   r   r   r   r   getuntil  s    

zTokenizer.getuntilc                 C   s   | j t| jpd S r|   rW   r$   rt   r    r   r   r   pos  s    zTokenizer.posc                 C   s   | j t| jpd S r|   r   r    r   r   r   tell  s    zTokenizer.tellc                 C   s   || _ |   d S r#   )rW   ru   rV   r   r   r   seek   s    zTokenizer.seekr   c                 C   s   t || j|  | S r#   )r(   rr   r   )r!   msgoffsetr   r   r   r(   $  s    zTokenizer.errorN)r   )r   r   r   r"   ru   rz   r)   r   r   r5   r   r   r   r(   r   r   r   r   ro      s   		
ro   c              	   C   s  t |}|r|S t|}|r0|d tkr0|S zJ|dd }|dkr|| dt7 }t|dkrx| d| t|tt	|dd  dfW S |dkr| j
r|| dt7 }t|d	kr| d| t|tt	|dd  dfW S |d
krN| j
rN|| dt7 }t|dkr*| d| t|t	|dd  d}t| t|fW S |dkr| j
rdd l}| ds~| d| dd}zt||}W n2 tk
r   | d| t|td Y nX t|fW S |tkr.|| dt7 }t	|dd  d}|dkr$| d| t|t|fW S |tkr<tt|dkrz|tkrh| d| t|tt|d fW S W n tk
r   Y nX | d| t|d S )Nr   r<   r`   r      incomplete escape %s   r      U   
   N{	missing {}character nameundefined character name %r\N{}   .octal escape value %s outside of range 0-0o377bad escape %s)ESCAPESr)   
CATEGORIESrD   r   	HEXDIGITSr$   r(   LITERALintrq   chrunicodedatarz   r   ordlookupKeyError	OCTDIGITSDIGITS
ValueErrorASCIILETTERS)r3   escaper\   r   r   charnamer   r   r   _class_escape'  sp    











r   c              	   C   sf  t |}|r|S t|}|r$|S z|dd }|dkr|| dt7 }t|dkrl| d| t|tt|dd  dfW S |dkr| j	r|| dt7 }t|dkr| d| t|tt|dd  dfW S |d	krB| j	rB|| d
t7 }t|dkr| d| t|t|dd  d}t
| t|fW S |dkr| j	rdd l}| dsr| d| dd}zt||}W n2 tk
r   | d| t|td Y nX t|fW S |dkr || dt7 }tt|dd  d
fW S |tkr| jtkr||  7 }|d tkr|d tkr| jtkr||  7 }t|dd  d
}|dkr| d| t|t|fW S t|dd  }||jk r||s| dt||||  t|fW S | d| t|d t|dkr4|tkr"| d| t|tt|d fW S W n tk
rL   Y nX | d| t|d S )Nr<   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   0r   r   r2   invalid group reference %dr   )r   r)   r   r   r   r$   r(   r   r   rq   r   r   rz   r   r   r   r   r   r   rt   r%   r1   r4   rh   r   r   )r3   r   r7   r\   r   r   r   groupr   r   r   _escapec  s    












r   c                 C   s   t t| S r#   )rA   dictfromkeys)itemsr   r   r   _uniq  s    r   c                 C   sV  g }|j }| j}|  }|t| |||d | o2|  |dsqDqt|dkrX|d S t|}d }	|D ].}
|
st q|	d kr|
d }	qh|
d |	krh qqh|D ]
}
|
d= q| |	 q`qq`g }|D ]h}
t|
dkr q@|
d \}}|tkr| ||f q|tkr"|d d tk	r"|	| q q@q| tt
|f |S | td |ff |S )Nr<   |r   )r&   rz   r   _parser$   r6   r   rD   NEGATEextendr   rE   )r3   r7   verbosenestedr   itemsappendsourcematchstart
subpatternprefixitemsetrM   rN   r   r   r   
_parse_sub  sN    


r   Fc           /   
   C   s  t |}|j}| j}| j}t}	t}
| j}|d kr4q*|dkr@q*|  |rx|tkrTq"|dkrx| }|d ksv|dkr\q"q\q"|d dkrt| ||}|| q"|t	kr|t
|
|f q"|dkr|  d }g }|j}| jdkrdd l}|jd|   t|d	 d
 |d}| }|d kr0| d|  | |dkrF|rFqbn|d dkr`t| |}n~|r|dkr| j|krdd l}|jd|dkrdn|dkrdn|dkrdnd|  d f t|d	 d
 t
|
|f}|dr<| }|d kr| d|  | |dkrL|d tkr0|d d }|| |t
|
df qb|d dkrft| |}n>|dkrdd l}|jd|  d  t|d	 d
 t
|
|f}|d t
ks|d t
krd||f }| |t|d t| |d }|d }||k r*d||f }| |t|d t| |t||ff n"|d tkrV|d d }|| qt|}|	|dkr|d d t
kr|r|t|d d f n||d  n"|r|dtd f |t|f q"|tkr.|  }|dkr d\}}nB|dkrdt }}n*|dkr0dt }}n|dkr4| jdkrX|t
|
|f q"dt }}d  }}| jtkr|| 7 }qj|d!r| jtkr|| 7 }qn|}|ds|t
|
|f | | q"|rt|}|tkrtd"|rBt|}|tkrtd"||k rB| d#|  | ntd$|f |rV|d%d  }nd }|rr|d d tkr| d&|  | t| |d d tkr| d'|  | t| |d d t kr|d d \}}}}|d kr|s|s|}|drt!|||ff|d%< nt"|||ff|d%< q"|d(krF|t#d f q"|d)kr|  d } d*}d }!d}d}|dr| }|d kr| d+|d,kr|d-r| $d.d/}!|!% sd0|! }| |t|!d n|d1r| $d2d/}!|!% sd0|! }| |t|!d |j&|!}"|"d krFd3|! }| |t|!d |'|"sf| d4t|!d |(|"|  |t)|"f q"n2| }|d kr| d+| d5| t|d nd|d6krd }nR|dkr| jd kr| d7|  |  | d2krq"qq"n|d8krd}#|d-kr|| }|d kr>| d+|d9kr`| d:| t|d d%}#|j*}$|$d kr||j+|_*t,| |||d }|#dk r|$d krd |_*|d2s| d;|  |  |d1kr|t-|#|ff q"|t.|#|ff q"n$|d)k
rj| $d2d/}%|%% 	rL|j&|%}&|&d k	rd3|% }| |t|%d nzt|%}&|&dk 	rdt/W n4 t/k
	r   d0|% }| |t|%d d Y nX |&	s| d<t|%d |&t0k	rd=|& }| |t|%d |(|&|  t1| |||d }'| d>
r0t1| |||d }(| jd>k
r4| d?nd }(| d2
sT| d;|  |  |t2|&|'|(ff q"n|t3k
s~|dkrt4| ||})|)d k
r|
r|
rdd l}|jd@| j5d dA t| j5dAk
rdBnd f t6|d	 d
 |j7t8@ r"|s"t9q"|)\}}d }n| dC| t|d |d k	rrz|:|!}W n< tk
rp }* z| |*j;t|!d d W 5 d }*~*X Y nX |s|t8@ o|t8@  }+t,| ||+|d }| d2s| d;|  |  |d k	r|<|| |t ||||ff q"|dkr|tt=f q"|dDkr|tt>f q"tdE|f q"t?t|d d d% D ]N},||, \}-}.|-t kr@|.\}}}}|d kr@|s@|s@|||,|,d < q@|S )FNz|)#r   r   r   [r<   z"Possible nested set at position %dr   )
stacklevel^zunterminated character set]z-&~|zPossible set %s at position %d-
difference&intersection~zsymmetric differenceunionz&Possible set difference at position %dr`   zbad character range %s-%s?)r   r<   r   +r   r   r:   ,z"the repetition number is too largez"min repeat greater than max repeatzunsupported quantifier %rr_   znothing to repeatzmultiple repeat.(Tzunexpected end of patternP<>
group namebad character in group name %r=)unknown group name %rr2   zunknown extension ?P:zmissing ), unterminated commentz=!<z=!zunknown extension ?<z"missing ), unterminated subpatternzbad group numberr   r   z/conditional backref with more than two branchesz-Flags not at the start of the expression %r%s   z (truncated)zunknown extension ?$z unsupported special character %r)@r6   r&   r)   rz   r$   r   rt   
WHITESPACEr   SPECIAL_CHARSr   r   warningswarnFutureWarningr(   r   rD   RANGEr   NOT_LITERALr^   r   REPEAT_CHARSra   r   r   r   OverflowErrorAssertionErrorATrf   re   
MIN_REPEAT
MAX_REPEATANYr   isidentifierr   r1   r4   rh   r   r%   r   ASSERT
ASSERT_NOTr   r'   r   rH   FLAGS_parse_flagsrr   DeprecationWarningr   SRE_FLAG_VERBOSEr   r-   r   r0   AT_BEGINNINGAT_ENDr}   )/r3   r7   r   r   firstr   subpatternappend	sourcegetr   _len_ordr{   r\   herer   	setappendr   negatecode1thatcode2r   rj   rk   rb   rc   rw   r   r   	add_flags	del_flagsr/   r   r*   r+   dirr   condnamerO   rP   rQ   r   errsub_verboser   rM   rN   r   r   r   r     s|   


 


 	





 
 





















































 


*




r   c                 C   s  | j }d}d}|dkrt| }| jr<|dkrRd}| |n|dkrRd}| |||O }|t@ r||t@ |kr|d}| || }|d kr| d|d	krq|tkr| rd
nd}| |t|q|dkr| j|O  _d S |t@ r| dd|dkr| }|d kr| d|tkrF| r2d
nd}| |t|t| }|t@ rfd}| |||O }| }|d kr| d|dkrq|tkrF| rd
nd}| |t|qF|dkst	|t@ r| dd||@ r | dd||fS )Nr   r   r   z8bad inline flags: cannot use 'L' flag with a str patternr   z:bad inline flags: cannot use 'u' flag with a bytes patternz9bad inline flags: flags 'a', 'u' and 'L' are incompatiblezmissing -, : or )z)-:zunknown flagr   z,bad inline flags: cannot turn on global flagr<   zmissing flagz8bad inline flags: cannot turn off flags 'a', 'u' and 'L'z	missing :r   z-bad inline flags: cannot turn off global flagz(bad inline flags: flag turned on and off)
r)   r   rq   r(   
TYPE_FLAGSisalphar$   r   GLOBAL_FLAGSr   )r3   r7   rw   r   r  r  flagr   r   r   r   r   ]  sn    














r   c                 C   sj   t | tr>|t@ rtd|t@ s,|tO }qf|t@ rftdn(|t@ rNtd|t@ rf|t@ rftd|S )Nz)cannot use LOCALE flag with a str patternz(ASCII and UNICODE flags are incompatiblez,cannot use UNICODE flag with a bytes patternz'ASCII and LOCALE flags are incompatible)rI   rC   SRE_FLAG_LOCALEr   SRE_FLAG_ASCIISRE_FLAG_UNICODE)srcr   r   r   r   	fix_flags  s    


r  Nc                 C   s   t | }|d krt }||_| |_zt|||t@ d}W nB tk
rz   t }|tB |_| |_|d t||dd}Y nX t| |j	j|j	_|j
d k	r|j
dkst|d|t@ r|  |S )Nr   Tr   zunbalanced parenthesis)ro   r   r   rC   r   r   r   r   r  r7   rt   r   r(   SRE_FLAG_DEBUGrG   )rC   r   r7   r3   r/   r   r   r   parse  s(    



r  c                    s  t | j}g  g g j} fdd}j}| }|d krLq|d dkr|d }|dkrJd}dsd	d
d}| rz|| }	W n  tk
r   t	d| Y nX nlzt
|}	|	dk rtW n0 tk
r   d| t|d d Y nX |	tkr4d|	 t|d ||	t|d  q|dkrjtkr|| 7 }jtkr|| 7 }|tt
|dd  dd@  q|tkrZd}
jtkr4|| 7 }|tkr4|d tkr4jtkr4|| 7 }d}
t
|dd  d}|dkr(d| t||t| |
s|t
|dd  t|d  nRztt| d }W n4 tk
r   |tkrd| t|Y nX || q:|| q:rΈd t| tsdd D  fS )Nc                    sX   | j krd|  |r8d d d =  t| f d  d S )Nr   r:   )r%   r(   r&   joinr$   )rW   r   r%   literalliteralsr   r7   r   r   addgroup  s    

z parse_template.<locals>.addgroupr   r   r<   gr:   r   z	missing <r   r   r   r   r   r   r   r   Fr`   Tr   r   c                 S   s"   g | ]}|d krd n| dqS )Nzlatin-1)encode).0r   r   r   r   
<listcomp>  s     z"parse_template.<locals>.<listcomp>)ro   r)   r&   
groupindexrz   r(   r   r   r   rv   r   r   r$   r'   rt   r   r   r   r   r   r  rI   rC   )r3   r7   sgetlappendr  r  r{   r   r*   rW   isoctalr   r  r   parse_template  s    










"



 


r  c                 C   sv   |j }|jd d }| \}}|d d  }z"|D ]\}}||p@|||< q.W n  tk
rj   td| Y nX ||S )Nr   r   )r   rr   rv   r(   r  )templaterz   r  emptyr%   r  rW   r   r   r   r   expand_template  s    r"  )F)r   N)=__doc__sre_constantsr   r   	frozensetr   r   r   r   r   r   r   rf   r   r   rD   r   r   CATEGORYrg   r   r   r   ZAT_BEGINNING_STRINGZAT_BOUNDARYZAT_NON_BOUNDARYZCATEGORY_DIGITZCATEGORY_NOT_DIGITZCATEGORY_SPACEZCATEGORY_NOT_SPACEZCATEGORY_WORDZCATEGORY_NOT_WORDZAT_END_STRINGr   SRE_FLAG_IGNORECASEr  SRE_FLAG_MULTILINESRE_FLAG_DOTALLr   r  SRE_FLAG_TEMPLATEr  r   r  r  r	  	Exceptionr   r   r6   ro   r   r   r   r   r   r   r  r  r  r"  r   r   r   r   <module>   sr   







#rH<M:
  r<
 U