B
    \ c                 @   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\az\bz\fz\nz\rz\tz\vz\\)
z\Az\bz\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   lib/python3.7/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 )Patternc             C   s   d| _ i | _d g| _d | _d S )Nr   )flags	groupdictgroupwidthslookbehindgroups)selfr   r   r   __init__L   s    zPattern.__init__c             C   s
   t | jS )N)lenr   )r   r   r   r   groupsQ   s    zPattern.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Pattern.opengroupc             C   s   |  | j|< d S )N)getwidthr   )r   r(   pr   r   r   
closegroup`   s    zPattern.closegroupc             C   s   || j k o| j| d k	S )N)r"   r   )r   r(   r   r   r   
checkgroupb   s    zPattern.checkgroupc             C   s6   | j d k	r2| |s|d|| j kr2|dd S )Nzcannot refer to an open groupz?cannot refer to group defined in the same lookbehind subpattern)r   r.   r%   )r   r(   sourcer   r   r   checklookbehindgroupe   s
    



zPattern.checklookbehindgroup)N)
r   r   r   r    propertyr"   r*   r-   r.   r0   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 )N)patterndatawidth)r   r3   r4   r   r   r   r    o   s
    zSubPattern.__init__r   c             C   s  d}t tf}x| jD ]\}}t|d t| dd |tkrtt  x*|D ]"\}}t|d d t| | qLW q|tkrt  x:t|d D ]*\}}|rt|d d  ||d  qW q|t	kr|\}}	}
td| |	|d  |
rt|d d  |
|d  qt
||rd}x\|D ]T}t
|trX|sDt  ||d  d}n"|sjtd	dd t|dd d}q(W |st  qtd| qW d S )
NTz   )end   ORELSEF )tuplelistr4   printstrINBRANCH	enumeratedumpGROUPREF_EXISTS
isinstancer2   )r   levelnlseqtypesopavr   r   	condgroupitem_yesitem_nor   r   r   rC   v   sH     




zSubPattern.dumpc             C   s
   t | jS )N)reprr4   )r   r   r   r   __repr__   s    zSubPattern.__repr__c             C   s
   t | jS )N)r!   r4   )r   r   r   r   __len__   s    zSubPattern.__len__c             C   s   | j |= d S )N)r4   )r   indexr   r   r   __delitem__   s    zSubPattern.__delitem__c             C   s&   t |trt| j| j| S | j| S )N)rE   slicer2   r3   r4   )r   rQ   r   r   r   __getitem__   s    
zSubPattern.__getitem__c             C   s   || j |< d S )N)r4   )r   rQ   coder   r   r   __setitem__   s    zSubPattern.__setitem__c             C   s   | j || d S )N)r4   insert)r   rQ   rU   r   r   r   rW      s    zSubPattern.insertc             C   s   | j | d S )N)r4   r#   )r   rU   r   r   r   r#      s    zSubPattern.appendc       	      C   s  | j d k	r| j S d }}x| jD ]\}}|tkrtd }d}x0|d D ]$}| \}}t||}t||}qJW || }|| }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rX| jj| \}}|| }|| }q"|tkr|d  \}}|d d k	r|d  \}}t||}t||}nd}|| }|| }q"|tkr"P q"W t|td t|tf| _ | j S )Nr   r8      )r5   r4   rA   	MAXREPEATr+   minmaxCALL
SUBPATTERN_REPEATCODES
_UNITCODESGROUPREFr3   r   rD   SUCCESS)	r   lohirI   rJ   r   jlhr   r   r   r+      sZ    












zSubPattern.getwidth)N)r   )r   r   r   r    rC   rO   rP   rR   rT   rV   rW   r#   r+   r   r   r   r   r2   m   s   

(r2   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   )rE   r?   istextstringdecoded_stringrQ   next_Tokenizer__next)r   rk   r   r   r   r       s    
zTokenizer.__init__c             C   s   | j }y| j| }W n tk
r.   d | _d S X |dkr|d7 }y|| j| 7 }W n. tk
r   td| jt| jd d Y nX |d | _ || _d S )Nr   r8   zbad escape (end of pattern))rQ   rl   
IndexErrorrm   r%   rk   r!   )r   rQ   charr   r   r   __next   s    
zTokenizer.__nextc             C   s   || j kr|   dS dS )NTF)rm   rn   )r   rp   r   r   r   match   s    
zTokenizer.matchc             C   s   | j }|   |S )N)rm   rn   )r   thisr   r   r   r&      s    zTokenizer.getc             C   s:   d}x0t |D ]$}| j}||kr"P ||7 }|   qW |S )Nr6   )rangerm   rn   )r   ncharsetresult_cr   r   r   getwhile  s    zTokenizer.getwhilec             C   sh   d}x^| j }|   |d kr>|s*| d| d| t|||krX|sV| ddP ||7 }qW |S )Nr6   zmissing group namezmissing %s, unterminated namer8   )rm   rn   r%   r!   )r   
terminatorrw   ry   r   r   r   getuntil  s    


zTokenizer.getuntilc             C   s   | j t| jpd S )Nr6   )rQ   r!   rm   )r   r   r   r   pos  s    zTokenizer.posc             C   s   | j t| jpd S )Nr6   )rQ   r!   rm   )r   r   r   r   tell  s    zTokenizer.tellc             C   s   || _ |   d S )N)rQ   rn   )r   rQ   r   r   r   seek   s    zTokenizer.seekr   c             C   s   t || j|  | S )N)r%   rk   r~   )r   msgoffsetr   r   r   r%   $  s    zTokenizer.errorN)r   )r   r   r   r    rn   rr   r&   rz   r|   r1   r}   r~   r   r%   r   r   r   r   rh      s   		rh   c             C   s  t |}|r|S t|}|r0|d tkr0|S y|dd }|dkr|| dt7 }t|dkrx| d| t|tt	|dd  dfS |dkr| j
r|| dt7 }t|d	kr| d| t|tt	|dd  dfS |d
krH| j
rH|| dt7 }t|dkr&| d| t|t	|dd  d}t| t|fS |tkr|| dt7 }t	|dd  d}|dkr| d| t|t|fS |tkrtt|dkr|tkr| d| t|tt|d fS W n tk
r   Y nX | d| t|d S )Nr   r8   rY   r      zincomplete escape %s   r      U   
      z.octal escape value %s outside of range 0-0o377zbad escape %s)ESCAPESr&   
CATEGORIESr@   rz   	HEXDIGITSr!   r%   LITERALintrj   chr	OCTDIGITSDIGITS
ValueErrorASCIILETTERSord)r/   escaperU   ry   r   r   r   _class_escape'  sR    





r   c             C   s  t |}|r|S t|}|r$|S yv|dd }|dkr|| dt7 }t|dkrl| d| t|tt|dd  dfS |dkr| j	r|| dt7 }t|dkr| d| t|tt|dd  dfS |d	kr<| j	r<|| d
t7 }t|dkr| d| t|t|dd  d}t
| t|fS |dkrl|| dt7 }tt|dd  d
f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S t|dd  }||jk rF||s2| dt||||  t|fS | d| t|d t|dkr|tkr| d| t|tt|d fS W n tk
r   Y nX | d| t|d S )Nr8   rY   r   r   zincomplete escape %sr   r   r   r   r   r   0r   z.octal escape value %s outside of range 0-0o377zcannot refer to an open groupzinvalid group reference %dzbad escape %s)r   r&   r   rz   r   r!   r%   r   r   rj   r   r   r   rm   r"   r.   r0   ra   r   r   r   )r/   r   staterU   ry   groupr   r   r   _escapeW  sn    







r   c             C   s   t t| S )N)r=   dictfromkeys)itemsr   r   r   _uniq  s    r   c             C   s`  g }|j }| j}|  }x.|t| |||d | o4|  |dsP qW t|dkr\|d S t|}x^d }	xR|D ]*}
|
szP |	d kr|
d }	qp|
d |	krpP qpW x|D ]
}
|
d= qW | |	 qfP qfW g }x|D ]b}
t|
dkrP |
d \}}|tkr| ||f q|tkr.|d d tk	r.|	| qP qW | tt
|f |S | td |ff |S )Nr8   |r   )r#   rr   r~   _parser!   r2   r   r@   NEGATEextendr   rA   )r/   r   verbosenestedr   itemsappendsourcematchstart
subpatternprefixitemsetrI   rJ   r   r   r   
_parse_sub  sP    






