o
    ÿ%ße»  ã                   @   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                    s@  t |tƒr|\}}}}|dv rtjt||ƒfS |}t|dƒs"| ¡ }|jdv r+tjfS |jdkr>tj	|j
| d¡| d¡fS |jˆ krItj|j
fS t |jtƒsVJ t|jƒƒ‚t |j¡}|re| ¡ \}}nd }|j}tƒ }t|j ¡ ƒD ]\}	}
t |	¡}|rŒ|
|| d¡| d¡f< qt|
|d |	f< qttj|||t|ƒpž|j
fS )	N©ÚtextÚtailÚtag)ÚDOCUMENT_ROOTÚDOCUMENT_FRAGMENTz
<!DOCTYPE>ÚpublicIdÚsystemIdr   r	   )Ú
isinstanceÚtupler   ÚTEXTÚgetattrÚhasattrÚgetrootr   ÚDOCUMENTÚDOCTYPEr   ÚgetÚCOMMENTr   ÚtypeÚ
tag_regexpÚmatchÚgroupsr   ÚlistÚattribÚitemsÚgroupÚELEMENTÚlen)ÚselfÚnodeÚeltÚ_Úflagr    Ú	namespacer   ÚattrsÚnameÚvalue©ÚElementTreeCommentType© úM/var/www/html/venv/lib/python3.10/site-packages/html5lib/treewalkers/etree.pyÚgetNodeDetails    s<   



ÿ

ÿz2getETreeBuilder.<locals>.TreeWalker.getNodeDetailsc                 S   sp   t |tƒr|\}}}}n
|d g d f\}}}}|dv rd S |jr%|||dfS t|ƒr6| |¡ |d d|d fS d S )Nr   r   r   )r   r   r   r'   Úappend©r(   r)   ÚelementÚkeyÚparentsr,   r3   r3   r4   ÚgetFirstChildH   s   

z1getETreeBuilder.<locals>.TreeWalker.getFirstChildc                 S   s˜   t |tƒr|\}}}}nd S |dkr%t|ƒr#| |¡ |d d|d fS d S |jr2|dkr2|||dfS |t|d ƒd k rJ|d |d  |d |d fS d S )Nr   r   r   éÿÿÿÿr   )r   r   r'   r6   r   r7   r3   r3   r4   ÚgetNextSiblingY   s   

z2getETreeBuilder.<locals>.TreeWalker.getNextSiblingc                 S   s|   t |tƒr|\}}}}nd S |dkr|s|S |||d fS | ¡ }|s$|S t|d ƒ |¡dks1J ‚|t|d ƒ |¡|d fS )Nr   r<   r   )r   r   Úpopr"   ÚcountÚindex)r(   r)   r8   r9   r:   r,   Úparentr3   r3   r4   ÚgetParentNodem   s   
z1getETreeBuilder.<locals>.TreeWalker.getParentNodeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   r;   r=   rB   r3   r1   r3   r4   Ú
TreeWalker   s    (rG   )ÚCommentr   r   ÚNonRecursiveTreeWalkerÚlocals)ÚElementTreeImplementationÚElementTreerG   r3   r1   r4   ÚgetETreeBuilder   s   nrM   )Ú
__future__r   r   r   Úcollectionsr   ÚreÚsixr   Ú r   Ú_utilsr
   Úcompiler   rM   ÚgetETreeModuler3   r3   r3   r4   Ú<module>   s    
u