
[[\v                 @   s  d  Z  d d l Td d l m Z d Z d Z e d  Z e d  Z e d  Z	 e d	  Z
 i e e d
  f d 6e e d  f d 6e e d  f d 6e e d  f d 6e e d  f d 6e e d  f d 6e e d  f d 6e e d  f d 6Z i
 e e f d 6e e f d 6e e f d 6e e e f g f d 6e e e f g f d 6e e e f g f d 6e e e f g f d 6e e e f g f d  6e e e f g f d! 6e e f d" 6Z i e d# 6e d$ 6e d% 6e d& 6e  d' 6e! d( 6e" d) 6e# d* 6Z$ Gd+ d,   d,  Z% Gd- d.   d.  Z& Gd/ d0   d0  Z' d1 d2   Z( d3 d4   Z) d5 d6   Z* d7 d8   Z+ d9 d:   Z, d; d< d=  Z- d> d?   Z. e d@  Z/ e dA  Z0 e dB  Z1 e e2 e3 g  Z4 dC dD   Z5 dE dF   Z6 d dG dH dI  Z7 dJ dK   Z8 dL dM   Z9 dG S)NzInternal support module for sre    )*)	MAXREPEATz.\[{()*+?^$|z*+?{
0123456789Z01234567Z0123456789abcdefABCDEFz 	
z\az\bz\f
z\nz\r	z\tz\v\z\\z\Az\Bz\dz\Dz\sz\Sz\wz\Wz\ZiLmsxatuc               @   sC   e  Z d  Z d d   Z d d d  Z d d   Z d d	   Z d S)
Patternc             C   s(   d |  _  g  |  _ d |  _ i  |  _ d  S)Nr      )flagsopengroups	groupdict)self r   /usr/lib/python3.4/sre_parse.py__init__C   s    			zPattern.__init__Nc             C   s   |  j  } | d |  _  | d  k	 ru |  j j | d   } | d  k	 re t d t |  | | f   n  | |  j | <n  |  j j |  | S)Nr   z7redefinition of group name %s as group %d; was group %d)r   r   geterrorreprr   append)r   namegidogidr   r   r   	opengroupH   s    	zPattern.opengroupc             C   s   |  j  j |  d  S)N)r   remove)r   r$   r   r   r   
closegroupS   s    zPattern.closegroupc             C   s   | |  j  k  o | |  j k S)N)r   r   )r   r$   r   r   r   
checkgroupU   s    zPattern.checkgroup)__name__
__module____qualname__r   r&   r(   r)   r   r   r   r   r   A   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   s4   | |  _  | d  k r g  } n  | |  _ d  |  _ d  S)N)patterndatawidth)r   r.   r/   r   r   r   r   Z   s
    			zSubPattern.__init__r   c             C   s  d } t  t f } x|  j D]\ } } t | d | d d | t k r t   x| D]% \ } } t | d d | |  qZ Wq | t k r t   xct | d  D]8 \ } } | r t | d d  n  | j | d  q Wq | t k rQ| \ } }	 }
 t d |  |	 j | d  |
 rt | d d  |
 j | d  qq t	 | |  rd } xv | D]n } t	 | t
  r| st   n  | j | d  d } qm| st d	 d d n  t | d d d } qmW| st   qq t d |  q Wd  S)
