a
    ze	                    @   s  d dl Z d dlZd dlmZmZmZmZ d dlT d dlm	Z	m
Z
 ejjjejjjfZG dd dejjZeeddd	 eed
dd	 eeddd	 dd Zdd Zdd Zdd Zdd ZG dd deZG dd deZeeddd	 eeddd	 eedd d	 G d!d" d"eZeed#d$d	 eZG d%d& d&eZeddZG d'd( d(eZeed)d*d	 eedd+d	 d,d- ZG d.d/ d/ZG d0d1 d1eeZ G d2d3 d3eeZ!ee!d#d4d	 G d5d6 d6e!Z"ee"d7d8d	 ee"d9d:d	 d;d< Z#d=d> Z$G d?d@ d@e!Z%G dAdB dBe"Z&G dCdD dDeZ'ee'd#dEd	 G dFdG dGZ(G dHdI dIe(eeZ)G dJdK dKe(eZ*G dLdM dMe(eeZ+G dNdO dOe	Z,G dPdQ dQeZ-dRdS Z.G dTdU dUee
Z/ee/dVdWd	 dXdY Z0dZd[ Z1d\d] Z2ddd^d_Z3ded`daZ4dfdbdcZ5dS )g    N)EMPTY_NAMESPACEEMPTY_PREFIXXMLNS_NAMESPACEdomreg)*)DOMImplementationLS
DocumentLSc                   @   s   e Zd ZdZdZdZdZdZeZ	dd Z
d2ddZd3d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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,d- Zd.d/ Zd0d1 Z dS )4NodeNc                 C   s   dS )NT selfr
   r
   %/usr/lib/python3.9/xml/dom/minidom.py__bool__+   s    zNode.__bool__c                 C   s   |  dd||S N )toprettyxml)r   encoding
standaloner
   r
   r   toxml.   s    z
Node.toxml	
c                 C   sz   |d u rt  }nt jt  |ddd}| jtjkrJ| |d|||| n| |d|| |d u rj| S |	  S d S )Nxmlcharrefreplacer   )r   errorsnewliner   )
ioStringIOTextIOWrapperBytesIOnodeTyper	   DOCUMENT_NODEwritexmlgetvaluedetach)r   indentnewlr   r   writerr
   r
   r   r   1   s    

zNode.toprettyxmlc                 C   s
   t | jS N)bool
childNodesr   r
   r
   r   hasChildNodesD   s    zNode.hasChildNodesc                 C   s   | j S r&   r(   r   r
   r
   r   _get_childNodesG   s    zNode._get_childNodesc                 C   s   | j r| j d S d S Nr   r*   r   r
   r
   r   _get_firstChildJ   s    zNode._get_firstChildc                 C   s   | j r| j d S d S Nr*   r   r
   r
   r   _get_lastChildN   s    zNode._get_lastChildc                 C   s  |j | jkr,t|jD ]}| || q|S |j | jvrTtjdt	|t	| f |j
d urj|j
| |d u r~| | nz| j|}W n ty   tj Y n0 |j tv rt|  | j|| ||_||_|r| j|d  }||_||_nd |_| |_
|S )N%s cannot be child of %s   )r   DOCUMENT_FRAGMENT_NODEtupler(   insertBefore_child_node_typesxmldomHierarchyRequestErrrepr
parentNoderemoveChildappendChildindex
ValueErrorNotFoundErr_nodeTypes_with_children_clear_id_cacheinsertnextSiblingpreviousSibling)r   newChildrefChildcr>   noder
   r
   r   r5   R   s8    

zNode.insertBeforec                 C   s   |j | jkr*t|jD ]}| | q|S |j | jvrTtjdt	|t	| f n|j t
v rft|  |jd ur||j| t| | d |_|S Nr1   )r   r3   r4   r(   r=   r6   r7   r8   r9   r:   rA   rB   r;   r<   _append_childrD   )r   rI   rH   r
   r
   r   r=   r   s    


zNode.appendChildc                 C   s  |j | jkr(|j}| | | ||S |j | jvrPtjdt	|t	| f ||u r\d S |j
d urr|j
| z| j|}W n ty   tj Y n0 || j|< | |_
d |_
|j tv s|j tv rt|  |j|_|j|_d |_d |_|jr||j_|jr||j_|S rJ   )r   r3   rD   r<   r5   r6   r7   r8   r9   r:   r;   r(   r>   r?   r@   rA   rB   rE   )r   rF   oldChildrG   r>   r
   r
   r   replaceChild   s@    



zNode.replaceChildc                 C   s~   z| j | W n ty,   tj Y n0 |jd urB|j|j_|jd urV|j|j_d  |_|_|jt	v rtt
|  d |_|S r&   )r(   remover?   r7   r8   r@   rD   rE   r   rA   rB   r;   r   rL   r
   r
   r   r<      s    




zNode.removeChildc                 C   s   g }| j D ]}|jtjkr|jsJ|r0|j|d _|jr@|j|j_|  q|r|d j|jkr|d }|j|j |_|j|_|jr||j_|  q|| q
|| |jtj	kr
|
  q
|| j d d < d S r.   )r(   r   r	   	TEXT_NODEdatarD   rE   unlinkappendELEMENT_NODE	normalize)r   LchildrI   r
   r
   r   rU      s*    





zNode.normalizec                 C   s   t | || jp| S r&   )_clone_nodeownerDocument)r   deepr
   r
   r   	cloneNode   s    zNode.cloneNodec                 C   s   | j j||S r&   )rY   implementation
hasFeaturer   featureversionr
   r
   r   isSupported   s    zNode.isSupportedc                 C   s   d S r&   r
   r   r
   r
   r   _get_localName   s    zNode._get_localNamec                 C   s   | |u S r&   r
   r   otherr
   r
   r   
isSameNode   s    zNode.isSameNodec                 C   s   |  |d r| S d S d S r&   )ra   r   r_   r
   r
   r   getInterface   s    zNode.getInterfacec              	   C   s.   z| j | d W S  ttfy(   Y d S 0 d S r,   )
_user_dataAttributeErrorKeyErrorr   keyr
   r
   r   getUserData   s    zNode.getUserDatac                 C   sl   d }z
| j }W n ty*   i }|| _ Y n0 ||v r@|| d }|d u r\d }|d urh||= n||f||< |S r,   )rh   ri   )r   rl   rQ   handlerolddr
   r
   r   setUserData   s    
zNode.setUserDatac                 C   sD   t | dr@t| j D ]&\}\}}|d ur|||||| qd S )Nrh   )hasattrlistrh   itemshandle)r   	operationsrcdstrl   rQ   rn   r
   r
   r   _call_user_data_handler   s    
zNode._call_user_data_handlerc                 C   s>   d  | _ | _| jr.| jD ]}|  qt | _d | _d | _d S r&   )r;   rY   r(   rR   NodeListrE   rD   )r   rW   r
   r
   r   rR     s    

zNode.unlinkc                 C   s   | S r&   r
   r   r
   r
   r   	__enter__  s    zNode.__enter__c                 C   s   |    d S r&   )rR   )r   etZevtbr
   r
   r   __exit__  s    zNode.__exit__)NN)r   r   NN)!__name__
__module____qualname__namespaceURIr;   rY   rD   rE   r   prefixr   r   r   r)   r+   r-   r0   r5   r=   rM   r<   rU   r[   ra   rb   re   rg   rm   rq   ry   rR   r{   r~   r
   r
   r
   r   r	   "   s>   
  
  
r	   
firstChildzFirst child node, or None.)doc	lastChildzLast child node, or None.	localNamez"Namespace-local name of this node.c                 C   s2   | j }|r|d }||_||_|| | |_d S r.   )r(   rE   rD   rS   r;   )r   rI   r(   Zlastr
   r
   r   rK     s    
rK   c                 C   s$   | d ur | j tjkrdS | j} q dS NTF)r   r	   r   r;   rI   r
   r
   r   _in_document'  s
    r   c                 C   s6   |r2| dd dd dd dd}| | d S )	N&z&amp;<z&lt;"z&quot;>z&gt;)replacewrite)r%   rQ   r
   r
   r   _write_data/  s    r   c                 C   sD   | j D ]8}|jtjkr2|dks(|j|kr2|| t||| q|S Nr   )r(   r   r	   rT   tagNamerS   _get_elements_by_tagName_helper)parentnamercrI   r
   r
   r   r   6  s    

r   c                 C   sX   | j D ]L}|jtjkr|dks(|j|krD|dks:|j|krD|| t|||| q|S r   )r(   r   r	   rT   r   r   rS   "_get_elements_by_tagName_ns_helper)r   ZnsURIr   r   rI   r
   r
   r   r   >  s    

r   c                   @   sJ   e Zd ZejZdZdZdZdZ	ej
ejejejejejejfZdd ZdS )DocumentFragmentz#document-fragmentNc                 C   s   t  | _d S r&   )rz   r(   r   r
   r
   r   __init__U  s    zDocumentFragment.__init__)r   r   r   r	   r3   r   nodeName	nodeValue
attributesr;   rT   rP   CDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODECOMMENT_NODENOTATION_NODEr6   r   r
   r
   r
   r   r   G  s   r   c                   @   s   e Zd ZdZejZdZdZdZ	ej
ejfZeddfddZdd Zdd	 Zd
d Zdd Zeee ZZdd Zdd Zeee ZZdd Zdd ZeeeZdd Zdd Zdd ZdS )Attr)_name_valuer   _prefixr(   
_localNamerY   ownerElementNFc                 C   s2   d | _ || _|| _|| _t | _| jt  d S r&   )r   r   r   r   rz   r(   rS   Text)r   qNamer   r   r   r
   r
   r   r   c  s    zAttr.__init__c                 C   s2   z| j W S  ty,   | jddd  Y S 0 d S N:r2   r/   )r   ri   r   splitr   r
   r
   r   rb   p  s    zAttr._get_localNamec                 C   s   | j S r&   )	specifiedr   r
   r
   r   _get_specifiedv  s    zAttr._get_specifiedc                 C   s   | j S r&   )r   r   r
   r
   r   	_get_namey  s    zAttr._get_namec                 C   s   || _ | jd urt| j d S r&   )r   r   rB   r   valuer
   r
   r   	_set_name|  s    
zAttr._set_namec                 C   s   | j S r&   )r   r   r
   r
   r   
_get_value  s    zAttr._get_valuec                 C   s6   || _ || jd _| jd ur&t| j || jd _d S r,   )r   r(   rQ   r   rB   r   r
   r
   r   
_set_value  s
    

zAttr._set_valuec                 C   s   | j S r&   )r   r   r
   r
   r   _get_prefix  s    zAttr._get_prefixc                 C   sd   | j }|dkr&|r&|tkr&tjd|| _|d u r<| j}nd|| jf }| jrZt| j || _	d S )Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacez%s:%s)
r   r   r7   r8   NamespaceErrr   r   r   rB   r   )r   r   ZnsuriZnewNamer
   r
   r   _set_prefix  s    
zAttr._set_prefixc                 C   sv   | j }|d urR|j| j= |j| j| jf= | jrRd| _| jd8  _| j j	d8  _	| j
D ]}|  qX| j
d d = d S )NFr2   )r   _attrsr   _attrsNSr   r   _is_id_magic_id_nodesrY   _magic_id_countr(   rR   )r   elemrW   r
   r
   r   rR     s    


zAttr.unlinkc                 C   sf   | j r
dS | j}| j}|d u s&|d u r*dS ||}|d u r@dS | jrV|| j| jS || jS d S r   )	r   rY   r   _get_elem_infor   isIdNSr   isIdr   r   r   r   infor
   r
   r   	_get_isId  s    
zAttr._get_isIdc                 C   s\   | j }| j}|d u s|d u r tS ||}|d u r6tS | jrL|| j| jS || jS d S r&   )	rY   r   _no_typer   r   getAttributeTypeNSr   getAttributeTyper   r   r
   r
   r   _get_schemaType  s    
zAttr._get_schemaType) r   r   r   	__slots__r	   ATTRIBUTE_NODEr   r   r   r   rP   r   r6   r   r   rb   r   r   r   propertyr   r   r   r   r   r   r   r   r   rR   r   r   r
   r
   r
   r   r   Y  s.   

r   r   z True if this attribute is an ID.z'Namespace-local name of this attribute.
schemaTypezSchema type for this attribute.c                   @   s   e Zd 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d Zd9ddZe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'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 ZdS ):NamedNodeMapr   r   _ownerElementc                 C   s   || _ || _|| _d S r&   r   )r   attrsZattrsNSr   r
   r
   r   r     s    zNamedNodeMap.__init__c                 C   s
   t | jS r&   )lenr   r   r
   r
   r   _get_length  s    zNamedNodeMap._get_lengthc                 C   s2   z| t | j |  W S  ty,   Y d S 0 d S r&   )rs   r   keys
IndexErrorr   r>   r
   r
   r   item  s    zNamedNodeMap.itemc                 C   s*   g }| j  D ]}||j|jf q|S r&   )r   valuesrS   r   r   r   rV   rI   r
   r
   r   rt     s    zNamedNodeMap.itemsc                 C   s0   g }| j  D ]}||j|jf|jf q|S r&   )r   r   rS   r   r   r   r   r
   r
   r   itemsNS  s    zNamedNodeMap.itemsNSc                 C   s"   t |tr|| jv S || jv S d S r&   )
isinstancestrr   r   rk   r
   r
   r   __contains__  s    

zNamedNodeMap.__contains__c                 C   s
   | j  S r&   )r   r   r   r
   r
   r   r     s    zNamedNodeMap.keysc                 C   s
   | j  S r&   )r   r   r   r
   r
   r   keysNS  s    zNamedNodeMap.keysNSc                 C   s
   | j  S r&   )r   r   r   r
   r
   r   r     s    zNamedNodeMap.valuesNc                 C   s   | j ||S r&   r   get)r   r   r   r
   r
   r   r     s    zNamedNodeMap.getc                 C   s:   | j t|dd u rdS t| t|kt| t|k  S d S )Nr   r   )r   getattridrc   r
   r
   r   _cmp  s    zNamedNodeMap._cmpc                 C   s   |  |dkS r,   r   rc   r
   r
   r   __eq__  s    zNamedNodeMap.__eq__c                 C   s   |  |dkS r,   r   rc   r
   r
   r   __ge__  s    zNamedNodeMap.__ge__c                 C   s   |  |dkS r,   r   rc   r
   r
   r   __gt__  s    zNamedNodeMap.__gt__c                 C   s   |  |dkS r,   r   rc   r
   r
   r   __le__  s    zNamedNodeMap.__le__c                 C   s   |  |dk S r,   r   rc   r
   r
   r   __lt__"  s    zNamedNodeMap.__lt__c                 C   s"   t |tr| j| S | j| S d S r&   )r   r4   r   r   )r   attname_or_tupler
   r
   r   __getitem__%  s    

zNamedNodeMap.__getitem__c                 C   st   t |trPz| j| }W n. tyF   t|}| jj|_| | Y n0 ||_n t |tsbt	d|}| | d S )Nz%value must be a string or Attr object)
r   r   r   rj   r   r   rY   setNamedItemr   	TypeError)r   attnamer   rI   r
   r
   r   __setitem__,  s    


zNamedNodeMap.__setitem__c                 C   s&   z| j | W S  ty    Y d S 0 d S r&   )r   rj   r   r   r
   r
   r   getNamedItem;  s    zNamedNodeMap.getNamedItemc                 C   s*   z| j ||f W S  ty$   Y d S 0 d S r&   )r   rj   r   r   r   r
   r
   r   getNamedItemNSA  s    zNamedNodeMap.getNamedItemNSc                 C   sX   |  |}|d urJt| j | j|j= | j|j|jf= t|drFd |_	|S t
j d S Nr   )r   rB   r   r   r   r   r   r   rr   r   r7   r8   r@   r   r   nr
   r
   r   removeNamedItemG  s    



zNamedNodeMap.removeNamedItemc                 C   sZ   |  ||}|d urLt| j | j|j|jf= | j|j= t|drHd |_	|S t
j d S r   )r   rB   r   r   r   r   r   r   rr   r   r7   r8   r@   r   r   r   r   r
   r
   r   removeNamedItemNSS  s    


zNamedNodeMap.removeNamedItemNSc                 C   st   t |ts&tjdt|t| f | j|j}|r@|	  || j|j< || j
|j|jf< | j|_t|j |S rJ   )r   r   r7   r8   r9   r:   r   r   r   rR   r   r   r   r   r   rB   )r   rI   ro   r
   r
   r   r   _  s    

zNamedNodeMap.setNamedItemc                 C   s
   |  |S r&   )r   r   rI   r
   r
   r   setNamedItemNSl  s    zNamedNodeMap.setNamedItemNSc                 C   s   | | }t |j |  d S r&   )rB   r   rR   )r   r   rI   r
   r
   r   __delitem__o  s    
zNamedNodeMap.__delitem__c                 C   s   | j | j| jfS r&   r   r   r
   r
   r   __getstate__t  s    zNamedNodeMap.__getstate__c                 C   s   |\| _ | _| _d S r&   r   r   stater
   r
   r   __setstate__w  s    zNamedNodeMap.__setstate__)N) r   r   r   r   r   r   r   rt   r   r   r   r   r   r   __len__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r
   r
   r   r     s:   	
r   lengthz$Number of nodes in the NamedNodeMap.c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TypeInfo	namespacer   c                 C   s   || _ || _d S r&   r  )r   r  r   r
   r
   r   r     s    zTypeInfo.__init__c                 C   s2   | j rd| jj| j| j f S d| jj| jf S d S )Nz<%s %r (from %r)>z<%s %r>)r  	__class__r   r   r   r
   r
   r   __repr__  s
    zTypeInfo.__repr__c                 C   s   | j S r&   )r   r   r
   r
   r   r     s    zTypeInfo._get_namec                 C   s   | j S r&   )r  r   r
   r
   r   _get_namespace  s    zTypeInfo._get_namespaceN)r   r   r   r   r   r  r   r  r
   r
   r
   r   r    s
   r  c                   @   s   e Zd ZdZejZdZeZ	dZ
ejejejejejejfZeddf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d Zdd Zdd Zdd ZeZdd Zdd Z d d! Z!e!Z"d"d# Z#d$d% Z$d&d' Z%d(d) Z&d*d+ Z'd9d-d.Z(d/d0 Z)d1d2 Z*d3d4 Z+d5d6 Z,d7d8 Z-dS ):Element)rY   r;   r   r   r   r   r   r(   r   r   rD   rE   Nr   c                 C   sB   d | _ | | _| _|| _|| _t | _d  | _| _d | _	d | _
d S r&   )r;   r   r   r   r   rz   r(   rD   rE   r   r   )r   r   r   r   r   r
   r
   r   r     s    
zElement.__init__c                 C   s   | j d u ri | _ i | _d S r&   )r   r   r   r
   r
   r   _ensure_attributes  s    
zElement._ensure_attributesc                 C   s2   z| j W S  ty,   | jddd  Y S 0 d S r   )r   ri   r   r   r   r
   r
   r   rb     s    zElement._get_localNamec                 C   s   | j S r&   r   r   r
   r
   r   _get_tagName  s    zElement._get_tagNamec                 C   s@   | j d ur&t| j  D ]}|  qd | _ d | _t|  d S r&   )r   rs   r   rR   r   r	   )r   attrr
   r
   r   rR     s    

zElement.unlinkc                 C   s6   | j d u rdS z| j | jW S  ty0   Y dS 0 d S r   )r   r   rj   )r   r   r
   r
   r   getAttribute  s    	
zElement.getAttributec                 C   s:   | j d u rdS z| j ||f jW S  ty4   Y dS 0 d S r   )r   r   rj   r   r
   r
   r   getAttributeNS  s    
zElement.getAttributeNSc                 C   sV   |  |}|d u r4t|}||_| j|_| | n||jkrR||_|jrRt|  d S r&   )getAttributeNoder   r   rY   setAttributeNoder   rB   )r   r   r   r  r
   r
   r   setAttribute  s    

zElement.setAttributec                 C   s   t |\}}| ||}|d u rHt||||}||_| j|_| | n4||jkrf||_|jrft|  |j|kr|||_||_	d S r&   )
_nssplitgetAttributeNodeNSr   r   rY   r  r   rB   r   r   )r   r   qualifiedNamer   r   	localnamer  r
   r
   r   setAttributeNS  s    

zElement.setAttributeNSc                 C   s   | j d u rd S | j |S r&   r   )r   attrnamer
   r
   r   r    s    
zElement.getAttributeNodec                 C   s   | j d u rd S | j ||fS r&   )r   r   r   r
   r
   r   r    s    
zElement.getAttributeNodeNSc                 C   s   |j d | fvrtjd|   | j|jd }|d urD| | | j	|j
|jfd }|d urt||urt| | t| | ||ur|S ||ur|S d S )Nzattribute node already owned)r   r7   r8   ZInuseAttributeErrr
  r   r   r   removeAttributeNoder   r   r   _set_attribute_node)r   r  Zold1Zold2r
   r
   r   r    s    


zElement.setAttributeNodec                 C   sN   | j d u rtj z| j| }W n ty>   tj Y n0 | | d S r&   )r   r7   r8   r@   r   rj   r  )r   r   r  r
   r
   r   removeAttribute%  s    

zElement.removeAttributec                 C   sR   | j d u rtj z| j ||f }W n tyB   tj Y n0 | | d S r&   )r   r7   r8   r@   rj   r  )r   r   r   r  r
   r
   r   removeAttributeNS.  s    

zElement.removeAttributeNSc                 C   s\   |d u rt j z| j|j  W n ty>   t j Y n0 t|  |  | j|_|S r&   )	r7   r8   r@   r   r   rj   rB   rR   rY   r   r
   r
   r   r  7  s    
zElement.removeAttributeNodec                 C   s   | j d u rdS || j v S NFr   r   r
   r
   r   hasAttributeG  s    
zElement.hasAttributec                 C   s   | j d u rdS ||f| j v S r  )r   r   r
   r
   r   hasAttributeNSQ  s    
zElement.hasAttributeNSc                 C   s   t | |t S r&   r   rz   r   r
   r
   r   getElementsByTagNameV  s    zElement.getElementsByTagNamec                 C   s   t | ||t S r&   r   rz   r   r
   r
   r   getElementsByTagNameNS^  s    
zElement.getElementsByTagNameNSc                 C   s   d| j t| f S )Nz<DOM Element: %s at %#x>)r   r   r   r
   r
   r   r  b  s    zElement.__repr__r   c                 C   s   | |d | j  |  }| D ],}| d|  t||| j | d q$| jr| d t| jdkr| jd jt	j
t	jfv r| jd |ddd n4| | | jD ]}|||| || q| | | d| j|f  n| d	|  d S )
Nr   z %s="r   r   r2   r   r   z</%s>%sz/>%s)r   r   _get_attributesr   r   r   r(   r   r   r	   rP   r   r    )r   r%   r#   	addindentr$   r   Za_namerI   r
   r
   r   r    e  s(    	




zElement.writexmlc                 C   s   |    t| j| j| S r&   )r
  r   r   r   r   r
   r
   r   r%    s    zElement._get_attributesc                 C   s   | j r
dS dS d S r   r  r   r
   r
   r   hasAttributes  s    zElement.hasAttributesc                 C   s   |  |}| | d S r&   )r  setIdAttributeNode)r   r   idAttrr
   r
   r   setIdAttribute  s    
zElement.setIdAttributec                 C   s   |  ||}| | d S r&   )r  r(  )r   r   r   r)  r
   r
   r   setIdAttributeNS  s    zElement.setIdAttributeNSc                 C   sj   |d u s|  |jstj t| d ur4tj |jsfd|_|  jd7  _| j	 j
d7  _
t|  d S )NTr2   )re   r   r7   r8   r@   _get_containing_entrefNoModificationAllowedErrr   r   rY   r   rB   )r   r)  r
   r
   r   r(    s    

zElement.setIdAttributeNode)r   r   r   ).r   r   r   r   r	   rT   r   r   r   r   r   r   r   rP   r   r   r6   r   r   r
  rb   r  rR   r  r  r  r  r  r  r  ZsetAttributeNodeNSr  r  r  ZremoveAttributeNodeNSr  r   r"  r$  r  r    r%  r'  r*  r+  r(  r
   r
   r
   r   r	    sT   
		

 r	  r   z*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.c                 C   s8   t |  |   || j|j< || j|j|jf< | |_d S r&   )rB   r
  r   r   r   r   r   r   )elementr  r
   r
   r   r    s
    r  c                   @   sb   e Zd ZdZdZe Zd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 )	Childlessr
   Nc                 C   s   d S r&   r
   r   r
   r
   r   r-     s    zChildless._get_firstChildc                 C   s   d S r&   r
   r   r
   r
   r   r0     s    zChildless._get_lastChildc                 C   s   t j| jd d S )Nz nodes cannot have childrenr7   r8   r9   r   r   r
   r
   r   r=     s    zChildless.appendChildc                 C   s   dS r  r
   r   r
   r
   r   r)     s    zChildless.hasChildNodesc                 C   s   t j| jd d S Nz nodes do not have childrenr0  r   rF   rG   r
   r
   r   r5     s    zChildless.insertBeforec                 C   s   t j| jd d S r1  )r7   r8   r@   r   rO   r
   r
   r   r<     s    zChildless.removeChildc                 C   s   d S r&   r
   r   r
   r
   r   rU     s    zChildless.normalizec                 C   s   t j| jd d S r1  r0  r   rF   rL   r
   r
   r   rM     s    zChildless.replaceChild)r   r   r   r   r   ZEmptyNodeListr(   r   r   r-   r0   r=   r)   r5   r<   rU   rM   r
   r
   r
   r   r/    s   r/  c                   @   s\   e Zd ZejZdZdd Zdd Zdd Z	e
ee	Zdd	 Zd
d Ze
eeZdddZdS )ProcessingInstructiontargetrQ   c                 C   s   || _ || _d S r&   r5  )r   r6  rQ   r
   r
   r   r     s    zProcessingInstruction.__init__c                 C   s   | j S r&   rQ   r   r
   r
   r   _get_nodeValue  s    z$ProcessingInstruction._get_nodeValuec                 C   s
   || _ d S r&   r7  r   r
   r
   r   _set_nodeValue  s    z$ProcessingInstruction._set_nodeValuec                 C   s   | j S r&   r6  r   r
   r
   r   _get_nodeName  s    z#ProcessingInstruction._get_nodeNamec                 C   s
   || _ d S r&   r:  r   r
   r
   r   _set_nodeName  s    z#ProcessingInstruction._set_nodeNamer   c                 C   s   | d|| j| j|f  d S )Nz%s<?%s %s?>%s)r   r6  rQ   r   r%   r#   r&  r$   r
   r
   r   r      s    zProcessingInstruction.writexmlN)r   r   r   )r   r   r   r	   r   r   r   r   r8  r9  r   r   r;  r<  r   r    r
   r
   r
   r   r4    s   

r4  c                   @   sr   e Zd ZdZdd Zdd ZeZdd Zdd	 Ze	ee Z
Zd
d Zdd Zdd Zdd Zdd Zdd ZdS )CharacterData)_datarY   r;   rE   rD   c                 C   s,   d  | _ | _d  | _| _d| _t|  d S r   )rY   r;   rE   rD   r?  r	   r   r   r
   r
   r   r     s    zCharacterData.__init__c                 C   s
   t | jS r&   )r   rQ   r   r
   r
   r   r     s    zCharacterData._get_lengthc                 C   s   | j S r&   r?  r   r
   r
   r   	_get_data  s    zCharacterData._get_datac                 C   s
   || _ d S r&   r@  r   rQ   r
   r
   r   	_set_data  s    zCharacterData._set_datac                 C   s6   | j }t|dkrd}nd}d| jj|dd |f S )N
   z...r   z<DOM %s node "%r%s">r   )rQ   r   r  r   )r   rQ   Z	dotdotdotr
   r
   r   r    s    zCharacterData.__repr__c                 C   sT   |dk rt jd|t| jkr.t jd|dk rBt jd| j|||  S Nr   offset cannot be negative#offset cannot be beyond end of datacount cannot be negativer7   r8   IndexSizeErrr   rQ   r   offsetcountr
   r
   r   substringData  s    zCharacterData.substringDatac                 C   s   | j | | _ d S r&   r7  )r   argr
   r
   r   
appendData  s    zCharacterData.appendDatac                 C   sZ   |dk rt jd|t| jkr.t jd|rVd| jd | || j|d  f | _d S )Nr   rF  rG  %s%s%srI  )r   rL  rO  r
   r
   r   
insertData!  s    zCharacterData.insertDatac                 C   sl   |dk rt jd|t| jkr.t jd|dk rBt jd|rh| jd | | j|| d   | _d S rE  rI  rK  r
   r
   r   
deleteData*  s    zCharacterData.deleteDatac                 C   sr   |dk rt jd|t| jkr.t jd|dk rBt jd|rnd| jd | || j|| d  f | _d S )Nr   rF  rG  rH  rQ  rI  )r   rL  rM  rO  r
   r
   r   replaceData4  s    zCharacterData.replaceDataN)r   r   r   r   r   r   r  rA  rC  r   rQ   r   r  rN  rP  rR  rS  rT  r
   r
   r
   r   r>    s   			
r>  zLength of the string data.c                   @   sH   e Zd ZdZejZdZdZdd Z	dddZ
d	d
 Zdd Zdd ZdS )r   r
   z#textNc                 C   s   |dk s|t | jkr"tjd|  }| j|d  |_| j|_| j}| jr~| | jj	v r~|d u rp| j
| n| j|| | jd | | _|S )Nr   zillegal offset value)r   rQ   r7   r8   rJ  r  rY   rD   r;   r(   r=   r5   )r   rL  ZnewTextnextr
   r
   r   	splitTextI  s    zText.splitTextr   c                 C   s   t |d|| j|f  d S )NrQ  )r   rQ   r=  r
   r
   r   r    X  s    zText.writexmlc                 C   s   | j g}| j}|d urB|jtjtjfv rB|d|j  |j}qqBq| j}|d urz|jtjtjfv rz||j  |j}qHqzqHd	|S )Nr   r   )
rQ   rE   r   r	   rP   r   rC   rD   rS   join)r   rV   r   r
   r
   r   _get_wholeText]  s    zText._get_wholeTextc                 C   s   | j }| j}|d ur@|jtjtjfv r@|j}|| |}qq@q| j}|sT||  |d ur|jtjtjfv r|j}|| |}qTqqT|r|| _| S d S d S r&   )	r;   rE   r   r	   rP   r   r<   rD   rQ   )r   Zcontentr   r   rU  r
   r
   r   replaceWholeTexto  s*    


zText.replaceWholeTextc                 C   sF   | j  rdS t| }|d u r"dS | j|}|d u r:dS | S d S r  )rQ   strip_get_containing_elementrY   r   isElementContent)r   r   r   r
   r
   r   !_get_isWhitespaceInElementContent  s    
z&Text._get_isWhitespaceInElementContent)r   r   r   )r   r   r   r   r	   rP   r   r   r   rV  r    rX  rY  r]  r
   r
   r
   r   r   B  s   
r   ZisWhitespaceInElementContentzKTrue iff this text node contains only whitespace and is in element content.Z	wholeTextz.The text of all logically-adjacent text nodes.c                 C   s*   | j }|d ur&|jtjkr|S |j }qd S r&   )r;   r   r	   rT   rI   rH   r
   r
   r   r[    s    r[  c                 C   s*   | j }|d ur&|jtjkr|S |j }qd S r&   )r;   r   r	   r   r^  r
   r
   r   r,    s    r,  c                   @   s(   e Zd ZejZdZdd ZdddZdS )	Commentz#commentc                 C   s   t |  || _d S r&   )r>  r   r?  rB  r
   r
   r   r     s    
zComment.__init__r   c                 C   s,   d| j v rtd|d|| j |f  d S )Nz--z%'--' is not allowed in a comment nodez%s<!--%s-->%s)rQ   r?   r   r=  r
   r
   r   r      s    
zComment.writexmlN)r   r   r   )	r   r   r   r	   r   r   r   r   r    r
   r
   r
   r   r_    s   r_  c                   @   s$   e Zd ZdZejZdZdddZdS )CDATASectionr
   z#cdata-sectionr   c                 C   s,   | j ddkrtd|d| j   d S )Nz]]>r   z$']]>' not allowed in a CDATA sectionz<![CDATA[%s]]>)rQ   findr?   r   r=  r
   r
   r   r      s    zCDATASection.writexmlN)r   r   r   )	r   r   r   r   r	   r   r   r   r    r
   r
   r
   r   r`    s   r`  c                   @   sz   e Zd ZdZd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d Zdd Zdd Zdd Zdd ZdS )ReadOnlySequentialNamedNodeMap_seqr
   c                 C   s
   || _ d S r&   rc  )r   seqr
   r
   r   r     s    z'ReadOnlySequentialNamedNodeMap.__init__c                 C   s
   t | jS r&   r   rd  r   r
   r
   r   r    s    z&ReadOnlySequentialNamedNodeMap.__len__c                 C   s
   t | jS r&   rf  r   r
   r
   r   r     s    z*ReadOnlySequentialNamedNodeMap._get_lengthc                 C   s"   | j D ]}|j|kr|  S qd S r&   )rd  r   r   r
   r
   r   r     s    

z+ReadOnlySequentialNamedNodeMap.getNamedItemc                 C   s,   | j D ] }|j|kr|j|kr|  S qd S r&   )rd  r   r   r   r
   r
   r   r     s    
z-ReadOnlySequentialNamedNodeMap.getNamedItemNSc                 C   s4   t |tr| j| }n
| |}|d u r0t||S r&   )r   r4   r   r   rj   )r   Zname_or_tuplerI   r
   r
   r   r     s    

z*ReadOnlySequentialNamedNodeMap.__getitem__c                 C   s2   |dk rd S z| j | W S  ty,   Y d S 0 d S r,   )rd  r   r   r
   r
   r   r     s    z#ReadOnlySequentialNamedNodeMap.itemc                 C   s   t jdd S Nz"NamedNodeMap instance is read-onlyr7   r8   r-  r   r
   r
   r   r     s    z.ReadOnlySequentialNamedNodeMap.removeNamedItemc                 C   s   t jdd S rg  rh  r   r
   r
   r   r     s    z0ReadOnlySequentialNamedNodeMap.removeNamedItemNSc                 C   s   t jdd S rg  rh  r   r
   r
   r   r     s    z+ReadOnlySequentialNamedNodeMap.setNamedItemc                 C   s   t jdd S rg  rh  r   r
   r
   r   r     s    z-ReadOnlySequentialNamedNodeMap.setNamedItemNSc                 C   s   | j gS r&   rc  r   r
   r
   r   r     s    z+ReadOnlySequentialNamedNodeMap.__getstate__c                 C   s   |d | _ d S r,   rc  r   r
   r
   r   r     s    z+ReadOnlySequentialNamedNodeMap.__setstate__N)r
   )r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r
   r
   r
   r   rb    s   
	rb  z&Number of entries in the NamedNodeMap.c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	
IdentifiedpublicIdsystemIdc                 C   s   || _ || _d S r&   rj  )r   rk  rl  r
   r
   r   _identified_mixin_init  s    z!Identified._identified_mixin_initc                 C   s   | j S r&   )rk  r   r
   r
   r   _get_publicId  s    zIdentified._get_publicIdc                 C   s   | j S r&   )rl  r   r
   r
   r   _get_systemId  s    zIdentified._get_systemIdN)r   r   r   r   rm  rn  ro  r
   r
   r
   r   ri    s   ri  c                   @   sH   e Zd ZejZdZdZdZdZ	dZ
dd Zdd Zdd Zdd	d
ZdS )DocumentTypeNc                 C   s2   t  | _t  | _|r&t|\}}|| _| j| _d S r&   )rb  entities	notationsr  r   r   )r   r  r   r  r
   r
   r   r   "  s    zDocumentType.__init__c                 C   s   | j S r&   )internalSubsetr   r
   r
   r   _get_internalSubset*  s    z DocumentType._get_internalSubsetc                 C   s   | j d u rtd }| j|_| j|_tjjj}|rg |j_	g |j
_	| j
j	D ]2}t|j|j|j}|j
j	| |||| qH| jj	D ]N}t|j|j|j|j}|j|_|j|_|j|_|jj	| |||| q| || | |S d S d S r&   )rY   rp  r   r   r7   r8   UserDataHandlerNODE_CLONEDrq  rd  rr  Notationrk  rl  rS   ry   EntitynotationNameactualEncodingr   r`   )r   rZ   clonerv   r   notationeentityr
   r
   r   r[   -  s0    

zDocumentType.cloneNoder   c                 C   s   | d | | j | jr8| d|| j|| jf  n| jrR| d|| jf  | jd ur|| d | | j | d | d|  d S )Nz
<!DOCTYPE z%s  PUBLIC '%s'%s  '%s'z%s  SYSTEM '%s'z []r   )r   r   rk  rl  rs  r=  r
   r
   r   r    H  s    



