U
    
Ha"                     @   s   d dl mZmZmZ zd dlmZ W n  ek
rD   d dlmZ Y nX 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   I/tmp/pip-unpacked-wheel-tx790h60/pip/_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   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   	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 k	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   rF   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 krtd | jfS | j | jfS d S )Nhtml)	namespacer   r    r   r   r   r   getNameTuples   s    
z/getDomBuilder.<locals>.NodeBuilder.getNameTuple)N)r+   r,   r-   r   propertyrK   r4   r;   r8   r=   rB   rC   rE   r   rF   rI   rL   	nameTupler   )r.   rH   r   r   rH   8   s   

rH   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)rO   ZcreateDocumentTypedocumentr4   r   rP   r   )r   tokenr    rU   rV   Zdomimpldoctype)rS   rH   r   r   insertDoctype   s    z0getDomBuilder.<locals>.TreeBuilder.insertDoctypeNc                    s6   |d kr | j d kr | j|}n| j||} |S r   )defaultNamespacerP   createElementZcreateElementNS)r   r    rK   r6   rG   r   r   elementClass   s    z/getDomBuilder.<locals>.TreeBuilder.elementClassc                    s    | j |S r   )rP   ZcreateComment)r   r9   rG   r   r   commentClass   s    z/getDomBuilder.<locals>.TreeBuilder.commentClassc                    s    | j  S r   )rP   ZcreateDocumentFragmentr   rG   r   r   fragmentClass   s    z0getDomBuilder.<locals>.TreeBuilder.fragmentClassc                 S   s   | j |j d S r   )rP   r4   r   r5   r   r   r   r4      s    z.getDomBuilder.<locals>.TreeBuilder.appendChildc                    s    |S r   r   r   )testSerializerr   r   r`      s    z1getDomBuilder.<locals>.TreeBuilder.testSerializerc                 S   s   | j S r   )rP   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   rc      s    z.getDomBuilder.<locals>.TreeBuilder.getFragmentc                 S   sp   |}|| krt j| || nNt| jdrXtj| jjkrXt| jj| j_| jj	tj | j
| j| d S )N_child_node_types)r	   rb   r;   r1   rP   r   	TEXT_NODErd   r%   appendr4   r7   )r   r9   r3   r   r   r   r;      s    z-getDomBuilder.<locals>.TreeBuilder.insertText)N)N)r+   r,   r-   rT   rZ   r]   r^   r_   r4   r`   ra   rc   r;   implementationr    r   )rS   DomImplementationrH   r`   r   r   rb   {   s   
rb   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 k	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    rU   rV   rf   ZDOCUMENT_NODEZDOCUMENT_FRAGMENT_NODEZCOMMENT_NODEZ	nodeValuere   r1   r0   r   prefixesr/   ZhasAttributesranger#   r   itemr   Z	localNamesortedr?   )r   indentrU   rV   r    r   ir!   r   nsrA   rvserializeElementr   r   rt      sT    


 
z?getDomBuilder.<locals>.testSerializer.<locals>.serializeElement
)r   )	normalizejoinr   r   rr   r   r`      s
    .
z%getDomBuilder.<locals>.testSerializer)r   r	   r   rb   locals)rh   rb   r   )r.   rS   rh   rH   r`   r   getDomBuilder   s    $C:6ry   )
__future__r   r   r   collections.abcr   ImportErrorcollectionsxml.domr   r   rQ   ri   r	   r   r   _utilsr   ry   getDomModuler   r   r   r   <module>   s    _