B
    @)H[o#  ã               @   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   úfC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\pip\pip\_vendor\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   Ú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   r7   L   s    z.getDomBuilder.<locals>.NodeBuilder.removeChildc             S   s:   x.| j  ¡ r.| 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 | ¡ ƒ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   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   ˆ   ¡  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)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 |¡}n| j ||¡}ˆ |ƒS )N)ÚdefaultNamespacerI   ÚcreateElementZcreateElementNS)r   r   rD   r0   )rA   r   r   ÚelementClassˆ   s    z/getDomBuilder.<locals>.TreeBuilder.elementClassc                s   ˆ | j  |¡ƒS )N)rI   ZcreateComment)r   r3   )rA   r   r   ÚcommentClass�   s    z/getDomBuilder.<locals>.TreeBuilder.commentClassc                s   ˆ | j  ¡ ƒS )N)rI   ZcreateDocumentFragment)r   )rA   r   r   ÚfragmentClass“   s    z0getDomBuilder.<locals>.TreeBuilder.fragmentClassc             S   s   | 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S )N)r	   ÚTreeBuilderÚgetFragmentr   )r   r   r   r   r\   Ÿ   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	   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   |   ¡  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 ¡ nöt| d
ƒ�r6| jd k	�r6dtj| j | jf }n| j}ˆ  dd| |f ¡ |  ¡ �rüg }xftt| jƒƒD ]T}| j |¡}|j}|j}|j}	|	�r®dtj|	 |jf }n|j}| ||f¡ �qpW x2t|ƒD ]&\}}ˆ  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   Úcollectionsr   Úxml.domr   r   rJ   rb   r	   r   r   Ú_utilsr   rq   ÚgetDomModuler   r   r   r   Ú<module>   s    _