o
    %e"                     @   s   d dl mZmZmZ zd dlmZ W n ey!   d dlmZ Y nw d dlm	Z	m
Z
 d dlZddlmZ ddlmZ dd	lmZ dd
lmZ dd ZeeZdS )    )absolute_importdivisionunicode_literals)MutableMapping)minidomNodeN   )base   )	constants)
namespaces)moduleFactoryFactoryc                    sV   G dd dt  G  fdddtjG fdddtj}dd t S )	Nc                   @   sL   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S )zgetDomBuilder.<locals>.AttrListc                 S   s
   || _ d S Nelementselfr    r   L/var/www/html/venv/lib/python3.10/site-packages/html5lib/treebuilders/dom.py__init__      
z(getDomBuilder.<locals>.AttrList.__init__c                 S      t | jj S r   )iterr   
attributeskeysr   r   r   r   __iter__      z(getDomBuilder.<locals>.AttrList.__iter__c                 S   s2   t |trt| jj|}||_|| jj|< d S r   )
isinstancetupleNotImplementedErrorr   ownerDocumentcreateAttributevaluer   )r   namer#   attrr   r   r   __setitem__   s
   
z+getDomBuilder.<locals>.AttrList.__setitem__c                 S   s   t | jjS r   )lenr   r   r   r   r   r   __len__#   s   z'getDomBuilder.<locals>.AttrList.__len__c                 S   r   r   )listr   r   itemsr   r   r   r   r*   &   r   z%getDomBuilder.<locals>.AttrList.itemsc                 S   r   r   )r)   r   r   valuesr   r   r   r   r+   )   r   z&getDomBuilder.<locals>.AttrList.valuesc                 S   s   t |trt| jj| jS r   )r   r   r    r   r   r#   r   r$   r   r   r   __getitem__,      
z+getDomBuilder.<locals>.AttrList.__getitem__c                 S   s   t |trt| jj|= d S r   )r   r   r    r   r   r,   r   r   r   __delitem__2   r.   z+getDomBuilder.<locals>.AttrList.__delitem__N)__name__
__module____qualname__r   r   r&   r(   r*   r+   r-   r/   r   r   r   r   AttrList   s    r3   c                       s   e Zd Zdd Zedd Zdd Zddd	Zd
d Zdd Z	dd Z
 fddZdd ZeeeZfddZdd Zdd ZeeZdS )z"getDomBuilder.<locals>.NodeBuilderc                 S   s   t j| |j || _d S r   )r	   r   r   nodeNamer   r   r   r   r   r   9   s   
z+getDomBuilder.<locals>.NodeBuilder.__init__c                 S   s   t | jdr
| jjpd S )NnamespaceURI)hasattrr   r5   r   r   r   r   <lambda>=   s    z+getDomBuilder.<locals>.NodeBuilder.<lambda>c                 S   s   | |_ | j|j d S r   )parentr   appendChildr   noder   r   r   r9   @   s   z.getDomBuilder.<locals>.NodeBuilder.appendChildNc                 S   s6   | j j|}|r| j ||j  d S | j | d S r   )r   r!   createTextNodeinsertBeforer9   )r   datar=   textr   r   r   
insertTextD   s   z-getDomBuilder.<locals>.NodeBuilder.insertTextc                 S   s   | j |j |j  | |_d S r   )r   r=   r8   )r   r;   refNoder   r   r   r=   K   s   
z/getDomBuilder.<locals>.NodeBuilder.insertBeforec                 S   s&   |j j| j kr| j |j  d |_d S r   )r   
parentNoderemoveChildr8   r:   r   r   r   rC   O   s   
z.getDomBuilder.<locals>.NodeBuilder.removeChildc                 S   s>   | j  r| j j}| j | |j | | j  sg | _d S r   )r   hasChildNodes
firstChildrC   r9   
childNodes)r   	newParentchildr   r   r   reparentChildrenT   s   


z3getDomBuilder.<locals>.NodeBuilder.reparentChildrenc                    s
    | j S r   r   r   )r3   r   r   getAttributes[   r   z0getDomBuilder.<locals>.NodeBuilder.getAttributesc                 S   sz   |r9t | D ]2\}}t|tr1|d d ur"|d d |d  }n|d }| j|d || q| j|| qd S d S )Nr   :r   r
   )r)   r*   r   r   r   setAttributeNSsetAttribute)r   r   r$   r#   qualifiedNamer   r   r   setAttributes^   s   
z0getDomBuilder.<locals>.NodeBuilder.setAttributesc                    s    | j dS )NF)r   	cloneNoder   NodeBuilderr   r   rP   m   r   z,getDomBuilder.<locals>.NodeBuilder.cloneNodec                 S   s
   | j  S r   )r   rD   r   r   r   r   
