
    Rh,
                    `   d Z ddlZddlZddlmZmZmZmZ ddl ddl	m
Z
mZ ej                  j                  j                  ej                  j                  j                  fZ G d dej                  j                        Z eedd	
        eedd
        eedd
       d Zd Zd Zd Zd Z G d de      Z G d de      Z eedd
        eedd
        eedd
        G d de      Z eedd 
       eZ G d! d"e      Z edd      Z G d# d$e      Z eed%d&
        eedd'
       d( Z G d) d*      Z  G d+ d,e e      Z! G d- d.e e      Z" ee"dd/
        G d0 d1e"      Z# ee#d2d3
        ee#d4d5
       d6 Z$d7 Z% G d8 d9e"      Z& G d: d;e#      Z' G d< d=e      Z( ee(dd>
        G d? d@      Z) G dA dBe)e e      Z* G dC dDe)e      Z+ G dE dFe)e e      Z, G dG dHe
      Z- G dI dJe      Z.dK Z/ G dL dMee      Z0 ee0dNdO
       dP Z1dQ Z2dR Z3dVdSZ4dWdTZ5dWdUZ6y)Xac  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                       e Zd ZdZdZdZdZdZeZ	d Z
ddZ	 	 ddZd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z y)NodeNc                      y)NT selfs    &/usr/lib/python3.12/xml/dom/minidom.py__bool__zNode.__bool__+           c                 *    | j                  dd||      S N )toprettyxml)r   encoding
standalones      r   toxmlz
Node.toxml.   s    B*==r   c                 v   |t        j                         }n+t        j                  t        j                         |dd      }| j                  t
        j                  k(  r| j                  |d||||       n| j                  |d||       ||j                         S |j                         j                         S )Nxmlcharrefreplace
)r   errorsnewliner   )
ioStringIOTextIOWrapperBytesIOnodeTyper   DOCUMENT_NODEwritexmlgetvaluedetach)r   indentnewlr   r   writers         r   r   zNode.toprettyxml1   s    [[]F%%bjjl/7-@.24F ==D...MM&"fdHjIMM&"fd3??$$==?++--r   c                 ,    t        | j                        S N)bool
childNodesr   s    r   hasChildNodeszNode.hasChildNodesD   s    DOO$$r   c                     | j                   S r-   r/   r   s    r   _get_childNodeszNode._get_childNodesG       r   c                 :    | j                   r| j                   d   S y Nr   r2   r   s    r   _get_firstChildzNode._get_firstChildJ   s    ????1%% r   c                 :    | j                   r| j                   d   S y Nr2   r   s    r   _get_lastChildzNode._get_lastChildN   s    ????2&& r   c                 &   |j                   | j                  k(  r.t        |j                        D ]  }| j	                  ||        |S |j                   | j
                  vr6t        j                  j                  t        |      dt        |             |j                  |j                  j                  |       || j                  |       |S 	 | j                  j                  |      }|j                   t         v rt#        |        | j                  j%                  ||       ||_        ||_        |r!| j                  |dz
     }||_        ||_        nd |_        | |_
        |S # t        $ r t        j                  j                         w xY w)N cannot be child of    )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crJ   nodes         r   rA   zNode.insertBeforeR   ss    ; ;;8../ /!!!X./ OD$:$::''--.28nd4jIK K*++H5X&$ !,--h7   $<<%OO""5(3#+H '/H$uQw/#+ +/(+/("&H  ,gg))++,s   E( ((Fc                    |j                   | j                  k(  r-t        |j                        D ]  }| j	                  |        |S |j                   | j
                  vr6t        j                  j                  t        |      dt        |             |j                   t        v rt        |        |j                  |j                  j                  |       t        | |       d |_        |S Nr=   )r$   r?   r@   r/   rI   rB   rC   rD   rE   rF   rM   rN   rG   rH   _append_childrP   )r   rU   rT   s      r   rI   zNode.appendChildr   s    ==D7774??+ $  #$ K== 6 66''--.24j$t*EG G]]66D!??&OO''-dD!r   c                    |j                   | j                  k(  r/|j                  }| j                  |       | j	                  ||      S |j                   | j
                  vr6t        j                  j                  t        |      dt        |             ||u ry |j                  |j                  j                  |       	 | j                  j                  |      }|| j                  |<   | |_
        d |_
        |j                   t        v s|j                   t        v rt!        |        |j                  |_        |j"                  |_        d |_        d |_        |j"                  r||j"                  _        |j                  r||j                  _        |S # t        $ r t        j                  j                         w xY wrW   )r$   r?   rP   rH   rA   rB   rC   rD   rE   rF   rG   r/   rJ   rK   rL   rM   rN   rQ   )r   rR   oldChildrS   rJ   s        r   replaceChildzNode.replaceChild   s    ; ;;++HX&$$Xx88D$:$::''--.28nd4jIK Kx*++H5	(OO))(3E "*""!99  $<<D!'33#+#;#; ##' ##3;H$$03;H  0!  	(''%%''	(s   F (F?c                    	 | j                   j                  |       |j                  |j                  |j                  _        |j                  |j                  |j                  _        d x|_        |_        |j                  t        v rt        |        d |_        |S # t        $ r t        j                  j                         w xY wr-   )r/   removerK   rC   rD   rL   rP   rQ   r$   rM   rN   rG   r   rZ   s     r   rH   zNode.removeChild   s    	(OO""8, +3;3K3KH  0##/3;3G3GH$$0:>>x7 88D!"  	(''%%''	(s   B (Cc                    g }| j                   D ]M  }|j                  t        j                  k(  r|j                  sN|r|j
                  |d   _        |j
                  r|j                  |j
                  _        |j                          {|r~|d   j                  |j                  k(  rb|d   }|j                  |j                  z   |_        |j
                  |_        |j
                  r||j
                  _        |j                          |j                  |       |j                  |       |j                  t        j                  k(  s>|j                          P || j                   d d  y r9   )r/   r$   r   	TEXT_NODEdatarP   rQ   unlinkappendELEMENT_NODE	normalize)r   LchildrU   s       r   re   zNode.normalize   s   __ 	&E~~/zz,1,=,=")((<A<Q<Q))9LLN1R5>>U^^;R5D $		EJJ 6DI','8'8D$((<@))9LLNHHUO>>T%6%66OO%-	&. r   c                 8    t        | || j                  xs |       S r-   )_clone_nodeownerDocument)r   deeps     r   	cloneNodezNode.cloneNode   s    4t'9'9'ATBBr   c                 N    | j                   j                  j                  ||      S r-   )rj   implementation
hasFeaturer   featureversions      r   isSupportedzNode.isSupported   s!    !!00;;GWMMr   c                      y r-   r   r   s    r   _get_localNamezNode._get_localName   s    r   c                 
    | |u S r-   r   r   others     r   
isSameNodezNode.isSameNode   s    u}r   c                 ,    | j                  |d       r| S y r-   )rs   r   rq   s     r   getInterfacezNode.getInterface   s    GT*Kr   c                 R    	 | j                   |   d   S # t        t        f$ r Y y w xY wr6   )
_user_dataAttributeErrorKeyErrorr   keys     r   getUserDatazNode.getUserData   s2    	??3'**) 		s    &&c                     d }	 | j                   }||v r||   d   }|	d }|||= |S ||f||<   |S # t        $ r i }|| _         Y 4w xY wr6   )r~   r   )r   r   ra   handleroldds         r   setUserDatazNode.setUserData   sy    	 A !8C&)C<GcF 
 G_AcF
  	 ADO	 s   0 AAc                     t        | d      rGt        | j                  j                               D ]   \  }\  }}||j	                  |||||       " y y )Nr~   )hasattrlistr~   itemshandle)r   	operationsrcdstr   ra   r   s          r   _call_user_data_handlerzNode._call_user_data_handler   sW    4&(,T__-B-B-D(E C$_dG&NN9c4cBC 'r   c                     d x| _         | _        | j                  r0| j                  D ]  }|j                           t	               | _        d | _        d | _        y r-   )rG   rj   r/   rb   NodeListrQ   rP   )r   rg   s     r   rb   zNode.unlink  sM    /33$,?? &jDO#r   c                     | S r-   r   r   s    r   	__enter__zNode.__enter__  s    r   c                 $    | j                          y r-   )rb   )r   etevtbs       r   __exit__zNode.__exit__  s    r   NN)	r   NN)!__name__
__module____qualname__namespaceURIrG   rj   rP   rQ   r   prefixr   r   r   r0   r3   r7   r;   rA   rI   r[   rH   re   rl   rs   ru   ry   r|   r   r   r   rb   r   r   r   r   r   r   r   "   s    LJMKOF> <@#.&%&'@"@ 6CN$C r   r   
firstChildzFirst child node, or None.)doc	lastChildzLast child node, or None.	localNamez"Namespace-local name of this node.c                 v    | j                   }|r|d   }||_        ||_        |j                  |       | |_        y r9   )r/   rQ   rP   rc   rG   )r   rU   r/   lasts       r   rX   rX     s<    J"~#dDOr   c                 b    | -| j                   t        j                  k(  ry| j                  } | -yNTF)r$   r   r%   rG   rU   s    r   _in_documentr   '  s3    

==D... 
 r   c                     |rT|j                  dd      j                  dd      j                  dd      j                  dd      }| j                  |       y	y	)
zWrites datachars to writer.&z&amp;<z&lt;"z&quot;>z&gt;N)replacewrite)r+   ra   s     r   _write_datar   /  sM    ||C)11#v>GD(+GGC,@ 	T r   c                     | j                   D ]Q  }|j                  t        j                  k(  r%|dk(  s|j                  |k(  r|j                  |       t        |||       S |S Nr   )r/   r$   r   rd   tagNamerc   _get_elements_by_tagName_helper)parentnamercrU   s       r   r   r   6  sY    !! 8==D---S[DLLD0IIdO'dB7	8
 Ir   c                     | j                   D ]g  }|j                  t        j                  k(  s!|dk(  s|j                  |k(  r%|dk(  s|j
                  |k(  r|j                  |       t        ||||       i |S r   )r/   r$   r   rd   r   r   rc   "_get_elements_by_tagName_ns_helper)r   nsURIr   r   rU   s        r   r   r   >  sr    !! K==D---c!T^^y%@#!2!2e!;		$.tUIrJK Ir   c                       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 Zy)DocumentFragmentz#document-fragmentNc                 "    t               | _        y r-   )r   r/   r   s    r   __init__zDocumentFragment.__init__U  s    "*r   )r   r   r   r   r?   r$   nodeName	nodeValue
attributesrG   rd   r`   CDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODECOMMENT_NODENOTATION_NODErB   r   r   r   r   r   r   G  sk    **H#HIJJ**003399**++-%r   r   c                       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Zd Zd Zd Zd Z eee      xZZd	 Zd
 Z eee      xZZd Zd Z eee      Zd Zd Zd Zy)Attr)_name_valuer   _prefixr/   