zDocumentType.writexml)r   r   r   )r   r   r   r	   DOCUMENT_TYPE_NODEr   r   r   rk  rl  rs  r   rt  r[   r    r
   r
   r
   r   rp    s   rp  c                   @   sf   e Zd ZdZejZdZdZd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 )rx  Nc                 C   s$   || _ || _t | _| || d S r&   )r   ry  rz   r(   rm  )r   r   rk  rl  r|  r
   r
   r   r   _  s    zEntity.__init__c                 C   s   | j S r&   rz  r   r
   r
   r   _get_actualEncodinge  s    zEntity._get_actualEncodingc                 C   s   | j S r&   r   r   r
   r
   r   _get_encodingh  s    zEntity._get_encodingc                 C   s   | j S r&   r`   r   r
   r
   r   _get_versionk  s    zEntity._get_versionc                 C   s   t jdd S )Nz(cannot append children to an entity noder7   r8   r9   )r   rF   r
   r
   r   r=   n  s    zEntity.appendChildc                 C   s   t jdd S )Nz+cannot insert children below an entity noder  r2  r
   r
   r   r5   r  s    zEntity.insertBeforec                 C   s   t jdd S )Nz*cannot remove children from an entity noder  rO   r
   r
   r   r<   v  s    zEntity.removeChildc                 C   s   t jdd S )Nz)cannot replace children of an entity noder  r3  r
   r
   r   rM   z  s    zEntity.replaceChild)r   r   r   r   r	   ZENTITY_NODEr   r   rz  r   r`   r   r  r  r  r=   r5   r<   rM   r
   r
   r
   r   rx  V  s   rx  c                   @   s   e Zd ZejZdZdd ZdS )rw  Nc                 C   s   || _ | || d S r&   )r   rm  )r   r   rk  rl  r
   r
   r   r     s    zNotation.__init__)r   r   r   r	   r   r   r   r   r
   r
   r
   r   rw  ~  s   rw  c                   @   s<   e Zd Zg dZdd Zdd Zdd Zdd	 Zd