hasContentp   r   z-getDomBuilder.<locals>.NodeBuilder.hasContentc                 S   s$   | j d u rtd | jfS | j | jfS )Nhtml)	namespacer   r$   r   r   r   r   getNameTuples   s   
z/getDomBuilder.<locals>.NodeBuilder.getNameTupler   )r0   r1   r2   r   propertyrU   r9   r@   r=   rC   rI   rJ   rO   r   rP   rS   rV   	nameTupler   )r3   rR   r   r   rR   8   s    

rR   c                       s   e Zd Z fddZ fddZdfdd	Zfdd	Zfd
dZdd ZfddZ	dd Z
dd ZdddZZdZdS )z"getDomBuilder.<locals>.TreeBuilderc                    s      d d d | _t| S r   )getDOMImplementationcreateDocumentdomweakrefproxyr   )Domr   r   documentClass|   s   
z0getDomBuilder.<locals>.TreeBuilder.documentClassc                    sV   |d }|d }|d }   }||||}| j|  tkr)| j|_d S d S )Nr$   publicIdsystemId)rY   createDocumentTypedocumentr9   r   r[   r!   )r   tokenr$   r`   ra   domimpldoctype)r^   rR   r   r   insertDoctype   s   z0getDomBuilder.<locals>.TreeBuilder.insertDoctypeNc                    s<   |d u r| j d u r| j|} |S | j||} |S r   )defaultNamespacer[   createElementcreateElementNS)r   r$   rU   r;   rQ   r   r   elementClass   s
   z/getDomBuilder.<locals>.TreeBuilder.elementClassc                    s    | j |S r   )r[   createComment)r   r>   rQ   r   r   commentClass   r   z/getDomBuilder.<locals>.TreeBuilder.commentClassc                    s    | j  S r   )r[   createDocumentFragmentr   rQ   r   r   fragmentClass      z0getDomBuilder.<locals>.TreeBuilder.fragmentClassc                 S   s   | j |j d S r   )r[   r9   r   r:   r   r   r   r9      s   z.getDomBuilder.<locals>.TreeBuilder.appendChildc                    s    |S r   r   r   )testSerializerr   r   rq      s   z1getDomBuilder.<locals>.TreeBuilder.testSerializerc                 S   s   | j S r   )r[   r   r   r   r   getDocument   s   z.getDomBuilder.<locals>.TreeBuilder.getDocumentc                 S   s   t j| jS r   )r	   TreeBuildergetFragmentr   r   r   r   r   rt      rp   z.getDomBuilder.<locals>.TreeBuilder.getFragmentc                 S   sr   |}|| krt j| || d S t| jdr-tj| jjvr-t| jj| j_| jj	tj | j
| j| d S )N_child_node_types)r	   rs   r@   r6   r[   r   	TEXT_NODEru   r)   appendr9   r<   )r   r>   r8   r   r   r   r@      s   z-getDomBuilder.<locals>.TreeBuilder.insertTextr   )r0   r1   r2   r_   rg   rk   rm   ro   r9   rq   rr   rt   r@   implementationr$   r   )r^   DomImplementationrR   rq   r   r   rs   {   s    
rs   c                    s0   |    g  d fdd	| d d S )Nr   c                    s   | j tjkr@| jr5| js| jr(| jpd}| jpd} dd| | j||f  nǈ dd| | jf  n dd| f  n| j tjkrL d n| j tjkrX d n| j tj	krk dd| | j
f  n| j tjkr~ d	d| | j
f  nqt| d
r| jd urdtj| j | jf }n| j} dd| |f  |  rg }tt| jD ](}| j|}|j}|j}|j}	|	rdtj|	 |jf }n|j}|||f qt|D ]\}} dd|d  ||f  q|d7 }| jD ]}
|
| qd S )N z|%s<!DOCTYPE %s "%s" "%s"> z|%s<!DOCTYPE %s>z|%s<!DOCTYPE >z	#documentz#document-fragmentz|%s<!-- %s -->z|%s"%s"r5   z%s %sz|%s<%s>z
|%s%s="%s"r
   )nodeTyper   DOCUMENT_TYPE_NODEr$   r`   ra   rw   DOCUMENT_NODEDOCUMENT_FRAGMENT_NODECOMMENT_NODE	nodeValuerv   r6   r5   r   prefixesr4   hasAttributesranger'   r   itemr#   	localNamesortedrF   )r   indentr`   ra   r$   r   ir%   r#   nsrH   rvserializeElementr   r   r      sT   




z?getDomBuilder.<locals>.testSerializer.<locals>.serializeElement
)r   )	normalizejoinr   r   r   r   rq      s
   
.
z%getDomBuilder.<locals>.testSerializer)r   r	   r   rs   locals)ry   rs   r   )r3   r^   ry   rR   rq   r   getDomBuilder   s   $C:6r   )
__future__r   r   r   collections.abcr   ImportErrorcollectionsxml.domr   r   r\   rz   r	   r   r   _utilsr   r   getDomModuler   r   r   r   <module>   s     _