_localNamerj   ownerElementNFc                     d | _         || _        || _        || _        ||| _        t               | _        | j                  j                  t                      y r-   )	r   r   r   r   r   r   r/   rc   Text)r   qNamer   r   r   s        r   r   zAttr.__init__c  sL     
( 'DO"* 	tv&r   c                 x    	 | j                   S # t        $ r" | j                  j                  dd      d   cY S w xY wN:r>   r:   )r   r   r   splitr   s    r   ru   zAttr._get_localNamer  s<    	3??" 	3==&&sA.r22	3    (99c                     | j                   S r-   )	specifiedr   s    r   _get_specifiedzAttr._get_specifiedx      ~~r   c                     | j                   S r-   )r   r   s    r   	_get_namezAttr._get_name{      zzr   c                 V    || _         | j                  t        | j                         y y r-   )r   r   rN   r   values     r   	_set_namezAttr._set_name~  s(    
(D--. )r   c                     | j                   S r-   )r   r   s    r   
_get_valuezAttr._get_value      {{r   c                     || _         || j                  d   _        | j                  t	        | j                         || j                  d   _        y r6   )r   r/   ra   r   rN   r   s     r   
_set_valuezAttr._set_value  sE    "'(D--."'r   c                     | j                   S r-   )r   r   s    r   _get_prefixzAttr._get_prefix      ||r   c                    | j                   }|dk(  r*|r(|t        k7  rt        j                  j	                  d      || _        || j                  }n|d| j                  }| j                  rt        | j                         || _	        y )Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacer   )
r   r   rC   rD   NamespaceErrr   r   r   rN   r   )r   r   nsurinewNames       r   _set_prefixzAttr._set_prefix  s|    !!W/1gg**KM M>nnG!'8GD--.	r   c                    | j                   }||j                  | j                  = |j                  | j                  | j
                  f= | j                  r;d| _        |xj                  dz  c_        | j                  xj                  dz  c_	        | j                  D ]  }|j                           | j                  d d = y )NFr>   )r   _attrsr   _attrsNSr   r   _is_id_magic_id_nodesrj   _magic_id_countr/   rb   )r   elemrg   s      r   rb   zAttr.unlink  s    
   DMM*t00$..AB{{#$$)$""22a72__ 	ELLN	OOAr   c                    | j                   ry| j                  }| j                  }||y|j                  |      }|y| j                  r&|j                  | j                  | j                        S |j                  | j                        S r   )	r   rj   r   _get_elem_infor   isIdNSr   isIdr   r   r   r   infos       r   	_get_isIdzAttr._get_isId  s}    ;;    ;$,!!$'<;;t00$..AA99T]]++r   c                    | j                   }| j                  }||t        S |j                  |      }|t        S | j                  r&|j                  | j                  | j                        S |j                  | j                        S r-   )	rj   r   _no_typer   r   getAttributeTypeNSr   getAttributeTyper   r   s       r   _get_schemaTypezAttr._get_schemaType  s{        ;$,O!!$'<O**4+<+<dnnMM((77r   ) r   r   r   	__slots__r   ATTRIBUTE_NODEr$   r   r   r   r`   r   rB   r   r   ru   r   r   r   propertyr   r   r   r   r   r   r   r   r   rb   r   r  r   r   r   r   r   Y  s    WI""HJIF)C)CD+:d'3/
 y)44Ht( !Z88I k;/F", 8r   r   r   z True if this attribute is an ID.z'Namespace-local name of this attribute.
schemaTypezSchema type for this attribute.c                       e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZddZeZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z y) 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                 .    || _         || _        || _        y r-   r  )r   attrsattrsNSr   s       r   r   zNamedNodeMap.__init__  s    )r   c                 ,    t        | j                        S r-   )lenr   r   s    r   _get_lengthzNamedNodeMap._get_length  s    4;;r   c                 t    	 | t        | j                  j                               |      S # t        $ r Y y w xY wr-   )r   r   keys
IndexErrorr   rJ   s     r   itemzNamedNodeMap.item  s;    	T[[--/0788 		s   (+ 	77c                     g }| j                   j                         D ])  }|j                  |j                  |j                  f       + |S r-   )r   valuesrc   r   r   r   rf   rU   s      r   r   zNamedNodeMap.items  sA    KK&&( 	2DHHdmmTZZ01	2r   c                     g }| j                   j                         D ]5  }|j                  |j                  |j                  f|j
                  f       7 |S r-   )r   r  rc   r   r   r   r  s      r   itemsNSzNamedNodeMap.itemsNS  sN    KK&&( 	HDHHt(($..94::FG	Hr   c                 Z    t        |t              r|| j                  v S || j                  v S r-   )
isinstancestrr   r   r   s     r   __contains__zNamedNodeMap.__contains__  s*    c3$++%%$--''r   c                 6    | j                   j                         S r-   )r   r  r   s    r   r  zNamedNodeMap.keys  s    {{!!r   c                 6    | j                   j                         S r-   )r   r  r   s    r   keysNSzNamedNodeMap.keysNS  s    }}!!##r   c                 6    | j                   j                         S r-   )r   r  r   s    r   r  zNamedNodeMap.values
  s    {{!!##r   Nc                 :    | j                   j                  ||      S r-   r   get)r   r   r   s      r   r'  zNamedNodeMap.get  s    {{tU++r   c                     | j                   t        |dd       u ryt        |       t        |      kD  t        |       t        |      k  z
  S )Nr   r   )r   getattridrw   s     r   _cmpzNamedNodeMap._cmp  s?    ;;'%488tHr%y(RX5	-ABBr   c                 *    | j                  |      dk(  S r6   r+  rw   s     r   __eq__zNamedNodeMap.__eq__      yy1$$r   c                 *    | j                  |      dk\  S r6   r-  rw   s     r   __ge__zNamedNodeMap.__ge__  r/  r   c                 *    | j                  |      dkD  S r6   r-  rw   s     r   __gt__zNamedNodeMap.__gt__      yy!##r   c                 *    | j                  |      dk  S r6   r-  rw   s     r   __le__zNamedNodeMap.__le__!  r/  r   c                 *    | j                  |      dk  S r6   r-  rw   s     r   __lt__zNamedNodeMap.__lt__$  r4  r   c                 ^    t        |t              r| j                  |   S | j                  |   S r-   )r  r@   r   r   )r   attname_or_tuples     r   __getitem__zNamedNodeMap.__getitem__'  s-    &.==!122;;/00r   c                 J   t        |t              r	 | j                  |   }||_        y t        |t              st        d      |}| j                  |       y # t        $ rA t	        |      }| j
                  j                  |_        | j                  |       Y ||_        y w xY w)Nz%value must be a string or Attr object)