d ZdS )DOMImplementation))core1.0)r  2.0)r  N)r7   r  )r7   r  )r7   N)ls-loadz3.0)r  Nc                 C   s   |dkrd }|  |f| jv S r   )lower	_featuresr^   r
   r
   r   r]     s    zDOMImplementation.hasFeaturec           	      C   s   |r|j d urtjd|  }|d u o8|d u o8|d u  }|sP|rPtjd|rt|\}}|dkr||dkr|tjd|r|stjd|||}|r|	| |	| |r| |_ |_
||_| |_|S )Nz(doctype object owned by another DOM treezElement with no namer7   z$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces)r;   r7   r8   WrongDocumentErr_create_documentZInvalidCharacterErrr  r   createElementNSr=   rY   doctyper\   )	r   r   r  r  r   Zadd_root_elementr   r  r.  r
   r
   r   createDocument  s>    

z DOMImplementation.createDocumentc                 C   s   t |}||_||_|S r&   )rp  rk  rl  )r   r  rk  rl  r  r
   r
   r   createDocumentType  s    z$DOMImplementation.createDocumentTypec                 C   s   |  |d r| S d S d S r&   )r]   rf   r
   r
   r   rg     s    zDOMImplementation.getInterfacec                 C   s   t  S r&   )Documentr   r
   r
   r   r    s    z"DOMImplementation._create_documentN)	r   r   r   r  r]   r  r  rg   r  r
   r
   r
   r   r    s   