r   Fc       /   
   C   s  t |}|j}| j}| j}t}	t}
x| j}|d kr6P |dkr@P |  |r||tkrTq&|dkr|x| }|d kst|dkr^P q^W 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}xT| }|d kr8| d|  | |dkrL|rLP n|d dkrft| |}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rP|d tkr6|d d }|| |t
|
df P |d dkrjt| |}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rZ|d d }|| qW 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\}}nJ|dkrdt }}n2|dkr6dt }}n|dkrB| jdkr^|t
|
|f q&dt }}d  }}x| jtkr|| 7 }qrW |d!rx"| jtkr|| 7 }qW n|}|ds|t
|
|f | | q&|rt|}|tkrtd"|rPt|}|tkr"td"||k rP| d#|  | ntd$|f |rd|d%d  }nd }|r|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rT|t#d f q&|d)kr|  d } d*}d }!d}d}|dr(| }|d kr| d+|d,kr|d-r| $d.}!|!% sd/|! }| |t|!d n|d0r| $d1}!|!% sd/|! }| |t|!d |j&|!}"|"d krPd2|! }| |t|!d |'|"sp| d3t|!d |(|"|  |t)|"f q&n2| }|d kr| d+| d4| t|d nf|d5krd }nT|dkrx4| jd kr | d6|  |  | d1krP qW q&n|d7k	rd}#|d-kr| }|d krL| d+|d8krn| d9| t|d d%}#|j*}$|$d kr|j+|_*t,| |||d }|#dk r|$d krd |_*|d1s| d:|  |  |d0kr|t-|#|ff q&|t.|#|ff q&n"|d)k
rv| $d1}%|%% 	rX|j&|%}&|&d k	rd2|% }| |t|%d nyt|%}&|&dk 	rpt/W n4 t/k
	r   d/|% }| |t|%d d Y nX |&	s| d;t|%d |&t0k	rd<|& }| |t|%d |(|&|  t1| |||d }'| d=