r  r  r   r   r   r  rj   setNamedItemr   	TypeError)r   attnamer   rU   s       r   __setitem__zNamedNodeMap.__setitem__.  s    eS!({{7+
 DJeT* GHHDd#  (G}%)%7%7%E%E"!!$'DJ	(s   A A B"!B"c                 @    	 | j                   |   S # t        $ r Y y w xY wr-   )r   r   r   r   s     r   getNamedItemzNamedNodeMap.getNamedItem=  s(    	;;t$$ 		s    	c                 D    	 | j                   ||f   S # t        $ r Y y w xY wr-   )r   r   r   r   r   s      r   getNamedItemNSzNamedNodeMap.getNamedItemNSC  s-    	==,	!:;; 		s    	c                 ,   | j                  |      }|dt        | j                         | j                  |j                  = | j
                  |j                  |j                  f= t        |d      rd |_	        |S t        j                  j                         Nr   )rC  rN   r  r   r   r   r   r   r   r   rC   rD   rL   r   r   ns      r   removeNamedItemzNamedNodeMap.removeNamedItemI  sw    d#=D../AJJ'q~~q{{;<q.)!%H''%%''r   c                 .   | j                  ||      }|dt        | j                         | j                  |j                  |j
                  f= | j                  |j                  = t        |d      rd |_	        |S t        j                  j                         rH  )rF  rN   r  r   r   r   r   r   r   r   rC   rD   rL   r   r   r   rJ  s       r   removeNamedItemNSzNamedNodeMap.removeNamedItemNSU  sy    i8=D../q~~q{{;<AJJ'q.)!%H''%%''r   c                    t        |t              s6t        j                  j	                  t        |      dt        |             | j                  j                  |j                        }|r|j                          || j                  |j                  <   || j                  |j                  |j                  f<   | j                  |_        t        |j                         |S rW   )r  r   rC   rD   rE   rF   r   r'  r   rb   r   r   r   r  r   rN   )r   rU   r   s      r   r=  zNamedNodeMap.setNamedItema  s    $%''--.24j$t*EG Gkkoodii(JJL!%DII=At(($..9: ..))*
r   c                 $    | j                  |      S r-   )r=  r   rU   s     r   setNamedItemNSzNamedNodeMap.setNamedItemNSn  s      &&r   c                 X    | |   }t        |j                         |j                          y r-   )rN   r   rb   )r   r:  rU   s      r   __delitem__zNamedNodeMap.__delitem__q  s$    $%))*r   c                 H    | j                   | j                  | j                  fS r-   r  r   s    r   __getstate__zNamedNodeMap.__getstate__v  s    {{DMM4+=+===r   c                 .    |\  | _         | _        | _        y r-   r  r   states     r   __setstate__zNamedNodeMap.__setstate__y  s    9>6T]D$6r   r-   )!r   r   r   __doc__r  r   r  r  r   r  r   r  r#  r  r'  __len__r+  r.  r1  r3  r6  r8  r;  r@  rC  rF  rK  rN  r=  rR  rT  rV  rZ  r   r   r   r
  r
    s     8I*
 ("$$, GC%%$%$1$
(
('
>?r   r
  lengthz$Number of nodes in the NamedNodeMap.c                   (    e Zd ZdZd Zd Zd Zd Zy)TypeInfo	namespacer   c                      || _         || _        y r-   r`  )r   ra  r   s      r   r   zTypeInfo.__init__  s    "	r   c                     | j                   r4d| j                  j                  d| j                  d| j                   dS d| j                  j                  d| j                  dS )Nr    z (from z)>r   )ra  	__class__r   r   r   s    r   __repr__zTypeInfo.__repr__  sM    >>*...*A*A499*...: :  !% 7 7CCr   c                     | j                   S r-   )r   r   s    r   r   zTypeInfo._get_name      yyr   c                     | j                   S r-   )ra  r   s    r   _get_namespacezTypeInfo._get_namespace  r   r   N)r   r   r   r  r   rf  r   rj  r   r   r   r_  r_    s    #IDr   r_  c                   j   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Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd ZeZd Zd Z d Z!e!Z"d Z#d Z$d Z%d Z&d Z'ddZ(d Z)d Z*d Z+d Z,d Z-y)Element)rj   rG   r   r   r   r   r   r/   r   r   rP   rQ   Nr   c                     d | _         |x| _        | _        || _        || _        t               | _        d x| _        | _        d | _	        d | _
        y r-   )rG   r   r   r   r   r   r/   rP   rQ   r   r   )r   r   r   r   r   s        r   r   zElement.__init__  sO    '..t}("*2664/ r   c                 :    | j                   i | _         i | _        y y r-   )r   r   r   s    r   _ensure_attributeszElement._ensure_attributes  s    ;;DKDM r   c                 x    	 | j                   S # t        $ r" | j                  j                  dd      d   cY S w xY wr   )r   r   r   r   r   s    r   ru   zElement._get_localName  s<    	2??" 	2<<%%c1-b11	2r   c                     | j                   S r-   r   r   s    r   _get_tagNamezElement._get_tagName  r   r   c                     | j                   8t        | j                   j                               D ]  }|j                           d | _         d | _        t
        j                  |        y r-   )r   r   r  rb   r   r   )r   attrs     r   rb   zElement.unlink  sP    ;;"T[[//12 Dr   c                 n    | j                   y	 | j                   |   j                  S # t        $ r Y yw xY w)a  Returns the value of the specified attribute.

        Returns the value of the element's attribute named attname as
        a string. An empty string is returned if the element does not
        have such an attribute. Note that an empty string may also be
        returned as an explicitly given attribute value, use the
        hasAttribute method to distinguish these two cases.
        r   )r   r   r   )r   r?  s     r   getAttributezElement.getAttribute  s=     ;;	;;w'--- 		s   ( 	44c                 r    | j                   y	 | j                   ||f   j                  S # t        $ r Y yw xY wr   )r   r   r   rE  s      r   getAttributeNSzElement.getAttributeNS  s@    == 	==,	!:;AAA 		s   * 	66c                     | j                  |      }|5t        |      }||_        | j                  |_        | j	                  |       y ||j                  k7  r ||_        |j
                  rt        |        y y y r-   )getAttributeNoder   r   rj   setAttributeNoder   rN   )r   r?  r   ru  s       r   setAttributezElement.setAttribute  so    $$W-<=DDJ!%!3!3D!!$'djj DJyy%  !r   c                 N   t        |      \  }}| j                  ||      }|8t        ||||      }||_        | j                  |_        | j                  |       y ||j                  k7  r||_        |j                  rt        |        |j                  |k7  r||_        ||_	        y y r-   )
_nssplitgetAttributeNodeNSr   r   rj   r|  r   rN   r   r   )r   r   qualifiedNamer   r   	localnameru  s          r   setAttributeNSzElement.setAttributeNS  s    $]3	&&|Y?<|YGDDJ!%!3!3D!!$'

""
99#D){{f$$ - %r   c                 R    | j                   y | j                   j                  |      S r-   r&  )r   attrnames     r   r{  zElement.getAttributeNode  s"    ;;{{x((r   c                 V    | j                   y | j                   j                  ||f      S r-   )r   r'  rE  s      r   r  zElement.getAttributeNodeNS  s)    == }}  ,	!:;;r   c                    |j                   d | fvrt        j                  j                  d      | j	                          | j
                  j                  |j                  d       }|| j                  |       | j                  j                  |j                  |j                  fd       }|||ur| j                  |       t        | |       ||ur|S ||ur|S y )Nzattribute node already owned)r   rC   rD   InuseAttributeErrro  r   r'  r   removeAttributeNoder   r   r   _set_attribute_node)r   ru  old1old2s       r   r|  zElement.setAttributeNode  s    T4L0''++,JKK!{{tyy$/$$T*}}  $"3"3T^^!DdKD 0$$T*D$'t KtK r   c                     | j                   t        j                  j                         	 | j                  |   }| j                  |       y # t
        $ r t        j                  j                         w xY wr-   )r   rC   rD   rL   r   r   r  )r   r   ru  s      r   removeAttributezElement.removeAttribute'  sf    == ''%%''	(;;t$D 	  &  	(''%%''	(s   A (A5c                     | j                   t        j                  j                         	 | j                   ||f   }| j                  |       y # t        $ r t        j                  j                         w xY wr-   )r   rC   rD   rL   r   r  )r   r   r   ru  s       r   removeAttributeNSzElement.removeAttributeNS0  sk    == ''%%''	(==,	!:;D 	  &  	(''%%''	(s   A (A7c                 (   |t         j                  j                         	 | j                  |j                      t        |        |j                          | j                  |_        |S # t
        $ r t         j                  j                         w xY wr-   )	rC   rD   rL   r   r   r   rN   rb   rj   rQ  s     r   r  zElement.removeAttributeNode9  s{    <''%%''	(KK		" 	 "//  	(''%%''	(s   A) )(Bc                 8    | j                   y|| j                   v S )zChecks whether the element has an attribute with the specified name.

        Returns True if the element has an attribute with the specified name.
        Otherwise, returns False.
        Fr   rB  s     r   hasAttributezElement.hasAttributeI  s      ;;t{{""r   c                 <    | j                   y||f| j                   v S NF)r   rE  s      r   hasAttributeNSzElement.hasAttributeNSS  s#    == i(DMM99r   c                 ,    t        | |t                     S )zReturns all descendant elements with the given tag name.

        Returns the list of all descendant elements (not direct children
        only) with the specified tag name.
        r   r   rB  s     r   getElementsByTagNamezElement.getElementsByTagNameX  s     /tT8:FFr   c                 .    t        | ||t                     S r-   r   r   rE  s      r   getElementsByTagNameNSzElement.getElementsByTagNameNS`      1,	8:7 	7r   c                 6    d| j                   t        |       fz  S )Nz<DOM Element: %s at %#x>)r   r*  r   s    r   rf  zElement.__repr__d  s    )T\\2d8,DDDr   c                 ,   |j                  |dz   | j                  z          | j                         }|j                         D ]@  }|j                  d|z         t	        |||   j
                         |j                  d       B | j                  r|j                  d       t        | j                        dk(  r[| j                  d   j                  t        j                  t        j                  fv r"| j                  d   j                  |ddd       nJ|j                  |       | j                  D ]  }|j                  |||z   ||        |j                  |       |j                  d| j                  d|       y
|j                  d	|z         y
)zWrite an XML element to a file-like object

        Write the element to the writer object that must provide
        a write method (e.g. a file or StringIO object).
        r   z %s="r   r   r>   r   r   z</z/>%sN)r   r   _get_attributesr  r   r   r/   r  r$   r   r`   r   r&   )r   r+   r)   	addindentr*   r  a_namerU   s           r   r&   zElement.writexmlg  sJ    	VCZ$,,./$$&jjl 	FLLF*+f 3 34LL	 ??LLDOO$)"++(?(?0A A"++FBB?T" OO MDMM&&*:ItLMV$LLdllD9:LL'r   c                 d    | j                          t        | j                  | j                  |       S r-   )ro  r
  r   r   r   s    r   r  zElement._get_attributes  s%    !DKK==r   c                     | j                   ryyr   r  r   s    r   hasAttributeszElement.hasAttributes  s    ;;r   c                 H    | j                  |      }| j                  |       y r-   )r{  setIdAttributeNode)r   r   idAttrs      r   setIdAttributezElement.setIdAttribute  s     &&t,'r   c                 J    | j                  ||      }| j                  |       y r-   )r  r  )r   r   r   r  s       r   setIdAttributeNSzElement.setIdAttributeNS  s"    ((yA'r   c                 r   || j                  |j                        st        j                  j	                         t        |       t        j                  j                         |j                  sGd|_        | xj                  dz  c_        | j                  xj                  dz  c_
        t        |        y y )NTr>   )ry   r   rC   rD   rL   _get_containing_entrefNoModificationAllowedErrr   r   rj   r   rN   )r   r  s     r   r  zElement.setIdAttributeNode  s    >1D1D!E''%%''!$'3''2244}} FM  A% ..!3.D!	 r   r   r   r   ).r   r   r   r  r   rd   r$   r   r  r  r   r   r   r`   r   r   rB   r   r   ro  ru   rs  rb   rw  ry  r}  r  r{  r  r|  setAttributeNodeNSr  r  r  removeAttributeNodeNSr  r  r  r  rf  r&   r  r  r  r  r  r   r   r   rl  rl    s    1I   HIJO**99**00335 .=T(