NTz  end r   orelseF )tuplelistr/   printINBRANCH	enumeratedumpGROUPREF_EXISTS
isinstancer-   )r   levelnlseqtypesopavr   r   	condgroupitem_yesitem_nor   r   r   r<   `   sH     
	
zSubPattern.dumpc             C   s   t  |  j  S)N)r!   r/   )r   r   r   r   __repr__   s    zSubPattern.__repr__c             C   s   t  |  j  S)N)lenr/   )r   r   r   r   __len__   s    zSubPattern.__len__c             C   s   |  j  | =d  S)N)r/   )r   indexr   r   r   __delitem__   s    zSubPattern.__delitem__c             C   s1   t  | t  r& t |  j |  j |  S|  j | S)N)r>   slicer-   r.   r/   )r   rJ   r   r   r   __getitem__   s    zSubPattern.__getitem__c             C   s   | |  j  | <d  S)N)r/   )r   rJ   coder   r   r   __setitem__   s    zSubPattern.__setitem__c             C   s   |  j  j | |  d  S)N)r/   insert)r   rJ   rN   r   r   r   rP      s    zSubPattern.insertc             C   s   |  j  j |  d  S)N)r/   r"   )r   rN   r   r   r   r"      s    zSubPattern.appendc             C   s  |  j  r |  j  Sd } } t t t t t t f } t t f } xy|  j	 D]n\ } } | t
 k r t d } d } xB | d D]6 } | j   \ }	 }
 t | |	  } t | |
  } q{ W| | } | | } qH | t k r| j   \ } } | | } | | } qH | t k r:| d j   \ } } | | } | | } qH | | k r| d j   \ } } | | | d } | | | d } qH | | k r| d } | d } qH | t k rH PqH qH Wt | t d  t | t  f |  _  |  j  S)Nr   r      )r0   ANYRANGEr9   LITERALNOT_LITERALCATEGORY
MIN_REPEAT
MAX_REPEATr/   r:   r   getwidthminmaxCALL
SUBPATTERNSUCCESS)r   lohi	UNITCODESREPEATCODESrB   rC   r   jlhr   r   r   rY      sD    	





%zSubPattern.getwidth)r*   r+   r,   r   r<   rG   rI   rK   rM   rO   rP   r"   rY   r   r   r   r   r-   X   s   (r-   c               @   sg   e  Z d  Z d d   Z d d   Z d d d  Z d d	   Z d
 d   Z d d   Z d d   Z	 d S)	Tokenizerc             C   s2   t  | t  |  _ | |  _ d |  _ |  j   d  S)Nr   )r>   stristextstringrJ   _Tokenizer__next)r   ri   r   r   r   r      s    		zTokenizer.__init__c             C   s   |  j  t |  j  k r% d  |  _ d  S|  j |  j  |  j  d  } | re |  j re t | d  } n  | d k r y |  j |  j  d } Wn t k
 r t d   Yn X|  j s t |  } n  | | } n  |  j  t |  |  _  | |  _ d  S)Nr   r   r   zbogus escape (end of line))rJ   rH   ri   nextrh   chr
IndexErrorr    )r   charcr   r   r   __next   s     		zTokenizer.__nextr   c             C   s*   | |  j  k r& | r" |  j   n  d Sd S)Nr   r   )rk   rj   )r   rn   skipr   r   r   match   s
    zTokenizer.matchc             C   s   |  j  } |  j   | S)N)rk   rj   )r   thisr   r   r   r      s    	
zTokenizer.getc             C   sN   d } xA t  |  D]3 } |  j } | | k r2 Pn  | | 7} |  j   q W| S)Nr2   )rangerk   rj   )r   ncharsetresult_ro   r   r   r   getwhile   s    	
zTokenizer.getwhilec             C   s   |  j  |  j f S)N)rJ   rk   )r   r   r   r   tell   s    zTokenizer.tellc             C   s   | \ |  _  |  _ d  S)N)rJ   rk   )r   rJ   r   r   r   seek   s    zTokenizer.seekN)
r*   r+   r,   r   rj   rr   r   ry   rz   r{   r   r   r   r   rf      s   	rf   c             C   sd   d d  l  } | j d t d d d |  k o9 d k n pc d |  k oU d k n pc |  d	 k S)
Nr   z*sre_parse.isident() will be removed in 3.5
stacklevelrQ   r   zAZrx   )warningswarnDeprecationWarning)rn   r   r   r   r   isident   s    	r   c             C   s:   d d  l  } | j d t d d d |  k o7 d k SS)Nr   z*sre_parse.isdigit() will be removed in 3.5r|   rQ   09)r   r   r   )rn   r   r   r   r   isdigit   s    	r   c             C   ss   d d  l  } | j d t d d t |  d  s6 d Sx6 |  d d   D]$ } t |  rG t |  rG d SqG Wd S)Nr   z)sre_parse.isname() will be removed in 3.5r|   rQ   Fr   T)r   r   r   r   r   )r#   r   rn   r   r   r   isname   s    	r   c             C   s7  t  j |  } | r | St j |  } | rB | d t k rB | Sy| d d  } | d k r | |  j d t  7} t |  d k r t  n  t t	 | d d   d  d @f S| d k r|  j
 r| |  j d t  7} t |  d	 k r t  n  t t	 | d d   d  f S| d
 k r|  j
 r| |  j d t  7} t |  d k r\t  n  t	 | d d   d  } t |  t | f S| t k r| |  j d t  7} t t	 | d d   d  d @f S| t k rt  n  t |  d k rt t | d  f SWn t k
 rYn Xt d t |    d  S)Nr   r   rQ   r            r      U   
   zbogus escape: %s)ESCAPESr   
CATEGORIESr9   ry   	HEXDIGITSrH   
ValueErrorrT   intrh   rl   	OCTDIGITSDIGITSordr    r!   )sourceescaperN   ro   r   r   r   _class_escape	  sF    	!		

!	r   c             C   s  t  j |  } | r | St j |  } | r2 | Sy| d d  } | d k r | |  j d t  7} t |  d k r t  n  t t | d d   d  d @f S| d k r|  j	 r| |  j d t  7} t |  d k r t  n  t t | d d   d  f S| d	 k ry|  j	 ry| |  j d
 t  7} t |  d k rLt  n  t | d d   d  } t
 |  t | f S| d k r| |  j d t  7} t t | d d   d
  d @f S| t k r|  j t k rJ| |  j   } | d t k rJ| d t k rJ|  j t k rJ| |  j   } t t | d d   d
  d @f Sn  t | d d    } | | j k  r| j |  st d   n  t | f St  n  t |  d k rt t | d  f SWn t k
 rYn Xt d t |    d  S)Nr   rQ   r   r   r   r   r   r   r   r   r   r   zcannot refer to open groupzbogus escape: %s)r   r   r   ry   r   rH   r   rT   r   rh   rl   r   r   rk   r   r)   r    GROUPREFr   r!   )r   r   staterN   ro   groupr   r   r   _escape3  s\    	!		

! $
	r   r   c             C   s  g  } | j  } |  j } x[ | t |  |   | d  r@ q n  | sJ Pn  |  j sc | d d  rg Pq t d   q t |  d k r | d St |  } | j  } xw d  } xj | D]= }	 |	 s Pn  | d  k r |	 d } q |	 d | k r Pq q Wx | D] }	 |	 d =q W| |  q Pq xz | D]0 }	 t |	  d k sR|	 d d t k r&Pq&q&Wg  }
 |
 j  } x | D] }	 | |	 d  qpW| t |
 f  | S| j  t	 d  | f f  | S)N|)r   zpattern not properly closedr   )
r"   rr   _parserk   r    rH   r-   rT   r9   r:   )r   r   nesteditemsitemsappendsourcematch
subpatternsubpatternappendprefixitemset	setappendr   r   r   
_parse_subk  sR    			
&	r   c             C   s   t  |  |  } |  j d  rN t  |  |  } |  j d  rT t d   qT n d  } |  j r |  j d d  r t d   n  t |  } | j t | | | f f  | S)Nr   z/conditional backref with more than two branchesr   r   zpattern not properly closed)r   rr   r    rk   r-   r"   r=   )r   r   rD   rE   rF   r   r   r   r   _parse_sub_cond  s    r   z|)z=!<z=!c       !      C   s7  t  |  } | j } |  j } |  j } t } t } t } t }	 t }
 x|  j	 | k r[ Pn  |   } | d  k rt Pn  | j
 t @r | t k r qH n  | d k r x |   } | d. k r Pq q qH q n  | r | d t k r | t t |  f  qH | d k rg  } | j } | d  r0| t d  f  n  | d  d   } x|   } | d k rh| | k rhPnO | r| d d k rt |  |  } n' | rt t |  f } n t d   | d	  r|   } | d k r| d t k r| d
 d } n  | |  | t t d	  f  Pq| r| d d k rEt |  |  } n t t |  f } | d t k sw| d t k rt d   n  | d
 } | d
 } | | k  rt d   n  | t | | f f  qt d   qC| d t k r| d
 d } n  | |  qC| |  d
 k rB| d d t k rB| | d  q0| |  d k r| d d t k r| d
 d t k r| t | d
 d
 f  q0| t | f  qH | rL| d t k rL| d k rd/ \ } } n| d k rd t } } n| d k rd
 t } } nw| d k r~|  j	 d k rJ| t t |  f  qH n  |  j   } d t } } d } } x# |  j	 t k r| |  j   } qpW| d  rx) |  j	 t k r| |   } qWn | } | d  s | t t |  f  |  j |  qH n  | r0t |  } | t k r0t d   q0n  | rt |  } | t k r]t d   n  | | k  r{t d   q{qn t d   | r| d0 d   } n d  } | s| |  d
 k r| d d t k rt d   n  | d d |
 k rt d   n  | d  r0t | | | f f | d1 <q0t | | | f f | d2 <qH | d k rk| t  d  f  qH | d k rd
 } d  } d  } | d  r
d } | d  rM| d  r:d } xA |   } | d  k rt d   n  | d k rPn  | | } qd
 } | st d   n  | j!   sJt d  |   qJq
| d!  rd } xA |   } | d  k rst d   n  | d" k rPn  | | } qO| st d   n  | j!   st d# |   n  | j" j |  } | d  k r d$ j# |  } t |   n  | t$ | f  qH q
|   } | d  k r:t d%   n  t d& |   q
| d'  rbd } q
| d  rx, |  j	 d  k s|  j	 d" k rPn  |   qq| d"  sH t d(   qH qH q
|  j	 | k r	|   } d
 } | d k r	|  j	 |	 k r	t d)   n  d3 } |   } n  t% |  |  } | d"  sB	t d(   n  | d! k rg	| t& | | f f  qH | t' | | f f  qH q
| d  rs
d } xA |   } | d  k r	t d   n  | d" k r	Pn  | | } q	d } | s	t d   n  | j!   r?
| j" j |  } | d  k rp
d$ j# |  } t |   qp
q
y t |  } Wq
t( k
 ro
t d*   Yq
Xq
|  j	 t) k r
t d%   n  x- |  j	 t) k r
| j
 t) |   B| _
 q
Wn  | re| d k r
d  } n | j* |  } | rt+ |  | |  } n t% |  |  } | d"  s0t d(   n  | d  k	 rL| j, |  n  | t- | | f f  q0x |   } | d  k rt d%   n  | d" k rPn  t d+   qhqH | d k r| t t. f  qH | d, k r| j t t/ f  qH | r$| d d k r$t0 |  | |  }  | |   qH t d-   qH | S)4N#r   r   [^]r   z$unexpected end of regular expression-r   zbad character rangerQ   ?r   +{}r2   ,z"the repetition number is too largezbad repeat intervalznot supportedznothing to repeatzmultiple repeat.(P<zunterminated name>zmissing group namezbad character in group name %r=r   z&bad character in backref group name %rzunknown group name: {0!r}zunexpected end of patternzunknown specifier: ?P%s:zunbalanced parenthesiszsyntax errorzbad character in group namezunknown extension$zparser error)Nr   )r   r   r   r   r   )1r-   r"   r   rr   rH   _PATTERNENDERS_ASSERTCHARS_LOOKBEHINDASSERTCHARS_REPEATCODESrk   r   SRE_FLAG_VERBOSE
WHITESPACESPECIAL_CHARSrT   r   NEGATEr   r    r9   rS   rU   REPEAT_CHARSr   rz   r   r{   r   OverflowErrorATrW   rX   rR   isidentifierr   formatr   r   ASSERT
ASSERT_NOTr   FLAGSr&   r   r(   r]   AT_BEGINNINGAT_ENDr   )!r   r   r   r   	sourcegetr   _lenPATTERNENDERSASSERTCHARSLOOKBEHINDASSERTCHARSrb   rs   r   r   startcode1code2r_   r`   rZ   r[   herer   r   r#   rD   rn   r$   msgdirpcondnamerN   r   r   r   r     s   									
 

&:
-				
				r   c             C   s_   t  |  t  rB | t @s& | t O} q[ | t @r[ t d   q[ n | t @r[ t d   n  | S)Nz(ASCII and UNICODE flags are incompatiblez+can't use UNICODE flag with a bytes pattern)r>   rg   SRE_FLAG_ASCIISRE_FLAG_UNICODEr   )srcr   r   r   r   	fix_flags  s    


r   Nc             C   s   t  |   } | d  k r$ t   } n  | | _ |  | _ t | | d  } t |  | j j  | j _ | j   } | d k r t d   n | r t d   n  | t	 @r | j
   n  | t @r | j j t @r t |  | j j  S| S)Nr   r   zunbalanced parenthesisz-bogus characters at end of regular expression)rf   r   r   rg   r   r   r.   r   r    SRE_FLAG_DEBUGr<   r   parse)rg   r   r.   r   r   tailr   r   r   r     s"    		
