
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a) ã                   @   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
   ú4/opt/alt/python38/lib64/python3.8/xml/dom/minidom.pyÚ__bool__+   s    zNode.__bool__c                 C   s   |   dd|¡S ©NÚ )Útoprettyxml)r   Úencodingr
   r
   r   Útoxml.   s    z
Node.toxmlú	Ú
c                 C   sx   |d krt  ¡ }nt jt  ¡ |ddd�}| jtjkrH|  |d|||¡ n|  |d||¡ |d krh| ¡ S | 	¡  ¡ S d S )NÚxmlcharrefreplacer   )r   ÚerrorsÚnewliner   )
ÚioÚStringIOÚTextIOWrapperÚBytesIOÚnodeTyper	   ÚDOCUMENT_NODEÚwritexmlÚgetvalueÚdetach)r   ÚindentÚnewlr   Úwriterr
   r
   r   r   1   s    

ýzNode.toprettyxmlc                 C   s
   t | jƒS ©N)ÚboolÚ
childNodesr   r
   r
   r   ÚhasChildNodesC   s    zNode.hasChildNodesc                 C   s   | j S r%   ©r'   r   r
   r
   r   Ú_get_childNodesF   s    zNode._get_childNodesc                 C   s   | j r| j d S d S ©Nr   r)   r   r
   r
   r   Ú_get_firstChildI   s    zNode._get_firstChildc                 C   s   | j r| j d S d S ©Néÿÿÿÿr)   r   r
   r
   r   Ú_get_lastChildM   s    zNode._get_lastChildc                 C   s
  |j | jkr,t|jƒD ]}|  ||¡ q|S |j | jkrTtj dt	|ƒt	| ƒf ¡‚|j
d k	rj|j
 |¡ |d kr~|  |¡ nˆz| j |¡}W n tk
r¬   tj ¡ ‚Y nX |j tkrÀt| ƒ | 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   r4   Q   s8    ÿ

zNode.insertBeforec                 C   s�   |j | jkr*t|jƒD ]}|  |¡ q|S |j | jkrTtj dt	|ƒt	| ƒf ¡‚n|j t
krft| ƒ |jd k	r||j |¡ t| |ƒ d |_|S ©Nr0   )r   r2   r3   r'   r<   r5   r6   r7   r8   r9   r@   rA   r:   r;   Ú_append_childrC   )r   rH   rG   r
   r
   r   r<   q   s    ÿ


zNode.appendChildc                 C   s  |j | jkr(|j}|  |¡ |  ||¡S |j | jkrPtj dt	|ƒt	| ƒf ¡‚||kr\d S |j
d k	rr|j
 |¡ z| j |¡}W n tk
r    tj ¡ ‚Y nX || j|< | |_
d |_
|j tksÌ|j tkrÔt| ƒ |j|_|j|_d |_d |_|jrþ||j_|j�r||j_|S rI   )r   r2   rC   r;   r4   r5   r6   r7   r8   r9   r:   r'   r=   r>   r?   r@   rA   rD   )r   rE   ÚoldChildrF   r=   r
   r
   r   ÚreplaceChild‚   s@    
ÿ


ÿzNode.replaceChildc                 C   s€   z| j  |¡ W n tk
r.   tj ¡ ‚Y nX |jd k	rD|j|j_|jd k	rX|j|j_d  |_|_|jt	krvt
| ƒ d |_|S r%   )r'   Úremover>   r6   r7   r?   rC   rD   r   r@   rA   r:   ©r   rK   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ÚdatarC   rD   ÚunlinkÚappendÚELEMENT_NODEÚ	normalize)r   ÚLÚchildrH   r
   r
   r   rT   ²   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%   )rX   Ú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   | |kS r%   r
   ©r   Úotherr
   r
   r   Ú
isSameNodeÙ   s    zNode.isSameNodec                 C   s   |   |d ¡r| S d S d S r%   )r`   ©r   r^   r
   r
   r   ÚgetInterfaceÜ   s    zNode.getInterfacec              	   C   s0   z| j | d W S  ttfk
r*   Y d S X d S r+   )Ú
_user_dataÚAttributeErrorÚKeyError©r   Úkeyr
   r
   r   ÚgetUserDataæ   s    zNode.getUserDatac                 C   sn   d }z
| j }W n tk
r,   i }|| _ Y nX ||krB|| d }|d kr^d }|d k	rj||= n||f||< |S r+   )rg   rh   )r   rk   rP   ÚhandlerÚoldÚdr
   r
   r   ÚsetUserDataì   s    
zNode.setUserDatac                 C   sD   t | dƒr@t| j ¡ ƒD ]&\}\}}|d k	r| |||||¡ qd S )Nrg   )ÚhasattrÚlistrg   ÚitemsZhandle)r   Ú	operationÚsrcZdstrk   rP   rm   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:   rX   r'   rQ   ÚNodeListrD   rC   )r   rV   r
   r
   r   rQ     s    

zNode.unlinkc                 C   s   | S r%   r
   r   r
   r
   r   Ú	__enter__  s    zNode.__enter__c                 C   s   |   ¡  d S r%   )rQ   )r   ZetZevÚtbr
   r
   r   Ú__exit__  s    zNode.__exit__)N)r   r   N)!Ú__name__Ú
__module__Ú__qualname__ÚnamespaceURIr:   rX   rC   rD   r   Úprefixr   r   r   r(   r*   r,   r/   r4   r<   rL   r;   rT   rZ   r`   ra   rd   rf   rl   rp   rv   rQ   rx   rz   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'   rD   rC   rR   r:   )r   rH   r'   Zlastr
   r
   r   rJ     s    
