B
    \ ch                 @   s$  d Z ddlZddlZddlT ejeks.tdeehZe	e
ehZeehZeehZeeehB ZdZdd eD Zejfdd	Zd
d Zdd Zd-ddZejd Zde> d ZdZ ee!f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+d,Z.dS )/zInternal support module for sre    N)*zSRE module mismatch))i   i1  )s   i  )   i  )iE  i  i  )i  i  )i  i  )i  i  )i  i  )i  i  )i  i  )i  i  )i  i  )i  i  )i  i  )ia  i  )i  i  c                s.   i | ]&}|D ] t  fd d|D  qqS )c             3   s   | ]} |kr|V  qd S )N ).0j)ir   lib/python3.7/sre_compile.py	<genexpr>>   s    z<dictcomp>.<genexpr>)tuple)r   tr   )r	   r
   
<dictcomp>>   s   r   c             C   s    ||@ r| | M } | |B | @ S )Nr   )flags	add_flags	del_flags
TYPE_FLAGSr   r   r
   _combine_flagsA   s    
r   c             C   s  | j }t}t}t}t}t}d }	d }
d }|t@ rd|t@ sd|t@ rX|t	@ sXt
j}	t
j}
t}nt
j}	t
j}
x|D ]\}}||kr|t@ s|| || n|t@ r|t|  || n|	|s|| || n|
|}|s|t|  || n||kr|t|  || nl|t || }|d |tkr>|t x(|f||  D ]}|t || qNW |t || | | |< ql|tkrt||	|
|\}}|t@ r|t@ r|t n(|s|t n|s|t n|t || }|d t|||  || | | |< ql|tkr:|t@ r0|t n|t ql||krF|t @ r\t!d|f t"|d r|t#kr~|t$ n|t% || }|d ||d  ||d  t&| |d | |t' || | | |< nl|t( || }|d ||d  ||d  t&| |d | || | | |< |t#kr<|t) n|t* ql|t+kr|\}}}}|rz|t, ||d d  t&| |t-||| |r
|t, ||d d d  ql||kr|| ql||krT|| || }|d |d dkr |d n*|d . \}}||kr"t!d|| t&| |d | |t' || | | |< ql|t/kr|| || }|d t&| || |t' || | | |< ql|t0kr|| |t1@ rt23||}|t@ rt43||}n |t@ r|t	@ st53||}|| ql|t6kr|| g }|j }xZ|d D ]N}|| }|d t&| || |t7 |||  |d || | | |< q,W |t x|D ]}|| | | |< qW ql|t8kr|| |t@ rt9| }n|t@ r|t	@ st:| }|| ql|t;krL|t@ s|| n,|t@ r&|t< n|s6|t= n|t> ||d  ql|t?kr|| ||d d  || }|d t&| |d | |d r|t7 || }|d || | d | |< t&| |d | || | | |< n|| | d | |< qlt!d|f qlW d S )Nr   z*internal: unsupported template operator %r      z(look-behind requires fixed-width patternz%internal: unsupported operand type %r)@appendlen_LITERAL_CODES_REPEATING_CODES_SUCCESS_CODES_ASSERT_CODESSRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_UNICODESRE_FLAG_ASCII_sreunicode_iscasedunicode_tolower_ignorecase_fixesascii_iscasedascii_tolowerOP_LOCALE_IGNORE	OP_IGNOREOP_UNICODE_IGNOREIN_UNI_IGNORENOT_LITERALNEGATELITERALFAILUREIN_optimize_charsetIN_LOC_IGNORE	IN_IGNORE_compile_charsetANYSRE_FLAG_DOTALLANY_ALLSRE_FLAG_TEMPLATEerror_simple
MAX_REPEAT
REPEAT_ONEMIN_REPEAT_ONE_compileSUCCESSREPEAT	MAX_UNTIL	MIN_UNTIL
SUBPATTERNMARKr   getwidthCALLATSRE_FLAG_MULTILINEAT_MULTILINEget	AT_LOCALE
AT_UNICODEBRANCHJUMPCATEGORY	CH_LOCALE
CH_UNICODEGROUPREFGROUPREF_LOC_IGNOREGROUPREF_IGNOREGROUPREF_UNI_IGNOREGROUPREF_EXISTS)codepatternr   emit_lenLITERAL_CODESREPEATING_CODESSUCCESS_CODESASSERT_CODESiscasedtolowerfixesopavloskipkcharsethascasedgroupr   r   phitail
tailappendskipyesskipnor   r   r
   r<   G   sV   






 




 







  






 


 




  











 
 r<   c             C   s   |j }x| D ]\}}|| |tkr&q|tkr8|| q|tksH|tkrb||d  ||d  q|tkrv|| q|tkr|| q|tkr|t	@ r|t