r<t1| |||d }(| jd=k
r@| d>nd }(| d1
s`| d:|  |  |t2|&|'|(ff q&n|t3k
s|dkrt4| ||})|)d kr|
r|
rdd l}|jd?| j5d d@ t| j5d@k
rdAnd f t6|d	 d
 |j7t8@ r&|s&t9q&|)\}}d }n| dB| t|d |d k	r~y|:|!}W n< tk
r| }* z| |*j;t|!d d W d d }*~*X Y nX |s|t8@ o|t8@  }+t,| ||+|d }| d1s| d:|  |  |d k	r|<|| |t ||||ff q&|dkr|tt=f q&|dCkr&|tt>f q&tdD|f q&W xht?t|d d d% D ]N},||, \}-}.|-t krP|.\}}}}|d krP|sP|sP|||,|,d < qPW |S )ENz|)#r   r   r   [r8   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 %drY   zbad character range %s-%s?)r   r8   r   +{}r6   ,z"the repetition number is too largez"min repeat greater than max repeatzunsupported quantifier %rrX   znothing to repeatzmultiple repeat.(Tzunexpected end of patternP<>zbad character in group name %r=)zunknown group name %rzcannot refer to an open groupzunknown extension ?P:zmissing ), unterminated commentz=!<z=!zunknown extension ?<z"missing ), unterminated subpatternzbad group numberzinvalid group reference %dr   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)@r2   r#   r&   rr   r!   r   rm   
WHITESPACEr   SPECIAL_CHARSr   r~   warningswarnFutureWarningr%   r   r@   RANGEr   NOT_LITERALrW   r   REPEAT_CHARSrZ   r   r   r   OverflowErrorAssertionErrorATr_   r^   
MIN_REPEAT
MAX_REPEATANYr|   isidentifierr   r.   r0   ra   r   r"   r   ASSERT
ASSERT_NOTr   r$   r   rD   FLAGS_parse_flagsrk   DeprecationWarningr   SRE_FLAG_VERBOSEr   r*   r   r-   AT_BEGINNINGAT_ENDrt   )/r/   r   r   r   firstr   subpatternappend	sourcegetr   _len_ordrs   rU   herer   	setappendr   negatecode1thatcode2r   rc   rd   r[   r\   rp   r   r   	add_flags	del_flagsr,   r   r'   r(   dirr   condnamerK   rL   rM   r   errsub_verboser   rI   rJ   r   r   r   r     sP   








 


















































*




r   c             C   s  | j }d}d}|dkrxt| }| jr>|dkrTd}| |n|dkrTd}| |||O }|t@ r~|t@ |kr~d}| || }|d kr| d|d	krP |tkr| rd
nd}| |t|qW |dkr| j|O  _d S |t@ r| dd|dkr| }|d kr| d|tkrJ| r6d
nd}| |t|xt| }|t@ rld}| |||O }| }|d kr| d|dkrP |tkrL| rd
nd}| |t|qLW |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 flagr8   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   rj   r%   
TYPE_FLAGSisalphar!   r   GLOBAL_FLAGSr   )r/   r   rp   r   r   r   flagr   r   r   r   r   E  sr    














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)rE   r?   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 }||_| |_y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)rh   r   r   r?   r   r   r   r   r   r3   rm   r   r%   SRE_FLAG_DEBUGrC   )r?   r   r3   r/   r,   r   r   r   parse  s(    



r   c                s  t | j}g  g g j} fdd}j}x|| }|d krNP |d dkr|d }|dkrJd}dsd	d
}| ry|| }	W n  tk
r   t	d| Y nX nly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  nRytt| d }W n4 tk
r   |tkrd| t|Y nX || q>|| q>W rЈd t| tsdd D  fS )Nc                sX   | j krd|  |r8d d d =  t| f d  d S )Nzinvalid group reference %dr6   )r"   r%   r#   joinr!   )rQ   r}   )r"   literalliteralsr3   r   r   r   addgroup  s    

z parse_template.<locals>.addgroupr   r   r8   gr6   r   z	missing <r   zunknown group name %rzbad character in group name %rzinvalid group reference %dr   r   r   FrY   Tz.octal escape value %s outside of range 0-0o377zbad escape %sc             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>)rh   r&   r#   
groupindexrr   r%   r|   r   KeyErrorro   r   r   r!   r$   rm   r   r   r   r   r   r   rE   r?   )r/   r3   sgetlappendr   r  rs   ry   r'   rQ   isoctalr   )r"   r   r   r3   r   r   parse_template  s    









"



 

r  c             C   sz   |j }|jd d }| \}}|d d  }y&x |D ]\}}||pB|||< q0W W n  tk
rn   td| Y nX ||S )Nr   zinvalid group reference %d)r   rk   ro   r%   r   )templaterr   r   emptyr"   r   rQ   r   r   r   r   expand_template  s    r	  )F)r   N)=__doc__sre_constantsr   r   	frozensetr   r   r   r   r   r   r   r_   r   r   r@   r   r   CATEGORYr`   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   r2   rh   r   r   r   r   r   r   r   r   r  r	  r   r   r   r   <module>   sl   






#rH0A:
  r<
 U