3
ûâdeÝ"  ã               @   s¢   d dl mZmZmZ y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   úD/tmp/pip-build-red6nood/pip/pip/_vendor/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__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| |jƒ || _d S )N)r	   r   r   ÚnodeNamer   )r   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   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   Ú
insertTextD   s    z-getDomBuilder.<locals>.NodeBuilder.insertTextc             S   s   | j j|j |j ƒ | |_d S )N)r   r2   r.   )r   r0   ÚrefNoder   r   r   r2   K   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   O   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   ÚreparentChildrenT   s
    z3getDomBuilder.<locals>.NodeBuilder.reparentChildrenc                s
   ˆ | j ƒS )N)r   )r   )r)   r   r   ÚgetAttributes[   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@   m   s    z,getDomBuilder.<locals>.NodeBuilder.cloneNodec             S   s
   | j jƒ S )N)r   r8   )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   ÚpropertyrD   r/   r5   r2   r7   r<   r=   r?   r   r@   rB   rE   Ú	nameTupler   )r)   rA   r   r   rA   8   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   ÚdocumentClass|   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[   {   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 ƒ 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   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   Úcollections.abcr   ÚImportErrorÚcollectionsÚxml.domr   r   rJ   rb   r	   r   r   Ú_utilsr   rq   ÚgetDomModuler   r   r   r   Ú<module>   s    _