2 
&.")
<
& *'' 0#:
G7E(@>((	"r   rl  r   z*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.c                     t        |        | j                          || j                  |j                  <   || j                  |j
                  |j                  f<   | |_        y r-   )rN   ro  r   r   r   r   r   r   )elementru  s     r   r  r    sQ    G  $GNN499<@Gd''89
  Dr   c                   ^    e Zd ZdZdZdZ e       ZdZdZ	d Z
d Zd Zd Zd Zd	 Zd
 Zd Zy)	ChildlesszMixin that makes childless-ness easy to implement and avoids
    the complexity of the Node methods that deal with children.
    r   Nc                      y r-   r   r   s    r   r7   zChildless._get_firstChild  r   r   c                      y r-   r   r   s    r   r;   zChildless._get_lastChild  r   r   c                 Z    t         j                  j                  | j                  dz         )Nz nodes cannot have childrenrC   rD   rE   r   rQ  s     r   rI   zChildless.appendChild  &    gg))MM99; 	;r   c                      yr  r   r   s    r   r0   zChildless.hasChildNodes      r   c                 Z    t         j                  j                  | j                  dz         Nz nodes do not have childrenr  r   rR   rS   s      r   rA   zChildless.insertBefore  r  r   c                 Z    t         j                  j                  | j                  dz         r  )rC   rD   rL   r   r^   s     r   rH   zChildless.removeChild  s&    gg!!MM99; 	;r   c                      y r-   r   r   s    r   re   zChildless.normalize  s    r   c                 Z    t         j                  j                  | j                  dz         r  r  r   rR   rZ   s      r   r[   zChildless.replaceChild  r  r   )r   r   r   r[  r  r   EmptyNodeListr/   r   r   r7   r;   rI   r0   rA   rH   re   r[   r   r   r   r  r    sL     IJJJI;;;;r   r  c                   r    e Zd Zej                  ZdZd Zd Zd Z	 e
ee	      Zd Zd Z e
ee      Zd	dZy)
ProcessingInstructiontargetra   c                      || _         || _        y r-   r  )r   r  ra   s      r   r   zProcessingInstruction.__init__  s    	r   c                     | j                   S r-   ra   r   s    r   _get_nodeValuez$ProcessingInstruction._get_nodeValue  rh  r   c                     || _         y r-   r  r   s     r   _set_nodeValuez$ProcessingInstruction._set_nodeValue  s	    	r   c                     | j                   S r-   r  r   s    r   _get_nodeNamez#ProcessingInstruction._get_nodeName  r   r   c                     || _         y r-   r  r   s     r   _set_nodeNamez#ProcessingInstruction._set_nodeName  s	    r   c           	      d    |j                  |d| j                  d| j                  d|       y )Nz<?rd  ?>)r   r  ra   r   r+   r)   r  r*   s        r   r&   zProcessingInstruction.writexml  s    t{{DIItLMr   Nr  )r   r   r   r   r   r$   r  r   r  r  r  r   r  r  r   r&   r   r   r   r  r    sI    //H"I
8I}5HNr   r  c                   f    e Zd ZdZd Zd ZeZd Zd Z e	ee      xZ
Zd Zd Zd Zd	 Zd
 Zd Zy)CharacterData)_datarj   rG   rQ   rP   c                 t    d x| _         | _        d x| _        | _        d| _        t
        j                  |        y r   )rj   rG   rQ   rP   r  r   r   r   s    r   r   zCharacterData.__init__  s4    /33T_266t/
