3
ebK                 @   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dWZd&d' eD Zd(d) ZdXd*d+Zd,d- Zejd. Zd/e> d/ Zd0d1d2  Zeefd3d4Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dYdEdFZ&dS )ZzInternal support module for sre    N)*zSRE module mismatchi   1  s          E                                              a        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$   !/usr/lib/python3.6/sre_compile.py	<genexpr>=   s    z<dictcomp>.<genexpr>)tuple)r%   tr$   )r'   r(   
<dictcomp>=   s   r,   c             C   sr  | j }t}t}t}t}t}|t@ rD|t@  rD|t@ rD|t	@  rDt
}	nd }	x"|D ]\}
}|
|kr|t@ rtj||}|	r||	kr|t || }|d |
tkr|t x&|f|	|  D ]}|t || qW |t || | | |< n|t|
  || n||
 || qP|
tkr|t@ rF|t|
  |fdd}n||
 d }|| }|d t||| ||	 || | | |< qP|
tkr|t@ r|t n|t qP|
|kr|t@ rtd|
f nt|rR|
tk	rR|
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" qP|
t#kr.|\}}}}|r|t$ ||d d  t| |||B | @  |rj|t$ ||d d d  qP|
|krB||
 qP|
|kr||
 || }|d |d dkr||d n*|d j% \}}||krtd|| t| |d | |t  || | | |< qP|
t&kr||
 || }|d t| || |t  || | | |< qP|
t'kr||
 |t(@ r@t)j*||}|t@ rXt+j*||}n"|t@ rz|t	@  rzt,j*||}|| qP|
t-kr&||
 g }|j }xZ|d D ]N}|| }|d t| || |t. |||  |d || | | |< qW |t x|D ]}|| | | |< q
W qP|
t/krt||
 |t@ rLt0| }n|t@ rj|t	@  rjt1| }|| qP|
t2kr|t@ r|t|
  n||
 ||d  qP|
t3kr\||
 ||d d  || }|d t| |d | |d rF|t. || }|d || | d | |< t| |d | || | | |< n|| | d | |< qPtd|
f qPW d S )	Nr   c             S   s   t j| |S )N)_sregetlower)literalflagsr$   r$   r(   fixupf   s    z_compile.<locals>.fixupz*internal: unsupported template operator %r      z(look-behind requires fixed-width patternz%internal: unsupported operand type %r)4appendlen_LITERAL_CODES_REPEATING_CODES_SUCCESS_CODES_ASSERT_CODESSRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_UNICODESRE_FLAG_ASCII_ignorecase_fixesr-   r.   	IN_IGNORENOT_LITERALNEGATELITERALFAILURE	OP_IGNOREIN_compile_charsetANYSRE_FLAG_DOTALLANY_ALLSRE_FLAG_TEMPLATEerror_simpleREPEAT
MAX_REPEAT
REPEAT_ONEMIN_REPEAT_ONE_compileSUCCESS	MAX_UNTIL	MIN_UNTIL
SUBPATTERNMARKgetwidthCALLATSRE_FLAG_MULTILINEAT_MULTILINEget	AT_LOCALE
AT_UNICODEBRANCHJUMPCATEGORY	CH_LOCALE
CH_UNICODEGROUPREFGROUPREF_EXISTS)codepatternr0   emit_lenLITERAL_CODESREPEATING_CODESSUCCESS_CODESASSERT_CODESfixesopavloskipkr1   group	add_flags	del_flagsphitail
tailappendskipyesskipnor$   r$   r(   rQ   @   s.   



 



 







  






 


 




  







 
 rQ   c             C   s   |j }xt| ||D ]\}}|| |tkr.q|tkr@|| q|tksP|tkrj||d  ||d  q|tkr~|j| q|tkr|j| q|t	kr|t
