
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a) ã                   @   sü  d Z 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/d0„ d0ƒZ G d1d2„ d2e eƒZ!G d3d4„ d4e eƒZ"ee"d$d5d
� G d6d7„ d7e"ƒZ#ee#d8d9d
� ee#d:d;d
� d<d=„ Z$d>d?„ Z%G d@dA„ dAe"ƒZ&G dBdC„ dCe#ƒZ'G dDdE„ dEeƒZ(ee(d$dFd
� G dGdH„ dHƒZ)G dIdJ„ dJe)e eƒZ*G dKdL„ dLe)eƒZ+G dMdN„ dNe)e eƒZ,G dOdP„ dPe
ƒZ-G dQdR„ dReƒZ.dSdT„ Z/G dUdV„ dVeeƒZ0ee0dWdXd
� dYdZ„ Z1d[d\„ Z2d]d^„ Z3ded_d`„Z4dfdadb„Z5dgdcdd„Z6dS )hac  Simple implementation of the Level 1 DOM.

Namespaces and other minor Level 2 features are also supported.

parse("foo.xml")

parseString("<foo><bar/></foo>")

Todo:
=====
 * convenience methods for getting elements and text.
 * more testing
 * bring some of the writer and linearizer code into conformance with this
        interface
 * SAX 2 namespaces
é    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 )
zWrites datachars to writer.ú&z&amp;ú<z&lt;ú"z&quot;ú>z&gt;N)Ú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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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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Z dS );ÚNamedNodeMapa  The attribute list is a transient interface to the underlying
    dictionaries.  Mutations here will change the underlying element's
    dictionary.

    Ordering is imposed artificially and does not reflect the order of
    attributes as found in an input document.
    ©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}   Ú__doc__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                   @   sf   e Zd 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 )Ú	Childlessz�Mixin that makes childless-ness easy to implement and avoids
    the complexity of the Node methods that deal with children.
    r
   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Æ   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%   r1  )r   r2  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%   r3  r­   r
   r
   r   Ú_set_nodeValueÑ  s    z$ProcessingInstruction._set_nodeValuec                 C   s   | j S r%   ©r2  r   r
   r
   r   Ú_get_nodeNameÖ  s    z#ProcessingInstruction._get_nodeNamec                 C   s
   || _ d S r%   r6  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Œ   r2  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–   r4  r5  rÈ   r˜   r7  r8  r—   r   r
   r
   r
   r   r0  Æ  s   

r0  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%   r3  )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   rB  rC  ú%s%s%srE  )r   rH  rK  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 rA  rE  rG  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   rB  rC  rD  rM  rE  )r   rH  rI  rK  r
   r
   r   ÚreplaceData  s      ÿzCharacterData.replaceDataN)r{   r|   r}   rÆ   r–   rÏ   rþ   r=  r?  rÈ   rP   r˜   r  rJ  rL  rN  rO  rP  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	kr~|d krp| j 
|¡ n| j ||¡ | jd |… | _|S )Nr   zillegal offset value)rÎ   rP   r6   r7   rF  r  rX   rC   r:   r'   r<   r4   )r   rH  ZnewTextÚnextr
   r
   r   Ú	splitText1  s    zText.splitTextr   c                 C   s   t |d|| j|f ƒ d S )NrM  )r�   rP   r9  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ò   rQ  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™   rR  r   rT  rU  rY  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   rW  †  s    rW  c                 C   s*   | j }|d k	r&|jtjkr|S |j }qd S r%   )r:   r   r	   r›   rZ  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;  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Œ   r9  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]]>)rP   Úfindr>   rŒ   r9  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%   rb  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 rc  rd  rî   r
   r
   r   rõ   Ý  s    ÿz0ReadOnlySequentialNamedNodeMap.removeNamedItemNSc                 C   s   t j d¡‚d S rc  rd  rö   r
   r
   r   rè   á  s    ÿz+ReadOnlySequentialNamedNodeMap.setNamedItemc                 C   s   t j d¡‚d S rc  rd  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Zdd„ Zdd„ Zdd„ Zd	S )
Ú
Identifiedz@Mix-in class that supports the publicId and systemId attributes.©ÚpublicIdÚsystemIdc                 C   s   || _ || _d S r%   rf  )r   rg  rh  r
   r
   r   Ú_identified_mixin_initø  s    z!Identified._identified_mixin_initc                 C   s   | j S r%   )rg  r   r
   r
   r   Ú_get_publicIdü  s    zIdentified._get_publicIdc                 C   s   | j S r%   )rh  r   r
   r
   r   Ú_get_systemIdÿ  s    zIdentified._get_systemIdN)r{   r|   r}   rý   rÆ   ri  rj  rk  r
   r
   r
   r   re  ó  s
   re  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   rl  r’   r—   r6   r7   ÚUserDataHandlerÚNODE_CLONEDrm  r`  rn  ÚNotationrg  rh  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’   rg  rh  ro  r9  r
   r
   r   r   0  s    
