a
    hbòfÝ"  ã                   @   s    d dl mZmZmZ zd dlmZ W n eyB   d dlmZ Y n0 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   úb/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/dom.pyÚ__init__   s    z(getDomBuilder.<locals>.AttrList.__init__c                 S   s   t | jj ¡ ƒS r   )Ú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 r   )Ú
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 r   )Úlenr   r   r   r   r   r   Ú__len__#   s    z'getDomBuilder.<locals>.AttrList.__len__c                 S   s   t | jj ¡ ƒS r   )Úlistr   r   Úitemsr   r   r   r   r&   &   s    z%getDomBuilder.<locals>.AttrList.itemsc                 S   s   t | jj ¡ ƒS r   )r%   r   r   Úvaluesr   r   r   r   r'   )   s    z&getDomBuilder.<locals>.AttrList.valuesc                 S   s"   t |tƒrt‚n| jj| jS d S r   )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 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¡ || _d S r   )r	   r   r   ÚnodeNamer   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   r0   r   r   r   r   Ú<lambda>=   s   ÿz+getDomBuilder.<locals>.NodeBuilder.<lambda>c                 S   s   | |_ | j |j¡ d S r   )Úparentr   ÚappendChild©r   Únoder   r   r   r4   @   s    z.getDomBuilder.<locals>.NodeBuilder.appendChildNc                 S   s4   | j j |¡}|r$| j  ||j ¡ n| j  |¡ d S r   )r   r   ÚcreateTextNodeÚinsertBeforer4   )r   Údatar8   Útextr   r   r   Ú
insertTextD   s    z-getDomBuilder.<locals>.NodeBuilder.insertTextc                 S   s   | j  |j |j ¡ | |_d S r   )r   r8   r3   )r   r6   ÚrefNoder   r   r   r8   K   s    z/getDomBuilder.<locals>.NodeBuilder.insertBeforec                 S   s&   |j j| j kr| j  |j ¡ d |_d S r   )r   Z
parentNodeÚremoveChildr3   r5   r   r   r   r=   O   s    z.getDomBuilder.<locals>.NodeBuilder.removeChildc                 S   s6   | j  ¡ r,| j j}| j  |¡ |j  |¡ q g | _d S r   )r   ÚhasChildNodesZ
firstChildr=   r4   Ú
childNodes)r   Ú	newParentÚchildr   r   r   ÚreparentChildrenT   s
    
