a
    z|a"                     @   s   d dl mZmZmZ zd dlmZ W n eyB   d dlmZ Y n0 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   Glib/python3.9/site-packages/bleach/_vendor/html5lib/treebuilders/dom.py__init__   s    z(getDomBuilder.<locals>.AttrList.__init__c                 S   s   t | jj S r   )iterr   
attributeskeysr   r   r   r   __iter__   s    z(getDomBuilder.<locals>.AttrList.__iter__c                 S   s4   t |trtn | jj|}||_|| jj|< d S r   )
isinstancetupleNotImplementedErrorr   ownerDocumentZ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   s   t | jj S r   )listr   r   itemsr   r   r   r   r&   &   s    z%getDomBuilder.<locals>.AttrList.itemsc                 S   s   t | jj S r   )r%   r   r   valuesr   r   r   r   r'   )   s    z&getDomBuilder.<locals>.AttrList.valuesc                 S   s"   t |trtn| jj| jS d S r   )r   r   r   r   r   r   r   r    r   r   r   __getitem__,   s    
z+getDomBuilder.<locals>.AttrList.__getitem__c                 S   s   t |trtn
| jj|= d S r   )r   r   r   r   r   r(   r   r   r   __delitem__2   s    
z+getDomBuilder.<locals>.AttrList.__delitem__N)__name__
__module____qualname__r   r   r"   r$   r&   r'   r)   r*   r   r   r   r   AttrList   s   r.   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   r0   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   r4   @   s    z.getDomBuilder.<locals>.NodeBuilder.appendChildNc                 S   s4   | j j|}|r$| j ||j  n| j | d S r   )r   r   createTextNodeinsertBeforer4   )r   datar8   textr   r   r   
insertTextD   s    z-getDomBuilder.<locals>.NodeBuilder.insertTextc                 S   s   | j |j |j  | |_d S r   )r   r8   r3   )r   r6   ZrefNoder   r   r   r8   K   s    z/getDomBuilder.<locals>.NodeBuilder.insertBeforec                 S   s&   |j j| j kr| j |j  d |_d S r   )r   Z
parentNoderemoveChildr3   r5   r   r   r   r<   O   s    z.getDomBuilder.<locals>.NodeBuilder.removeChildc                 S   s6   | j  r,| j j}| j | |j | q g | _d S r   )r   hasChildNodesZ
firstChildr<   r4   
childNodes)r   Z	newParentchildr   r   r   reparentChildrenT   s
    
