o
    ‹¨Êh™  ã                   @   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
„ 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)Ú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   úQ/var/www/html/env/lib/python3.10/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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)ÚelementtreeÚchildrenÚdocinfoÚinternalDTDÚappendÚDoctyper   Ú	root_nameÚ	public_idÚ
system_urlÚAttributeErrorÚgetrootÚ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__1   ó   
zRoot.__getitem__c                 C   ó   d S r   r   ©r%   r   r   r   r"   4   ó   zRoot.getnextc                 C   s   dS ©Nr	   r   r/   r   r   r   Ú__len__7   r0   zRoot.__len__N)Ú__name__Ú
__module__Ú__qualname__r(   r,   r"   r2   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%   r7   r8   r   r9   r   r   r   r(   <   s   
zDoctype.__init__c                 C   s   | j jd S r1   )r7   r   r/   r   r   r   r"   E   ó   zDoctype.getnextN©r3   r4   r5   r(   r"   r   r   r   r   r   ;   s    	r   c                   @   r6   )ÚFragmentRootc                    s$   ‡ fdd„|D ƒˆ _ d  ˆ _ˆ _d S )Nc                    s   g | ]}t ˆ |ƒ‘qS r   )ÚFragmentWrapper)Ú.0Úchildr/   r   r   Ú
<listcomp>K   s    z)FragmentRoot.__init__.<locals>.<listcomp>)r   r#   r$   )r%   r   r   r/   r   r(   J   s   zFragmentRoot.__init__c                 C   r.   r   r   r/   r   r   r   r"   N   r0   zFragmentRoot.getnextNr;   r   r   r   r   r<   I   s    r<   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 )r=   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$   )r7   ÚobjÚhasattrr   r#   r$   )r%   Úfragment_rootrA   r   r   r   r(   S   s   
zFragmentWrapper.__init__c                 C   s   t | j|ƒS r   )ÚgetattrrA   )r%   r8   r   r   r   Ú__getattr___   r:   zFragmentWrapper.__getattr__c                 C   s2   | j j}| | ¡}|t|ƒd k r||d  S d S r1   )r7   r   ÚindexÚlen)r%   ÚsiblingsÚidxr   r   r   r"   b   s
   
zFragmentWrapper.getnextc                 C   r)   r   )rA   r*   r   r   r   r,   j   r-   zFragmentWrapper.__getitem__c                 C   ó
   t | jƒS r   )ÚboolrA   r/   r   r   r   Ú__bool__m   r-   zFragmentWrapper.__bool__c                 C   r.   r   r   r/   r   r   r   Ú	getparentp   r0   zFragmentWrapper.getparentc                 C   rJ   r   ©ÚstrrA   r/   r   r   r   Ú__str__s   r-   zFragmentWrapper.__str__c                 C   rJ   r   rN   r/   r   r   r   Ú__unicode__v   r-   zFragmentWrapper.__unicode__c                 C   rJ   r   )rG   rA   r/   r   r   r   r2   y   r-   zFragmentWrapper.__len__N)r3   r4   r5   r(   rE   r"   r,   rL   rM   rP   rQ   r2   r   r   r   r   r=   R   s    r=   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ÚfragmentChildrenr<   r   r
   ÚNonRecursiveTreeWalkerr(   r   Ú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ƒ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ƒ}i }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
   ÚTEXTr   rD   r   ÚDOCUMENTr   ÚDOCTYPEr8   r   r9   r=   rB   rA   r\   r   ÚCommentÚCOMMENTr#   ÚEntityÚENTITYr   ÚmatchÚgroupsrS   ÚattribÚitemsÚgroupÚELEMENTrX   ÚfromXmlNamerG   )	r%   r'   r+   rf   Ú	namespacer\   Úattrsr8   Ú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   r^   rG   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 )NrZ   r[   r#   r   r$   )r   r^   rG   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 )NrZ   r[   r#   )r   r^   rU   rM   rr   r   r   r   ÚgetParentNodeË   s   

ýzTreeWalker.getParentNodeN)r3   r4   r5   r(   rp   rq   rs   rt   r   r   r   r   rR   }   s    )	rR   N)Ú
__future__r   r   r   Úsixr   Úlxmlr   Útreebuilders.etreer   Ú r
   r   r   Úobjectr   r   r<   r=   rV   rR   r   r   r   r   Ú<module>   s    	&	+