rJ   c                 C   s$   | d k	r | j tjkrdS | j} q dS ©NTF)r   r	   r   r:   ©rH   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$   rP   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	   rS   ÚtagNamerR   Ú_get_elements_by_tagName_helper)ÚparentÚnameÚrcrH   r
   r
   r   r�   5  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	   rS   rƒ   r~   rR   Ú"_get_elements_by_tagName_ns_helper)r‘   ZnsURIrƒ   r“   rH   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%   )rw   r'   r   r
   r
   r   Ú__init__T  s    zDocumentFragment.__init__)r{   r|   r}   r	   r2   r   ÚnodeNameÚ	nodeValueÚ
attributesr:   rS   rO   ÚCDATA_SECTION_NODEÚENTITY_REFERENCE_NODEÚPROCESSING_INSTRUCTION_NODEÚCOMMENT_NODEÚNOTATION_NODEr5   r–   r
   r
   r
   r   r•   F  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'   Ú
_localNamerX   ÚownerElementNFc                 C   s2   d | _ || _|| _|| _tƒ | _| j tƒ ¡ d S r%   )r¤   r    r~   r¢   rw   r'   rR   ÚText)r   ÚqNamer~   rƒ   r   r
   r
   r   r–   b  s    zAttr.__init__c                 C   s4   z| j W S  tk
r.   | j dd¡d  Y S X d S ©Nú:r1   r.   )r£   rh   r—   Úsplitr   r
   r
   r   ra   o  s    zAttr._get_localNamec                 C   s   | j S r%   )Ú	specifiedr   r
   r
   r   Ú_get_specifiedu  s    zAttr._get_specifiedc                 C   s   | j S r%   )r    r   r
   r
   r   Ú	_get_namex  s    zAttr._get_namec                 C   s   || _ | jd k	rt| jƒ d S r%   )r    r¤   rA   ©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 k	r&t| jƒ || jd _d S r+   )r¡   r'   rP   r¤   rA   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 k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   r6   r7   ÚNamespaceErrr¢   rƒ   r¤   rA   r’   )r   r   ZnsuriZnewNamer
   r
   r   Ú_set_prefix‘  s    ÿ
zAttr._set_prefixc                 C   sv   | j }|d k	rR|j| j= |j| j| jf= | jrRd| _| jd8  _| j j	d8  _	| j
D ]}| ¡  qX| j
d d …= d S )NFr1   )r¤   Ú_attrsr—   Ú_attrsNSr~   rƒ   Ú_is_idÚ_magic_id_nodesrX   Ú_magic_id_countr'   rQ   )r   ÚelemrV   r
   r
   r   rQ   ¢  s    


zAttr.unlinkc                 C   sf   | j r
dS | j}| j}|d ks&|d kr*dS | |¡}|d kr@dS | jrV| | j| j¡S | | j¡S d S r„   )	r¸   rX   r¤   Ú_get_elem_infor~   ÚisIdNSrƒ   ÚisIdr—   ©r   r�   r»   Úinfor
   r
   r   Ú	_get_isId³  s    
zAttr._get_isIdc                 C   s\   | j }| j}|d ks|d kr tS | |¡}|d kr6tS | jrL| | j| j¡S | | j¡S d S r%   )	rX   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¸   rO   r›   r5   r   r–   ra   r«   r¬   r¯   Úpropertyr—   r’   r°   r±   r˜   r®   r²   rµ   r   rQ   rÁ   rÅ   r
   r
   r
   r   rŸ   X  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   s4   z| t | j ¡ ƒ|  W S  tk
r.   Y d S X d S r%   )rr   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¶   ÚvaluesrR   r—   r®   ©r   rU   rH   r
   r
   r   rs   ï  s    zNamedNodeMap.itemsc                 C   s0   g }| j  ¡ D ]}| |j|jf|jf¡ q|S r%   )r¶   rÔ   rR   r~   rƒ   r®   rÕ   r
   r
   r   ÚitemsNSõ  s    zNamedNodeMap.itemsNSc                 C   s"   t |tƒr|| jkS || jkS d S r%   )Ú
isinstanceÚstrr¶   r·   rj   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 ƒkrdS t| ƒt|ƒkt| ƒt|ƒk  S d S )Nr¶   r   )r¶   ÚgetattrÚidrb   r
   r
   r   Ú_cmp  s    zNamedNodeMap._cmpc                 C   s   |   |¡dkS r+   ©rß   rb   r
   r
   r   Ú__eq__  s    zNamedNodeMap.__eq__c                 C   s   |   |¡dkS r+   rà   rb   r
   r
   r   Ú__ge__  s    zNamedNodeMap.__ge__c                 C   s   |   |¡dkS r+   rà   rb   r
   r
   r   Ú__gt__  s    zNamedNodeMap.__gt__c                 C   s   |   |¡dkS r+   rà   rb   r
   r
   r   Ú__le__  s    zNamedNodeMap.__le__c                 C   s   |   |¡dk S r+   rà   rb   r
   r
   r   Ú__lt__!  s    zNamedNodeMap.__lt__c                 C   s"   t |tƒr| j| S | j| S d S r%   )r×   r3   r·   r¶   )r   Úattname_or_tupler
   r
   r   Ú__getitem__$  s    

