
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÝPfL  ã               @   s®   d dl mZmZmZ yd dlmZ W n> ek
rb   yd dlmZ W n ek
r\   eZY nX Y nX d dl	Z	d dl
mZ ddlmZ ddlmZ e	jd	ƒZd
d„ ZeeƒZdS )é    )Úabsolute_importÚdivisionÚunicode_literals)ÚOrderedDictN)Ústring_typesé   )Úbaseé   )ÚmoduleFactoryFactoryz{([^}]*)}(.*)c                s,   | }|j dƒj‰ G ‡ fdd„dtjƒ}tƒ S )NZasdc                   s4   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
S )z#getETreeBuilder.<locals>.TreeWalkeraË  Given the particular ElementTree representation, this implementation,
        to avoid using recursion, returns "nodes" as tuples with the following
        content:

        1. The current element

        2. The index of the element relative to its parent

        3. A stack of ancestor elements

        4. A flag "text", "tail" or None to indicate if the current node is a
           text node; either the text or tail of the current element (1)
        c                sL  t |tƒr2|\}}}}|dkr.tjt||ƒfS |}t|dƒsD|jƒ }|jdkrVtjfS |jdkr|tj	|j
|jdƒ|jdƒfS |jˆ kr’tj|j
fS t |jtƒs¬tt|jƒƒ‚tj|jƒ}|rÊ|jƒ \}}n
d }|j}tƒ }xPt|jjƒ ƒD ]>\}	}
tj|	ƒ}|�r|
||jd	ƒ|jd
ƒf< qê|
|d |	f< qêW tj|||t|ƒ�pD|j
fS d S )NÚtextÚtailÚtagÚDOCUMENT_ROOTÚDOCUMENT_FRAGMENTz
<!DOCTYPE>ZpublicIdZsystemIdr   r	   )r   r   )r   r   )Ú
isinstanceÚtupler   ZTEXTÚgetattrÚhasattrZgetrootr   ZDOCUMENTZDOCTYPEr   ÚgetÚCOMMENTr   ÚAssertionErrorÚtypeÚ
tag_regexpÚmatchÚgroupsr   ÚlistZattribÚitemsÚgroupZELEMENTÚlen)ÚselfÚnodeZeltÚ_Úflagr   Ú	namespacer   ZattrsÚnameÚvalue)ÚElementTreeCommentType© ú/usr/lib/python3.6/etree.pyÚgetNodeDetails'   s8    





z2getETreeBuilder.<locals>.TreeWalker.getNodeDetailsc             S   st   t |tƒr|\}}}}n|d g d f\}}}}|dkr8d S |jrJ|||dfS t|ƒrl|j|ƒ |d d|d fS d S d S )Nr   r   r   )r   r   )r   r   r   r   Úappend)r   r    ÚelementÚkeyÚparentsr"   r'   r'   r(   ÚgetFirstChildO   s    

z1getETreeBuilder.<locals>.TreeWalker.getFirstChildc             S   sž   t |tƒr|\}}}}nd S |dkrLt|ƒrF|j|ƒ |d d|d fS d S nN|jrf|dkrf|||dfS |t|d ƒd k r–|d |d  |d |d fS d S d S )Nr   r   r   r   éÿÿÿÿr/   )r   r   r   r*   r   )r   r    r+   r,   r-   r"   r'   r'   r(   ÚgetNextSibling`   s    

z2getETreeBuilder.<locals>.TreeWalker.getNextSiblingc             S   s‚   t |tƒr|\}}}}nd S |dkr:|s,|S |||d fS nD|jƒ }|sJ|S t|d ƒj|ƒdksdt‚|t|d ƒj|ƒ|d fS d S )Nr   r   r/   r/   )r   r   Úpopr   Úcountr   Úindex)r   r    r+   r,   r-   r"   Úparentr'   r'   r(   ÚgetParentNodet   s    
z1getETreeBuilder.<locals>.TreeWalker.getParentNodeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r.   r0   r5   r'   )r&   r'   r(   Ú
TreeWalker   s
   (r:   )ÚCommentr   r   ZNonRecursiveTreeWalkerÚlocals)ZElementTreeImplementationZElementTreer:   r'   )r&   r(   ÚgetETreeBuilder   s    nr=   )Z
__future__r   r   r   Úcollectionsr   ÚImportErrorZordereddictÚdictÚreZpip._vendor.sixr   Ú r   Z_utilsr
   Úcompiler   r=   ZgetETreeModuler'   r'   r'   r(   Ú<module>   s   
t