z3getDomBuilder.<locals>.NodeBuilder.reparentChildrenc                    s
    | j S r   r   r   )r.   r   r   getAttributes[   s    z0getDomBuilder.<locals>.NodeBuilder.getAttributesc                 S   sv   |rrt | D ]`\}}t|trb|d d urD|d d |d  }n|d }| j|d || q| j|| qd S )Nr   :r   r
   )r%   r&   r   r   r   ZsetAttributeNSZsetAttribute)r   r   r    r   ZqualifiedNamer   r   r   setAttributes^   s    
z0getDomBuilder.<locals>.NodeBuilder.setAttributesc                    s    | j dS )NF)r   	cloneNoder   NodeBuilderr   r   rD   m   s    z,getDomBuilder.<locals>.NodeBuilder.cloneNodec                 S   s
   | j  S r   )r   r=   r   r   r   r   
hasContentp   s    z-getDomBuilder.<locals>.NodeBuilder.hasContentc                 S   s(   | j d u rtd | jfS | j | jfS d S )NZhtml)	namespacer   r    r   r   r   r   getNameTuples   s    
z/getDomBuilder.<locals>.NodeBuilder.getNameTuple)N)r+   r,   r-   r   propertyrH   r4   r;   r8   r<   r@   rA   rC   r   rD   rG   rI   Z	nameTupler   )r.   rF   r   r   rF   8   s   

rF   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   )getDOMImplementationZcreateDocumentdomweakrefproxyr   )Domr   r   documentClass|   s    z0getDomBuilder.<locals>.TreeBuilder.documentClassc                    sR   |d }|d }|d }   }||||}| j|  tkrN| j|_d S )Nr    publicIdsystemId)rK   ZcreateDocumentTypeZdocumentr4   r   rL   r   )r   tokenr    rQ   rR   ZdomimplZdoctype)rO   rF   r   r   insertDoctype   s    z0getDomBuilder.<locals>.TreeBuilder.insertDoctypeNc                    s6   |d u r | j d u r | j|}n| j||} |S r   )ZdefaultNamespacerL   ZcreateElementZcreateElementNS)r   r    rH   r6   rE   r   r   elementClass   s    z/getDomBuilder.<locals>.TreeBuilder.elementClassc                    s    | j |S r   )rL   ZcreateComment)r   r9   rE   r   r   commentClass   s    z/getDomBuilder.<locals>.TreeBuilder.commentClassc                    s    | j  S r   )rL   ZcreateDocumentFragmentr   rE   r   r   fragmentClass   s    z0getDomBuilder.<locals>.TreeBuilder.fragmentClassc                 S   s   | j |j d S r   )rL   r4   r   r5   r   r   r   r4      s    z.getDomBuilder.<locals>.TreeBuilder.appendChildc                    s    |S r   r   r   )testSerializerr   r   rX      s    z1getDomBuilder.<locals>.TreeBuilder.testSerializerc                 S   s   | j S r   )rL   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   r[      s    z.getDomBuilder.<locals>.TreeBuilder.getFragmentc                 S   sp   |}|| krt j| || nNt| jdrXtj| jjvrXt| jj| j_| jj	tj | j
| j| d S )N_child_node_types)r	   rZ   r;   r1   rL   r   	TEXT_NODEr\   r%   appendr4   r7   )r   r9   r3   r   r   r   r;      s    z-getDomBuilder.<locals>.TreeBuilder.insertText)N)N)r+   r,   r-   rP   rT   rU   rV   rW   r4   rX   rY   r[   r;   implementationr    r   )rO   DomImplementationrF   rX   r   r   rZ   {   s   
rZ   c                    s0   |    g  d fdd	| d d S )Nr   c                    s  | j tjkr| jrj| js| jrP| jp&d}| jp0d} dd| | j||f  q~ dd| | jf  n dd| f  nr| j tjkr d nX| j tjkr d n>| j tj	krވ dd| | j
f  n| j tjkr d	d| | j
f  nt| d
r6| jd ur6dtj| j | jf }n| j} dd| |f  |  rg }tt| jD ]T}| j|}|j}|j}|j}	|	rdtj|	 |jf }n|j}|||f qnt|D ]&\}} dd|d  ||f  q|d7 }| jD ]}
|
| qd S )N z|%s<!DOCTYPE %s "%s" "%s"> z|%s<!DOCTYPE %s>z|%s<!DOCTYPE >z	#documentz#document-fragmentz|%s<!-- %s -->z|%s"%s"r0   z%s %sz|%s<%s>z
|%s%s="%s"r
   )ZnodeTyper   ZDOCUMENT_TYPE_NODEr    rQ   rR   r^   ZDOCUMENT_NODEZDOCUMENT_FRAGMENT_NODEZCOMMENT_NODEZ	nodeValuer]   r1   r0   r   prefixesr/   ZhasAttributesranger#   r   itemr   Z	localNamesortedr>   )r   indentrQ   rR   r    r   ir!   r   nsr?   rvserializeElementr   r   rl      sT    


 
z?getDomBuilder.<locals>.testSerializer.<locals>.serializeElement
)r   )	normalizejoinr   r   rj   r   rX      s
    .
z%getDomBuilder.<locals>.testSerializer)r   r	   r   rZ   locals)r`   rZ   r   )r.   rO   r`   rF   rX   r   getDomBuilder   s    $C:6rq   )Z
__future__r   r   r   collections.abcr   ImportErrorcollectionsZxml.domr   r   rM   ra   r	   r   r   Z_utilsr   rq   ZgetDomModuler   r   r   r   <module>   s    _