r   c                sl  t  |   } | j } g    g   g    j }     f d d   } x|   } | d  k rd Pn  | d d k r| d } | d k rd } | j d  r xD |   }	 |	 d  k r t d	   n  |	 d
 k r Pn  | |	 7} q n  | s t d   n  y+ t |  }
 |
 d k  r%t d   n  Wnn t k
 r| j   sQt d   n  y | j | }
 Wn- t	 k
 rd j
 |  } t |   Yn XYn X| |
  q| d k r| j t k r| |   7} | j t k r| |   7} qn  | t t | d d   d  d @  q| t k rd } | j t k r| |   7} | t k r| d t k r| j t k r| |   7} d } | t t | d d   d  d @  qn  | s| t | d d     qqy t t | d  } Wn t	 k
 rYn X| |  qK | |  qK  r= j d j    n  t |  t  sbd d    D  n     f S)Nc                sV    r,  j  d j     d  d   =n    j  t   |  f   j  d   d  S)Nr2   )r"   joinrH   )rJ   )r   literalliteralsr   r   addgroup  s
    z parse_template.<locals>.addgroupr   r   r   gr2   r   zunterminated group namer   zmissing group nameznegative group numberzbad character in group namezunknown group name: {0!r}r   r   r   FrQ   Tc             S   s1   g  |  ]' } | d  k r d  n | j  d   q S)Nzlatin-1)encode).0r   r   r   r   