dr   c                 ,    t        | j                        S r-   )r  ra   r   s    r   r  zCharacterData._get_length      499~r   c                     | j                   S r-   r  r   s    r   	_get_datazCharacterData._get_data  r   r   c                     || _         y r-   r  r   ra   s     r   	_set_datazCharacterData._set_data	  s	    
r   c                     | j                   }t        |      dkD  rd}nd}d| j                  j                  d|dd |dS )N
   z...r   z<DOM z node "r   z">)ra   r  re  r   )r   ra   	dotdotdots      r   rf  zCharacterData.__repr__  sB    yyt9r>IINN##T!BZ< 	<r   c                 $   |dk  rt         j                  j                  d      |t        | j                        k\  rt         j                  j                  d      |dk  rt         j                  j                  d      | j                  |||z    S Nr   offset cannot be negative#offset cannot be beyond end of datazcount cannot be negativerC   rD   IndexSizeErrr  ra   r   offsetcounts      r   substringDatazCharacterData.substringData  sw    A:''&&'BCCS^#''&&'LMM19''&&'ABByyu--r   c                 ,    | j                   |z   | _         y r-   r  )r   args     r   
appendDatazCharacterData.appendData   s    IIO	r   c                    |dk  rt         j                  j                  d      |t        | j                        k\  rt         j                  j                  d      |r(| j                  d | || j                  |d  | _        y y )Nr   r  r  r  )r   r  r  s      r   
insertDatazCharacterData.insertData#  ss    A:''&&'BCCS^#''&&'LMM		'6"C67);=DI r   c                 V   |dk  rt         j                  j                  d      |t        | j                        k\  rt         j                  j                  d      |dk  rt         j                  j                  d      |r(| j                  d | | j                  ||z   d  z   | _        y y r  r  r  s      r   
deleteDatazCharacterData.deleteData,  s    A:''&&'BCCS^#''&&'LMM19''&&'ABB		'6*TYYve|}-EEDI r   c                 \   |dk  rt         j                  j                  d      |t        | j                        k\  rt         j                  j                  d      |dk  rt         j                  j                  d      |r+| j                  d | || j                  ||z   d  | _        y y r  r  )r   r  r  r  s       r   replaceDatazCharacterData.replaceData6  s    A:''&&'BCCS^#''&&'LMM19''&&'ABB		'6"C6%<=)ACDI r   N)r   r   r   r  r   r  r\  r  r  r  ra   r   rf  r  r  r  r  r  r   r   r   r  r    sS    WIG  	955D9<.$=F	Cr   r  zLength of the string data.c                   P    e Zd ZdZej
                  ZdZdZd Z	d	dZ
d Zd Zd Zy)
r   r   z#textNc                    |dk  s|t        | j                        kD  rt        j                  j	                  d      | j                         }| j                  |d  |_        | j                  |_        | j                  }| j                  rR| | j                  j                  v r:|| j                  j                  |       n| j                  j                  ||       | j                  d | | _        |S )Nr   zillegal offset value)r  ra   rC   rD   r  re  rj   rP   rG   r/   rI   rA   )r   r  newTextnexts       r   	splitTextzText.splitTextK  s    A:#dii.0''&&'=>>.."yy) $ 2 2??tt'A'AA|++G4,,Wd;IIgv&	r   c                 <    t        ||| j                  |       y r-   )r   ra   r  s        r   r&   zText.writexmlZ  s    F		4@Ar   c                    | j                   g}| j                  }|Y|j                  t        j                  t        j
                  fv r)|j                  d|j                          |j                  }nn|Y| j                  }|X|j                  t        j                  t        j
                  fv r(|j                  |j                          |j                  }nn|Xdj                  |      S )Nr   r   )
ra   rQ   r$   r   r`   r   rO   rP   rc   join)r   rf   rJ  s      r   _get_wholeTextzText._get_wholeText_  s    YYK  mzzdnnd.E.EFFAFF#%% m mzzdnnd.E.EFF MM m wwqzr   c                    | j                   }| j                  }|P|j                  t        j                  t        j
                  fv r |j                  }|j                  |       |}nn|P| j                  }|s|j                  |        |P|j                  t        j                  t        j
                  fv r |j                  }|j                  |       |}nn|P|r	|| _        | S y r-   )	rG   rQ   r$   r   r`   r   rH   rP   ra   )r   contentr   rJ  r  s        r   replaceWholeTextzText.replaceWholeTextq  s       mzzdnnd.E.EFF((""1% m t$mzzdnnd.E.EFF}}""1% m DIKr   c                     | j                   j                         ryt        |       }|y| j                  j	                  |      }|y|j                         S r  )ra   strip_get_containing_elementrj   r   isElementContent)r   r   r   s      r   !_get_isWhitespaceInElementContentz&Text._get_isWhitespaceInElementContent  sR    99??&t,<!!006<((**r   r  )r   r   r   r  r   r`   r$   r   r   r  r&   r  r  r
  r   r   r   r   r   D  s4    I~~HHJB
$8
+r   r   isWhitespaceInElementContentzKTrue iff this text node contains only whitespace and is in element content.	wholeTextz.The text of all logically-adjacent text nodes.c                 |    | j                   }|.|j                  t        j                  k(  r|S |j                   }|.y r-   )rG   r$   r   rd   rU   rT   s     r   r  r    s<    A
-::***HLL - r   c                 |    | j                   }|.|j                  t        j                  k(  r|S |j                   }|.y r-   )rG   r$   r   r   r  s     r   r  r    s<    A
-::333HLL - r   c                   6    e Zd Zej                  ZdZd ZddZy)Commentz#commentc                 <    t         j                  |        || _        y r-   )r  r   r  r  s     r   r   zComment.__init__  s    t$
r   c                 |    d| j                   v rt        d      |j                  |d| j                   d|       y )Nz--z%'--' is not allowed in a comment nodez<!--z-->)ra   rK   r   r  s        r   r&   zComment.writexml  s1    499DEE		4@Ar   Nr  )	r   r   r   r   r   r$   r   r   r&   r   r   r   r  r    s      HHBr   r  c                   4    e Zd ZdZej
                  ZdZddZy)CDATASectionr   z#cdata-sectionc                     | j                   j                  d      dk\  rt        d      |j                  d| j                   z         y )Nz]]>r   z$']]>' not allowed in a CDATA sectionz<![CDATA[%s]]>)ra   findrK   r   r  s        r   r&   zCDATASection.writexml  s9    99>>% A%CDD%		12r   Nr  )	r   r   r   r  r   r   r$   r   r&   r   r   r   r  r    s    I&&HH3r   r  c                   `    e Zd ZdZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)ReadOnlySequentialNamedNodeMap_seqc                     || _         y r-   r  )r   seqs     r   r   z'ReadOnlySequentialNamedNodeMap.__init__  s	    	r   c                 ,    t        | j                        S r-   r  r  r   s    r   r\  z&ReadOnlySequentialNamedNodeMap.__len__  r  r   c                 ,    t        | j                        S r-   r  r   s    r   r  z*ReadOnlySequentialNamedNodeMap._get_length  r  r   c                 L    | j                   D ]  }|j                  |k(  s|c S  y r-   )r  r   rI  s      r   rC  z+ReadOnlySequentialNamedNodeMap.getNamedItem  s&     	AzzT!	r   c                 l    | j                   D ]%  }|j                  |k(  s|j                  |k(  s#|c S  y r-   )r  r   r   rM  s       r   rF  z-ReadOnlySequentialNamedNodeMap.getNamedItemNS  s1     	A~~-!++2J	r   c                     t        |t              r | j                  | }n| j                  |      }|t	        |      |S r-   )r  r@   rF  rC  r   )r   name_or_tuplerU   s      r   r;  z*ReadOnlySequentialNamedNodeMap.__getitem__  sC    mU+&4&&6D$$]3D<=))r   c                 L    |dk  ry 	 | j                   |   S # t        $ r Y y w xY wr6   )r  r  r  s     r   r  z#ReadOnlySequentialNamedNodeMap.item  s2    19	99U## 		s    	##c                 @    t         j                  j                  d      Nz"NamedNodeMap instance is read-onlyrC   rD   r  rB  s     r   rK  z.ReadOnlySequentialNamedNodeMap.removeNamedItem      gg..02 	2r   c                 @    t         j                  j                  d      r'  r(  rE  s      r   rN  z0ReadOnlySequentialNamedNodeMap.removeNamedItemNS  r)  r   c                 @    t         j                  j                  d      r'  r(  rQ  s     r   r=  z+ReadOnlySequentialNamedNodeMap.setNamedItem  r)  r   c                 @    t         j                  j                  d      r'  r(  rQ  s     r   rR  z-ReadOnlySequentialNamedNodeMap.setNamedItemNS  r)  r   c                     | j                   gS r-   r  r   s    r   rV  z+ReadOnlySequentialNamedNodeMap.__getstate__  s    		{r   c                     |d   | _         y r6   r  rX  s     r   rZ  z+ReadOnlySequentialNamedNodeMap.__setstate__  s    !H	r   N)r   )r   r   r   r  r   r\  r  rC  rF  r;  r  rK  rN  r=  rR  rV  rZ  r   r   r   r  r    sH    I