|  q|t@ r|t@ s|t|  q|| qtd|f qW |t d S )Nr   r   z%internal: unsupported set operator %r)r   r+   r,   RANGERANGE_UNI_IGNORECHARSETextend
BIGCHARSETrM   r   rN   r   r   rO   r7   r-   )re   r   rU   rW   r`   ra   r   r   r
   r2      s,    

r2   c          	   C   s  g }g }t d}d}x| D ]\}}	xyB|tkr|r||	}
d||
< |rp|
|krpx||
 D ]}d||< q`W |s||	rd}nd||	< n|tkrDt|	d |	d d }|r*|rx\t||D ].}d||< ||krx|| D ]}d||< qW qW nxt||D ]}d||< qW |sBtt||}nx@|D ]}d||< q0W n(|tkr^|||	f n|||	f W nX tk
r   t	|dkr|dd 7 }w*|rd}|tkrt
}|||	f Y nX P q*W qW g }d}xj|d|}|dk rP t	|dkrd }P |d|}|dk r2||t	|f P |||f qW |d k	rxF|D ]>\}}|| dkr||t|f n|t||d ff qVW ||7 }|st	|t	| k r||fS | |fS t	|dkrt|}|t|f ||7 }||fS t|}i }t d}d}t  }xftdd	dD ]V}|||d  }||krX|| ||d < n$| ||d < ||< |d7 }||7 }q(W t|}|gt| |dd< |t|f ||7 }||fS )
N   Fr   Tr       i   r   i   )	bytearrayr,   rn   rangemapanyr+   r   
IndexErrorr   ro   find
_mk_bitmaprp   bytes_bytes_to_codesrr   )re   r]   fixupr_   outrj   charmaprf   r`   ra   rb   rd   rr	   runsqrh   datacompsmappingblockchunkr   r   r
   r/     s    









r/      r   s   0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111c                s8   |  td d d  fddttd  D S )Nc                s"   g | ]}|  | d qS )r   r   )r   r	   )	_CODEBITS_intsr   r
   
<listcomp>  s   z_mk_bitmap.<locals>.<listcomp>r   )	translate_BITS_TRANSrv   r   )bitsr   r   r   )r   r   r   r
   r{     s    r{   c             C   s@   t | d}|jtjkstt||j t| ks8t| S )NI)
memoryviewcastitemsizer    CODESIZEAssertionErrorr   tolist)bar   r   r
   r}     s    r}   c             C   sD   t | dkrdS | d \}}|tkr<|d d ko:t|d S |tkS )Nr   Fr   r   )r   rA   r8   _UNIT_CODES)rh   r`   ra   r   r   r
   r8     s    r8   c             C   sv   dgt |  }xbtdt | D ]P}||d  }x>| | | | kr`|dkrRd||< P ||d  }q0W |d ||< qW |S )aj  
    Generate an overlap table for the following prefix.
    An overlap table is a table of the same size as the prefix which
    informs about the potential self-overlap for each index in the prefix:
    - if overlap[i] == 0, prefix[i:] can't overlap prefix[0:...]
    - if overlap[i] == k with 0 < k <= i, prefix[i-k+1:i+1] overlaps with
      prefix[0:k]
    r   r   )r   rv   )prefixtabler	   idxr   r   r
   _generate_overlap_table  s    	r   c             C   s,   | t @ sd S | t@ r"| t@ s"tjS tjS d S )N)r   r   r   r    r!   r$   )r   r   r   r
   _get_iscased  s
    r   c             C   s   g }|j }d }t|}x| jD ]\}}|tkrF|r<||r<P || q|tkr|\}}	}
}t||	|
}|t@ rx|t@ rxP t||\}}}|d kr|d k	rt	|}n|d k	rt	|| }|
| |sP qP qW ||dfS ||dfS )NTF)r   r   r   r,   rA   r   r   r   _get_literal_prefixr   rq   )rV   r   r   prefixappendprefix_skipr]   r`   ra   rg   r   r   rh   flags1prefix1prefix_skip1got_allr   r   r
   r     s4    



r   c             C   sf  xR| j sd S | j d \}}|tk	r$P |\}}}} t|||}|t@ r|t@ rd S qW t|}|tkr~|rt||rtd S ||fgS |tkrg }|j}	xJ|d D ]>}
|
sd S |
d \}}|tkr|r||s|	||f qd S qW |S |t	krb|}|r^xh|D ]`\}}|tkr||rZd S q|t
kr|d dkr6d S tt|t|d |d d rd S qW |S d S )Nr   r   i  )r   rA   r   r   r   r   r,   rK   r   r.   rn   rx   rw   rv   )rV   r   r`   ra   rg   r   r   r]   re   charsetappendrh   r   r   r
   _get_charset_prefix  sP    



 r   c             C   s|  |  \}}|tkrt}|dkr8| tdd||g d S g }d}g }|t@ rT|t@ srt||\}}}|srt||}| j}	|	t t	| }
|	d d}|rt
}|d kr|r|tB }n|r|tB }|	| |tk r|	| n|	t |d t }|	t|t |r@|	t	| |d krt	|}|	| | | | t| n(|rht|\}}|r\tt|||  t	| |
 | |
< d S )Nr      )rC   MAXCODErq   INFOr   r   r   r   r   r   SRE_INFO_PREFIXSRE_INFO_LITERALSRE_INFO_CHARSETminr   r/   r   r2   )rU   rV   r   rb   ri   r   r   re   r   rW   rc   maskrf   r   r   r
   _compile_info  sT    
 