-r  c                   @   sX   e Zd 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d ZdS )ElementInfor  c                 C   s
   || _ d S r&   r  r   r
   r
   r   r     s    zElementInfo.__init__c                 C   s   t S r&   r   r   Zanamer
   r
   r   r     s    zElementInfo.getAttributeTypec                 C   s   t S r&   r  r   r
   r
   r   r     s    zElementInfo.getAttributeTypeNSc                 C   s   dS r  r
   r   r
   r
   r   r\    s    zElementInfo.isElementContentc                 C   s   dS r  r
   r   r
   r
   r   isEmpty  s    zElementInfo.isEmptyc                 C   s   dS r  r
   r  r
   r
   r   r     s    zElementInfo.isIdc                 C   s   dS r  r
   r   r
   r
   r   r     s    zElementInfo.isIdNSc                 C   s   | j S r&   r  r   r
   r
   r   r     s    zElementInfo.__getstate__c                 C   s
   || _ d S r&   r  r   r
   r
   r   r     s    zElementInfo.__setstate__N)r   r   r   r   r   r   r   r\  r  r   r   r   r   r
   r
   r
   r   r    s   	r  c                 C   s>   | j tjkr| j  d | _nt| r:| jj  d | j_d S r&   )r   r	   r   	_id_cacheclear_id_search_stackr   rY   r   r
   r
   r   rB      s    
