B
    ¦�2[Ÿ�  ã               @   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   ú(C:\python_env\checklist\lib\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ÚgidZ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-   r/   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   r2   r3   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rÀtƒ  x:t|d ƒD ]*\}}|r¬t|d d ƒ | |d ¡ q�W q|t	k�r|\}}	}
td|ƒ |	 |d ¡ |
�r˜t|d d ƒ |
 |d ¡ qt
||ƒ�rŽd}x\|D ]T}t
|tƒ�rX|�sDtƒ  | |d ¡ d}n"|�sjtd	dd� t|dd� d}�q(W |�s˜tƒ  qtd|ƒ qW d S )
NTz  Ú )Úendé   ZORZELSEFú )ÚtupleÚlistr3   ÚprintÚstrÚINÚBRANCHÚ	enumerateÚdumpÚGROUPREF_EXISTSÚ
isinstancer1   )r   ÚlevelÚnlZseqtypesÚopÚavr   r   Ú	condgroupÚitem_yesÚitem_nor   r   r   r@   v   sH     




zSubPattern.dumpc             C   s
   t | jƒS )N)Úreprr3   )r   r   r   r   Ú__repr__ž   s    zSubPattern.__repr__c             C   s
   t | jƒS )N)r!   r3   )r   r   r   r   Ú__len__    s    zSubPattern.__len__c             C   s   | j |= d S )N)r3   )r   Úindexr   r   r   Ú__delitem__¢   s    zSubPattern.__delitem__c             C   s&   t |tƒrt| j| j| ƒS | j| S )N)rB   Úslicer1   r2   r3   )r   rM   r   r   r   Ú__getitem__¤   s    
zSubPattern.__getitem__c             C   s   || j |< d S )N)r3   )r   rM   Úcoder   r   r   Ú__setitem__¨   s    zSubPattern.__setitem__c             C   s   | j  ||¡ d S )N)r3   Úinsert)r   rM   rQ   r   r   r   rS   ª   s    zSubPattern.insertc             C   s   | j  |¡ d S )N)r3   r#   )r   rQ   r   r   r   r#   ¬   s    zSubPattern.appendc       	      C   sê  | j d k	r| j S d }}�x®| jD �]¢\}}|tkr„t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   r7   éÿÿÿÿé   )r4   r3   r>   Ú	MAXREPEATr*   ÚminÚmaxÚCALLÚ
SUBPATTERNÚ_REPEATCODESÚ
_UNITCODESÚGROUPREFr2   r   rA   ÚSUCCESS)	r   ÚloÚhirE   rF   r   ÚjÚlÚhr   r   r   r*   ®   sZ    












zSubPattern.getwidth)N)r   )r   r   r   r    r@   rK   rL   rN   rP   rR   rS   r#   r*   r   r   r   r   r1   m   s   

(r1   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   )rB   r<   ÚistextÚstringÚdecoded_stringrM   ÚnextÚ_Tokenizer__next)r   rg   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   r7   zbad escape (end of pattern))rM   rh   Ú
IndexErrorri   r%   rg   r!   )r   rM   Úcharr   r   r   Z__nexté   s    
zTokenizer.__nextc             C   s   || j kr|  ¡  dS dS )NTF)ri   rj   )r   rl   r   r   r   Úmatchù   s    
zTokenizer.matchc             C   s   | j }|  ¡  |S )N)ri   rj   )r   Úthisr   r   r   r&   þ   s    zTokenizer.getc             C   s:   d}x0t |ƒD ]$}| j}||kr"P ||7 }|  ¡  qW |S )Nr5   )Úrangeri   rj   )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 )Nr5   zmissing group namezmissing %s, unterminated namer7   )ri   rj   r%   r!   )r   Z
terminatorrr   rt   r   r   r   Úgetuntil  s    


