
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
B;ˆWƒ"  ã               @   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   ú/usr/lib/python3.6/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   Z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   r6   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
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 |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   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   ˆ 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)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j|ƒ}n| jj||ƒ}ˆ |ƒS )N)ZdefaultNamespacerE   ZcreateElementZcreateElementNS)r   r   rA   r0   )r?   r   r   ÚelementClassˆ   s    z/getDomBuilder.<locals>.TreeBuilder.elementClassc                s   ˆ | j j|ƒƒS )N)rE   ZcreateComment)r   r3   )r?   r   r   ÚcommentClass�   s    z/getDomBuilder.<locals>.TreeBuilder.commentClassc                s   ˆ | j jƒ ƒS )N)rE   ZcreateDocumentFragment)r   )r?   r   r   ÚfragmentClass“   s    z0getDomBuilder.<locals>.TreeBuilder.fragmentClassc             S   s   | j 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| ƒjS )N)r	   ÚTreeBuilderÚgetFragmentr   )r   r   r   r   rT   Ÿ   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	   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   | 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 ƒ nöt| d
ƒ�r6| jd k	�r6dtj| j | jf }n| j}ˆ jdd| |f ƒ | jƒ �rüg }xftt| jƒƒD ]T}| jj|ƒ}|j}|j}|j}	|	�r®dtj|	 |jf }n|j}|j||fƒ �qpW x2t|ƒD ]&\}}ˆ jdd|d  ||f ƒ �qÒW |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    _