U ��.e��@s�ddlmZmZmZddlmZddlmZddlm Z ddl m Z ddl m Z d d �Z Gd d �d e�ZGd d�de�ZGdd�de�ZGdd�de�ZGdd�de j�ZdS)�)�absolute_import�division�unicode_literals)� text_type)�etree�)� tag_regexp�)�base)� _ihatexmlcCs*|dkr dSt|t�r|S|�dd�SdS)N�ascii�strict)� isinstancer�decode)�s�r�O/usr/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py� ensure_str s  rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) �RootcCs�||_g|_z:|jjrD|j�t|t|jj�t|jj�t|jj ���Wnt k rZYnXz |� �}Wnt k r�|}YnX|� �dk r�|� �}q�|dk r�|j�|�|� �}q�d|_d|_dS�N)Z elementtree�childrenZdocinfoZ internalDTD�append�DoctyperZ root_name� public_idZ system_url�AttributeErrorZgetrootZ getprevious�getnext�text�tail)�selfZet�noderrr�__init__s,    �       z Root.__init__cCs |j|Sr)r�r�keyrrr� __getitem__1szRoot.__getitem__cCsdSrr�rrrrr4sz Root.getnextcCsdS�Nr rr$rrr�__len__7sz Root.__len__N)�__name__� __module__� __qualname__r r#rr&rrrrrsrc@seZdZdd�Zdd�ZdS)rcCs(||_||_||_||_d|_d|_dSr)� root_node�namer� system_idrr)rr*r+rr,rrrr <s zDoctype.__init__cCs |jjdSr%)r*rr$rrrrEszDoctype.getnextN�r'r(r)r rrrrrr;s rc@seZdZdd�Zdd�ZdS)� FragmentRootcs$�fdd�|D��_d�_�_dS)Ncsg|]}t�|��qSr)�FragmentWrapper)�.0Zchildr$rr� Ksz)FragmentRoot.__init__..)rrr)rrrr$rr JszFragmentRoot.__init__cCsdSrrr$rrrrNszFragmentRoot.getnextNr-rrrrr.Isr.c@sTeZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dS)r/cCsT||_||_t|jd�r(t|jj�|_nd|_t|jd�rJt|jj�|_nd|_dS)Nrr)r*�obj�hasattrrrr)rZ fragment_rootr2rrrr Ss  zFragmentWrapper.__init__cCs t|j|�Sr)�getattrr2)rr+rrr� __getattr___szFragmentWrapper.__getattr__cCs6|jj}|�|�}|t|�dkr.||dSdSdSr%)r*r�index�len)rZsiblings�idxrrrrbs   zFragmentWrapper.getnextcCs |j|Sr)r2r!rrrr#jszFragmentWrapper.__getitem__cCs t|j�Sr)�boolr2r$rrr�__bool__mszFragmentWrapper.__bool__cCsdSrrr$rrr� getparentpszFragmentWrapper.getparentcCs t|j�Sr��strr2r$rrr�__str__sszFragmentWrapper.__str__cCs t|j�Srr<r$rrr� __unicode__vszFragmentWrapper.__unicode__cCs t|j�Sr)r7r2r$rrrr&yszFragmentWrapper.__len__N) r'r(r)r r5rr#r:r;r>r?r&rrrrr/Rs r/c@s4eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd S) � TreeWalkercCsJt|t�rt|�|_t|�}nt�|_t|�}tj�||�t � �|_ dSr) r�list�set�fragmentChildrenr.rr �NonRecursiveTreeWalkerr r Z InfosetFilter�filter)rZtreerrrr ~s   zTreeWalker.__init__c Cszt|t�r&|\}}tjtt||��fSt|t�r8tjfSt|t�rVtj |j |j |j fSt|t �rzt|d�sztjt|j�fS|jtjkr�tjt|j�fS|jtjkr�tjt|j�dd�fSt�t|j��}|r�|��\}}nd}t|j�}i}t|j���D]P\}}t|�}t|�}t�|�}|�r>|||�d�|�d�f<n ||d|f<�q�tj||j� |�|t!|�dk�pr|jfSdS)N�tagr �����rr)"r�tupler ZTEXTrr4rZDOCUMENTrZDOCTYPEr+rr,r/r3r2rFr�Comment�COMMENTrZEntityZENTITYr�match�groupsrAZattrib�items�groupZELEMENTrEZ fromXmlNamer7) rrr"rK� namespacerFZattrsr+�valuerrr�getNodeDetails�s<       �zTreeWalker.getNodeDetailscCs|jr|dfS|dSdS)Nrr)r)rrrrr� getFirstChild�szTreeWalker.getFirstChildcCsNt|t�r8|\}}|dkr0t|�r*|dSdSn|��S|jrF|dfS|��S)Nrrr)rrHr7rr�rrr"rrr�getNextSibling�s zTreeWalker.getNextSiblingcCs6t|t�r |\}}|dkr.|Sn||jkr.dS|��S)Nr)rrHrCr;rSrrr� getParentNode�s  zTreeWalker.getParentNodeN)r'r(r)r rQrRrTrUrrrrr@}s  ) r@N)Z __future__rrrZpip._vendor.sixrZlxmlrZtreebuilders.etreer�r r r�objectrrr.r/rDr@rrrr�s      & +