U
    <ßôgÉ  ã                   @   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   úC/tmp/pip-unpacked-wheel-jqcau075/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 |¡ | ¡ }q˜d | _d | _d S ©N)ZelementtreeÚchildrenZdocinfoZinternalDTDÚappendÚDoctyper   Ú	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   r0   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.getnextNr1   r   r   r   r   r2   K   s   r2   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 )r3   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   r3   T   s   r3   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ÚfragmentChildrenr2   r   r   ÚNonRecursiveTreeWalkerr$   r   Ú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ƒrŽt|dƒsŽtjt|jƒfS |jtjkrªtjt|jƒfS |jtjkrÎt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   r9   r   ZDOCUMENTr   ZDOCTYPEr/   r   r0   r3   r8   r7   rO   r   ÚCommentÚCOMMENTr   ÚEntityZENTITYr	   ÚmatchÚgroupsr   rF   ÚattribÚitemsÚgroupZELEMENTrK   ÚfromXmlNamer<   )	r!   r#   r&   rV   Ú	namespacerO   Ú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   rQ   rR   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 )NrM   rN   r   r   r    )r   rQ   rR   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 )NrM   rN   r   )r   rQ   rR   rH   r@   ra   r   r   r   ÚgetParentNodeÍ   s    

zTreeWalker.getParentNodeN)r+   r,   r-   r$   r_   r`   rb   rc   r   r   r   r   rE      s
   )	rE   N)Ú
__future__r   r   r   Úsixr   Úcollectionsr   Úlxmlr   Ztreebuilders.etreer	   Ú r   r   r   Úobjectr   r   r2   r3   rI   rE   r   r   r   r   Ú<module>   s   	&	+