zNamedNodeMap.__getitem__c                 C   sv   t |tƒrRz| j| }W n0 tk
rH   t|ƒ}| jj|_|  |¡ Y nX ||_n t |tƒsdt	dƒ‚|}|  |¡ d S )Nz%value must be a string or Attr object)
r×   rØ   r¶   ri   rŸ   rÌ   rX   ÚsetNamedItemr®   Ú	TypeError)r   Úattnamer®   rH   r
   r
   r   Ú__setitem__+  s    


zNamedNodeMap.__setitem__c                 C   s(   z| j | W S  tk
r"   Y d S X d S r%   )r¶   ri   ©r   r’   r
   r
   r   ÚgetNamedItem:  s    zNamedNodeMap.getNamedItemc                 C   s,   z| j ||f W S  tk
r&   Y d S X d S r%   )r·   ri   ©r   r~   rƒ   r
   r
   r   ÚgetNamedItemNS@  s    zNamedNodeMap.getNamedItemNSc                 C   sX   |   |¡}|d k	rJt| jƒ | j|j= | j|j|jf= t|dƒrFd |_	|S t
j ¡ ‚d S ©Nr¤   )rí   rA   rÌ   r¶   r—   r·   r~   rƒ   rq   r¤   r6   r7   r?   ©r   r’   Únr
   r
   r   ÚremoveNamedItemF  s    



zNamedNodeMap.removeNamedItemc                 C   sZ   |   ||¡}|d k	rLt| jƒ | j|j|jf= | j|j= t|dƒrHd |_	|S t
j ¡ ‚d S rð   )rï   rA   rÌ   r·   r~   rƒ   r¶   r—   rq   r¤   r6   r7   r?   ©r   r~   rƒ   rò   r
   r
   r   ÚremoveNamedItemNSR  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 rI   )r×   rŸ   r6   r7   r8   r9   r¶   rÜ   r’   rQ   r·   r~   rƒ   rÌ   r¤   rA   )r   rH   rn   r
   r
   r   rè   ^  s    
ÿ
zNamedNodeMap.setNamedItemc                 C   s
   |   |¡S r%   )rè   ©r   rH   r
   r
   r   ÚsetNamedItemNSk  s    zNamedNodeMap.setNamedItemNSc                 C   s   | | }t |jƒ | ¡  d S r%   )rA   r¤   rQ   )r   ræ   rH   r
   r
   r   Ú__delitem__n  s    
zNamedNodeMap.__delitem__c                 C   s   | j | j| jfS r%   rË   r   r
   r
   r   Ú__getstate__s  s    zNamedNodeMap.__getstate__c                 C   s   |\| _ | _| _d S r%   rË   ©r   Ústater
   r
   r   Ú__setstate__v  s    zNamedNodeMap.__setstate__)N) r{   r|   r}   rÆ   r–   rÏ   rÓ   rs   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Ê   Z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)rX   r:   r�   r—   r   r~   r£   r'   r¶   r·   rC   rD   Nr   c                 C   sB   d | _ | | _| _|| _|| _tƒ | _d  | _| _d | _	d | _
d S r%   )r:   r�   r—   r   r~   rw   r'   rC   rD   r¶   r·   )r   r�   r~   r   rƒ   r
   r
   r   r–   ¦  s    
zElement.__init__c                 C   s   | j d kri | _ i | _d S r%   )r¶   r·   r   r
   r
   r   Ú_ensure_attributesº  s    
zElement._ensure_attributesc                 C   s4   z| j W S  tk
r.   | j dd¡d  Y S X d S r§   )r£   rh   r�   r©   r   r
   r
   r   ra   ¿  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 k	r&t| j  ¡ ƒD ]}| ¡  qd | _ d | _t | ¡ d S r%   )r¶   rr   rÔ   rQ   r·   r	   )r   Úattrr
   r
   r   rQ   È  s    

zElement.unlinkc                 C   s8   | j d krdS z| j | jW S  tk
r2   Y dS X d S r   )r¶   r®   ri   )r   rê   r
   r
   r   ÚgetAttributeÐ  s    
zElement.getAttributec                 C   s<   | j d krdS z| j ||f jW S  tk
r6   Y dS X d S r   )r·   r®   ri   rî   r
   r
   r   ÚgetAttributeNSØ  s    
zElement.getAttributeNSc                 C   sV   |   |¡}|d kr4t|ƒ}||_| j|_|  |¡ n||jkrR||_|jrRt| ƒ d S r%   )ÚgetAttributeNoderŸ   r®   rX   ÚsetAttributeNoder¾   rA   )r   rê   r®   r  r
   r
   r   ÚsetAttributeà  s    

zElement.setAttributec                 C   s€   t |ƒ\}}|  ||¡}|d krHt||||ƒ}||_| j|_|  |¡ n4||jkrf||_|jrft| ƒ |j|kr|||_||_	d S r%   )
Ú_nssplitÚgetAttributeNodeNSrŸ   r®   rX   r  r¾   rA   r   r—   )r   r~   ÚqualifiedNamer®   r   Ú	localnamer  r
   r
   r   ÚsetAttributeNSì  s    