z3getDomBuilder.<locals>.NodeBuilder.reparentChildrenc                    s
   ˆ | j ƒS r   r   r   )r.   r   r   ÚgetAttributes[   s    z0getDomBuilder.<locals>.NodeBuilder.getAttributesc                 S   sv   |rrt | ¡ ƒD ]`\}}t|tƒrb|d d urD|d d |d  }n|d }| j |d ||¡ q| j ||¡ q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   Ú	cloneNoder   ©ÚNodeBuilderr   r   rF   m   s    z,getDomBuilder.<locals>.NodeBuilder.cloneNodec                 S   s
   | j  ¡ S r   )r   r>   r   r   r   r   Ú
hasContentp   s    z-getDomBuilder.<locals>.NodeBuilder.hasContentc                 S   s(   | j d u 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   ÚpropertyrK   r4   r;   r8   r=   rB   rC   rE   r   rF   rI   rL   Ú	nameTupler   )r.   rH   r   r   rH   8   s   

rH   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 r   )ÚgetDOMImplementationZcreateDocumentÚdomÚweakrefÚproxyr   )ÚDomr   r   ÚdocumentClass|   s    z0getDomBuilder.<locals>.TreeBuilder.documentClassc                    sR   |d }|d }|d }ˆ   ¡ }| |||¡}| j ˆ|ƒ¡ ˆ tkrN| j|_d S )Nr    ÚpublicIdÚsystemId)rO   ZcreateDocumentTypeÚdocumentr4   r   rP   r   )r   Útokenr    rU   rV   ZdomimplÚdoctype)rS   rH   r   r   ÚinsertDoctype€   s    z0getDomBuilder.<locals>.TreeBuilder.insertDoctypeNc                    s6   |d u r | j d u r | j |¡}n| j ||¡}ˆ |ƒS r   )ÚdefaultNamespacerP   ÚcreateElementZcreateElementNS)r   r    rK   r6   rG   r   r   ÚelementClass‹   s    z/getDomBuilder.<locals>.TreeBuilder.elementClassc                    s   ˆ | j  |¡ƒS r   )rP   ZcreateComment)r   r9   rG   r   r   ÚcommentClass“   s    z/getDomBuilder.<locals>.TreeBuilder.commentClassc                    s   ˆ | j  ¡ ƒS r   )rP   ZcreateDocumentFragmentr   rG   r   r   ÚfragmentClass–   s    z0getDomBuilder.<locals>.TreeBuilder.fragmentClassc                 S   s   | j  |j¡ d S r   )rP   r4   r   r5   r   r   r   r4   ™   s    z.getDomBuilder.<locals>.TreeBuilder.appendChildc                    s   ˆ |ƒS r   r   r   )ÚtestSerializerr   r   r`   œ   s    z1getDomBuilder.<locals>.TreeBuilder.testSerializerc                 S   s   | j S r   )rP   r   r   r   r   ÚgetDocumentŸ   s    z.getDomBuilder.<locals>.TreeBuilder.getDocumentc                 S   s   t j | ¡jS r   )r	   ÚTreeBuilderÚgetFragmentr   r   r   r   r   rc   ¢   s    z.getDomBuilder.<locals>.TreeBuilder.getFragmentc                 S   sp   |}|| krt j | ||¡ nNt| jdƒrXtj| jjvrXt| jjƒ| j_| jj 	tj¡ | j 
| j |¡¡ d S )NÚ_child_node_types)r	   rb   r;   r1   rP   r   Ú	TEXT_NODErd   r%   Úappendr4   r7   )r   r9   r3   r   r   r   r;   ¥   s    z-getDomBuilder.<locals>.TreeBuilder.insertText)N)N)r+   r,   r-   rT   rZ   r]   r^   r_   r4   r`   ra   rc   r;   Úimplementationr    r   )rS   ÚDomImplementationrH   r`   r   r   rb   {   s   
rb   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 ¡ �nr| j tjkrœˆ  d¡ �nX| j tjkr¶ˆ  d¡ �n>| 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 u�r6dtj| j | jf }n| j}ˆ  dd| |f ¡ |  ¡ �rôg }tt| jƒƒD ]T}| j |¡}|j}|j}|j}	|	�r¬dtj|	 |jf }n|j}| ||f¡ �qnt|ƒD ]&\}}ˆ  dd|d  ||f ¡ �qÌ|d7 }| jD ]}
ˆ|
|ƒ �q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"r0   z%s %sz|%s<%s>z
|%s%s="%s"r
   )ZnodeTyper   ZDOCUMENT_TYPE_NODEr    rU   rV   rf   ZDOCUMENT_NODEZDOCUMENT_FRAGMENT_NODEZCOMMENT_NODEZ	nodeValuere   r1   r0   r   Úprefixesr/   ZhasAttributesÚranger#   r   Úitemr   Z	localNameÚsortedr?   )r   ÚindentrU   rV   r    r   Úir!   r   ÚnsrA   ©ÚrvÚserializeElementr   r   rt   ¹   sT    

ÿÿÿ
 
z?getDomBuilder.<locals>.testSerializer.<locals>.serializeElementÚ
)r   )Ú	normalizeÚjoinr   r   rr   r   r`   µ   s
    .
z%getDomBuilder.<locals>.testSerializer)r   r	   r   rb   Úlocals)rh   rb   r   )r.   rS   rh   rH   r`   r   ÚgetDomBuilder   s    $C:6ry   )Ú
__future__r   r   r   Úcollections.abcr   ÚImportErrorÚcollectionsÚxml.domr   r   rQ   ri   r	   r   r   Ú_utilsr   ry   ÚgetDomModuler   r   r   r   Ú<module>   s    _