o
    ؁i                     @   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 g/home/test-dt/pcm-url-check/venv/lib/python3.10/site-packages/pip/_vendor/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pip._vendor.sixr    r   _utilsr
   compiler   rM   getETreeModuler3   r3   r3   r4   <module>   s    
u