zElement.setAttributeNSc                 C   s   | j d krd S | j  |¡S r%   rÛ   )r   Úattrnamer
   r
   r   r  ý  s    
zElement.getAttributeNodec                 C   s   | j d krd S | j  ||f¡S r%   )r·   rÜ   rî   r
   r
   r   r    s    
zElement.getAttributeNodeNSc                 C   sš   |j d | fkrtj d¡‚|  ¡  | j |jd ¡}|d k	rD|  |¡ | j	 |j
|jfd ¡}|d k	rt||k	rt|  |¡ t| |ƒ ||k	rŠ|S ||k	r–|S d S )Nzattribute node already owned)r¤   r6   r7   ZInuseAttributeErrr  r¶   rÜ   r’   ÚremoveAttributeNoder·   r~   rƒ   Ú_set_attribute_node)r   r  Zold1Zold2r
   r
   r   r    s    


zElement.setAttributeNodec                 C   sP   | j d krtj ¡ ‚z| j| }W n tk
r@   tj ¡ ‚Y nX |  |¡ d S r%   )r·   r6   r7   r?   r¶   ri   r  )r   r’   r  r
   r
   r   ÚremoveAttribute  s    

zElement.removeAttributec                 C   sT   | j d krtj ¡ ‚z| j ||f }W n tk
rD   tj ¡ ‚Y nX |  |¡ d S r%   )r·   r6   r7   r?   ri   r  )r   r~   rƒ   r  r
   r
   r   ÚremoveAttributeNS%  s    

zElement.removeAttributeNSc                 C   s^   |d krt j ¡ ‚z| j|j  W n tk
r@   t j ¡ ‚Y nX t| ƒ | ¡  | j|_|S r%   )	r6   r7   r?   r¶   r’   ri   rA   rQ   rX   rö   r
   r
   r   r  .  s    
zElement.removeAttributeNodec                 C   s   | j d krdS || j kS ©NF©r¶   rì   r
   r
   r   ÚhasAttribute>  s    
zElement.hasAttributec                 C   s   | j d krdS ||f| j kS r  )r·   rî   r
   r
   r   ÚhasAttributeNSC  s    
zElement.hasAttributeNSc                 C   s   t | |tƒ ƒS r%   ©r�   rw   rì   r
   r
   r   ÚgetElementsByTagNameH  s    zElement.getElementsByTagNamec                 C   s   t | ||tƒ ƒS r%   ©r”   rw   rî   r
   r
   r   ÚgetElementsByTagNameNSK  s       ÿzElement.getElementsByTagNameNSc                 C   s   d| j t| ƒf S )Nz<DOM Element: %s at %#x>)r�   rÞ   r   r
   r
   r   r  O  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kr | jd  |ddd¡ n4|  |¡ | jD ]}| ||| ||¡ q°|  |¡ |  d| j|f ¡ n|  d	| ¡ d S )
Nrˆ   z %s="r‰   rŠ   r1   r   r   z</%s>%sz/>%s)rŒ   r�   Ú_get_attributesrÐ   r�   r®   r'   rÎ   r   r	   rO   rš   r   )r   r$   r"   Ú	addindentr#   rÍ   Za_namerH   r
   r
   r   r   R  s*    

 ÿÿ


zElement.writexmlc                 C   s   |   ¡  t| j| j| ƒS r%   )r  rÊ   r¶   r·   r   r
   r
   r   r   m  s    zElement._get_attributesc                 C   s   | j r
dS dS d S r„   r  r   r
   r
   r   ÚhasAttributesq  s    zElement.hasAttributesc                 C   s   |   |¡}|  |¡ d S r%   )r  ÚsetIdAttributeNode)r   r’   ÚidAttrr
   r
   r   ÚsetIdAttributey  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 ks|   |j¡stj ¡ ‚t| ƒd k	r4tj ¡ ‚|jsfd|_|  jd7  _| j	 j
d7  _
t| ƒ d S )NTr1   )rd   r¤   r6   r7   r?   Ú_get_containing_entrefÚNoModificationAllowedErrr¸   r¹   rX   rº   rA   )r   r$  r
   r
   r   r#  �  s    

zElement.setIdAttributeNode)r   r   r   ).r{   r|   r}   rÆ   r	   rS   r   r˜   rÂ   rÉ   r¹   rœ   r�   rO   rš   r›   r5   r   r–   r  ra   r  rQ   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%   )rA   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   r/   «  s    zChildless._get_lastChildc                 C   s   t j | jd ¡‚d S )Nz nodes cannot have children©r6   r7   r8   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 childrenr+  ©r   rE   rF   r
   r
   r   r4   µ  s    ÿzChildless.insertBeforec                 C   s   t j | jd ¡‚d S r,  )r6   r7   r?   r—   rN   r
   r
   r   r;   ¹  s    ÿzChildless.removeChildc                 C   s   d S r%   r
   r   r
   r
   r   rT   ½  s    zChildless.normalizec                 C   s   t j | jd ¡‚d S r,  r+  ©r   rE   rK   r
   r
   r   rL   Á  s    ÿzChildless.replaceChild)r{   r|   r}   rÆ   r™   ZEmptyNodeListr'   r€   r‚   r,   r/   r<   r(   r4   r;   rT   rL   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©ÚtargetrP   c                 C   s   || _ || _d S r%   r0  )r   r1  rP   r
   r
   r   r–   Ê  s    zProcessingInstruction.__init__c                 C   s   | j S r%   ©rP   r   r
   r
   r   Ú_get_nodeValueÏ  s    z$ProcessingInstruction._get_nodeValuec                 C   s
   || _ d S r%   r2  r­   r
   r
   r   Ú_set_nodeValueÑ  s    z$ProcessingInstruction._set_nodeValuec                 C   s   | j S r%   ©r1  r   r
   r
   r   Ú_get_nodeNameÖ  s    z#ProcessingInstruction._get_nodeNamec                 C   s
   || _ d S r%   r5  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Œ   r1  rP   ©r   r$   r"   r!  r#   r
   r
   r   r   Ü  s    zProcessingInstruction.writexmlN)r   r   r   )r{   r|   r}   r	   rœ   r   rÆ   r–   r3  r4  rÈ   r˜   r6  r7  r—   r   r
   r
   r
   r   r/  Æ  s   

