B
    @)H[H  ã               @   sj   d dl mZmZmZ d dlmZ d dlZd dlmZ ddl	m
Z
 ddlmZ e d	¡Zd
d„ ZeeƒZdS )é    )Úabsolute_importÚdivisionÚunicode_literals)ÚOrderedDictN)Ústring_typesé   )Úbaseé   )ÚmoduleFactoryFactoryz{([^}]*)}(.*)c                s,   | }|  d¡j‰ G ‡ fdd„dtjƒ}tƒ S )NÚ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dkrVtjfS |jdkr|tj	|j
| d¡| d¡fS |jˆ kr’tj|j
fS t |jtƒs¬tt|jƒƒ‚t |j¡}|rÊ| ¡ \}}n
d }|j}tƒ }xPt|j ¡ ƒD ]>\}	}
t |	¡}|�r|
|| d¡| 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>ÚpublicIdÚsystemIdr   r	   )Ú
isinstanceÚtupler   ZTEXTÚgetattrÚhasattrÚgetrootr   ZDOCUMENTZDOCTYPEr   ÚgetÚCOMMENTr   ÚAssertionErrorÚtypeÚ
tag_regexpÚmatchÚgroupsr   ÚlistÚattribÚitemsÚgroupZELEMENTÚlen)ÚselfÚnodeÚeltÚ_Úflagr   Ú	namespacer   ÚattrsÚnameÚvalue)ÚElementTreeCommentType© úgC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\pip\pip\_vendor\html5lib\treewalkers\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| |¡ |d d|d fS d S d S )N)r   r   r   r   )r   r   r   r#   Úappend)r$   r%   ÚelementÚkeyÚparentsr(   r.   r.   r/   ÚgetFirstChildH   s    

z1getETreeBuilder.<locals>.TreeWalker.getFirstChildc             S   sž   t |tƒr|\}}}}nd S |dkrLt|ƒrF| |¡ |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#   r1   r   )r$   r%   r2   r3   r4   r(   r.   r.   r/   ÚgetNextSiblingY   s    

z2getETreeBuilder.<locals>.TreeWalker.getNextSiblingc             S   s‚   t |tƒr|\}}}}nd S |dkr:|s,|S |||d fS nD| ¡ }|sJ|S t|d ƒ |¡dksdt‚|t|d ƒ |¡|d fS d S )Nr   r6   r   )r   r   Úpopr   Úcountr   Úindex)r$   r%   r2   r3   r4   r(   Úparentr.   r.   r/   ÚgetParentNodem   s    
z1getETreeBuilder.<locals>.TreeWalker.getParentNodeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   r5   r7   r<   r.   )r-   r.   r/   Ú
TreeWalker   s
   (rA   )ÚCommentr   r   ZNonRecursiveTreeWalkerÚlocals)ÚElementTreeImplementationÚElementTreerA   r.   )r-   r/   ÚgetETreeBuilder   s    nrF   )Ú
__future__r   r   r   Úcollectionsr   ÚreÚpip._vendor.sixr   Ú r   Ú_utilsr
   Úcompiler   rF   ÚgetETreeModuler.   r.   r.   r/   Ú<module>   s   
t