
+c`G                 @   sO  d  Z  d d l Z d d l Z d d l Te j e k sC t d   e e h Z e	 e
 e h Z e e h Z e e h Z dS Z d& d'   e D Z d( d)   Z d d d* d+  Z d, d-   Z e j d. Z d/ e >d/ Z d0 d1 d2 Z e e d3 d4  Z d5 d6   Z d7 d8   Z d9 d:   Z  d; d<   Z! d= d>   Z" d? d@   Z# d dA dB  Z$ d S)TzInternal support module for sre    N)*zSRE module mismatchi   1  s          E                                              a        c                s?   i  |  ]5 } | 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.5/sre_compile.py	<genexpr>=   s    z<dictcomp>.<genexpr>)tuple)r%   tr$   )r'   r(   
<dictcomp>=   s   	r,   c             C   s  |  j  } t } t } t } t } t } | t @rO | t @rO | t @rO t	 }	 n d  }	 x| D]x\ }
 } |
 | k r[| t @rDt
 j | |  } |	 r)| |	 k r)| t  | |   } | d  |
 t k r | t  x- | f |	 | D] } | t  | |  q W| t  | |   | |  | <qX| t |
  | |  q| |
  | |  q\ |
 t k r| t @r| t |
  | d d  } n | |
  d  } | |   } | d  t | | |  | |	  | |   | |  | <q\ |
 t k r| t @r| t  q| t  q\ |
 | k rl| t @r@t d |
 f   qt |  r|
 t k	 r|
 t k rq| t  n
 | t  | |   } | d  | | d  | | d  t |  | d |  | t  | |   | |  | <q| t  | |   } | d  | | d  | | d  t |  | d |  | |   | |  | <|
 t k r_| t   q| t!  q\ |
 t" k r| d r| t#  | | d d d  t |  | d |  | d r| t#  | | d d d d  q\ |
 | k r | |
  q\ |
 | k r| |
  | |   } | d  | d d k rI| d  n8 | d j$   \ } } | | k rwt d   | |  t |  | d |  | t  | |   | |  | <q\ |
 t% k r| |
  | |   } | d  t |  | |  | t  | |   | |  | <q\ |
 t& k r| |
  | t' @rEt( j) | |  } | t @rdt* j) | |  } n | t @rt+ j) | |  } | |  q\ |
 t, k rW| |
  g  } | j  } xp | d D]d } | |   } | d  t |  | |  | t-  | | |    | d  | |   | |  | <qW| t  x| D] } | |   | |  | <q6Wq\ |
 t. k r| |
  | t @rt/ | } n | t @rt0 | } | |  q\ |
 t1 k r| t @r| t |
  n
 | |
  | | d  q\ |
 t2 k r| |
  | | d d  | |   } | d  t |  | d |  | d r| t-  | |   } | d  | |   | d |  | <t |  | d |  | |   | |  | <q| |   | d |  | <q\ t d |
 f   q\ Wd  S)	Nr   c             S   s   t  j |  |  S)N)_sregetlower)literalflagsr$   r$   r(   fixupe   s    z_compile.<locals>.fixupz*internal: unsupported template operator %r      z(look-behind requires fixed-width patternz%internal: unsupported operand type %r)3appendlen_LITERAL_CODES_REPEATING_CODES_SUCCESS_CODES_ASSERT_CODESSRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_UNICODE_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   hitail
tailappendskipyesskipnor$   r$   r(   rP   @   s*   	

	

 






 



 


 





 



 






	 

 








 


 
rP   c             C   s=  | j  } x#t |  | |  D]\ } } | |  | t k rA q | t k rZ | |  q | t k sr | t k r | | d  | | d  q | t k r | j |  q | t k r | j |  q | t	 k r| t
 @r | t |  q+| t @r| t |  q+| |  q t d | f   q W| t  d  S)Nr   r2   z%internal: unsupported set operator %r)r4   _optimize_charsetr@   rA   RANGERANGE_IGNORECHARSETextend
BIGCHARSETr`   r;   ra   r<   rb   rJ   rB   )charsetr0   re   r1   rm   rg   rn   ro   r$   r$   r(   rE      s,    	


rE   c             C   sI  g  } g  } t  d  } x|  D]\ } } xyQ| t k r | r | |  } d | | <| r | | k r x) | | D] }	 d | |	 <qv Wq~d | | <n | t k rIt | d | d d  }
 | r t | |
  }
 | r+| r+xa |
 D]; } d | | <| | k r x | | D] }	 d | |	 <qWq Wq~xP |
 D] } d | | <q2Wn5 | t k rk| j | | f  n | j | | f  Wn` t k
 rt |  d k r| d d 7} w. | r| t k rt	 } | j | | f  Yn XPq. Wq Wg  } d } x | j
 d |  } | d k  rPt |  d k r2d  } P| j
 d |  } | d k  rj| j | t |  f  P| j | | f  qW| d  k	 rxW | D]O \ } } | | d k r| j t | f  q| j t | | d f f  qW| | 7} | st |  t |   k  r| S|  St |  d k rVt |  } | j t | f  | | 7} | St |  } i  } t  d  } d } t    } xy t d d d  D]e } | | | d  } | | k r| | | | d <q| | | d <| | <| d 7} | | 7} qWt |  } | g t |  | d d  <| j t | f  | | 7} | S)N   r2   r   s    i   r3   i   )	bytearrayrA   ry   rangemapr@   r4   
IndexErrorr5   rz   find
_mk_bitmapr{   bytes_bytes_to_codesr}   )r~   r1   rm   outrt   charmaprn   ro   rp   rr   rr'   runsqpdatacompsmappingblockchunkr$   r$   r(   rx      s    

	!

	

rx      r2      0   1   c                sL   |  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>x  s   	z_mk_bitmap.<locals>.<listcomp>r   )	translate_BITS_TRANSr   r5   )bitsr   r   r$   )r   r   r   r(   r   v  s    r   c             C   s\   t  |   j d  } | j t j k s- t  t |  | j t |   k sR t  | j   S)NI)
memoryviewcastitemsizer-   CODESIZEAssertionErrorr5   tolist)bar$   r$   r(   r   {  s    %r   c             C   sH   |  d j    \ } } | | k o- d k n oG |  d d d t k S)Nr3   r2   r   )rV   rT   )ro   rp   rs   r$   r$   r(   rK     s    rK   c             C   s   d g t  |   } xy t d t  |    D]b } | | d } xK |  | |  | k r| | d k rk d | | <P| | d } q@ W| 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  | j    \ } } | t k r$ t } | d k rP |  j t d d | | g  d  Sg  } | j } d } g  } | j }	 | t @sx | j D] \ }
 } |
 t k r t |  | k r | d } | |  q |
 t	 k rt | d  d k r| d d \ }
 } |
 t k r| |  qPq Pq W| r| j r| j d \ }
 } |
 t	 k r| d r| d d \ }
 } |
 t k r|	 |
 | f  q|
 t
 k rg  } | j } x | d D]= } | sP| d \ }
 } |
 t k r| |
 | f  qPqW| } n |
 t
 k rmg  } | j } xd | d D]= } | s0P| d \ }
 } |
 t k r_| |
 | f  q#Pq#W| } n |
 t k r| } |  j } | t  t |   } | d  d } | rt } t |  | k ot | j  k n r| t B} n | r| t B} | |  | t k  r%| |  n | t  | d  t  } | t | t   | r| t |   | |  |  j |  |  j t |   n | rt | | |   t |   | |  | <d  S)Nr      r2   )rV   MAXCODEr|   INFOr4   r:   r   rA   r5   rT   r^   rD   SRE_INFO_PREFIXSRE_INFO_LITERALSRE_INFO_CHARSETminr   rE   )re   rf   r0   rp   rs   r   prefixappendprefix_skipr~   charsetappendrn   ro   ccappendr   rg   rq   maskr$   r$   r(   _compile_info  s    		

"					
 
+



r   c             C   s   t  |  t t f  S)N)
isinstancestrr   )objr$   r$   r(   isstring  s    r   c             C   sJ   |  j  j | B} g  } t | |  |  t | |  j |  | j t  | S)N)rf   r0   r   rP   r   r4   rQ   )r   r0   re   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] \ } } | | | <qh Wt j	 | | |  j j
 B| |  j j d | |  S)Nr2   )r   	sre_parseparser   rf   	groupdictgroupsitemsr-   compiler0   )r   r0   rf   re   
groupindex
indexgrouprr   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   )%__doc__r-   r   sre_constantsMAGICr   rA   r?   r6   rL   
MIN_REPEATrM   r7   rQ   rB   r8   ASSERT
ASSERT_NOTr9   _equivalencesr=   rP   rE   rx   r   r   r   r   intr   r   rK   r   r   r   r   r   r$   r$   r$   r(   <module>   sP   
               	
{e