2222r   r  z&Number of entries in the NamedNodeMap.c                   &    e Zd ZdZdZd Zd Zd Zy)
Identifiedz@Mix-in class that supports the publicId and systemId attributes.publicIdsystemIdc                      || _         || _        y r-   r1  )r   r2  r3  s      r   _identified_mixin_initz!Identified._identified_mixin_init  s      r   c                     | j                   S r-   )r2  r   s    r   _get_publicIdzIdentified._get_publicId      }}r   c                     | j                   S r-   )r3  r   s    r   _get_systemIdzIdentified._get_systemId  r8  r   N)r   r   r   r[  r  r5  r7  r:  r   r   r   r0  r0    s    J&I!r   r0  c                   R    e Zd Zej                  ZdZdZdZdZ	dZ
d Zd Zd ZddZy)DocumentTypeNc                     t               | _        t               | _        |rt        |      \  }}|| _        | j                  | _        y r-   )r  entities	notationsr  r   r   )r   r  r   r  s       r   r   zDocumentType.__init__$  s:    6879 ( 7FI!DI		r   c                     | j                   S r-   )internalSubsetr   s    r   _get_internalSubsetz DocumentType._get_internalSubset,      """r   c                    | j                   t        d       }| j                  |_        | j                  |_        t        j
                  j                  j                  }|r\g |j                  _	        g |j                  _	        | j                  j                  D ]e  }t        |j                  |j                  |j                        }|j                  j                  j                  |       |j                  |||       g | j                  j                  D ]  }t!        |j                  |j                  |j                  |j"                        }|j$                  |_        |j&                  |_        |j(                  |_        |j                  j                  j                  |       |j                  |||        | j                  || |       |S y r-   )rj   r<  r   r   rC   rD   UserDataHandlerNODE_CLONEDr>  r  r?  Notationr2  r3  rc   r   EntitynotationNameactualEncodingr   rr   )r   rk   cloner   rJ  notationeentitys           r   rl   zDocumentType.cloneNode/  sg   % &EEJ!YYEN//;;I&(#')$,, FA'

AJJ

KHOO((//9--iHEF ++ DA#AJJ

AJJ$%NN4F,-,<,<F)&'jjFO%&YYFNNN''..v6--iFCD ((D%@Lr   c           
         |j                  d       |j                  | j                         | j                  r2|j                  |d| j                  d|d| j                  d       n-| j                  r!|j                  |d| j                  d       | j                  =|j                  d       |j                  | j                         |j                  d       |j                  d|z          y )	Nz
<!DOCTYPE z
  PUBLIC ''z  'z
  SYSTEM 'z []r   )r   r   r2  r3  rA  r  s        r   r&   zDocumentType.writexmlJ  s    \"TYY==LL $--t}}F G]]LLdDMMBC*LLLL,,-LLSXr   r  )r   r   r   r   DOCUMENT_TYPE_NODEr$   r   r   r2  r3  rA  r   rB  rl   r&   r   r   r   r<  r<    s:    &&HIDHHN"#6r   r<  c                   h    e Zd ZdZej
                  ZdZdZdZ	dZ
d Zd Zd Zd Zd Zd Zd Zd	 Zy)
rH  Nc                 b    || _         || _        t               | _        | j	                  ||       y r-   )r   rI  r   r/   r5  )r   r   r2  r3  rL  s        r   r   zEntity.__init__a  s*    $"*##Hh7r   c                     | j                   S r-   rJ  r   s    r   _get_actualEncodingzEntity._get_actualEncodingg  rC  r   c                     | j                   S r-   r   r   s    r   _get_encodingzEntity._get_encodingj  r8  r   c                     | j                   S r-   rr   r   s    r   _get_versionzEntity._get_versionm  r   r   c                 @    t         j                  j                  d      )Nz(cannot append children to an entity noderC   rD   rE   )r   rR   s     r   rI   zEntity.appendChildp  s    gg))68 	8r   c                 @    t         j                  j                  d      )Nz+cannot insert children below an entity noder_  r  s      r   rA   zEntity.insertBeforet  s    gg))9; 	;r   c                 @    t         j                  j                  d      )Nz*cannot remove children from an entity noder_  r^   s     r   rH   zEntity.removeChildx  s    gg))8: 	:r   c                 @    t         j                  j                  d      )Nz)cannot replace children of an entity noder_  r  s      r   r[   zEntity.replaceChild|  s    gg))79 	9r   )r   r   r   r   r   ENTITY_NODEr$   r   rJ  r   rr   r   rW  rZ  r]  rI   rA   rH   r[   r   r   r   rH  rH  X  sN    JHINHG8#8;:9r   rH  c                   .    e Zd Zej                  ZdZd Zy)rG  Nc                 6    || _         | j                  ||       y r-   )r   r5  )r   r   r2  r3  s       r   r   zNotation.__init__  s    ##Hh7r   )r   r   r   r   r   r$   r   r   r   r   r   rG  rG    s    !!HI8r   rG  c                   2    e Zd Zg dZd Zd Zd Zd Zd Zy)DOMImplementation))core1.0)rh  2.0)rh  N)rC   ri  )rC   rj  )rC   N)ls-loadz3.0)rk  Nc                 L    |dk(  rd }|j                         |f| j                  v S r   )lower	_featuresrp   s      r   ro   zDOMImplementation.hasFeature  s(    b=G)T^^;;r   c                 H   |r+|j                   t        j                  j                  d      | j	                         }|d u xr
 |d u xr |d u  }|s!|rt        j                  j                  d      |rt        |      \  }}|dk(  r$|dk7  rt        j                  j                  d      |r!|st        j                  j                  d      |j                  ||      }|r|j                  |       |j                  |       |r|x|_         |_
        ||_        | |_        |S )Nz(doctype object owned by another DOM treezElement with no namerC   z$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces)rG   rC   rD   WrongDocumentErr_create_documentInvalidCharacterErrr  r   createElementNSrI   rj   doctypern   )	r   r   r  rt  r   add_root_elementr   r  r  s	            r   createDocumentz DOMImplementation.createDocument  s.   w))5''**:< <##% , 4 !4$1T$9!4$+tO5 !1 ''--.DEE ( 7FI#IIgg**+HIIlgg**>@ @)),FG(OOG$9<<G!6!
r   c                 8    t        |      }||_        ||_        |S r-   )r<  r2  r3  )r   r  r2  r3  rt  s        r   createDocumentTypez$DOMImplementation.createDocumentType  s!    }-##r   c                 ,    | j                  |d       r| S y r-   )ro   r{   s     r   r|   zDOMImplementation.getInterface  s    ??7D)Kr   c                     t               S r-   )Documentr   s    r   rq  z"DOMImplementation._create_document  s
    zr   N)	r   r   r   rn  ro   rv  rx  r|   rq  r   r   r   rg  rg    s#    I<
+Zr   rg  c                   J    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)ElementInfozObject 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.

    rr  c                     || _         y r-   rr  rB  s     r   r   zElementInfo.__init__  s	    r   c                     t         S r-   r  r   anames     r   r  zElementInfo.getAttributeType      r   c                     t         S r-   r  rE  s      r   r  zElementInfo.getAttributeTypeNS  r  r   c                      yr  r   r   s    r   r	  zElementInfo.isElementContent  r  r   c                      y)zQReturns true iff this element is declared to have an EMPTY
        content model.Fr   r   s    r   isEmptyzElementInfo.isEmpty  s     r   c                      y)z7Returns true iff the named attribute is a DTD-style ID.Fr   r  s     r   r   zElementInfo.isId      r   c                      y)z<Returns true iff the identified attribute is a DTD-style ID.Fr   rE  s      r   r   zElementInfo.isIdNS  r  r   c                     | j                   S r-   rr  r   s    r   rV  zElementInfo.__getstate__  r   r   c                     || _         y r-   rr  rX  s     r   rZ  zElementInfo.__setstate__  s	    r   N)r   r   r   r[  r  r   r  r  r	  r  r   r   rV  rZ  r   r   r   r}  r}    s;     I
r   r}  c                    | j                   t        j                  k(  r"| j                  j	                          d | _        y t        |       r6| j                  j                  j	                          d | j                  _        y y r-   )r$   r   r%   	_id_cacheclear_id_search_stackr   rj   r   s    r   rN   rN     s_    }}*** $	d	$$**,-1+ 
r   c                      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xZZdZdZdZdZdZdZdZdZd Zd Zd Zd	 Zd
 Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d  Z6d! Z7d" Z8d# Z9d$ Z:	 	 d'd%Z;d& Z<y)(r{  )
_elem_infort  r  r/   r  z	#documentNFr   c                 Z    d | _         t               | _        i | _        i | _        d | _        y r-   )rt  r   r/   r  r  r  r   s    r   r   zDocument.__init__%  s*    "*  $r   c                     |j                   r|j                   |j                  f}n|j                  }| j                  j	                  |      S r-   )r   r   r   r  r'  )r   r  r   s      r   r   zDocument._get_elem_info.  s?    &&(9(99C//C""3''r   c                     | j                   S r-   rV  r   s    r   rW  zDocument._get_actualEncoding5  rC  r   c                     | j                   S r-   )rt  r   s    r   _get_doctypezDocument._get_doctype8  r   r   c                     | j                   S r-   )documentURIr   s    r   _get_documentURIzDocument._get_documentURI;  s    r   c                     | j                   S r-   rY  r   s    r   rZ  zDocument._get_encoding>  r8  r   c                     | j                   S r-   )errorHandlerr   s    r   _get_errorHandlerzDocument._get_errorHandlerA  s       r   c                     | j                   S r-   )r   r   s    r   _get_standalonezDocument._get_standaloneD  r4   r   c                     | j                   S r-   )strictErrorCheckingr   s    r   _get_strictErrorCheckingz!Document._get_strictErrorCheckingG  s    '''r   c                     | j                   S r-   r\  r   s    r   r]  zDocument._get_versionJ  r   r   c                    |j                   | j                  vr6t        j                  j	                  t        |      dt        |             |j                  |j                  j                  |       |j                   t        j                  k(  r/| j                         rt        j                  j	                  d      t        j                  | |      S )Nr=   z two document elements disallowed)r$   rB   rC   rD   rE   rF   rG   rH   r   rd   _get_documentElementrI   rQ  s     r   rI   zDocument.appendChildM  s    == 6 66''--.24j$t*EG G??& OO''-==D---((*''--24 4d++r   c                     	 | j                   j                  |       d x|_        |_        d |_        | j                  |u rd | _	        |S # t        $ r t        j                  j                         w xY wr-   )
r/   r]   rK   rC   rD   rL   rP   rQ   rG   documentElementr^   s     r   rH   zDocument.removeChild]  sr    	(OO""8, ;?>x7"8+#'D   	(''%%''	(s   A	 	(A1c                 h    | j                   D ]#  }|j                  t        j                  k(  s!|c S  y r-   )r/   r$   r   rd   rQ  s     r   r  zDocument._get_documentElementi  s,    OO 	D}} 1 11	r   c                     | j                   !| j                   j                          d | _         t        j                  |        y r-   )rt  rb   r   r   s    r   rb   zDocument.unlinkn  s/    <<#LL!DLDr   c                    |sy | j                   j                  d d d       }| j                  |_        | j                  |_        | j                  |_        | j
                  D ]  }t        |||      }|j                  j                  |      sJ |j
                  j                  |       |j                  t        j                  k(  r|j                  4J |j                  t        j                  k(  r|j                  J ||_        ||_         | j#                  t$        j&                  j(                  j*                  | |       |S r-   )rn   rv  r   r   rr   r/   ri   rj   ry   rc   r$   r   r%   r  rR  rt  rG   r   rC   rD   rE  rF  )r   rk   rK  rJ  
childclones        r   rl   zDocument.cloneNodet  s   ##224tD?? 		*A$Qe4J++66u===##J/""d&8&88,,444$$(?(??}},,, *$)J!		* 	$$SWW%<%<%H%H%)5	2r   c                 (    t               }| |_        |S r-   )r   rj   )r   r   s     r   createDocumentFragmentzDocument.createDocumentFragment  s    r   c                 *    t        |      }| |_        |S r-   )rl  rj   )r   r   rM  s      r   createElementzDocument.createElement  s    Gr   c                 l    t        |t              st        d      t               }||_        | |_        |S Nznode contents must be a string)r  r  r>  r   ra   rj   )r   ra   ts      r   createTextNodezDocument.createTextNode  s2    $$<==Fr   c                 l    t        |t              st        d      t               }||_        | |_        |S r  )r  r  r>  r  ra   rj   r   ra   rT   s      r   createCDATASectionzDocument.createCDATASection  s2    $$<==Nr   c                 *    t        |      }| |_        |S r-   )r  rj   r  s      r   createCommentzDocument.createComment  s    DMr   c                 ,    t        ||      }| |_        |S r-   )r  rj   )r   r  ra   ps       r   createProcessingInstructionz$Document.createProcessingInstruction  s    !&$/r   c                 8    t        |      }| |_        d|_        |S r   )r   rj   r   )r   r   as      r   createAttributezDocument.createAttribute  s    Kr   c                 J    t        |      \  }}t        |||      }| |_        |S r-   )r  rl  rj   )r   r   r  r   r   rM  s         r   rs  zDocument.createElementNS  s+    $]3	M<8r   c                 Z    t        |      \  }}t        ||||      }| |_        d|_        |S r   )r  r   rj   r   )r   r   r  r   r   r  s         r   createAttributeNSzDocument.createAttributeNS  s4    $]3	i@r   c                 0    t        ||||      }| |_        |S r-   )rH  rj   )r   r   r2  r3  rI  rM  s         r   _create_entityzDocument._create_entity  s    48\:r   c                 .    t        |||      }| |_        |S r-   )rG  rj   )r   r   r2  r3  rJ  s        r   _create_notationzDocument._create_notation  s    T8X.r   c                    || j                   v r| j                   |   S | j                  s| j                  sy | j                  }|| j                  g}|| _        n|sy d }|r|j                         }|j                  |j                  D cg c]  }|j                  t        v r| c}       | j                  |      }|r.|j                  j                         D ]  }|j                  rb|j                  |j                  |j                        s7|| j                   |j                   <   |j                   |k(  r|}b|j"                  ro n|j%                  |j&                        r:|| j                   |j                   <   |j                   |k(  r|}|j"                  r n|j(                  s|| j                   |j                   <   |j                   |k(  r|}|j"                  dk(  s ne nc|j"                  rW|j                  j                         D ]:  }|j(                  s|| j                   |j                   <   |j                   |k(  s9|}< |	 |S |r|S c c}w )Nr>   )r  r  r   r  r  popextendr/   r$   rM   r   r   r  r   r   r   r   r   r   r   r   )r   r*  stackresultrU   rg   r   ru  s           r   getElementByIdzDocument.getElementById  s   >>"%%4#7#7%%=))*E$)D! 99;DLLT__ IE"^^/GG   I J &&t,D !OO224 "D((;;t'8'8$..I9=DNN4::6#zzR/)-%)%9%9 %499-59tzz2::+%)F!%!5!5!59tzz2::+%)F!11Q6!'"( %% OO224 *D{{59tzz2::+%)F	*
 !O N IIs   Ic                 ,    t        | |t                     S r-   r  rB  s     r   r  zDocument.getElementsByTagName  s    .tT8:FFr   c                 .    t        | ||t                     S r-   r  rE  s      r   r  zDocument.getElementsByTagNameNS
  r  r   c                 :    | j                   j                  ||      S r-   )rn   ro   rp   s      r   rs   zDocument.isSupported  s    ""--gw??r   c                    |j                   t        j                  k(  rt        j                  j                  d      |j                   t        j                  k(  rt        j                  j                  d      t        |||       S )Nzcannot import document nodesz!cannot import document type nodes)r$   r   r%   rC   rD   NotSupportedErrrR  ri   )r   rU   rk   s      r   
importNodezDocument.importNode  sa    ==D...''))*HII]]d555''))*MNN4t,,r   c                    g }|r|j                  d| d       ||j                  d|rdnd d       |j                  ddj                  |       d|        | j                  D ]  }|j	                  ||||        y )	Nz
encoding="r   zstandalone="yesnoz<?xml version="1.0" rd  r  )rc   r   r  r/   r&   )	r   r+   r)   r  r*   r   r   declarationsrU   s	            r   r&   zDocument.writexml  s    *XJa 89!,
u.MQ OP+CHH\,B+C2dVLMOO 	;DMM&&)T:	;r   c                    |j                   | ur/t        j                  j                  d| d|j                         |j                  t
        j                  t
        j                  fvrt        j                  j                  d      |t        k7  rd|v rV|j                  dd      \  }}|dk(  r|t        j                  j                  k7  rt        j                  j                  d      |dk(  rY|t        j                  j                  k7  r<|j                  t
        j                  k(  rt        j                  j                  d      d }|}nd }d }|j                  t
        j                  k(  r,|j                  }| |j                  }|j                  |       nd }||_        ||_        ||_        ||_        |j                  t
        j                  k(  r	||_        |S ||_        |$|j-                  |       r|j/                  |       |S )	Nz3cannot rename nodes from other documents;
expected z,
found z8renameNode() only applies to element and attribute nodesr   r>   r   zillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rj   rC   rD   rp  r$   r   rd   r  r  r   r   r   r   r   r   r  r   r   r   r   r   r   r|  r  )r   rJ  r   r   r   r   r  is_ids           r   
renameNodezDocument.renameNode(  s   ??$&''**,0!//CD D ::d//1D1DEE''))JL L?*d{$(JJsA$6!	'&#''*A*AA''..79 9 go&#''*A*AA**(;(;;''..>@ @ 	FI::,,,nnG"++A.G %
::***AI  AF"((+..q1 r   )r   r   r   NN)=r   r   r   r  r   rd   r   r   rR  rB   rg  rn   r%   r$   r   r   r   rG   rQ   rP   rJ  r   r   rr   r  r  r  r   r   r   rW  r  r  rZ  r  r  r  r]  rI   rH   r  rb   rl   r  r  r  r  r  r  r  rs  r  r  r  r  r  r  rs   r  r&   r  r   r   r   r{  r{  
  sE   @I**D,L,L**D,C,CE '(N!!HHIJJ$((Ok
 NHJGLKO%(# !(, 

*





8tG7@- KO ; 3r   r{  r  z#Top-level element of this document.c                 
   | j                   j                  |      r%t        j                  j                  j
                  }n$t        j                  j                  j                  }| j                  t        j                  k(  r|j                  | j                  | j                        }| j                  j                         D ]j  }|j                  |j                  |j                  |j                          |j#                  |j                  |j$                        }|j&                  |_        l |r)| j(                  D ]   }t+        |||      }|j-                  |       " n| j                  t        j.                  k(  rD|j1                         }|r| j(                  D ]   }t+        |||      }|j-                  |       " n| j                  t        j2                  k(  r|j5                  | j6                        }n]| j                  t        j8                  k(  r|j;                  | j6                        }n#| j                  t        j<                  k(  r(|j?                  | j@                  | j6                        }n| j                  t        jB                  k(  r|jE                  | j6                        }n| j                  t        jF                  k(  r@|jI                  | j                  | j                        }d|_        | j                   |_        nG| j                  t        jJ                  k(  r| j                   |usJ t        j                  j                  j                  }|jL                  jO                  | jP                  | jR                  | jT                        }||_         |rg |jV                  _,        g |jZ                  _,        | jZ                  jX                  D ]y  }	t]        |	j                  |	jR                  |	jT                        }
||
_         |jZ                  jX                  j_                  |
       ta        |	d      sg|	jc                  ||	|
       { | jV                  jX                  D ]  }te        |j                  |jR                  |jT                  |jf                        }|jh                  |_4        |jj                  |_5        |jl                  |_6        ||_         |jV                  jX                  j_                  |       ta        |d      s|jc                  |||        n+t        j                  jo                  dtq        |       z        ta        | d      r| jc                  || |       |S )zo
    Clone a node and give it the new owner document.
    Called by Node.cloneNode and Document.importNode
    Tr   zCannot clone node %s)9rj   ry   rC   rD   rE  rF  NODE_IMPORTEDr$   r   rd   rs  r   r   r   r  r  r   r  r   r   r/   ri   rI   r?   r  r`   r  ra   r   r  r   r  r  r   r  r  r  rR  rn   rx  r   r2  r3  r>  r  r?  rG  rc   r   r   rH  rI  rJ  r   rr   r  rF   )rU   rk   newOwnerDocumentr   rK  ru  r  rg   rT   rJ  rL  rM  rN  s                r   ri   ri   a  s(   
 $$%56GG++77	GG++99	}}))) 001B1B15@OO**, 	)D  !2!2DMM4::N(():):DNNKA..AK	)
  %t-=>!!!$% 
$55	5 779 %t-=>!!!$% 
$..	( //		:	$11	1 33DII>	$::	: <<T[[=AYYH	$++	+ ..tyy9	$--	- 2243D3D37==Bjj	$11	1!!)9999GG++99	 //BBIIt}}dmm5."$ENN#%EOO ^^(( F#AJJ

AJJG)9&$$++H5178--iHEF ]]'' 	D

AJJ

 !0()(8(8%"#**!"'7$##**62178--iFC	D gg%%&<tDz&IJJ
 t./$$Ye<Lr   c                 T    | j                  dd      }t        |      dk(  r|S d |d   fS )Nr   r>      r   )r   r  )r  fieldss     r   r  r    s4      a(F
6{afQi  r   c                 ~     | |i |}|j                         \  }}|j                  |       |j                          |S r-   )getEvent
expandNoder  )funcargskwargseventstoktyperootNodes         r   _do_pulldom_parser    s>    4"6"F)GX
h
LLNOr   c                 z    ||sddl m} |j                  |       S ddl m} t	        |j                  | f||d      S )z3Parse a file into a DOM by filename or file object.r   expatbuilderpulldom)parserbufsize)xml.domr  parser  r  )filer  r  r  r  s        r   r  r    s?    ~g(!!$''# '24 	4r   c                 t    |ddl m} |j                  |       S ddl m} t	        |j                  | fd|i      S )z&Parse a file into a DOM from a string.r   r  r  r  )r  r  parseStringr  r  )stringr  r  r  s       r   r  r    s?    ~(''//# !4!4vi"*F!35 	5r   c                     | rQt        | t              rt        j                  |       } | D ]'  \  }}t        j
                  j                  ||      r' y  t        j
                  S r-   )r  r  r   _parse_feature_stringr{  rn   ro   )featuresfvs      r   getDOMImplementationr    sY    h$33H=H 	DAq**55a;	 """r   r   r-   )7r[  r    r  rC   r   r   r   r   xml.dom.minicompatxml.dom.xmlbuilderr   r	   rD   r   rd   r   rM   defpropertyrX   r   r   r   r   r   r   objectr
  AttributeListr_  r  rl  r  r  r  r  r   r  r  r  r  r  r0  r<  rH  rG  rg  r}  rN   r{  ri   r  r  r  r  r  r   r   r   <module>r     s  " 
  J J   >  GGLL55GGLL>>@ t377<< tl D,$@ A D+$? @ D+$H I%t %$y84 y8v D&$F G D+$M N D,$E Fa?6 a?F L(68 v ( D$L"d L"\ G\<> G[79	 &; &;RNIt N4ECIt ECN M8)E FS+= S+j D0./ D+@BBm B	34 	3<V <| *H8: ::y$ :x&9Z &9P8z9d 8M+ M^(& (T2QtZ Qf
 H'57Od!45#r   