r/  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)Ú_datarX   r:   rD   rC   c                 C   s,   d  | _ | _d  | _| _d| _t | ¡ d S r   )rX   r:   rD   rC   r:  r	   r–   r   r
   r
   r   r–   ã  s    zCharacterData.__init__c                 C   s
   t | jƒS r%   )rÎ   rP   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   rP   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   )rP   rÎ   r  r{   )r   rP   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©r6   r7   ÚIndexSizeErrrÎ   rP   ©r   ÚoffsetÚcountr
   r
   r   ÚsubstringDataý  s    zCharacterData.substringDatac                 C   s   | j | | _ d S r%   r2  )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   rA  rB  ú%s%s%srD  )r   rG  rJ  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 r@  rD  rF  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   rA  rB  rC  rL  rD  )r   rG  rH  rJ  r
   r
   r   ÚreplaceData  s      ÿzCharacterData.replaceDataN)r{   r|   r}   rÆ   r–   rÏ   rý   r<  r>  rÈ   rP   r˜   r  rI  rK  rM  rN  rO  r
   r
   r
   r   r9  à  s   			
r9  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	kr~|d krp| j 
|¡ n| j ||¡ | jd |… | _|S )Nr   zillegal offset value)rÎ   rP   r6   r7   rE  r  rX   rC   r:   r'   r<   r4   )r   rG  ZnewTextÚnextr
   r
   r   Ú	splitText1  s    zText.splitTextr   c                 C   s   t |d|| j|f ƒ d S )NrL  )r�   rP   r8  r
   r
   r   r   @  s    zText.writexmlc                 C   s„   | j g}| j}|d k	rB|jtjtjfkrB| d|j ¡ |j}qqBq| j}|d k	rz|jtjtjfkrz| |j ¡ |j}qHqzqHd 	|¡S )Nr   r   )
rP   rD   r   r	   rO   rš   rB   rC   rR   Újoin)r   rU   rò   r
   r
   r   Ú_get_wholeTextE  s    zText._get_wholeTextc                 C   sž   | j }| j}|d k	r@|jtjtjfkr@|j}| |¡ |}qq@q| j}|sT| | ¡ |d k	rˆ|jtjtjfkrˆ|j}| |¡ |}qTqˆqT|r–|| _| S d S d S r%   )	r:   rD   r   r	   rO   rš   r;   rC   rP   )r   Zcontentr‘   rò   rP  r
   r
   r   ÚreplaceWholeTextW  s*    


zText.replaceWholeTextc                 C   sF   | j  ¡ rdS t| ƒ}|d kr"dS | j |¡}|d kr:dS | ¡ S d S r  )rP   ÚstripÚ_get_containing_elementrX   r¼   ÚisElementContent)r   r»   rÀ   r
   r
   r   Ú!_get_isWhitespaceInElementContents  s    
z&Text._get_isWhitespaceInElementContent)r   r   r   )r{   r|   r}   rÆ   r	   rO   r   r—   r™   rQ  r   rS  rT  rX  r
   r
   r
   r   r¥   *  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 k	r&|jtjkr|S |j }qd S r%   )r:   r   r	   rS   ©rH   rG   r
   r
   r   rV  †  s    rV  c                 C   s*   | j }|d k	r&|jtjkr|S |j }qd S r%   )r:   r   r	   r›   rY  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%   )r9  r–   r:  r=  r
   r
   r   r–   ›  s    
zComment.__init__r   c                 C   s,   d| j krtdƒ‚| d|| j |f ¡ d S )Nz--z%'--' is not allowed in a comment nodez%s<!--%s-->%s)rP   r>   rŒ   r8  r
   r
   r   r   Ÿ  s    
zComment.writexmlN)r   r   r   )	r{   r|   r}   r	   r�   r   r—   r–   r   r
   r
   r
   r   rZ  —  s   rZ  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]]>)rP   Úfindr>   rŒ   r8  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%   r^  )r   Úseqr
   r
   r   r–   ´  s    z'ReadOnlySequentialNamedNodeMap.__init__c                 C   s
   t | jƒS r%   ©rÎ   r_  r   r
   r
   r   rý   ¸  s    z&ReadOnlySequentialNamedNodeMap.__len__c                 C   s
   t | jƒS r%   ra  r   r
   r
   r   rÏ   »  s    z*ReadOnlySequentialNamedNodeMap._get_lengthc                 C   s"   | j D ]}|j|kr|  S qd S r%   )r_  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%   )r_  r~   rƒ   rô   r
   r
   r   rï   Ã  s    
