B
    n&=["                 @   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   8lib/python3.7/site-packages/html5lib/treebuilders/dom.py__init__   s    z(getDomBuilder.<locals>.AttrList.__init__c             S   s   t | 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|< 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 S )N)listr   r   items)r   r   r   r   r"   #   s    z%getDomBuilder.<locals>.AttrList.itemsc             S   s   t | 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 || _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 d S )N)parentr   appendChild)r   noder   r   r   r/   =   s    z.getDomBuilder.<locals>.NodeBuilder.appendChildNc             S   s4   | j j|}|r$| j ||j  n| 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  | |_d S )N)r   r2   r.   )r   r0   ZrefNoder   r   r   r2   H   s    z/getDomBuilder.<locals>.NodeBuilder.insertBeforec             S   s&   |j j| j kr| j |j  d |_d S )N)r   Z
parentNoderemoveChildr.   )r   r0   r   r   r   r6   L   s    z.getDomBuilder.<locals>.NodeBuilder.removeChildc             S   s:   x.| j  r.| j j}| j | |j | qW g | _d S )N)r   hasChildNodesZ
firstChildr6   r/   
childNodes)r   Z	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 | D ]`\}}t|trd|d d k	rF|d d |d  }n|d }| j|d || q| 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 dS )NF)r   	cloneNode)r   )NodeBuilderr   r   r>   j   s    z,getDomBuilder.<locals>.NodeBuilder.cloneNodec             S   s
   | j  S )N)r   r7   )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 )NZhtml)	namespacer   r   )r   r   r   r   getNameTuplep   s    
z/getDomBuilder.<locals>.NodeBuilder.getNameTuple)N)r&   r'   r(   r   propertyrA   r/   r5   r2   r6   r:   r;   r=   r   r>   r@   rB   Z	nameTupler   )r)   r?   r   r   r?   5   s   

r?   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 )N)getDOMImplementationZcreateDocumentdomweakrefproxy)r   )Domr   r   documentClassy   s    z0getDomBuilder.<locals>.TreeBuilder.documentClassc                sR   |d }|d }|d }   }||||}| j|  tkrN| j|_d S )Nr   publicIdsystemId)rD   ZcreateDocumentTypeZdocumentr/   r   rE   r   )r   tokenr   rJ   rK   ZdomimplZdoctype)rH   r?   r   r   insertDoctype}   s    z0getDomBuilder.<locals>.TreeBuilder.insertDoctypeNc                s6   |d kr | j d kr | j|}n| j||} |S )N)ZdefaultNamespacerE   ZcreateElementZcreateElementNS)r   r   rA   r0   )r?   r   r   elementClass   s    z/getDomBuilder.<locals>.TreeBuilder.elementClassc                s    | j |S )N)rE   ZcreateComment)r   r3   )r?   r   r   commentClass   s    z/getDomBuilder.<locals>.TreeBuilder.commentClassc                s    | j  S )N)rE   ZcreateDocumentFragment)r   )r?   r   r   fragmentClass   s    z0getDomBuilder.<locals>.TreeBuilder.fragmentClassc             S   s   | j |j d S )N)rE   r/   r   )r   r0   r   r   r   r/      s    z.getDomBuilder.<locals>.TreeBuilder.appendChildc                s    |S )Nr   )r   r   )testSerializerr   r   rQ      s    z1getDomBuilder.<locals>.TreeBuilder.testSerializerc             S   s   | j S )N)rE   )r   r   r   r   getDocument   s    z.getDomBuilder.<locals>.TreeBuilder.getDocumentc             S   s   t j| jS )N)r	   TreeBuildergetFragmentr   )r   r   r   r   rT      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	   rS   r5   r,   rE   r   	TEXT_NODErU   r!   appendr/   r1   )r   r3   r.   r   r   r   r5      s    z-getDomBuilder.<locals>.TreeBuilder.insertText)N)N)r&   r'   r(   rI   rM   rN   rO   rP   r/   rQ   rR   rT   r5   implementationr   r   )rH   DomImplementationr?   rQ   r   r   rS   x   s   
rS   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  nz| j tjkr d n`| j tjkr d nF| 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 }xftt| jD ]T}| j|}|j}|j}|j}	|	rdtj|	 |jf }n|j}|||f qpW x2t|D ]&\}} 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   rJ   rK   rW   ZDOCUMENT_NODEZDOCUMENT_FRAGMENT_NODEZCOMMENT_NODEZ	nodeValuerV   r,   r+   r   prefixesr*   ZhasAttributesranger   r   itemr   Z	localNamesortedr8   )r   indentrJ   rK   r   r   ir   r   nsr9   )rvserializeElementr   r   rd      sN    


"z?getDomBuilder.<locals>.testSerializer.<locals>.serializeElement
)r   )Z	normalizejoin)r   r   )rc   rd   r   rQ      s
    .
z%getDomBuilder.<locals>.testSerializer)r   r	   r   rS   locals)rY   rS   r   )r)   rH   rY   r?   rQ   r   getDomBuilder   s    $C:6rh   )Z
__future__r   r   r   collectionsr   Zxml.domr   r   rF   rZ   r	   r   r   Z_utilsr   rh   ZgetDomModuler   r   r   r   <module>   s    _