U
    cc                     @   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 krd S t | tr| S | ddS d S )Nasciistrict)
isinstancer   decode)s r   Y/var/www/html/project/venv/lib/python3.8/site-packages/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
k
rZ   Y nX z| }W n t
k
r   |}Y nX | d k	r| }q|d k	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   s     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_rootr6   r   r   r   r#   U   s    zFragmentWrapper.__init__c                 C   s   t | j|S r   )getattrr6   )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   )r6   r$   r   r   r   r&   l   s    zFragmentWrapper.__getitem__c                 C   s
   t | jS r   )boolr6   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   strr6   r'   r   r   r   __str__u   s    zFragmentWrapper.__str__c                 C   s
   t | jS r   r@   r'   r   r   r   __unicode__x   s    zFragmentWrapper.__unicode__c                 C   s
   t | jS r   )r;   r6   r'   r   r   r   r)   {   s    zFragmentWrapper.__len__N)r*   r+   r,   r#   r9   r   r&   r>   r?   rB   rC   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ks&t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   tupleAssertionErrorr   ZTEXTr   r8   r   ZDOCUMENTr   ZDOCTYPEr.   r   r/   r2   r7   r6   rM   r   CommentCOMMENTr   EntityZENTITYr	   matchgroupsr   rE   attribitemsgroupZELEMENTrI   ZfromXmlNamer;   )	r    r"   r%   rT   	namespacerM   attrsr.   valuer   r   r   getNodeDetails   s>    




 zTreeWalker.getNodeDetailsc                 C   sB   t |trtdt|s(|js(td|jr6|dfS |d S d S )NzText nodes have no childrenzNode has no childrenr   r   )r   rO   rP   r;   r   )r    r"   r   r   r   getFirstChild   s
    zTreeWalker.getFirstChildc                 C   sb   t |trL|\}}|dks&td| |dkrDt|r>|d S d S n| S |jrZ|dfS | S )NrK   rL   r   r   r   )r   rO   rP   r;   r   r   r    r"   r%   r   r   r   getNextSibling   s    
zTreeWalker.getNextSiblingc                 C   sJ   t |tr4|\}}|dks&td| |dkrB|S n|| jkrBd S | S )NrK   rL   r   )r   rO   rP   rG   r?   r^   r   r   r   getParentNode   s    

zTreeWalker.getParentNodeN)r*   r+   r,   r#   r\   r]   r_   r`   r   r   r   r   rD      s
   )	rD   N)
__future__r   r   r   sixr   collectionsr   Zlxmlr   Ztreebuilders.etreer	    r   r   r   objectr   r   r1   r2   rH   rD   r   r   r   r   <module>   s   	&	+