zTokenizer.getuntilc             C   s   | j t| jpdƒ S )Nr5   )rM   r!   ri   )r   r   r   r   Úpos  s    zTokenizer.posc             C   s   | j t| jpdƒ S )Nr5   )rM   r!   ri   )r   r   r   r   Útell  s    zTokenizer.tellc             C   s   || _ |  ¡  d S )N)rM   rj   )r   rM   r   r   r   Úseek   s    zTokenizer.seekr   c             C   s   t || j|  ¡ | ƒS )N)r%   rg   rx   )r   ÚmsgÚoffsetr   r   r   r%   $  s    zTokenizer.errorN)r   )r   r   r   r    rj   rm   r&   ru   rv   r0   rw   rx   ry   r%   r   r   r   r   rd   ß   s   		rd   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�r¨t‚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   r7   rU   r   é   zincomplete escape %sé   r   é   ÚUé   é
   éÿ   z.octal escape value %s outside of range 0-0o377zbad escape %s)ÚESCAPESr&   Ú
CATEGORIESr=   ru   Ú	HEXDIGITSr!   r%   ÚLITERALÚintrf   ÚchrÚ	OCTDIGITSÚDIGITSÚ
ValueErrorÚASCIILETTERSÚord)r.   ÚescaperQ   rt   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 )Nr7   rU   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ƒ   ru   r…   r!   r%   r†   r‡   rf   rˆ   r‰   rŠ   ri   r"   r-   r/   r]   rŒ   r�   r‹   )r.   rŽ   ÚstaterQ   rt   Úgroupr   r   r   Ú_escapeW  sn    