z-ReadOnlySequentialNamedNodeMap.getNamedItemNSc                 C   s4   t |tƒr| j|Ž }n
|  |¡}|d kr0t|ƒ‚|S r%   )r×   r3   rï   rí   ri   )r   Zname_or_tuplerH   r
   r
   r   rç   È  s    

z*ReadOnlySequentialNamedNodeMap.__getitem__c                 C   s4   |dk rd S z| j | W S  tk
r.   Y d S X d S r+   )r_  rÑ   rÒ   r
   r
   r   rÓ   Ñ  s    z#ReadOnlySequentialNamedNodeMap.itemc                 C   s   t j d¡‚d S ©Nz"NamedNodeMap instance is read-only©r6   r7   r(  rì   r
   r
   r   ró   Ù  s    ÿz.ReadOnlySequentialNamedNodeMap.removeNamedItemc                 C   s   t j d¡‚d S rb  rc  rî   r
   r
   r   rõ   Ý  s    ÿz0ReadOnlySequentialNamedNodeMap.removeNamedItemNSc                 C   s   t j d¡‚d S rb  rc  rö   r
   r
   r   rè   á  s    ÿz+ReadOnlySequentialNamedNodeMap.setNamedItemc                 C   s   t j d¡‚d S rb  rc  rö   r
   r
   r   r÷   å  s    ÿz-ReadOnlySequentialNamedNodeMap.setNamedItemNSc                 C   s   | j gS r%   r^  r   r
   r
   r   rù   é  s    z+ReadOnlySequentialNamedNodeMap.__getstate__c                 C   s   |d | _ d S r+   r^  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   r]  ±  s   
	r]  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%   re  )r   rf  rg  r
   r
   r   Ú_identified_mixin_initø  s    z!Identified._identified_mixin_initc                 C   s   | j S r%   )rf  r   r
   r
   r   Ú_get_publicIdü  s    zIdentified._get_publicIdc                 C   s   | j S r%   )rg  r   r
   r
   r   Ú_get_systemIdÿ  s    zIdentified._get_systemIdN)r{   r|   r}   rÆ   rh  ri  rj  r
   r
   r
   r   rd  ó  s   rd  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%   )r]  Ú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 krætd ƒ}| j|_| j|_tjjj}|rÔg |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%   )rX   rk  r’   r—   r6   r7   ÚUserDataHandlerÚNODE_CLONEDrl  r_  rm  ÚNotationrf  rg  rR   rv   ÚEntityÚnotationNameÚactualEncodingr   r_   )r   rY   Úclonert   rò   ÚnotationÚeÚentityr
   r
   r   rZ     s0    

ÿzDocumentType.cloneNoder   c                 C   sŽ   |  d¡ |  | j¡ | jr8|  d|| j|| jf ¡ n| jrR|  d|| jf ¡ | jd k	r||  d¡ |  | j¡ |  d¡ |  d| ¡ d S )Nz
<!DOCTYPE z%s  PUBLIC '%s'%s  '%s'z%s  SYSTEM '%s'z [ú]rŠ   )rŒ   r’   rf  rg  rn  r8  r
   r
   r   r   0  s    
ÿ


zDocumentType.writexml)r   r   r   )r{   r|   r}   r	   ÚDOCUMENT_TYPE_NODEr   r˜   r’   rf  rg  rn  r–   ro  rZ   r   r
   r
   r
   r   rk    s   rk  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 )rs  Nc                 C   s$   || _ || _tƒ | _|  ||¡ d S r%   )r—   rt  rw   r'   rh  )r   r’   rf  rg  rw  r
   r
   r   r–   G  s    zEntity.__init__c                 C   s   | j S r%   ©ru  r   r
   r
   r   Ú_get_actualEncodingM  s    zEntity._get_actualEncodingc                 C   s   | j S r%   ©r   r   r
   r
   r   Ú_get_encodingP  s    zEntity._get_encodingc                 C   s   | j S r%   ©r_   r   r
   r
   r   Ú_get_versionS  s    zEntity._get_versionc                 C   s   t j d¡‚d S )Nz(cannot append children to an entity node©r6   r7   r8   )r   rE   r
   r
   r   r<   V  s    ÿzEntity.appendChildc                 C   s   t j d¡‚d S )Nz+cannot insert children below an entity noder‚  r-  r
   r
   r   r4   Z  s    ÿzEntity.insertBeforec                 C   s   t j d¡‚d S )Nz*cannot remove children from an entity noder‚  rN   r
   r
   r   r;   ^  s    ÿzEntity.removeChildc                 C   s   t j d¡‚d S )Nz)cannot replace children of an entity noder‚  r.  r
   r
   r   rL   b  s    ÿzEntity.replaceChild)r{   r|   r}   r™   r	   ZENTITY_NODEr   r˜   ru  r   r_   r–   r}  r  r�  r<   r4   r;   rL   r
   r
   r
   r   rs  >  s   rs  c                   @   s   e Zd ZejZdZdd„ ZdS )rr  Nc                 C   s   || _ |  ||¡ d S r%   )r—   rh  )r   r’   rf  rg  r
   r
   r   r–   j  s    zNotation.__init__)r{   r|   r}   r	   rž   r   r˜   r–   r
   r
   r
   r   rr  f  s   rr  c                   @   sH   e Zd Zddddddddg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)r6   r…  )r6   r†  )r6   N)úls-loadz3.0)r‡  Nc                 C   s   |dkrd }|  ¡ |f| jkS r   )ÚlowerÚ	_featuresr]   r
   r
   r   r\   z  s    zDOMImplementation.hasFeaturec           	      C   sÔ   |r|j d k	rtj d¡‚|  ¡ }|d ko8|d ko8|d k }|sP|rPtj d¡‚|r´t|ƒ\}}|dkr||dkr|tj d¡‚|r�|s�tj d¡‚| ||¡}|rª| 	|¡ | 	|¡ |rÄ| |_ |_
