o
    ÿ%ßeÉ  ã                   @   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   úR/var/www/html/venv/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__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   r0   r   r   r   Ú__len__9   r1   zRoot.__len__N)Ú__name__Ú
__module__Ú__qualname__r)   r-   r#   r3   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&   r8   r9   r   r:   r   r   r   r)   >   s   
zDoctype.__init__c                 C   s   | j jd S r2   )r8   r   r0   r   r   r   r#   G   ó   zDoctype.getnextN©r4   r5   r6   r)   r#   r   r   r   r   r   =   s    	r   c                   @   r7   )ÚFragmentRootc                    s$   ‡ fdd„|D ƒˆ _ d  ˆ _ˆ _d S )Nc                    s   g | ]}t ˆ |ƒ‘qS r   )ÚFragmentWrapper)Ú.0Úchildr0   r   r   Ú
<listcomp>M   s    z)FragmentRoot.__init__.<locals>.<listcomp>)r   r$   r%   )r&   r   r   r0   r   r)   L   s   zFragmentRoot.__init__c                 C   r/   r   r   r0   r   r   r   r#   P   r1   zFragmentRoot.getnextNr<   r   r   r   r   r=   K   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%   )r8   ÚobjÚhasattrr   r$   r%   )r&   Úfragment_rootrB   r   r   r   r)   U   s   
zFragmentWrapper.__init__c                 C   s   t | j|ƒS r   )ÚgetattrrB   )r&   r9   r   r   r   Ú__getattr__a   r;   zFragmentWrapper.__getattr__c                 C   s2   | j j}| | ¡}|t|ƒd k r||d  S d S r2   )r8   r   ÚindexÚlen)r&   ÚsiblingsÚidxr   r   r   r#   d   s
   
zFragmentWrapper.getnextc                 C   r*   r   )rB   r+   r   r   r   r-   l   r.   zFragmentWrapper.__getitem__c                 C   ó
   t | jƒS r   )ÚboolrB   r0   r   r   r   Ú__bool__o   r.   zFragmentWrapper.__bool__c                 C   r/   r   r   r0   r   r   r   Ú	getparentr   r1   zFragmentWrapper.getparentc                 C   rK   r   ©ÚstrrB   r0   r   r   r   Ú__str__u   r.   zFragmentWrapper.__str__c                 C   rK   r   rO   r0   r   r   r   Ú__unicode__x   r.   zFragmentWrapper.__unicode__c                 C   rK   r   )rH   rB   r0   r   r   r   r3   {   r.   zFragmentWrapper.__len__N)r4   r5   r6   r)   rF   r#   r-   rM   rN   rQ   rR   r3   r   r   r   r   r>   T   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ƒ}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   ÚTEXTr   rE   r   ÚDOCUMENTr   ÚDOCTYPEr9   r   r:   r>   rC   rB   r]   r   ÚCommentÚCOMMENTr$   ÚEntityÚENTITYr	   ÚmatchÚgroupsr   rT   ÚattribÚitemsÚgroupÚELEMENTrY   ÚfromXmlNamerH   )	r&   r(   r,   rg   Ú	namespacer]   Úattrsr9   Ú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_   rH   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 )Nr[   r\   r$   r   r%   )r   r_   rH   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 )Nr[   r\   r$   )r   r_   rV   rN   rs   r   r   r   ÚgetParentNodeÍ   s   

ýzTreeWalker.getParentNodeN)r4   r5   r6   r)   rq   rr   rt   ru   r   r   r   r   rS      s    )	rS   N)Ú
__future__r   r   r   Úsixr   Úcollectionsr   Úlxmlr   Útreebuilders.etreer	   Ú r   r   r   Úobjectr   r   r=   r>   rW   rS   r   r   r   r   Ú<module>   s    	&	+