r“   c             C   s@   t t| ƒƒt | ƒkr| S g }x| D ]}||kr"| |¡ q"W |S )N)r!   Úsetr#   )ÚitemsZnewitemsÚitemr   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= q¤W |  |	¡ qfP qfW g }x€|D ]b}
t|
ƒdkràP |
d \}}|tk�r|  ||f¡ qÎ|tk�r.|d d tk	�r.| 	|¡ qÎP qÎW |  tt
|ƒf¡ |S |  td |ff¡ |S )Nr7   ú|r   )r#   rm   rx   Ú_parser!   r1   r†   r=   ÚNEGATEÚextendr—   r>   )r.   r‘   ÚverboseÚnestedr•   ZitemsappendÚsourcematchÚstartÚ
subpatternÚprefixr–   r”   rE   rF   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ržt| ||ƒ}||ƒ 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�rØdd l}|jd|dk�rždn|dk�r¬dn|dk�rºd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�rœdd l}|jd|  ¡ d  t|d	 d
� t
|
|ƒf}|d t
k�sÄ|d t
k�rìd||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!ƒ�r¸x"| jtk�r´||ƒ 7 }�qšW 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.¡}!|! %¡ �s¾d/|! }|  |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�rÔd }�nT|dk�rx4| jd k�r |  d6|  ¡ |  ¡‚|ƒ d1k�ràP �qàW 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�r¶d |_*|d1ƒ�sÔ|  d:|  ¡ |  ¡‚|d0k�rð|t-|#|ffƒ q&|t.|#|ffƒ q&�n"|d)k�
rv|  $d1¡}%|% %¡ �	rX|j& |%¡}&|&d k�	rèd2|% }|  |t|%ƒd ¡‚n�yt|%ƒ}&|&dk �	rpt/‚W n4 t/k
�	r¦   d/|% }|  |t|%ƒd ¡d ‚Y nX |&�	sÂ|  d;t|%ƒd ¡‚|&t0k�	rèd<|& }|  |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¬|�
rîdd l}|jd?| j5d d@… t| j5ƒd@k�
rÚdAn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   ú[r7   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 %drU   zbad character range %s-%sú?)r   r7   r   ú+ú{ú}r5   ú,z"the repetition number is too largez"min repeat greater than max repeatzunsupported quantifier %rrT   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)@r1   r#   r&   rm   r!   r�   ri   Ú
WHITESPACEr“   ÚSPECIAL_CHARSr†   rx   ÚwarningsÚwarnÚFutureWarningr%   r�   r=   ÚRANGEr—   ÚNOT_LITERALrS   rš   ÚREPEAT_CHARSrV   rŠ   ry   r‡   ÚOverflowErrorÚAssertionErrorÚATr[   rZ   Ú
MIN_REPEATÚ
MAX_REPEATÚANYrv   Úisidentifierr   r-   r/   r]   r   r"   r¢   ÚASSERTÚ
ASSERT_NOTr‹   r$   r™   rA   ÚFLAGSÚ_parse_flagsrg   ÚDeprecationWarningr   ÚSRE_FLAG_VERBOSEr   r)   rz   r,   ZAT_BEGINNINGZAT_ENDro   )/r.   r‘   rœ   r�   Zfirstr    ZsubpatternappendÚ	sourcegetrž   Ú_lenZ_ordrn   rQ   Úherer”   Z	setappendr¿   ZnegateZcode1ZthatZcode2rz   r_   r`   rW   rX   rl   r–   r’   Ú	add_flagsÚ	del_flagsr+   rŸ   r'   r(   Údirr   ZcondnamerG   rH   rI   r   ZerrZsub_verboser   rE   rF   r   r   r   r™   Û  sP   








 


















































*




r™   c             C   s  | j }d}d}|dkrÌx´t| }| jr>|dkrTd}|  |¡‚n|dkrTd}|  |¡‚||O }|t@ r~|t@ |kr~d}|  |¡‚|ƒ }|d kr–|  d¡‚|d	kr P |tkr| ¡ r´d
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|ƒ¡‚x€t| }|t@ �rld}|  |¡‚||O }|ƒ }|d k�rŽ|  d¡‚|dk�ršP |tk�rL| ¡ �r²d
nd}|  |t|ƒ¡‚�qLW |dk�sÚt	‚|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 flagr7   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Î   rf   r%   Ú
TYPE_FLAGSÚisalphar!   r   ÚGLOBAL_FLAGSrÆ   )r.   r‘   rl   rÒ   rÕ   rÖ   Úflagrz   r   r   r   rÏ   K  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)rB   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s¦t‚| d¡‚|t@ rÀ| ¡  |S )Nr   Tr¹   zunbalanced parenthesis)rd   r   r   r<   r¢   rÑ   r   ry   rà   r2   ri   rÆ   r%   ÚSRE_FLAG_DEBUGr@   )r<   r   r2   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
¡}| ¡ rÈy|| }	W n  tk
rÄ   t	d| ƒ‚Y nX nlyt
|ƒ}	|	dk rÞt‚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ƒ�sêdd„ ˆD ƒ‰ˆ ˆfS )Nc                sX   | ˆj krˆ d|  |¡‚ˆr8ˆ d ˆ¡¡ ˆd d …= ˆ  tˆƒ| f¡ ˆ d ¡ d S )Nzinvalid group reference %dr5   )r"   r%   r#   Újoinr!   )rM   rw   )r"   ÚliteralÚliteralsr2   r   r   r   ÚaddgroupÀ  s    

z parse_template.<locals>.addgroupr   r   r7   Úgr5   r¶   z	missing <r·   zunknown group name %rzbad character in group name %rzinvalid group reference %dr�   r€   r‚   FrU   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>)rd   r&   r#   Ú
groupindexrm   r%   rv   rË   ÚKeyErrorrk   r‡   r‹   r!   r$   ri   r‰   rˆ   rŠ   rƒ   rŒ   rã   rB   r<   )r.   r2   ZsgetZlappendræ   rë   rn   rt   r'   rM   Zisoctalr   )r"   rä   rå   r2   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’   rg   rk   r%   rã   )Útemplaterm   rç   Zemptyr"   rå   rM   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   r1   rd   r�   r“   r—   r¢   r™   rÏ   rà   râ   rí   rï   r   r   r   r   Ú<module>   sl   






#rH0A	:
  r<
 U