||_| |_|S )Nz(doctype object owned by another DOM treezElement with no namer6   z$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces)r:   r6   r7   ÚWrongDocumentErrÚ_create_documentZInvalidCharacterErrr  r´   ÚcreateElementNSr<   rX   Ú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%   )rk  rf  rg  )r   r  rf  rg  r�  r
   r
   r   ÚcreateDocumentType¬  s    z$DOMImplementation.createDocumentTypec                 C   s   |   |d ¡r| S d S d S r%   )r\   re   r
   r
   r   rf   ´  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�  rf   r‹  r
   r
   r
   r   rƒ  o  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   rW  Ò  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Ã   rW  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†   rX   r…   r
   r
   r   rA   è  s    
rA   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�  rw   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)  rk   r
   r
   r   r¼     s    zDocument._get_elem_infoc                 C   s   | j S r%   r|  r   r
   r
   r   r}    s    zDocument._get_actualEncodingc                 C   s   | j S r%   )r�  r   r
   r
   r   Ú_get_doctype  s    zDocument._get_doctypec                 C   s   | j S r%   )ÚdocumentURIr   r
   r
   r   Ú_get_documentURI!  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%   )Ú
standaloner   r
   r
   r   Ú_get_standalone*  s    zDocument._get_standalonec                 C   s   | j S r%   )ÚstrictErrorCheckingr   r
   r
   r   Ú_get_strictErrorChecking-  s    z!Document._get_strictErrorCheckingc                 C   s   | j S r%   r€  r   r
   r
   r   r�  0  s    zDocument._get_versionc                 C   sj   |j | jkr(tj dt|ƒt| ƒf ¡‚|jd k	r>|j |¡ |j tj	kr^|  
¡ r^tj d¡‚t | |¡S )Nr0   z two document elements disallowed)r   r5   r6   r7   r8   r9   r:   r;   r	   rS   Ú_get_documentElementr<   rö   r
   r
   r   r<   3  s    ÿ
ÿÿzDocument.appendChildc                 C   sV   z| j  |¡ W n tk
r.   tj ¡ ‚Y nX d  |_|_d |_| j	|krRd | _	|S r%   )
r'   rM   r>   r6   r7   r?   rC   rD   r:   ÚdocumentElementrN   r
   r
   r   r;   C  s    
zDocument.removeChildc                 C   s$   | j D ]}|jtjkr|  S qd S r%   )r'   r   r	   rS   rö   r
   r
   r   r¢  O  s    
zDocument._get_documentElementc                 C   s(   | j d k	r| j  ¡  d | _ t | ¡ d S r%   )r�  rQ   r	   r   r
   r
   r   rQ   T  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'   rW   rR   r   r	   r   r{  r�  r:   rv   r6   r7   rp  rq  )r   rY   rv  rò   Z
childcloner
   r
   r   rZ   Z  s&    
 ÿzDocument.cloneNodec                 C   s   t ƒ }| |_|S r%   )r•   rX   )r   ro   r
   r
   r   ÚcreateDocumentFragmento  s    zDocument.createDocumentFragmentc                 C   s   t |ƒ}| |_|S r%   )r  rX   )r   r�   rx  r
   r
   r   ÚcreateElementt  s    zDocument.createElementc                 C   s(   t |tƒstdƒ‚tƒ }||_| |_|S ©Nznode contents must be a string)r×   rØ   ré   r¥   rP   rX   )r   rP   Útr
   r
   r   ÚcreateTextNodey  s    
zDocument.createTextNodec                 C   s(   t |tƒstdƒ‚tƒ }||_| |_|S r¦  )r×   rØ   ré   r[  rP   rX   ©r   rP   rG   r
   r
   r   ÚcreateCDATASection�  s    
zDocument.createCDATASectionc                 C   s   t |ƒ}| |_|S r%   )rZ  rX   r©  r
   r
   r   ÚcreateComment‰  s    zDocument.createCommentc                 C   s   t ||ƒ}| |_|S r%   )r/  rX   )r   r1  rP   Úpr
   r
   r   ÚcreateProcessingInstructionŽ  s    
