o
    V=ñ^É  ã                   @   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 )NÚasciiÚstrict)Ú
isinstancer   Údecode)Ús© r   úA/usr/lib/python3/dist-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r"| j t| t|jjƒt|jjƒt|jj	ƒƒ¡ W n	 t
y,   Y nw z| ¡ }W n t
y>   |}Y nw | ¡ d urO| ¡ }| ¡ d usE|d ura| j |¡ | ¡ }|d usSd | _d | _d S ©N)ZelementtreeÚchildrenZdocinfoZinternalDTDÚappendÚDoctyper   Z	root_nameÚ	public_idZ
system_urlÚAttributeErrorZgetrootZgetpreviousÚgetnextÚtextÚtail)ÚselfÚetÚnoder   r   r   Ú__init__   s6   



ý€ÿÿÿþ
zRoot.__init__c                 C   ó
   | j | S r   )r   ©r   Úkeyr   r   r   Ú__getitem__3   ó   
zRoot.__getitem__c                 C   ó   d S r   r   ©r   r   r   r   r   6   ó   zRoot.getnextc                 C   s   dS ©Nr
   r   r)   r   r   r   Ú__len__9   r*   zRoot.__len__N)Ú__name__Ú
__module__Ú__qualname__r"   r&   r   r,   r   r   r   r   r      s
    r   c                   @   ó   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   r1   r2   r   r3   r   r   r   r"   >   s   
zDoctype.__init__c                 C   s   | j jd S r+   )r1   r   r)   r   r   r   r   G   ó   zDoctype.getnextN©r-   r.   r/   r"   r   r   r   r   r   r   =   s    	r   c                   @   r0   )Ú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   r(   r   r   r)   r   r   r   r   P   r*   zFragmentRoot.getnextNr5   r   r   r   r   r6   K   s    r6   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 )r7   c                 C   sV   || _ || _t| jdƒrt| jjƒ| _nd | _t| jdƒr&t| jjƒ| _d S d | _d S )Nr   r   )r1   ÚobjÚhasattrr   r   r   )r   Zfragment_rootr;   r   r   r   r"   U   s   
zFragmentWrapper.__init__c                 C   s   t | j|ƒS r   )Úgetattrr;   )r   r2   r   r   r   Ú__getattr__a   r4   zFragmentWrapper.__getattr__c                 C   s2   | j j}| | ¡}|t|ƒd k r||d  S d S r+   )r1   r   ÚindexÚlen)r   ZsiblingsÚidxr   r   r   r   d   s
   
zFragmentWrapper.getnextc                 C   r#   r   )r;   r$   r   r   r   r&   l   r'   zFragmentWrapper.__getitem__c                 C   ó
   t | jƒS r   )Úboolr;   r)   r   r   r   Ú__bool__o   r'   zFragmentWrapper.__bool__c                 C   r(   r   r   r)   r   r   r   Ú	getparentr   r*   zFragmentWrapper.getparentc                 C   rB   r   ©Ústrr;   r)   r   r   r   Ú__str__u   r'   zFragmentWrapper.__str__c                 C   rB   r   rF   r)   r   r   r   Ú__unicode__x   r'   zFragmentWrapper.__unicode__c                 C   rB   r   )r@   r;   r)   r   r   r   r,   {   r'   zFragmentWrapper.__len__N)r-   r.   r/   r"   r>   r   r&   rD   rE   rH   rI   r,   r   r   r   r   r7   T   s    r7   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ÚfragmentChildrenr6   r   r   ÚNonRecursiveTreeWalkerr"   r   ZInfosetFilterÚfilter)r   Z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ƒr&tjfS t |tƒr5tj	|j
|j|jfS t |tƒrGt|dƒsGtjt|jƒfS |jtjkrUtjt|jƒfS |jtjkrgtjt|jƒdd… fS t t|jƒ¡}|rx| ¡ \}}nd }t|jƒ}tƒ }t|j ¡ ƒD ]&\}}t|ƒ}t|ƒ}t |¡}|r©||| d¡| d¡f< q‰||d |f< q‰tj|| j  !|¡|t"|ƒdkpÁ|jfS )N©r   r   ú%Text nodes are text or tail, found %sÚtagr
   éÿÿÿÿr   r   )#r   Útupler   ZTEXTr   r=   r   ZDOCUMENTr   ZDOCTYPEr2   r   r3   r7   r<   r;   rR   r   ÚCommentÚCOMMENTr   ZEntityZENTITYr	   ÚmatchÚgroupsr   rK   ZattribÚitemsÚgroupZELEMENTrO   ZfromXmlNamer@   )	r   r!   r%   rW   Ú	namespacerR   Zattrsr2   Úvaluer   r   r   ÚgetNodeDetails‹   s<   




ÿzTreeWalker.getNodeDetailsc                 C   s>   t |tƒr	J dƒ‚t|ƒs|jsJ dƒ‚|jr|dfS |d S )NzText nodes have no childrenzNode has no childrenr   r   )r   rT   r@   r   )r   r!   r   r   r   ÚgetFirstChild´   s
   zTreeWalker.getFirstChildc                 C   s`   t |tƒr%|\}}|dv sJ d| ƒ‚|dkr!t|ƒr|d S d S | ¡ S |jr,|dfS | ¡ S )NrP   rQ   r   r   r   )r   rT   r@   r   r   ©r   r!   r%   r   r   r   ÚgetNextSibling½   s   
zTreeWalker.getNextSiblingc                 C   sP   t |tƒr|\}}|dv sJ d| ƒ‚|dkr|S | ¡ S || jv r$d S | ¡ S )NrP   rQ   r   )r   rT   rM   rE   r_   r   r   r   ÚgetParentNodeÍ   s   

ýzTreeWalker.getParentNodeN)r-   r.   r/   r"   r]   r^   r`   ra   r   r   r   r   rJ      s    )	rJ   N)Z
__future__r   r   r   Zsixr   Úcollectionsr   Zlxmlr   Ztreebuilders.etreer	   Ú r   r   r   Úobjectr   r   r6   r7   rN   rJ   r   r   r   r   Ú<module>   s    	&	+