rB   c                   @   sr  e Zd ZdZejejejejfZ	e
 ZejZdZdZdZdZd ZZdZdZdZdZdZdZd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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(d) Z-d*d+ Z.d,d- Z/d.d/ Z0d0d1 Z1d2d3 Z2d4d5 Z3d6d7 Z4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8d@dA Z9dBdC Z:dIdEdFZ;dGdH Z<dS )Jr  )
_elem_infor  r  r(   r  z	#documentNFr   c                 C   s$   d | _ t | _i | _i | _d | _d S r&   )r  rz   r(   r  r  r  r   r
   r
   r   r   #  s
    zDocument.__init__c                 C   s&   |j r|j |jf}n|j}| j|S r&   )r   r   r   r  r   )r   r.  rl   r
   r
   r   r   ,  s    zDocument._get_elem_infoc                 C   s   | j S r&   r  r   r
   r
   r   r  3  s    zDocument._get_actualEncodingc                 C   s   | j S r&   )r  r   r
   r
   r   _get_doctype6  s    zDocument._get_doctypec                 C   s   | j S r&   )documentURIr   r
   r
   r   _get_documentURI9  s    zDocument._get_documentURIc                 C   s   | j S r&   r  r   r
   r
   r   r  <  s    zDocument._get_encodingc                 C   s   | j S r&   )errorHandlerr   r
   r
   r   _get_errorHandler?  s    zDocument._get_errorHandlerc                 C   s   | j S r&   )r   r   r
   r
   r   _get_standaloneB  s    zDocument._get_standalonec                 C   s   | j S r&   )strictErrorCheckingr   r
   r
   r   _get_strictErrorCheckingE  s    z!Document._get_strictErrorCheckingc                 C   s   | j S r&   r  r   r
   r
   r   r  H  s    zDocument._get_versionc                 C   sj   |j | jvr(tjdt|t| f |jd ur>|j| |j tj	kr^| 
 r^tjdt| |S )Nr1   z two document elements disallowed)r   r6   r7   r8   r9   r:   r;   r<   r	   rT   _get_documentElementr=   r   r
   r
   r   r=   K  s    