ÿ


zDocumentType.writexml)r   r   r   )r{   r|   r}   r	   ÚDOCUMENT_TYPE_NODEr   r˜   r’   rg  rh  ro  r–   rp  rZ   r   r
   r
   r
   r   rl    s   rl  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 )rt  Nc                 C   s$   || _ || _tƒ | _|  ||¡ d S r%   )r—   ru  rw   r'   ri  )r   r’   rg  rh  rx  r
   r
   r   r–   G  s    zEntity.__init__c                 C   s   | j S r%   ©rv  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˜   rv  r   r_   r–   r~  r€  r‚  r<   r4   r;   rL   r
   r
   r
   r   rt  >  s   rt  c                   @   s   e Zd ZejZdZdd„ ZdS )rs  Nc                 C   s   || _ |  ||¡ d S r%   )r—   ri  )r   r’   rg  rh  r
   r
   r   r–   j  s    zNotation.__init__)r{   r|   r}   r	   rž   r   r˜   r–   r
   r
   r
   r   rs  f  s   rs  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%   )rl  rg  rh  )r   r  rg  rh  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                   @   s\   e 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S )ÚElementInfoz÷Object that represents content-model information for an element.

    This implementation is not expected to be used in practice; DOM
    builders should provide implementations which do the right thing
    using information available to it.

    r  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   rX  Ò  s    zElementInfo.isElementContentc                 C   s   dS )zQReturns true iff this element is declared to have an EMPTY
        content model.Fr
   r   r
   r
   r   ÚisEmptyÕ  s    zElementInfo.isEmptyc                 C   s   dS )z7Returns true iff the named attribute is a DTD-style ID.Fr
   r”  r
   r
   r   r¾   Ú  s    zElementInfo.isIdc                 C   s   dS )z<Returns true iff the identified attribute is a DTD-style ID.Fr
   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Ã   rX  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 ]n}t|||ƒ}|j |¡sVt	‚|j 
|¡ |jtjkr~|jd ksžt	‚n |jtjkrž|jd ks˜t	‚||_||_q6|  tjjj| |¡ |S r%   )r[   r�  r   rŸ  r_   r'   rW   rX   rd   ÚAssertionErrorrR   r   r	   r   r¤  r|  rŽ  r:   rv   r6   r7   rq  rr  )r   rY   rw  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�   ry  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%   )r[  rX   r«  r
   r
   r   ÚcreateComment‰  s    zDocument.createCommentc                 C   s   t ||ƒ}| |_|S r%   )r0  rX   )r   r2  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ƒ   ry  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%   )rt  rX   )r   r’   rg  rh  ru  ry  r
   r
   r   Ú_create_entity©  s    zDocument._create_entityc                 C   s   t |||ƒ}| |_|S r%   )rs  rX   )r   r’   rg  rh  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   rv  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¡}�nz| jtj!k�r\| "| j¡}�n\| jtj#k�rŒ| $| j| j¡}d|_| j|_�n,| jtj%k�r¤| j |k	�sªt&‚tjjj}|j' (| j)| j*| j+¡}||_ |�r¸g |j,_-g |j._-| j.j-D ]F}	t/|	j|	j*|	j+ƒ}
||
_ |j.j- 0|
¡ t1|	dƒ�rî|	 2||	|
¡ �qî| j,j-D ]b}t3|j|j*|j+|j4ƒ}|j5|_5|j6|_6|j7|_7||_ |j,j- 0|¡ t1|dƒ�r>| 2|||¡ �q>ntj 8dt9| ƒ ¡‚t1| dƒ�rÒ|  2|| |¡ |S )zo
    Clone a node and give it the new owner document.
    Called by Node.cloneNode and Document.importNode
    Trv   zCannot clone node %s):rX   rd   r6   r7   rq  rr  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¯  r2  r�   r­  rÇ   r²  r|  r¥  r[   r�  r’   rg  rh  rm  r`  rn  rs  rR   rq   rv   rt  ru  rv  r   r_   r¼  r9   )rH   rY   ZnewOwnerDocumentrt   rw  r	  r°  rV   rG   rò   rx  ry  rz  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 )z3Parse a file into a DOM by filename or file object.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 )z&Parse a file into a DOM from a string.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)7rý   r   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+  r0  r:  r¥   rW  r(  r[  r\  r^  re  rl  rt  rs  r„  r’  rA   r‘  rW   r  rÃ  rË  rÍ  rÑ  r
   r
   r
   r   Ú<module>   sœ   ÿ v
	y $ÿ
 xÿÿ)GUÿÿ	>ÿ<(	O*  PÿR