z$Document.createProcessingInstructionc                 C   s   t |ƒ}| |_d|_|S r   )rŸ   rX   r®   )r   r¦   Úar
   r
   r   ÚcreateAttribute“  s    zDocument.createAttributec                 C   s"   t |ƒ\}}t|||ƒ}| |_|S r%   )r  r  rX   )r   r~   r  r   rƒ   rx  r
   r
   r   rŒ  ™  s    zDocument.createElementNSc                 C   s*   t |ƒ\}}t||||ƒ}| |_d|_|S r   )r  rŸ   rX   r®   )r   r~   r  r   rƒ   r®  r
   r
   r   ÚcreateAttributeNSŸ  s
    zDocument.createAttributeNSc                 C   s   t ||||ƒ}| |_|S r%   )rs  rX   )r   r’   rf  rg  rt  rx  r
   r
   r   Ú_create_entity©  s    zDocument._create_entityc                 C   s   t |||ƒ}| |_|S r%   )rr  rX   )r   r’   rf  rg  rò   r
   r
   r   Ú_create_notation®  s    zDocument._create_notationc                 C   s’  || j kr| j | S | js$| js$d S | j}|d k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Î �q€qŒ| |j¡�r
|| j |j< |j|krú|}n|j�s> �q€qŒ|jrŒ|| j |j< |j|k�r.|}qŒ|jdkrŒ �q€qŒn>|j�r€|j	 
¡ D ]*}|j�rT|| j |j< |j|k�rT|}�qT|d k	rN�qŽqN|S )Nc                 S   s   g | ]}|j tkr|‘qS r
   )r   r@   )Ú.0rV   r
   r
   r   Ú
<listcomp>Ç  s    
ÿz+Document.getElementById.<locals>.<listcomp>r1   )r•  r˜  rº   r—  r£  ÚpopÚextendr'   r¼   r™   rÔ   r~   r½   rƒ   r®   r¹   r¾   r’   r¸   )r   rÞ   ÚstackÚresultrH   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   r`   ô  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   r6   r7   ÚNotSupportedErrr{  rW   )r   rH   rY   r
   r
   r   Ú
importNode÷  s
    zDocument.importNoder   c                 C   sJ   |d kr|  d| ¡ n|  d||f ¡ | jD ]}| ||||¡ q0d S )Nz<?xml version="1.0" ?>z%<?xml version="1.0" encoding="%s"?>%s)rŒ   r'   r   )r   r$   r"   r!  r#   r   rH   r
   r
   r   r   þ  s     ÿ
zDocument.writexmlc                 C   sJ  |j | k	r tj d| |j f ¡‚|jtjtjfkr>tj d¡‚|t	kr¶d|kr€| 
dd¡\}}|dkr´|tjjkr´tj d¡‚q¾|dkr¬|tjjkr¬|jtjkr¬tj d¡‚d }|}nd }d }|jtjkrê|j}|d k	rî|j}| |¡ nd }||_||_||_||_|jtjk�r||_n*||_|d k	�rF| |¡ |�rF| |¡ |S )Nz?cannot rename nodes from other documents;
expected %s,
found %sz8renameNode() only applies to element and attribute nodesr¨   r1   r³   zillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rX   r6   r7   rŠ  r   r	   rS   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   N)=r{   r|   r}   rÆ   r	   rS   rœ   r�   r{  r5   rƒ  r[   r   r   r—   r˜   r™   r:   rD   rC   ru  r   rž  r_   r   rœ  rš  rº   r–   r¼   r}  r™  r›  r  r�  rŸ  r¡  r�  r<   r;   r¢  rQ   rZ   r¤  r¥  r¨  rª  r«  r­  r¯  rŒ  r°  r±  r²  r¹  r  r  r`   r»  r   r¼  r
   r
   r
   r   r�  ð  sj    ÿ	
:
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�r”tjjj}|j& '| j(| j)| j*¡}||_ |�r¨g |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 )NTrv   zCannot clone node %s)9rX   rd   r6   r7   rp  rq  ZNODE_IMPORTEDr   r	   rS   rŒ  r~   r—   r™   rÔ   r  r®   r  rƒ   rª   r'   rW   r<   r2   r¤  rO   r¨  rP   rš   rª  rœ   r­  r1  r�   r«  rÇ   r°  r{  r[   r�  r’   rf  rg  rl  r_  rm  rr  rR   rq   rv   rs  rt  ru  r   r_   rº  r9   )rH   rY   ZnewOwnerDocumentrt   rv  r  r®  rV   rG   rò   rw  rx  ry  r
   r
   r   rW   B  sŠ    
ÿ


ÿÿ
  ÿÿrW   c                 C   s,   |   dd¡}t|ƒdkr|S d |d fS d S )Nr¨   r1   é   r   )r©   rÎ   )r  Zfieldsr
   r
   r   r  ”  s    r  c                 C   s,   | ||Ž}|  ¡ \}}| |¡ | ¡  |S r%   )ZgetEventZ
expandNoder–  )ÚfuncÚargsÚkwargsZeventsZtoktypeZrootNoder
   r
   r   Ú_do_pulldom_parseœ  s
    

rÁ  c                 C   sH   |d k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 k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È  r6   r   r   r   r   Zxml.dom.minicompatZxml.dom.xmlbuilderr   r   r7   r	   rS   r›   r@   ZdefpropertyrJ   r†   r�   r�   r”   r•   rŸ   ÚobjectrÊ   ZAttributeListrþ   rÂ   r  r  r*  r/  r9  r¥   rV  r'  rZ  r[  r]  rd  rk  rs  rr  rƒ  r‘  rA   r�  rW   r  rÁ  rÉ  rË  rÏ  r
   r
   r
   r   Ú<module>   sš   ÿ v
	y $ÿ
 xÿÿ)GUÿÿ	>ÿ<(	O*  PÿR