@ r|t|  q|t@ r|t@  r|t|  q|| qtd|f qW |t d S )Nr   r2   z%internal: unsupported set operator %r)r4   _optimize_charsetrA   rB   RANGERANGE_IGNORECHARSETextend
BIGCHARSETra   r;   rb   r<   r=   rc   rK   rC   )charsetr0   rf   r1   rn   rh   ro   rp   r$   r$   r(   rF      s,    

rF   c             C   sd  g }g }t d}xt| D ]j\}}x^y |tkrx|rn||}d||< |rv||krvx"|| D ]}	d||	< q\W nd||< n|tkrt|d |d d }
|rt||
}
|r|rxN|
D ].}d||< ||krx|| D ]}	d||	< qW qW nx>|
D ]}d||< qW n(|tkr|j||f n|j||f W nT tk
r|   t|dkrV|dd 7 }w&|rj|tkrjt	}|j||f Y nX P q&W qW g }d}xj|j
d|}|dk rP t|dkrd }P |j
d|}|dk r|j|t|f P |j||f qW |d k	rvxF|D ]>\}}|| dkr2|jt|f n|jt||d ff qW ||7 }|snt|t| k rr|S | S t|dkrt|}|jt|f ||7 }|S t|}i }t d}d}t  }xftdddD ]V}|||d  }||kr|| ||d < n$| ||d < ||< |d7 }||7 }qW t|}|gt| |dd< |jt|f ||7 }|S )N   r2   r       i   r3   i   )	bytearrayrB   r~   rangemaprA   r4   
IndexErrorr5   r   find
_mk_bitmapr   bytes_bytes_to_codesr   )r   r1   rn   outry   charmapro   rp   rq   rs   rr'   runsqrw   datacompsmappingblockchunkr$   r$   r(   r}      s    









r}      r2      0   1   c                s8   | j td d d  fddttd  D S )Nr2   c                s"   g | ]}|  | d qS )r3   r$   )r%   r'   )	_CODEBITS_intsr$   r(   
<listcomp>z  s   z_mk_bitmap.<locals>.<listcomp>r   )	translate_BITS_TRANSr   r5   )bitsr   r   r$   )r   r   r   r(   r   x  s    r   c             C   s@   t | jd}|jtjkstt||j t| ks8t|j S )NI)
memoryviewcastitemsizer-   CODESIZEAssertionErrorr5   tolist)bar$   r$   r(   r   }  s    r   c             C   s<   | d j  \}}||  ko"dkn  o:| d d d tkS )Nr3   r2   r   )rW   rU   )rp   rq   rx   r$   r$   r(   rL     s    rL   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   r2   )r5   r   )prefixtabler'   idxr$   r$   r(   _generate_overlap_table  s    	r   c             C   s   g }|j }d }x| jD ]\}}|tkr0|| q|tkr|\}}}}	|t@ rNP t|	\}
}}|d kr|d k	rvt|}n|d k	rt|| }|j|
 |sP qP qW ||dfS ||dfS )NTF)r4   r   rB   rU   r:   _get_literal_prefixr5   r   )rg   r   prefixappendprefix_skipro   rp   rt   ru   rv   rw   prefix1prefix_skip1got_allr$   r$   r(   r     s,    



r   c             C   s"  g }|j }| jr| jd \}}|tkr|\}}}}|r|t@  r|d \}}|tkrd|||f nR|tkrg }	|	j }
x|d D ].}|sP |d \}}|tkr|
||f qP qW |	}nf|tkrg }	|	j }
xP|d D ]0}|sP |d \}}|tkr|
||f qP qW |	}n|tkr|}|S )Nr   r2   )r4   r   rU   r:   rB   r_   rE   )rg   r   charsetappendro   rp   rt   ru   rv   rw   ccappendr$   r$   r(   _get_charset_prefix  sF    


r   c             C   sZ  |j  \}}|tkrt}|dkr8| jtdd||g d S g }d}g }|t@ sft|\}}}|sft|}| 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 |r4|	t| |d krt|}|	| | j| | jt| n|rFt|||  t| |
 | |
< d S )Nr      )rW   MAXCODEr   INFOr:   r   r   r4   r5   SRE_INFO_PREFIXSRE_INFO_LITERALSRE_INFO_CHARSETminr   rF   )rf   rg   r0   rq   rx   r   r   r   r   rh   rr   maskr$   r$   r(   _compile_info  sP     



r   c             C   s   t | ttfS )N)
isinstancestrr   )objr$   r$   r(   isstring  s    r   c             C   s8   | j j|B }g }t|| | t|| j| |jt |S )N)rg   r0   r   rQ   r   r4   rR   )rw   r0   rf   r$   r$   r(   _code  s    
r   c             C   s   t | r| }tj| |} nd }t| |}| jj}d g| jj }x|j D ]\}}|||< qHW tj	||| jj
B || jjd ||S )Nr2   )r   	sre_parseparser   rg   	groupdictgroupsitemsr-   compiler0   )rw   r0   rg   rf   
groupindex
indexgrouprs   r'   r$   r$   r(   r   -  s    

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   r   r    r!   r"   r#   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NN)r   )'__doc__r-   r   sre_constantsMAGICr   rB   r@   r6   rM   
MIN_REPEATrN   r7   rR   rC   r8   ASSERT
ASSERT_NOTr9   _equivalencesr>   rQ   rF   r}   r   r   r   r   intr   r   rL   r   r   r   r   r   r   r   r$   r$   r$   r(   <module>   sV   
                 
{
)9