<listcomp>X  s   	 z"parse_template.<locals>.<listcomp>)rf   r   r"   rr   r    r   r   r   
groupindexKeyErrorr   rm   rk   r   rl   r   r   r   r>   rg   )r   r.   r   sgetlappendr   rs   ro   r#   rn   rJ   r   isoctalr   )r   r   r   r   parse_template  s    			
	*- r   c       	      C   s   | j  } | j d  d  } |  \ } } | d  d   } yJ xC | D]; \ } } | |  | | <} | d  k rB t d   qB qB WWn t k
 r t d   Yn X| j |  S)Nr   zunmatched groupzinvalid group reference)r   ri   r    rm   r   )	templaterr   r   sepr   r   rJ   r   r   r   r   r   expand_template[  s    	r   ):__doc__sre_constants_srer   r   r   r   r   r   r   r   rT   r   r   r   AT_BEGINNING_STRINGAT_BOUNDARYAT_NON_BOUNDARYr9   rV   CATEGORY_DIGITCATEGORY_NOT_DIGITCATEGORY_SPACECATEGORY_NOT_SPACECATEGORY_WORDCATEGORY_NOT_WORDAT_END_STRINGr   SRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_MULTILINESRE_FLAG_DOTALLr   r   SRE_FLAG_TEMPLATEr   r   r   r-   rf   r   r   r   r   r   r   r   r   r   r   rW   rX   r   r   r   r   r   r   r   r   r   r   <module>   sr   

e4*8; *P