U ��.e��@sjddlmZmZmZddlmZddlZddlmZddl m Z ddl m Z e� d �Zd d �Ze e�ZdS) �)�absolute_import�division�unicode_literals)� OrderedDictN)� string_types�)�base�)�moduleFactoryFactoryz {([^}]*)}(.*)cs,|}|�d�j�G�fdd�dtj�}t�S)NZasdcs4eZdZdZ�fdd�Zdd�Zdd�Zdd �Zd S) z#getETreeBuilder..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 sHt|t�r2|\}}}}|dkr.tjt||�fS|}t|d�sD|��}|jdkrVtjfS|jdkr|tj |j |� d�|� d�fS|j�kr�tj |j fSt|jt �s�tt|j���t�|j�}|r�|��\}}n d}|j}t�}t|j���D]>\} } t�| �}|�r| ||�d�|�d�f<q�| |d| f<q�tj|||t|��p@|j fSdS) N��text�tail�tag)Z DOCUMENT_ROOTZDOCUMENT_FRAGMENTz ZpublicIdZsystemIdrr )� isinstance�tuplerZTEXT�getattr�hasattrZgetrootrZDOCUMENTZDOCTYPEr �get�COMMENTr�AssertionError�type� tag_regexp�match�groupsr�listZattrib�items�groupZELEMENT�len) �self�nodeZelt�_�flagr� namespacerZattrs�name�value�ZElementTreeCommentType��J/usr/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/etree.py�getNodeDetails s@     �    �z2getETreeBuilder..TreeWalker.getNodeDetailscSstt|t�r|\}}}}n|dgdf\}}}}|dkr8dS|jrJ|||dfSt|�rl|�|�|dd|dfSdSdS)Nr r r)rrr r�append�rr�element�key�parentsr!r&r&r'� getFirstChildHs   z1getETreeBuilder..TreeWalker.getFirstChildcSs�t|t�r|\}}}}ndS|dkrLt|�rF|�|�|dd|dfSdSnN|jrf|dkrf|||dfS|t|d�dkr�|d|d|d|dfSdSdS)Nr rr �����r)rrrr)r r*r&r&r'�getNextSiblingYs   z2getETreeBuilder..TreeWalker.getNextSiblingcSs�t|t�r|\}}}}ndS|dkr:|s,|S|||dfSnD|��}|sJ|St|d��|�dksdt�|t|d��|�|dfSdS)Nr r/r)rr�popr�countr�index)rrr+r,r-r!�parentr&r&r'� getParentNodems z1getETreeBuilder..TreeWalker.getParentNodeN)�__name__� __module__� __qualname__�__doc__r(r.r0r5r&r%r&r'� TreeWalkers  (r:)�CommentrrZNonRecursiveTreeWalker�locals)ZElementTreeImplementationZ ElementTreer:r&r%r'�getETreeBuilders nr=)Z __future__rrr� collectionsr�reZpip._vendor.sixr�rZ_utilsr �compilerr=ZgetETreeModuler&r&r&r'�s     t