3
(h"                 @   s|   d dl mZmZmZ d dlmZ 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   ?/tmp/pip-install-q3hcpn_q/html5lib/html5lib/treebuilders/dom.py__init__   s    z(getDomBuilder.<locals>.AttrList.__init__c             S   s   t | jjj S )N)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j|< d S )N)
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 )N)lenr   r   )r   r   r   r   __len__    s    z'getDomBuilder.<locals>.AttrList.__len__c             S   s   t | jjj S )N)listr   r   items)r   r   r   r   r"   #   s    z%getDomBuilder.<locals>.AttrList.itemsc             S   s   t | jjj S )N)r!   r   r   values)r   r   r   r   r#   &   s    z&getDomBuilder.<locals>.AttrList.valuesc             S   s"   t |trtn| jj| jS d S )N)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 )N)r   r   r   r   r   )r   r   r   r   r   __delitem__/   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| |j || _d S )N)r	   r   r   nodeNamer   )r   r   r   r   r   r   6   s    z+getDomBuilder.<locals>.NodeBuilder.__init__c             S   s   t | jdr| jjpd S )NnamespaceURI)hasattrr   r+   )r   r   r   r   <lambda>:   s   z+getDomBuilder.<locals>.NodeBuilder.<lambda>c             S   s   | |_ | jj|j d S )N)parentr   appendChild)r   noder   r   r   r/   =   s    z.getDomBuilder.<locals>.NodeBuilder.appendChildNc             S   s4   | j jj|}|r$| j j||j  n| j j| d S )N)r   r   createTextNodeinsertBeforer/   )r   datar2   textr   r   r   
insertTextA   s    z-getDomBuilder.<locals>.NodeBuilder.insertTextc             S   s   | j j|j |j  | |_d S )N)r   r2   r.   )r   r0   refNoder   r   r   r2   H   s    z/getDomBuilder.<locals>.NodeBuilder.insertBeforec             S   s&   |j j| j kr| j j|j  d |_d S )N)r   Z
parentNoderemoveChildr.   )r   r0   r   r   r   r7   L   s    z.getDomBuilder.<locals>.NodeBuilder.removeChildc             S   s:   x.| j j r.| j j}| j j| |j j| qW g | _d S )N)r   hasChildNodesZ
firstChildr7   r/   
childNodes)r   	newParentchildr   r   r   reparentChildrenQ   s
    z3getDomBuilder.<locals>.NodeBuilder.reparentChildrenc                s
    | j S )N)r   )r   )r)   r   r   getAttributesX   s    z0getDomBuilder.<locals>.NodeBuilder.getAttributesc             S   sz   |rvxpt |j D ]`\}}t|trd|d d k	rF|d d |d  }n|d }| jj|d || q| jj|| qW 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 jdS )NF)r   	cloneNode)r   )NodeBuilderr   r   r@   j   s    z,getDomBuilder.<locals>.NodeBuilder.cloneNodec             S   s
   | j j S )N)r   r8   )r   r   r   r   
hasContentm   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   getNameTuplep   s    
z/getDomBuilder.<locals>.NodeBuilder.getNameTuple)N)r&   r'   r(   r   propertyrD   r/   r5   r2   r7   r<   r=   r?   r   r@   rB   rE   	nameTupler   )r)   rA   r   r   rA   5   s   

rA   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    j  jd d d | _tj| S )N)getDOMImplementationZcreateDocumentdomweakrefproxy)r   )Domr   r   documentClassy   s    z0getDomBuilder.<locals>.TreeBuilder.documentClassc                sR   |d }|d }|d } j  }|j|||}| jj|  tkrN| j|_d S )Nr   publicIdsystemId)rH   ZcreateDocumentTypedocumentr/   r   rI   r   )r   tokenr   rN   rO   Zdomimpldoctype)rL   rA   r   r   insertDoctype}   s    z0getDomBuilder.<locals>.TreeBuilder.insertDoctypeNc                s6   |d kr | j d kr | jj|}n| jj||} |S )N)defaultNamespacerI   createElementZcreateElementNS)r   r   rD   r0   )rA   r   r   elementClass   s    z/getDomBuilder.<locals>.TreeBuilder.elementClassc                s    | j j|S )N)rI   ZcreateComment)r   r3   )rA   r   r   commentClass   s    z/getDomBuilder.<locals>.TreeBuilder.commentClassc                s    | j j S )N)rI   ZcreateDocumentFragment)r   )rA   r   r   fragmentClass   s    z0getDomBuilder.<locals>.TreeBuilder.fragmentClassc             S   s   | j j|j d S )N)rI   r/   r   )r   r0   r   r   r   r/      s    z.getDomBuilder.<locals>.TreeBuilder.appendChildc                s    |S )Nr   )r   r   )testSerializerr   r   rY      s    z1getDomBuilder.<locals>.TreeBuilder.testSerializerc             S   s   | j S )N)rI   )r   r   r   r   getDocument   s    z.getDomBuilder.<locals>.TreeBuilder.getDocumentc             S   s   t jj| jS )N)r	   TreeBuildergetFragmentr   )r   r   r   r   r\      s    z.getDomBuilder.<locals>.TreeBuilder.getFragmentc             S   sp   |}|| krt jj| || nNt| jdrXtj| jjkrXt| jj| j_| jjj	tj | jj
| jj| d S )N_child_node_types)r	   r[   r5   r,   rI   r   	TEXT_NODEr]   r!   appendr/   r1   )r   r3   r.   r   r   r   r5      s    z-getDomBuilder.<locals>.TreeBuilder.insertText)N)N)r&   r'   r(   rM   rS   rV   rW   rX   r/   rY   rZ   r\   r5   implementationr   r   )rL   DomImplementationrA   rY   r   r   r[   x   s   
r[   c                s0   | j   g  d fdd	| d dj S )Nr   c                s$  | j tjkr| jrj| js| jrP| jp&d}| jp0d} jdd| | j||f  q~ jdd| | jf  n jdd| f  nz| j tjkr jd n`| j tjkr jd nF| j tj	krވ jdd| | j
f  n| j tjkr jd	d| | j
f  nt| d
r6| jd k	r6dtj| j | jf }n| j} jdd| |f  | j rg }xftt| jD ]T}| jj|}|j}|j}|j}	|	rdtj|	 |jf }n|j}|j||f qpW x2t|D ]&\}} jdd|d  ||f  qW |d7 }x| jD ]}
|
| qW 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"r+   z%s %sz|%s<%s>z
|%s%s="%s"r
   )ZnodeTyper   ZDOCUMENT_TYPE_NODEr   rN   rO   r_   ZDOCUMENT_NODEZDOCUMENT_FRAGMENT_NODEZCOMMENT_NODEZ	nodeValuer^   r,   r+   r   prefixesr*   ZhasAttributesranger   r   itemr   Z	localNamesortedr9   )r   indentrN   rO   r   r   ir   r   nsr;   )rvserializeElementr   r   rl      sN    


"z?getDomBuilder.<locals>.testSerializer.<locals>.serializeElement
)r   )	normalizejoin)r   r   )rk   rl   r   rY      s
    .
z%getDomBuilder.<locals>.testSerializer)r   r	   r   r[   locals)ra   r[   r   )r)   rL   ra   rA   rY   r   getDomBuilder   s    $C:6rq   )
__future__r   r   r   collectionsr   xml.domr   r   rJ   rb   r	   r   r   _utilsr   rq   getDomModuler   r   r   r   <module>   s    _