zDocument.appendChildc                 C   sT   z| j | W n ty,   tj Y n0 d  |_|_d |_| j	|u rPd | _	|S r&   )
r(   rN   r?   r7   r8   r@   rD   rE   r;   documentElementrO   r
   r
   r   r<   [  s    
zDocument.removeChildc                 C   s$   | j D ]}|jtjkr|  S qd S r&   )r(   r   r	   rT   r   r
   r
   r   r  g  s    
zDocument._get_documentElementc                 C   s(   | j d ur| j   d | _ t|  d S r&   )r  rR   r	   r   r
   r
   r   rR   l  s    

zDocument.unlinkc                 C   s   |sd S | j d d d }| j|_| j|_| j|_| jD ]B}t|||}|j| |jt	j
kr`n|jt	jkrr||_||_q6| tjjj| | |S r&   )r\   r  r   r   r`   r(   rX   rS   r   r	   r   r  r  r;   ry   r7   r8   ru  rv  )r   rZ   r{  r   Z
childcloner
   r
   r   r[   r  s$    
zDocument.cloneNodec                 C   s   t  }| |_|S r&   )r   rY   )r   rp   r
   r
   r   createDocumentFragment  s    zDocument.createDocumentFragmentc                 C   s   t |}| |_|S r&   )r	  rY   )r   r   r}  r
   r
   r   createElement  s    zDocument.createElementc                 C   s(   t |tstdt }||_| |_|S Nznode contents must be a string)r   r   r   r   rQ   rY   )r   rQ   tr
   r
   r   createTextNode  s    
