a
    [f                     @   s   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 ddl
mZ ddlmZ dd	lmZ d
d ZG dd deZG dd deZG dd deZG dd deZG dd dejZdS )    )absolute_importdivisionunicode_literals)	text_type)OrderedDict)etree   )
tag_regexp   )base)	_ihatexmlc                 C   s*   | d u rd S t | tr| S | ddS d S )Nasciistrict)
isinstancer   decode)s r   }C:\Users\91910\OneDrive\Desktop\vts_admin_rebuild-master\vts\Lib\site-packages\pip/_vendor/html5lib/treewalkers/etree_lxml.py
ensure_str   s
    
r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Rootc                 C   s   || _ g | _z:|jjrD| jt| t|jjt|jjt|jj	 W n t
yX   Y n0 z| }W n t
y|   |}Y n0 | d ur| }q~|d ur| j| | }qd | _d | _d S N)ZelementtreechildrenZdocinfoZinternalDTDappendDoctyper   Z	root_name	public_idZ
system_urlAttributeErrorgetrootZgetpreviousgetnexttexttail)selfetnoder   r   r   __init__   s,    







zRoot.__init__c                 C   s
   | j | S r   )r   r    keyr   r   r   __getitem__3   s    zRoot.__getitem__c                 C   s   d S r   r   r    r   r   r   r   6   s    zRoot.getnextc                 C   s   dS Nr
   r   r'   r   r   r   __len__9   s    zRoot.__len__N)__name__
__module____qualname__r#   r&   r   r)   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s(   || _ || _|| _|| _d | _d | _d S r   )	root_nodenamer   	system_idr   r   )r    r-   r.   r   r/   r   r   r   r#   >   s    zDoctype.__init__c                 C   s   | j jd S r(   )r-   r   r'   r   r   r   r   G   s    zDoctype.getnextNr*   r+   r,   r#   r   r   r   r   r   r   =   s   	r   c                   @   s   e Zd Zdd Zdd ZdS )FragmentRootc                    s$    fdd|D  _ d   _ _d S )Nc                    s   g | ]}t  |qS r   )FragmentWrapper).0childr'   r   r   
<listcomp>M       z)FragmentRoot.__init__.<locals>.<listcomp>)r   r   r   )r    r   r   r'   r   r#   L   s    zFragmentRoot.__init__c                 C   s   d S r   r   r'   r   r   r   r   P   s    zFragmentRoot.getnextNr0   r   r   r   r   r1   K   s   r1   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )r2   c                 C   sT   || _ || _t| jdr(t| jj| _nd | _t| jdrJt| jj| _nd | _d S )Nr   r   )r-   objhasattrr   r   r   )r    Zfragment_rootr7   r   r   r   r#   U   s    zFragmentWrapper.__init__c                 C   s   t | j|S r   )getattrr7   )r    r.   r   r   r   __getattr__a   s    zFragmentWrapper.__getattr__c                 C   s6   | j j}|| }|t|d k r.||d  S d S d S r(   )r-   r   indexlen)r    Zsiblingsidxr   r   r   r   d   s
    
zFragmentWrapper.getnextc                 C   s
   | j | S r   )r7   r$   r   r   r   r&   l   s    zFragmentWrapper.__getitem__c                 C   s
   t | jS r   )boolr7   r'   r   r   r   __bool__o   s    zFragmentWrapper.__bool__c                 C   s   d S r   r   r'   r   r   r   	getparentr   s    zFragmentWrapper.getparentc                 C   s
   t | jS r   strr7   r'   r   r   r   __str__u   s    zFragmentWrapper.__str__c                 C   s
   t | jS r   rA   r'   r   r   r   __unicode__x   s    zFragmentWrapper.__unicode__c                 C   s
   t | jS r   )r<   r7   r'   r   r   r   r)   {   s    zFragmentWrapper.__len__N)r*   r+   r,   r#   r:   r   r&   r?   r@   rC   rD   r)   r   r   r   r   r2   T   s   r2   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
TreeWalkerc                 C   sJ   t |trt|| _t|}nt | _t|}tj| | t	
 | _d S r   )r   listsetfragmentChildrenr1   r   r   NonRecursiveTreeWalkerr#   r   ZInfosetFilterfilter)r    treer   r   r   r#      s    


zTreeWalker.__init__c           	      C   s  t |tr:|\}}|dv s&J d| tjtt||fS t |trLtjfS t |trjtj	|j
|j|jfS t |trt|dstjt|jfS |jtjkrtjt|jfS |jtjkrtjt|jdd fS tt|j}| r| \}}nd }t|j}t }t|j D ]P\}}t|}t|}t|}|rV|||d|df< n||d |f< qtj|| j !||t"|dkp|jfS d S )Nr   r   %Text nodes are text or tail, found %stagr
   r   r   )#r   tupler   ZTEXTr   r9   r   ZDOCUMENTr   ZDOCTYPEr.   r   r/   r2   r8   r7   rN   r   CommentCOMMENTr   EntityZENTITYr	   matchgroupsr   rF   attribitemsgroupZELEMENTrJ   ZfromXmlNamer<   )	r    r"   r%   rT   	namespacerN   attrsr.   valuer   r   r   getNodeDetails   s<    




zTreeWalker.getNodeDetailsc                 C   sB   t |trJ dt|s(|js(J d|jr6|dfS |d S d S )NzText nodes have no childrenzNode has no childrenr   r   )r   rP   r<   r   )r    r"   r   r   r   getFirstChild   s
    zTreeWalker.getFirstChildc                 C   sb   t |trL|\}}|dv s&J d| |dkrDt|r>|d S d S n| S |jrZ|dfS | S )NrL   rM   r   r   r   )r   rP   r<   r   r   r    r"   r%   r   r   r   getNextSibling   s    
zTreeWalker.getNextSiblingc                 C   sJ   t |tr4|\}}|dv s&J d| |dkrB|S n|| jv rBd S | S )NrL   rM   r   )r   rP   rH   r@   r^   r   r   r   getParentNode   s    

zTreeWalker.getParentNodeN)r*   r+   r,   r#   r\   r]   r_   r`   r   r   r   r   rE      s
   )	rE   N)
__future__r   r   r   pip._vendor.sixr   collectionsr   lxmlr   Ztreebuilders.etreer	    r   r   r   objectr   r   r1   r2   rI   rE   r   r   r   r   <module>   s   	&	+