r   c             C   s   t | ttfS )N)
isinstancestrr|   )objr   r   r
   isstringS  s    r   c             C   s8   | j j|B }g }t|| | t|| j| |t |S )N)rV   r   r   r<   r   r   r=   )rh   r   rU   r   r   r
   _codeV  s    
r   c             C   s   dd dd | D  S )Nz[%s]z, c             s   s$   | ]}d t jd d |f V  qdS )z%#0*xr   N)r    r   )r   xr   r   r
   r   f  s    z_hex_code.<locals>.<genexpr>)join)rU   r   r   r
   	_hex_codee  s    r   c                sN   dd l t dttt d  fdddt  d S )Nr   r   c          	      s  d d fdd
}fdd}d7  }x||k r| | }|d7 }t | }|tttttttfkr||| q6|tt	t
tttttfkr| }|d7 }||d|t|f  q6|tkr
| }|d7 }tt| }|d d d	kst|||dd   q6|tkrZ| }|d7 }tt| }|d d
 dksFt|||d
d   q6|ttttfkr| }||||| d |d ||  ||7 }q6|ttfkr||d  \}}	|d7 }||d||	t|t|	f  q6|tkr"||t||dt    |dt 7 }q6|t kr҈| }|d7 }t!d"fdd||dt#j$   D }
||||
 |dt#j$ 7 }d7 x:t%|D ].}|t||dt    |dt 7 }qW d8 q6|t&t't(t)t*fkr| }|d7 }||| q6|t+kr0| }||||| d |d7 }q6|t,kr| }||||| d xT|r|d ||  ||7 }| | }|r|d||| d n|t qVW |d7 }q6|t-t.t/fkr||d  \}}}|t0krd}||||||| d |d ||  ||7 }q6|t1krV||d  \}}|||||| d |d7 }q6|t2t3fkr||d  \}}|||||| d |d ||  ||7 }q6|t4krЈ||d  \}}}}|t0krd}|||t5||||| d |d  |t6@ r|d |d  \}}|d| |d    |  }|ddd"dd |D  dd"t7t|   |7  |d  |    |7  |t8@ rƈd7 |d  ||  d8 ||7 }q6t9|q6W d8 d S )N)toc                sX   | d k	r"  |  |d| f f7 }td kr6dndf dd  d t|  d S )Nz(to %d)z%*d%s :.z  r   )end)addprint)r   args)labelsleveloffset_widthstartr   r
   print_p  s    
z!dis.<locals>.dis_.<locals>.print_c                 s"   t dd    d t |   d S )N r   )r   )r   )r   )r   r   r   r
   print_2x  s    z"dis.<locals>.dis_.<locals>.print_2r   z
%#02x (%r)   AT_	   	CATEGORY_r   z%#02x %#02x (%r-%r)rs       c             3   s   | ]}| tj jV  qd S )N)to_bytesr    r   	byteorder)r   r   )sysr   r
   r     s   z$dis.<locals>.dis_.<locals>.<genexpr>branch	MAXREPEATr      z  prefix_skipz  prefixz[%s]z, c             s   s   | ]}d | V  qdS )z%#02xNr   )r   r   r   r   r
   r     s    z(%r) z	  overlapin):OPCODESr=   r-   r3   r5   r?   r@   r+   r,   r*   LITERAL_IGNORENOT_LITERAL_IGNORELITERAL_UNI_IGNORENOT_LITERAL_UNI_IGNORELITERAL_LOC_IGNORENOT_LITERAL_LOC_IGNOREchrrE   r   ATCODESr   rM   CHCODESr.   r1   r)   r0   rn   ro   rp   r   r   rr   listr   r    r   rv   rB   rP   rR   rS   rQ   rL   rK   r>   r:   r;   r   rT   ASSERT
ASSERT_NOTr   binr   rw   r   
ValueError)r   r   r   r   r	   r`   argrc   rb   ri   r   r   r   maxr   
prefix_lenr   r   )rU   dis_r   r   r   r   )r   r
   r   o  s    





 



















zdis.<locals>.dis_)r   setr   r   )rU   r   )rU   r   r   r   r   r   r
   dish  s     r   c          	   C   s   t | r| }t| |} nd }t| |}|t@ r>t  t| | jj}d g| jj	 }x|
 D ]\}}|||< q^W t||| jjB || jj	d |t|S )Nr   )r   	sre_parseparser   SRE_FLAG_DEBUGr   r   rV   	groupdictgroupsitemsr    compiler   r   )rh   r   rV   rU   
groupindex
indexgrouprd   r	   r   r   r
   r     s     

r   )NNN)r   )/__doc__r    r   sre_constantsMAGICr   r,   r*   r   r>   
MIN_REPEATr9   r   r=   r-   r   r   r   r   r3   r.   r   _equivalencesr#   r   r   r<   r2   r/   r   r   r   r   intr{   r}   r8   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   <module>   sF   
" 3
 
	,; 