zDocument.createTextNodec                 C   s(   t |tstdt }||_| |_|S r  )r   r   r   r`  rQ   rY   r   rQ   rH   r
   r
   r   createCDATASection  s    
zDocument.createCDATASectionc                 C   s   t |}| |_|S r&   )r_  rY   r  r
   r
   r   createComment  s    zDocument.createCommentc                 C   s   t ||}| |_|S r&   )r4  rY   )r   r6  rQ   pr
   r
   r   createProcessingInstruction  s    
z$Document.createProcessingInstructionc                 C   s   t |}| |_d|_|S r   )r   rY   r   )r   r   ar
   r
   r   createAttribute  s    zDocument.createAttributec                 C   s"   t |\}}t|||}| |_|S r&   )r  r	  rY   )r   r   r  r   r   r}  r
   r
   r   r    s    zDocument.createElementNSc                 C   s*   t |\}}t||||}| |_d|_|S r   )r  r   rY   r   )r   r   r  r   r   r  r
   r
   r   createAttributeNS  s
    zDocument.createAttributeNSc                 C   s   t ||||}| |_|S r&   )rx  rY   )r   r   rk  rl  ry  r}  r
   r
   r   _create_entity  s    zDocument._create_entityc                 C   s   t |||}| |_|S r&   )rw  rY   )r   r   rk  rl  r   r
   r
   r   _create_notation  s    zDocument._create_notationc                 C   s  || j v r| j | S | js$| js$d S | j}|d u rB| jg}|| _n|sJd S d }|r| }|dd |jD  | |}|rB|j	
 D ]}|jr||j|jr|| j |j< |j|kr|}n|js qq||jr
|| j |j< |j|kr|}n|js> qq|jr|| j |j< |j|kr.|}q|jdkr qqn>|jr|j	
 D ]*}|jrT|| j |j< |j|krT|}qT|d urNqqN|S )Nc                 S   s   g | ]}|j tv r|qS r
   )r   rA   ).0rW   r
   r
   r   
<listcomp>  s   
z+Document.getElementById.<locals>.<listcomp>r2   )r  r  r   r  r  popextendr(   r   r   r   r   r   r   r   r   r   r   r   )r   r   stackresultrI   r   r  r
   r
   r   getElementById  sZ    






zDocument.getElementByIdc                 C   s   t | |t S r&   r!  r   r
   r
   r   r"    s    zDocument.getElementsByTagNamec                 C   s   t | ||t S r&   r#  r   r
   r
   r   r$    s    
zDocument.getElementsByTagNameNSc                 C   s   | j ||S r&   )r\   r]   r^   r
   r
   r   ra     s    zDocument.isSupportedc                 C   s>   |j tjkrtjdn|j tjkr2tjdt||| S )Nzcannot import document nodesz!cannot import document type nodes)r   r	   r   r7   r8   NotSupportedErrr  rX   )r   rI   rZ   r
   r
   r   
importNode  s
    zDocument.importNoder   c           	      C   sx   g }|r| d| d |d ur<| d|r0dnd d |dd| d|  | jD ]}||||| q^d S )	Nz
encoding="r   zstandalone="Zyesnoz<?xml version="1.0"  z?>)rS   r   rW  r(   r    )	r   r%   r#   r&  r$   r   r   ZdeclarationsrI   r
   r
   r   r      s    
zDocument.writexmlc                 C   sJ  |j | ur tjd| |j f |jtjtjfvr>tjd|t	krd|v r|
dd\}}|dkr|tjjkrtjdq|dkr|tjjkr|jtjkrtjdd }|}nd }d }|jtjkr|j}|d ur|j}|| nd }||_||_||_||_|jtjkr||_n*||_|d urF|| |rF|| |S )Nz?cannot rename nodes from other documents;
expected %s,
found %sz8renameNode() only applies to element and attribute nodesr   r2   r   zillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rY   r7   r8   r  r   r	   rT   r   r  r   r   r   r   r   r   r  r   r   r   r   r   r   r  r(  )r   r   r   r   r   r   r.  Zis_idr
   r
   r   
renameNode&  sb    






zDocument.renameNode)r   r   r   NN)=r   r   r   r   r	   rT   r   r   r  r6   r  r\   r   r   r   r   r   r;   rE   rD   rz  r   r   r`   r  r  r  r   r   r   r  r  r  r  r  r  r  r  r=   r<   r  rR   r[   r  r  r  r  r  r  r  r  r  r  r  r  r"  r$  ra   r  r    r  r
   r
   r
   r   r    sl   	
:  
r  r  z#Top-level element of this document.c                 C   s  | j |rtjjj}n
tjjj}| jtj	kr|
| j| j}| j D ]0}||j|j|j ||j|j}|j|_qH|r| jD ]}t|||}|| qn| jtjkr| }|r| jD ]}t|||}|| qn| jtjkr|| j}n| jtjkr|| j}n| jtjkr>|| j | j}nj| jtj!kr\|"| j}nL| jtj#kr|$| j| j}d|_| j|_n| jtj%krtjjj}|j&'| j(| j)| j*}||_ |rg |j+_,g |j-_,| j-j,D ]F}	t.|	j|	j)|	j*}
||
_ |j-j,/|
 t0|	dr|	1||	|
 q| j+j,D ]b}t2|j|j)|j*|j3}|j4|_4|j5|_5|j6|_6||_ |j+j,/| t0|dr.|1||| q.ntj7dt8|  t0| dr| 1|| | |S )NTry   zCannot clone node %s)9rY   re   r7   r8   ru  rv  ZNODE_IMPORTEDr   r	   rT   r  r   r   r   r   r  r   r  r   r   r(   rX   r=   r3   r  rP   r  rQ   r   r  r   r  r6  r   r  r   r  r  r\   r  r   rk  rl  rq  rd  rr  rw  rS   rr   ry   rx  ry  rz  r   r`   r  r:   )rI   rZ   ZnewOwnerDocumentrv   r{  r  r  rW   rH   r   r|  r}  r~  r
   r
   r   rX   _  s    




rX   c                 C   s,   |  dd}t|dkr|S d |d fS d S )Nr   r2      r   )r   r   )r  fieldsr
   r
   r   r    s    r  c                 C   s0   | |i |}|  \}}|| |  |S r&   )ZgetEventZ
expandNoder  )funcargskwargseventsZtoktypeZrootNoder
   r
   r   _do_pulldom_parse  s
    
r  c                 C   sH   |d u r"|s"ddl m} || S ddl m} t|j| f||dS d S )Nr   expatbuilderpulldom)parserbufsize)xml.domr  parser  r  )filer  r  r  r  r
   r
   r   r    s    

r  c                 C   sB   |d u rddl m} || S ddl m} t|j| fd|iS d S )Nr   r  r  r  )r  r  parseStringr  r  )stringr  r  r  r
   r
   r   r    s    

r  c                 C   s@   | r:t | trt| } | D ]\}}tj||s d S qtjS r&   )r   r   r   Z_parse_feature_stringr  r\   r]   )Zfeaturesfvr
   r
   r   getDOMImplementation  s    

r  )NN)N)N)6r   r  r7   r   r   r   r   Zxml.dom.minicompatZxml.dom.xmlbuilderr   r   r8   r	   rT   r   rA   ZdefpropertyrK   r   r   r   r   r   r   objectr   ZAttributeListr  r   r	  r  r/  r4  r>  r   r[  r,  r_  r`  rb  ri  rp  rx  rw  r  r  rB   r  rX   r  r  r  r  r  r
   r
   r
   r   <module>   s    w
	y $
  )GU	><(	O*  UR



