
    F\h                       S r SSKrSSKrSSKJrJrJrJr  SSK7  SSK	J
r
Jr  \R                  R                  R                  \R                  R                  R                  4r " S S\R                  R                  5      r\" \SS	S
9  \" \SSS
9  \" \SSS
9  S rS rS rS rS r " S S\5      r " S S\5      r\" \SSS
9  \" \SSS
9  \" \SSS
9   " S S\5      r\" \SS S
9  \r " S! S"\5      r\" SS5      r " S# S$\5      r\" \S%S&S
9  \" \SS'S
9  S( r " S) S*5      r  " S+ S,\ \5      r! " S- S.\ \5      r"\" \"SS/S
9   " S0 S1\"5      r#\" \#S2S3S
9  \" \#S4S5S
9  S6 r$S7 r% " S8 S9\"5      r& " S: S;\#5      r' " S< S=\5      r(\" \(SS>S
9   " S? S@5      r) " SA SB\)\ \5      r* " SC SD\)\5      r+ " SE SF\)\ \5      r, " SG SH\
5      r- " SI SJ\5      r.SK r/ " SL SM\\5      r0\" \0SNSOS
9  SP r1SQ r2SR r3SVSS jr4SWST jr5SWSU jr6g)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                       \ rS rSrSrSrSrSrSr\	r
S rSS jr  SS jrS rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!Sr"g)Node"   Nc                     g)NT selfs    &/usr/lib/python3.13/xml/dom/minidom.py__bool__Node.__bool__+           c                 (    U R                  SSX5      $ N )toprettyxml)r   encoding
standalones      r   toxml
Node.toxml.   s    B==r   c                 v   Uc  [         R                  " 5       nO*[         R                  " [         R                  " 5       USSS9nU R                  [
        R                  :X  a  U R                  USXX45        OU R                  USX5        Uc  UR                  5       $ UR                  5       R                  5       $ )Nxmlcharrefreplace
)r   errorsnewliner   )
ioStringIOTextIOWrapperBytesIOnodeTyper   DOCUMENT_NODEwritexmlgetvaluedetach)r   indentnewlr   r   writers         r   r   Node.toprettyxml1   s    [[]F%%bjjl/7-@.24F ==D...MM&"fHIMM&"f3??$$==?++--r   c                 ,    [        U R                  5      $ N)bool
childNodesr   s    r   hasChildNodesNode.hasChildNodesD   s    DOO$$r   c                     U R                   $ r1   r3   r   s    r   _get_childNodesNode._get_childNodesG       r   c                 D    U R                   (       a  U R                   S   $ g Nr   r7   r   s    r   _get_firstChildNode._get_firstChildJ   s    ????1%% r   c                 D    U R                   (       a  U R                   S   $ g Nr7   r   s    r   _get_lastChildNode._get_lastChildN   s    ????2&& r   c                 :   UR                   U R                  :X  a/  [        UR                  5       H  nU R	                  X25        M     U$ UR                   U R
                  ;  a8  [        R                  R                  [        U5      < S[        U 5      < 35      eUR                  b  UR                  R                  U5        Uc  U R                  U5        U$  U R                  R                  U5      nUR                   [         ;   a  [#        U 5        U R                  R%                  XA5        X!l        Xl        U(       a  U R                  US-
     nXl        XQl        OS Ul        Xl
        U$ ! [         a    [        R                  R                  5       ef = f)N cannot be child of    )r'   DOCUMENT_FRAGMENT_NODEtupler3   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crR   nodes         r   rI   Node.insertBeforeR   s`    ; ;;8../!!!. 0 OD$:$::''--.28nd4jIK K*++H5X&$ !,--h7   $<<%OO""53#+ '/$uQw/#+ +/(+/("&  ,gg))++,s   E1 1)Fc                    UR                   U R                  :X  a/  [        UR                  5       H  nU R	                  U5        M     U$ UR                   U R
                  ;  a8  [        R                  R                  [        U5      < S[        U 5      < 35      eUR                   [        ;   a  [        U 5        UR                  b  UR                  R                  U5        [        X5        S Ul        U$ NrE   )r'   rG   rH   r3   rQ   rJ   rK   rL   rM   rN   rU   rV   rO   rP   _append_childrX   )r   r]   r\   s      r   rQ   Node.appendChildr   s    ==D7774??+  # , K== 6 66''--.24j$t*EG G]]66D!??&OO''-d!r   c                    UR                   U R                  :X  a.  UR                  nU R                  U5        U R	                  X5      $ UR                   U R
                  ;  a8  [        R                  R                  [        U5      < S[        U 5      < 35      eXL a  g UR                  b  UR                  R                  U5         U R                  R                  U5      nXR                  U'   Xl
        S Ul
        UR                   [        ;   d  UR                   [        ;   a  [!        U 5        UR                  Ul        UR"                  Ul        S Ul        S Ul        UR"                  (       a  XR"                  l        UR                  (       a  XR                  l        U$ ! [         a    [        R                  R                  5       ef = fr`   )r'   rG   rX   rP   rI   rJ   rK   rL   rM   rN   rO   r3   rR   rS   rT   rU   rV   rY   )r   rZ   oldChildr[   rR   s        r   replaceChildNode.replaceChild   s    ; ;;++HX&$$X88D$:$::''--.28nd4jIK K*++H5	(OO))(3E "*""!99  $<<D!'33#+#;#; ##' ##3;$$03;  0!  	(''%%''	(s   	F& &)Gc                     U R                   R                  U5        UR                  b  UR                  UR                  l        UR                  b  UR                  UR                  l        S =Ul        Ul        UR                  [        ;   a  [        U 5        S Ul        U$ ! [         a    [        R                  R                  5       ef = fr1   )r3   removerS   rK   rL   rT   rX   rY   r'   rU   rV   rO   r   rd   s     r   rP   Node.removeChild   s    	(OO""8, +3;3K3KH  0##/3;3G3GH$$0:>>x7 88D!"  	(''%%''	(s   B# #)Cc                 $   / nU R                    GHo  nUR                  [        R                  :X  Ga
  UR                  (       dY  U(       a  UR
                  US   l        UR
                  (       a  UR                  UR
                  l        UR                  5         M  U(       a  US   R                  UR                  :X  ah  US   nUR                  UR                  -   Ul        UR
                  Ul        UR
                  (       a  X2R
                  l        UR                  5         GM  UR                  U5        GM-  UR                  U5        UR                  [        R                  :X  d  GM_  UR                  5         GMr     XR                   S S & g r@   )r3   r'   r   	TEXT_NODEdatarX   rY   unlinkappendELEMENT_NODE	normalize)r   Lchildr]   s       r   rq   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                 @    [        XU R                  =(       d    U 5      $ r1   )_clone_nodeownerDocument)r   deeps     r   	cloneNodeNode.cloneNode   s    4t'9'9'ATBBr   c                 L    U R                   R                  R                  X5      $ r1   )rw   implementation
hasFeaturer   featureversions      r   isSupportedNode.isSupported   s    !!00;;GMMr   c                     g r1   r   r   s    r   _get_localNameNode._get_localName   s    r   c                     XL $ r1   r   r   others     r   
isSameNodeNode.isSameNode   s
    }r   c                 6    U R                  US 5      (       a  U $ g r1   )r   r   r   s     r   getInterfaceNode.getInterface   s    GT**Kr   c                 T     U R                   U   S   $ ! [        [        4 a     g f = fr<   )
_user_dataAttributeErrorKeyErrorr   keys     r   getUserDataNode.getUserData   s2    	??3'**) 		s    ''c                     S n U R                   nX;   a  XQ   S   nUc	  S nUb  XQ	 U$ X#4XQ'   U$ ! [         a    0 nXPl          N3f = fr<   )r   r   )r   r   rm   handleroldds         r   setUserDataNode.setUserData   sm    	 A 8&)C<GF 
 _AF
  	 AO	 s   / AAc                     [        U S5      (       aH  [        U R                  R                  5       5       H   u  nu  pVUc  M  UR	                  XXRU5        M"     g g )Nr   )hasattrlistr   itemshandle)r   	operationsrcdstr   rm   r   s          r   _call_user_data_handlerNode._call_user_data_handler   sN    4&&(,T__-B-B-D(E$_d&NN94cB )F 'r   c                     S =U l         U l        U R                  (       a2  U R                   H  nUR                  5         M     [	        5       U l        S U l        S U l        g r1   )rO   rw   r3   rn   NodeListrY   rX   )r   rs   s     r   rn   Node.unlink  sH    /33$,?? )&jDO#r   c                     U $ r1   r   r   s    r   	__enter__Node.__enter__  s    r   c                 $    U R                  5         g r1   )rn   )r   etevtbs       r   __exit__Node.__exit__  s    r   )r   r3   rX   rw   rO   rY   NN)	r    NN)#__name__
__module____qualname____firstlineno__namespaceURIrO   rw   rX   rY   r   prefixr   r   r   r4   r8   r=   rB   rI   rQ   re   rP   rq   ry   r   r   r   r   r   r   r   rn   r   r   __static_attributes__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                 z    U R                   nU(       a  US   nX1l        Xl        UR                  U5        Xl        g r@   )r3   rY   rX   ro   rO   )r   r]   r3   lasts       r   ra   ra     s6    J"~#dOr   c                 j    U b0  U R                   [        R                  :X  a  gU R                  n U b  M0  gNTF)r'   r   r(   rO   r]   s    r   _in_documentr   '  s3    

==D... 
 r   c                    U(       d  gSU;   a  UR                  SS5      nSU;   a  UR                  SS5      nSU;   a  UR                  SS5      nU(       a`  SU;   a  UR                  SS	5      nS
U;   a  UR                  S
S5      nSU;   a  UR                  SS5      nSU;   a  UR                  SS5      nU R                  U5        g)zWrites datachars to writer.N&z&amp;<z&lt;>z&gt;"z&quot;z&#13;r    z&#10;r   z&#9;)replacewrite)r.   textattrs      r   _write_datar   /  s     d{||C)
d{||C(
d{||C($;<<X.D4<<<g.D4<<<g.D4<<<f-D
LLr   c                     U R                    HT  nUR                  [        R                  :X  a'  US:X  d  UR                  U:X  a  UR                  U5        [        X1U5        MV     U$ Nr   )r3   r'   r   rp   tagNamero   _get_elements_by_tagName_helper)parentnamercr]   s       r   r   r   F  sR    !!==D---S[DLLD0IIdO'B7	 "
 Ir   c                     U R                    Hl  nUR                  [        R                  :X  d  M#  US:X  d  UR                  U:X  a'  US:X  d  UR
                  U:X  a  UR                  U5        [        XAX#5        Mn     U$ r   )r3   r'   r   rp   r   r   ro   "_get_elements_by_tagName_ns_helper)r   nsURIr   r   r]   s        r   r   r   N  sg    !!==D---c!T^^y%@#!2!2e!;		$.tIJ " Ir   c                       \ rS rSr\R
                  rSrSrSr	Sr
\R                  \R                  \R                  \R                  \R                  \R                   \R"                  4rS rSrg)DocumentFragmentiW  z#document-fragmentNc                 "    [        5       U l        g r1   )r   r3   r   s    r   __init__DocumentFragment.__init__e  s    "*r   r7   )r   r   r   r   r   rG   r'   nodeName	nodeValue
attributesrO   rp   rl   CDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODECOMMENT_NODENOTATION_NODErJ   r   r   r   r   r   r   r   W  sk    **H#HIJJ**003399**++-%r   r   c                       \ rS rSrSr\R                  rSrSr	Sr
\R                  \R                  4r\SS4S jrS rS rS rS	 r\" \\5      =rrS
 rS r\" \\5      =rrS rS r\" \\5      rS rS rS r Sr!g)Attrii  )_name_valuer   _prefixr3   
_localNamerw   ownerElementNFc                     S U l         Xl        X l        X@l        Ub  X0l        [        5       U l        U R                  R                  [        5       5        g r1   )	r   r   r   r   r   r   r3   ro   Text)r   qNamer   r   r   s        r   r   Attr.__init__s  sD     
( 'O"* 	tv&r   c                 z     U R                   $ ! [         a"    U R                  R                  SS5      S   s $ f = fN:rF   rA   )r   r   r   splitr   s    r   r   Attr._get_localName  s<    	3??" 	3==&&sA.r22	3    )::c                     U R                   $ r1   )	specifiedr   s    r   _get_specifiedAttr._get_specified      ~~r   c                     U R                   $ r1   )r   r   s    r   	_get_nameAttr._get_name      zzr   c                 V    Xl         U R                  b  [        U R                  5        g g r1   )r   r   rV   r   values     r   	_set_nameAttr._set_name  s&    
(D--. )r   c                     U R                   $ r1   )r   r   s    r   
_get_valueAttr._get_value      {{r   c                     Xl         XR                  S   l        U R                  b  [	        U R                  5        XR                  S   l        g r<   )r   r3   rm   r   rV   r  s     r   
_set_valueAttr._set_value  s?    "'(D--."'r   c                     U R                   $ r1   )r   r   s    r   _get_prefixAttr._get_prefix      ||r   c                 2   U R                   nUS:X  a0  U(       a)  U[        :w  a  [        R                  R	                  S5      eXl        Uc  U R                  nOU< SU R                  < 3nU R                  (       a  [        U R                  5        X0l	        g )Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacer   )
r   r   rK   rL   NamespaceErrr   r   r   rV   r   )r   r   nsurinewNames       r   _set_prefixAttr._set_prefix  sx    !!W/1gg**KM M>nnG!'8GD--.	r   c                    U R                   nUb  UR                  U R                  	 UR                  U R                  U R
                  4	 U R                  (       a;  SU l        U=R                  S-  sl        U R                  =R                  S-  sl	        U R                   H  nUR                  5         M     U R                  S S 2	 g )NFrF   )r   _attrsr   _attrsNSr   r   _is_id_magic_id_nodesrw   _magic_id_countr3   rn   )r   elemrs   s      r   rn   Attr.unlink  s    
   DMM*t00$..AB{{#$$)$""22a72__ELLN %OOAr   c                 2   U R                   (       a  gU R                  nU R                  nUb  Uc  gUR                  U5      nUc  gU R                  (       a&  UR                  U R                  U R                  5      $ UR                  U R                  5      $ r   )	r  rw   r   _get_elem_infor   isIdNSr   isIdr   r   r   r  infos       r   	_get_isIdAttr._get_isId  s}    ;;    ;$,!!$'<;;t00$..AA99T]]++r   c                 "   U R                   nU R                  nUb  Uc  [        $ UR                  U5      nUc  [        $ U R                  (       a&  UR                  U R                  U R                  5      $ UR                  U R                  5      $ r1   )	rw   r   _no_typer"  r   getAttributeTypeNSr   getAttributeTyper   r%  s       r   _get_schemaTypeAttr._get_schemaType  s{        ;$,O!!$'<O**4+<+<dnnMM((77r   )	r  r   r   r   r   r3   r   r   r   )"r   r   r   r   	__slots__r   ATTRIBUTE_NODEr'   r   r   r  rl   r   rJ   r   r   r   r   r   r  propertyr   r   r  r  r   r  r  r  r   rn   r'  r-  r   r   r   r   r   r   i  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                       \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rS S jr\rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!Sr"g)!NamedNodeMapi  zThe 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                 (    Xl         X l        X0l        g r1   r5  )r   attrsattrsNSr   s       r   r   NamedNodeMap.__init__  s    )r   c                 ,    [        U R                  5      $ r1   )lenr  r   s    r   _get_lengthNamedNodeMap._get_length  s    4;;r   c                 v     U [        U R                  R                  5       5      U      $ ! [         a     g f = fr1   )r   r  keys
IndexErrorr   rR   s     r   itemNamedNodeMap.item  s;    	T[[--/0788 		s   (+ 
88c                     / nU R                   R                  5        H*  nUR                  UR                  UR                  45        M,     U$ r1   )r  valuesro   r   r  r   rr   r]   s      r   r   NamedNodeMap.items  s<    KK&&(DHHdmmTZZ01 )r   c                     / nU R                   R                  5        H6  nUR                  UR                  UR                  4UR
                  45        M8     U$ r1   )r  rF  ro   r   r   r  rG  s      r   itemsNSNamedNodeMap.itemsNS  sG    KK&&(DHHt(($..94::FG )r   c                 d    [        U[        5      (       a  XR                  ;   $ XR                  ;   $ r1   )
isinstancestrr  r  r   s     r   __contains__NamedNodeMap.__contains__  s)    c3++%%--''r   c                 6    U R                   R                  5       $ r1   )r  r@  r   s    r   r@  NamedNodeMap.keys  s    {{!!r   c                 6    U R                   R                  5       $ r1   )r  r@  r   s    r   keysNSNamedNodeMap.keysNS  s    }}!!##r   c                 6    U R                   R                  5       $ r1   )r  rF  r   s    r   rF  NamedNodeMap.values  s    {{!!##r   Nc                 8    U R                   R                  X5      $ r1   r  get)r   r   r  s      r   rZ  NamedNodeMap.get  s    {{t++r   c                     U R                   [        USS 5      L a  g[        U 5      [        U5      :  [        U 5      [        U5      :  -
  $ )Nr  r   )r  getattridr   s     r   _cmpNamedNodeMap._cmp"  s?    ;;'%488tHr%y(RX5	-ABBr   c                 *    U R                  U5      S:H  $ r<   r_  r   s     r   __eq__NamedNodeMap.__eq__(      yy1$$r   c                 *    U R                  U5      S:  $ r<   rb  r   s     r   __ge__NamedNodeMap.__ge__+  re  r   c                 *    U R                  U5      S:  $ r<   rb  r   s     r   __gt__NamedNodeMap.__gt__.      yy!##r   c                 *    U R                  U5      S:*  $ r<   rb  r   s     r   __le__NamedNodeMap.__le__1  re  r   c                 *    U R                  U5      S:  $ r<   rb  r   s     r   __lt__NamedNodeMap.__lt__4  rl  r   c                 h    [        U[        5      (       a  U R                  U   $ U R                  U   $ r1   )rM  rH   r  r  )r   attname_or_tuples     r   __getitem__NamedNodeMap.__getitem__7  s0    &..==!122;;/00r   c                 P   [        U[        5      (       a   U R                  U   nX#l        g [        U[        5      (       d  [        S5      eUnU R                  U5        g ! [         a:    [	        U5      nU R
                  R                  Ul        U R                  U5         N~f = f)Nz%value must be a string or Attr object)
rM  rN  r  r   r   r6  rw   setNamedItemr  	TypeError)r   attnamer  r]   s       r   __setitem__NamedNodeMap.__setitem__>  s    eS!!({{7+
 JeT** GHHDd#  (G}%)%7%7%E%E"!!$'(s   A! !AB%$B%c                 B     U R                   U   $ ! [         a     g f = fr1   )r  r   r   r   s     r   getNamedItemNamedNodeMap.getNamedItemM  s(    	;;t$$ 		s    
c                 D     U R                   X4   $ ! [         a     g f = fr1   )r  r   r   r   r   s      r   getNamedItemNSNamedNodeMap.getNamedItemNSS  s+    	==,!:;; 		s    
c                 8   U R                  U5      nUbi  [        U R                  5        U R                  UR                  	 U R
                  UR                  UR                  4	 [        US5      (       a  S Ul	        U$ [        R                  R                  5       eNr   )r  rV   r6  r  r   r  r   r   r   r   rK   rL   rT   r   r   ns      r   removeNamedItemNamedNodeMap.removeNamedItemY  sz    d#=D../AJJ'q~~q{{;<q.))!%H''%%''r   c                 8   U R                  X5      nUbi  [        U R                  5        U R                  UR                  UR
                  4	 U R                  UR                  	 [        US5      (       a  S Ul	        U$ [        R                  R                  5       er  )r  rV   r6  r  r   r   r  r   r   r   rK   rL   rT   r   r   r   r  s       r   removeNamedItemNSNamedNodeMap.removeNamedItemNSe  sz    8=D../q~~q{{;<AJJ'q.))!%H''%%''r   c                    [        U[        5      (       d8  [        R                  R	                  [        U5      < S[        U 5      < 35      eU R                  R                  UR                  5      nU(       a  UR                  5         XR                  UR                  '   XR                  UR                  UR                  4'   U R                  Ul        [        UR                  5        U$ r`   )rM  r   rK   rL   rM   rN   r  rZ  r   rn   r  r   r   r6  r   rV   )r   r]   r   s      r   rx  NamedNodeMap.setNamedItemq  s    $%%''--.24j$t*EG Gkkoodii(JJL!%DII=At(($..9: ..))*
r   c                 $    U R                  U5      $ r1   )rx  r   r]   s     r   setNamedItemNSNamedNodeMap.setNamedItemNS~  s      &&r   c                 V    X   n[        UR                  5        UR                  5         g r1   )rV   r   rn   )r   rt  r]   s      r   __delitem__NamedNodeMap.__delitem__  s!    %))*r   c                 H    U R                   U R                  U R                  4$ r1   r5  r   s    r   __getstate__NamedNodeMap.__getstate__  s    {{DMM4+=+===r   c                 .    Uu  U l         U l        U l        g r1   r5  r   states     r   __setstate__NamedNodeMap.__setstate__  s    9>6T]D$6r   r1   )#r   r   r   r   __doc__r/  r   r=  rC  r   rJ  rO  r@  rT  rF  rZ  __len__r_  rc  rg  rj  rn  rq  ru  r{  r  r  r  r  rx  r  r  r  r  r   r   r   r   r4  r4    s     8I*
 ("$$, GC%%$%$1$
(
('
>?r   r4  lengthz$Number of nodes in the NamedNodeMap.c                   0    \ rS rSrSrS rS rS rS rSr	g)	TypeInfoi  	namespacer   c                     Xl         X l        g r1   r  )r   r  r   s      r   r   TypeInfo.__init__  s    "	r   c                     U R                   (       a7  SU R                  R                  < SU R                  < SU R                   < S3$ SU R                  R                  < SU R                  < S3$ )Nr    z (from z)>r   )r  	__class__r   r   r   s    r   __repr__TypeInfo.__repr__  sO    >>>*...*A*A499*...: :  !% 7 7CCr   c                     U R                   $ r1   )r   r   s    r   r   TypeInfo._get_name      yyr   c                     U R                   $ r1   )r  r   s    r   _get_namespaceTypeInfo._get_namespace  r   r   )r   r  N)
r   r   r   r   r/  r   r  r   r  r   r   r   r   r  r    s    #IDr   r  c                   v   \ rS rSrSr\R                  rSr\	r
Sr\R                  \R                  \R                  \R                  \R                  \R                   4r\SS4S jrS rS rS rS	 rS
 rS rS rS rS rS rS r\rS r S r!S r"\"r#S r$S r%S r&S r'S r(S S jr)S r*S r+S r,S r-S r.Sr/g)!Elementi  )rw   rO   r   r   r   r   r   r3   r  r  rX   rY   Nr   c                     S U l         U=U l        U l        X0l        X l        [        5       U l        S =U l        U l        S U l	        S U l
        g r1   )rO   r   r   r   r   r   r3   rX   rY   r  r  )r   r   r   r   r   s        r   r   Element.__init__  sK    '..t}("*2664/ r   c                 <    U R                   c  0 U l         0 U l        g g r1   )r  r  r   s    r   _ensure_attributesElement._ensure_attributes  s    ;;DKDM r   c                 z     U R                   $ ! [         a"    U R                  R                  SS5      S   s $ f = fr   )r   r   r   r   r   s    r   r   Element._get_localName  s<    	2??" 	2<<%%c1-b11	2r   c                     U R                   $ r1   r   r   s    r   _get_tagNameElement._get_tagName  r  r   c                     U R                   b:  [        U R                   R                  5       5       H  nUR                  5         M     S U l         S U l        [
        R                  U 5        g r1   )r  r   rF  rn   r  r   )r   r   s     r   rn   Element.unlink  sK    ;;"T[[//12 3Dr   c                 r    U R                   c  g U R                   U   R                  $ ! [         a     gf = f)aV  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   rz  s     r   getAttributeElement.getAttribute  s=     ;;	;;w'--- 		s   ) 
66c                 t    U R                   c  g U R                   X4   R                  $ ! [         a     gf = fr   )r  r  r   r  s      r   getAttributeNSElement.getAttributeNS  s>    == 	==,!:;AAA 		s   * 
77c                     U R                  U5      nUc4  [        U5      nX#l        U R                  Ul        U R	                  U5        g X#R                  :w  a$  X#l        UR
                  (       a  [        U 5        g g g r1   )getAttributeNoder   r  rw   setAttributeNoder$  rV   )r   rz  r  r   s       r   setAttributeElement.setAttribute  si    $$W-<=DJ!%!3!3D!!$'jj Jyy%  !r   c                 L   [        U5      u  pEU R                  X5      nUc5  [        X!XT5      nX6l        U R                  Ul        U R                  U5        g X6R                  :w  a"  X6l        UR                  (       a  [        U 5        UR                  U:w  a  XFl        X&l	        g g r1   )
_nssplitgetAttributeNodeNSr   r  rw   r  r$  rV   r   r   )r   r   qualifiedNamer  r   	localnamer   s          r   setAttributeNSElement.setAttributeNS  s    $]3&&|?<YGDJ!%!3!3D!!$'

""
99#D){{f$$ - %r   c                 T    U R                   c  g U R                   R                  U5      $ r1   rY  )r   attrnames     r   r  Element.getAttributeNode  s"    ;;{{x((r   c                 V    U R                   c  g U R                   R                  X45      $ r1   )r  rZ  r  s      r   r  Element.getAttributeNodeNS  s'    == }}  ,!:;;r   c                    UR                   S U 4;  a  [        R                  R                  S5      eU R	                  5         U R
                  R                  UR                  S 5      nUb  U R                  U5        U R                  R                  UR                  UR                  4S 5      nUb  X2La  U R                  U5        [        X5        X!La  U$ X1La  U$ g )Nzattribute node already owned)r   rK   rL   InuseAttributeErrr  r  rZ  r   removeAttributeNoder  r   r   _set_attribute_node)r   r   old1old2s       r   r  Element.setAttributeNode"  s    T4L0''++,JKK!{{tyy$/$$T*}}  $"3"3T^^!DdK 0$$T*D' KK r   c                     U R                   c  [        R                  R                  5       e U R                  U   nU R                  U5        g ! [
         a    [        R                  R                  5       ef = fr1   )r  rK   rL   rT   r  r   r  )r   r   r   s      r   removeAttributeElement.removeAttribute7  sf    == ''%%''	(;;t$D 	  &  	(''%%''	(s   A )A7c                     U R                   c  [        R                  R                  5       e U R                   X4   nU R                  U5        g ! [         a    [        R                  R                  5       ef = fr1   )r  rK   rL   rT   r   r  )r   r   r   r   s       r   removeAttributeNSElement.removeAttributeNS@  si    == ''%%''	(==,!:;D 	  &  	(''%%''	(s   A )A8c                 ,   Uc  [         R                  R                  5       e U R                  UR                       [        U 5        UR                  5         U R                  Ul        U$ ! [
         a    [         R                  R                  5       ef = fr1   )	rK   rL   rT   r  r   r   rV   rn   rw   r  s     r   r  Element.removeAttributeNodeI  s{    <''%%''	(KK		" 	 "//  	(''%%''	(s   A* *)Bc                 :    U R                   c  gXR                   ;   $ )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  r~  s     r   hasAttributeElement.hasAttributeY  s     ;;{{""r   c                 >    U R                   c  gX4U R                   ;   $ NF)r  r  s      r   hasAttributeNSElement.hasAttributeNSc  s!    == (DMM99r   c                 *    [        X[        5       5      $ )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   r~  s     r   getElementsByTagNameElement.getElementsByTagNameh  s     /t8:FFr   c                 ,    [        XU[        5       5      $ r1   r   r   r  s      r   getElementsByTagNameNSElement.getElementsByTagNameNSp      1	8:7 	7r   c                 6    SU R                   [        U 5      4-  $ )Nz<DOM Element: %s at %#x>)r   r^  r   s    r   r  Element.__repr__t  s    )T\\2d8,DDDr   c                 D   UR                  US-   U R                  -   5        U R                  5       nUR                  5        HA  nUR                  SU-  5        [	        XU   R
                  S5        UR                  S5        MC     U R                  (       a  UR                  S5        [        U R                  5      S:X  a]  U R                  S   R                  [        R                  [        R                  4;   a"  U R                  S   R                  USSS5        OJUR                  U5        U R                   H  nUR                  XU-   X45        M     UR                  U5        UR                  S	U R                  < SU< 35        gUR                  S
U-  5        g)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="Tr   r   rF   r   r   z</z/>%sN)r   r   _get_attributesr@  r   r  r3   r<  r'   r   rl   r   r)   )r   r.   r,   	addindentr-   r8  a_namer]   s           r   r)   Element.writexmlw  s:    	VCZ$,,./$$&jjlFLLF*+f 3 3T:LL # ??LLDOO$)"++(?(?0A A"++FBB?T" OODMM&*:IL ,V$LLdllD9:LL'r   c                 d    U R                  5         [        U R                  U R                  U 5      $ r1   )r  r4  r  r  r   s    r   r  Element._get_attributes  s%    !DKK==r   c                 (    U R                   (       a  ggr   r  r   s    r   hasAttributesElement.hasAttributes  s    ;;r   c                 H    U R                  U5      nU R                  U5        g r1   )r  setIdAttributeNode)r   r   idAttrs      r   setIdAttributeElement.setIdAttribute  s     &&t,'r   c                 H    U R                  X5      nU R                  U5        g r1   )r  r  )r   r   r   r  s       r   setIdAttributeNSElement.setIdAttributeNS  s     ((A'r   c                    Ub   U R                  UR                  5      (       d  [        R                  R	                  5       e[        U 5      b  [        R                  R                  5       eUR                  (       dG  SUl        U =R                  S-  sl        U R                  =R                  S-  sl
        [        U 5        g g )NTrF   )r   r   rK   rL   rT   _get_containing_entrefNoModificationAllowedErrr  r  rw   r  rV   )r   r  s     r   r  Element.setIdAttributeNode  s    >1D1D!E!E''%%''!$'3''2244}} FM  A% ..!3.D!	 r   )
r  r  r3   r   rX   r   rO   r   rY   r   r   r   r   )0r   r   r   r   r/  r   rp   r'   r   r*  r2  r  r   r   rl   r   r   rJ   r   r   r  r   r  rn   r  r  r  r  r  r  r  setAttributeNodeNSr  r  r  removeAttributeNodeNSr  r  r  r  r  r)   r  r  r	  r  r  r   r   r   r   r  r    s    1I   HIJO**99**00335 .=T(
2 
&.")
<
& *'' 0#:
G7E(@>((	"r   r  r   z*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.c                     [        U 5        U R                  5         XR                  UR                  '   XR                  UR
                  UR                  4'   Xl        g r1   )rV   r  r  r   r  r   r   r   )elementr   s     r   r  r    sK    G  $NN499<@d''89
  r   c                   f    \ rS rSrSrSrSr\" 5       rSr	Sr
S rS rS rS rS	 rS
 rS rS rSrg)	Childlessi  zyMixin that makes childless-ness easy to implement and avoids
the complexity of the Node methods that deal with children.
r   Nc                     g r1   r   r   s    r   r=   Childless._get_firstChild  r   r   c                     g r1   r   r   s    r   rB   Childless._get_lastChild  r   r   c                 Z    [         R                  R                  U R                  S-   5      e)Nz nodes cannot have childrenrK   rL   rM   r   r  s     r   rQ   Childless.appendChild  &    gg))MM99; 	;r   c                     gr  r   r   s    r   r4   Childless.hasChildNodes      r   c                 Z    [         R                  R                  U R                  S-   5      eNz nodes do not have childrenr  r   rZ   r[   s      r   rI   Childless.insertBefore  r   r   c                 Z    [         R                  R                  U R                  S-   5      er%  )rK   rL   rT   r   ri   s     r   rP   Childless.removeChild  s&    gg!!MM99; 	;r   c                     g r1   r   r   s    r   rq   Childless.normalize  s    r   c                 Z    [         R                  R                  U R                  S-   5      er%  r  r   rZ   rd   s      r   re   Childless.replaceChild  r   r   )r   r   r   r   r  r/  r   EmptyNodeListr3   r   r   r=   rB   rQ   r4   rI   rP   rq   re   r   r   r   r   r  r    sL     IJJJI;;;;r   r  c                   |    \ rS rSr\R
                  rSrS rS r	S r
\" \	\
5      rS rS r\" \\5      rSS jrS	rg
)ProcessingInstructioni  targetrm   c                     Xl         X l        g r1   r2  )r   r3  rm   s      r   r   ProcessingInstruction.__init__  s    	r   c                     U R                   $ r1   rm   r   s    r   _get_nodeValue$ProcessingInstruction._get_nodeValue  r  r   c                     Xl         g r1   r7  r  s     r   _set_nodeValue$ProcessingInstruction._set_nodeValue  s    	r   c                     U R                   $ r1   r3  r   s    r   _get_nodeName#ProcessingInstruction._get_nodeName   r
  r   c                     Xl         g r1   r>  r  s     r   _set_nodeName#ProcessingInstruction._set_nodeName  s    r   c           	      l    UR                  U< SU R                  < SU R                  < SU< 35        g )Nz<?r  ?>)r   r3  rm   r   r.   r,   r  r-   s        r   r)   ProcessingInstruction.writexml  s    t{{DIItLMr   )rm   r3  Nr  )r   r   r   r   r   r   r'   r/  r   r8  r;  r1  r   r?  rB  r   r)   r   r   r   r   r1  r1    sI    //H"I
8I}5HNr   r1  c                   n    \ rS rSrSrS rS r\rS rS r	\
" \\	5      =rrS rS rS	 rS
 rS rS rSrg)CharacterDatai
  )_datarw   rO   rY   rX   c                 t    S =U l         U l        S =U l        U l        SU l        [
        R                  U 5        g r   )rw   rO   rY   rX   rJ  r   r   r   s    r   r   CharacterData.__init__  s4    /33T_266t/
dr   c                 ,    [        U R                  5      $ r1   )r<  rm   r   s    r   r=  CharacterData._get_length      499~r   c                     U R                   $ r1   rJ  r   s    r   	_get_dataCharacterData._get_data  r  r   c                     Xl         g r1   rQ  r   rm   s     r   	_set_dataCharacterData._set_data  s    
r   c                     U R                   n[        U5      S:  a  SnOSnSU R                  R                  < SUSS < U< S3$ )N
   z...r   z<DOM z node "r   z">)rm   r<  r  r   )r   rm   	dotdotdots      r   r  CharacterData.__repr__  sB    yyt9r>IINN##T!BZ< 	<r   c                 (   US:  a  [         R                  R                  S5      eU[        U R                  5      :  a  [         R                  R                  S5      eUS:  a  [         R                  R                  S5      eU R                  XU-    $ Nr   offset cannot be negative#offset cannot be beyond end of datazcount cannot be negativerK   rL   IndexSizeErrr<  rm   r   offsetcounts      r   substringDataCharacterData.substringData'  su    A:''&&'BCCS^#''&&'LMM19''&&'ABByyu--r   c                 ,    U R                   U-   U l         g r1   r7  )r   args     r   
appendDataCharacterData.appendData0  s    IIO	r   c                 "   US:  a  [         R                  R                  S5      eU[        U R                  5      :  a  [         R                  R                  S5      eU(       a+  U R                  S U < U< U R                  US  < 3U l        g g )Nr   r^  r_  r`  )r   rc  rh  s      r   
insertDataCharacterData.insertData3  ss    A:''&&'BCCS^#''&&'LMM		'6"C67);=DI r   c                 d   US:  a  [         R                  R                  S5      eU[        U R                  5      :  a  [         R                  R                  S5      eUS:  a  [         R                  R                  S5      eU(       a'  U R                  S U U R                  X-   S  -   U l        g g r]  r`  rb  s      r   
deleteDataCharacterData.deleteData<  s    A:''&&'BCCS^#''&&'LMM19''&&'ABB		'6*TYYv|}-EEDI r   c                 p   US:  a  [         R                  R                  S5      eU[        U R                  5      :  a  [         R                  R                  S5      eUS:  a  [         R                  R                  S5      eU(       a-  U R                  S U < U< U R                  X-   S  < 3U l        g g r]  r`  )r   rc  rd  rh  s       r   replaceDataCharacterData.replaceDataF  s    A:''&&'BCCS^#''&&'LMM19''&&'ABB		'6"C6<=)ACDI r   )rJ  rm   rX   rw   rO   rY   N)r   r   r   r   r/  r   r=  r  rR  rV  r1  rm   r   r  re  ri  rl  ro  rr  r   r   r   r   rI  rI  
  sS    WIG  	955D9<.$=F	Cr   rI  zLength of the string data.c                   Z    \ rS rSrSr\R                  rSrSr	S r
SS jrS rS rS	 rS
rg)r   iT  r   z#textNc                    US:  d  U[        U R                  5      :  a  [        R                  R	                  S5      eU R                  5       nU R                  US  Ul        U R                  Ul        U R                  nU R                  (       aS  X R                  R                  ;   a:  Uc  U R                  R                  U5        OU R                  R                  X#5        U R                  S U U l        U$ )Nr   zillegal offset value)r<  rm   rK   rL   ra  r  rw   rX   rO   r3   rQ   rI   )r   rc  newTextnexts       r   	splitTextText.splitText[  s    A:#dii.0''&&'=>>.."yy) $ 2 2??t'A'AA|++G4,,W;IIgv&	r   c                 B    [        X< U R                  < U< 3S5        g r  )r   rm   rF  s        r   r)   Text.writexmlj  s    F		4@%Hr   c                    U R                   /nU R                  nUb]  UR                  [        R                  [        R
                  4;   a)  UR                  SUR                   5        UR                  nOOUb  M]  U R                  nUb\  UR                  [        R                  [        R
                  4;   a(  UR                  UR                   5        UR                  nOOUb  M\  SR                  U5      $ )Nr   r   )
rm   rY   r'   r   rl   r   rW   rX   ro   join)r   rr   r  s      r   _get_wholeTextText._get_wholeTexto  s    YYK  mzzdnnd.E.EFFAFF#%% m mzzdnnd.E.EFF MM m wwqzr   c                    U R                   nU R                  nUbT  UR                  [        R                  [        R
                  4;   a   UR                  nUR                  U5        UnOOUb  MT  U R                  nU(       d  UR                  U 5        UbT  UR                  [        R                  [        R
                  4;   a   UR                  nUR                  U5        UnOOUb  MT  U(       a  Xl        U $ g r1   )	rO   rY   r'   r   rl   r   rP   rX   rm   )r   contentr   r  rw  s        r   replaceWholeTextText.replaceWholeText  s       mzzdnnd.E.EFF((""1% m t$mzzdnnd.E.EFF}}""1% m IKr   c                     U R                   R                  5       (       a  g[        U 5      nUc  gU R                  R	                  U5      nUc  gUR                  5       $ r  )rm   strip_get_containing_elementrw   r"  isElementContent)r   r  r&  s      r   !_get_isWhitespaceInElementContent&Text._get_isWhitespaceInElementContent  sU    99??&t,<!!006<((**r   r7  r  )r   r   r   r   r/  r   rl   r'   r   r   rx  r)   r~  r  r  r   r   r   r   r   r   T  s4    I~~HHJI
$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                     U R                   nUb1  UR                  [        R                  :X  a  U$ UR                   nUb  M1  g r1   )rO   r'   r   rp   r]   r\   s     r   r  r    s<    A
-::***HLL - r   c                     U R                   nUb1  UR                  [        R                  :X  a  U$ UR                   nUb  M1  g r1   )rO   r'   r   r   r  s     r   r  r    s<    A
-::333HLL - r   c                   @    \ rS rSr\R
                  rSrS rSS jr	Sr
g)Commenti  z#commentc                 :    [         R                  U 5        Xl        g r1   )rI  r   rJ  rU  s     r   r   Comment.__init__  s    t$
r   c                     SU R                   ;   a  [        S5      eUR                  U< SU R                   < SU< 35        g )Nz--z%'--' is not allowed in a comment nodez<!--z-->)rm   rS   r   rF  s        r   r)   Comment.writexml  s1    499DEE		4@Ar   rQ  Nr  )r   r   r   r   r   r   r'   r   r   r)   r   r   r   r   r  r    s      HHBr   r  c                   >    \ rS rSrSr\R                  rSrSS jr	Sr
g)CDATASectioni  r   z#cdata-sectionc                     U R                   R                  S5      S:  a  [        S5      eUR                  SU R                   -  5        g )Nz]]>r   z$']]>' not allowed in a CDATA sectionz<![CDATA[%s]]>)rm   findrS   r   rF  s        r   r)   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   r  r    s    I&&HH3r   r  c                   j    \ rS rSrSrSS jrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)ReadOnlySequentialNamedNodeMapi  _seqc                     Xl         g r1   r  )r   seqs     r   r   'ReadOnlySequentialNamedNodeMap.__init__  s    	r   c                 ,    [        U R                  5      $ r1   r<  r  r   s    r   r  &ReadOnlySequentialNamedNodeMap.__len__  rO  r   c                 ,    [        U R                  5      $ r1   r  r   s    r   r=  *ReadOnlySequentialNamedNodeMap._get_length  rO  r   c                 R    U R                    H  nUR                  U:X  d  M  Us  $    g r1   )r  r   r  s      r   r  +ReadOnlySequentialNamedNodeMap.getNamedItem  s!    AzzT! r   c                 v    U R                    H)  nUR                  U:X  d  M  UR                  U:X  d  M'  Us  $    g r1   )r  r   r   r  s       r   r  -ReadOnlySequentialNamedNodeMap.getNamedItemNS  s,    A~~-!++2J r   c                     [        U[        5      (       a  U R                  " U6 nOU R                  U5      nUc  [	        U5      eU$ r1   )rM  rH   r  r  r   )r   name_or_tupler]   s      r   ru  *ReadOnlySequentialNamedNodeMap.__getitem__  sD    mU++&&6D$$]3D<=))r   c                 P    US:  a  g  U R                   U   $ ! [         a     g f = fr<   )r  rA  rB  s     r   rC  #ReadOnlySequentialNamedNodeMap.item  s2    19	99U## 		s    
%%c                 @    [         R                  R                  S5      eNz"NamedNodeMap instance is read-onlyrK   rL   r  r~  s     r   r  .ReadOnlySequentialNamedNodeMap.removeNamedItem      gg..02 	2r   c                 @    [         R                  R                  S5      er  r  r  s      r   r  0ReadOnlySequentialNamedNodeMap.removeNamedItemNS  r  r   c                 @    [         R                  R                  S5      er  r  r  s     r   rx  +ReadOnlySequentialNamedNodeMap.setNamedItem  r  r   c                 @    [         R                  R                  S5      er  r  r  s     r   r  -ReadOnlySequentialNamedNodeMap.setNamedItemNS  r  r   c                     U R                   /$ r1   r  r   s    r   r  +ReadOnlySequentialNamedNodeMap.__getstate__  s    		{r   c                     US   U l         g r<   r  r  s     r   r  +ReadOnlySequentialNamedNodeMap.__setstate__  s    !H	r   N)r   )r   r   r   r   r/  r   r  r=  r  r  ru  rC  r  r  rx  r  r  r  r   r   r   r   r  r    sH    I

2222r   r  z&Number of entries in the NamedNodeMap.c                   .    \ rS rSrSrSrS rS rS rSr	g)
Identifiedi  z@Mix-in class that supports the publicId and systemId attributes.publicIdsystemIdc                     Xl         X l        g r1   r  )r   r  r  s      r   _identified_mixin_init!Identified._identified_mixin_init"  s      r   c                     U R                   $ r1   )r  r   s    r   _get_publicIdIdentified._get_publicId&      }}r   c                     U R                   $ r1   )r  r   s    r   _get_systemIdIdentified._get_systemId)  r  r   N)
r   r   r   r   r  r/  r  r  r  r   r   r   r   r  r    s    J&I!r   r  c                   \    \ rS rSr\R
                  rSrSrSr	Sr
SrS rS rS rSS jrSrg)	DocumentTypei,  Nc                     [        5       U l        [        5       U l        U(       a  [        U5      u  p#X0l        U R                  U l        g r1   )r  entities	notationsr  r   r   )r   r  r   r  s       r   r   DocumentType.__init__4  s6    6879 ( 7F!I		r   c                     U R                   $ r1   )internalSubsetr   s    r   _get_internalSubset DocumentType._get_internalSubset<      """r   c                    U R                   Gc  [        S 5      nU R                  Ul        U R                  Ul        [        R
                  R                  R                  nU(       Ga^  / UR                  l	        / UR                  l	        U R                  R                   He  n[        UR                  UR                  UR                  5      nUR                  R                  R                  U5        UR                  X4U5        Mg     U R                  R                   H  n[!        UR                  UR                  UR                  UR"                  5      nUR$                  Ul        UR&                  Ul        UR(                  Ul        UR                  R                  R                  U5        UR                  X6U5        M     U R                  X0U5        U$ g r1   )rw   r  r   r   rK   rL   UserDataHandlerNODE_CLONEDr  r  r  Notationr  r  ro   r   EntitynotationNameactualEncodingr   r   )r   rx   cloner   r  notationeentitys           r   ry   DocumentType.cloneNode?  sS   % &EEJ!YYEN//;;I&(#')$,,A'

AJJ

KHOO((//9--iHE - ++A#AJJ

AJJ$%NN4F,-,<,<F)&'jjFO%&YYFNNN''..v6--iFC , ((%@Lr   c           
         UR                  S5        UR                  U R                  5        U R                  (       a6  UR                  U< SU R                  < SU< SU R                  < S35        O4U R                  (       a#  UR                  U< SU R                  < S35        U R                  b=  UR                  S5        UR                  U R                  5        UR                  S5        UR                  SU-   5        g )	Nz
<!DOCTYPE z
  PUBLIC ''z  'z
  SYSTEM 'z []r   )r   r   r  r  r  rF  s        r   r)   DocumentType.writexmlZ  s    \"TYY==LL $--t}}F G]]LLdDMMBC*LLLL,,-LLSXr   )r  r   r   r  r  )r   r   r   r   r   DOCUMENT_TYPE_NODEr'   r   r   r  r  r  r   r  ry   r)   r   r   r   r   r  r  ,  s:    &&HIDHHN"#6r   r  c                   p    \ rS rSrSr\R                  rSrSr	Sr
SrS rS rS rS rS rS rS	 rS
 rSrg)r  ih  Nc                 \    Xl         X@l        [        5       U l        U R	                  X#5        g r1   )r   r  r   r3   r  )r   r   r  r  r  s        r   r   Entity.__init__q  s$    $"*##H7r   c                     U R                   $ r1   r  r   s    r   _get_actualEncodingEntity._get_actualEncodingw  r  r   c                     U R                   $ r1   r   r   s    r   _get_encodingEntity._get_encodingz  r  r   c                     U R                   $ r1   r   r   s    r   _get_versionEntity._get_version}  r  r   c                 @    [         R                  R                  S5      e)Nz(cannot append children to an entity noderK   rL   rM   )r   rZ   s     r   rQ   Entity.appendChild  s    gg))68 	8r   c                 @    [         R                  R                  S5      e)Nz+cannot insert children below an entity noder  r&  s      r   rI   Entity.insertBefore  s    gg))9; 	;r   c                 @    [         R                  R                  S5      e)Nz*cannot remove children from an entity noder  ri   s     r   rP   Entity.removeChild  s    gg))8: 	:r   c                 @    [         R                  R                  S5      e)Nz)cannot replace children of an entity noder  r-  s      r   re   Entity.replaceChild  s    gg))79 	9r   )r3   r   r  )r   r   r   r   r   r   ENTITY_NODEr'   r   r  r   r   r   r  r  r  rQ   rI   rP   re   r   r   r   r   r  r  h  sN    JHINHG8#8;:9r   r  c                   6    \ rS rSr\R
                  rSrS rSr	g)r  i  Nc                 2    Xl         U R                  X#5        g r1   )r   r  )r   r   r  r  s       r   r   Notation.__init__  s    ##H7r   )r   )
r   r   r   r   r   r   r'   r   r   r   r   r   r   r  r    s    !!HI8r   r  c                   :    \ rS rSr/ SQrS rS rS rS rS r	Sr
g	)
DOMImplementationi  ))core1.0)r  2.0)r  N)rK   r  )rK   r	  )rK   N)ls-loadz3.0)r
  Nc                 P    US:X  a  S nUR                  5       U4U R                  ;   $ r   )lower	_featuresr~   s      r   r}   DOMImplementation.hasFeature  s(    b=G)T^^;;r   c                    U(       a,  UR                   b  [        R                  R                  S5      eU R	                  5       nUS L =(       a    US L =(       a    US L (       + nU(       d&  U(       a  [        R                  R                  S5      eU(       a  [        U5      u  pgUS:X  a%  US:w  a  [        R                  R                  S5      eU(       a&  U(       d  [        R                  R                  S5      eUR                  X5      nU(       a  UR                  U5        UR                  U5        U(       a  U=Ul         Ul
        X4l        Xl        U$ )Nz(doctype object owned by another DOM treezElement with no namerK   z$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces)rO   rK   rL   WrongDocumentErr_create_documentInvalidCharacterErrr  r  createElementNSrQ   rw   doctyper|   )	r   r   r  r  r   add_root_elementr   r  r  s	            r   createDocument DOMImplementation.createDocument  s&   w))5''**:< <##% , 4 !4$1T$9!4$+tO5 !1 ''--.DEE ( 7F#IIgg**+HIIlgg**>@ @)),FG(OOG$9<<G!6!
r   c                 4    [        U5      nX$l        X4l        U$ r1   )r  r  r  )r   r  r  r  r  s        r   createDocumentType$DOMImplementation.createDocumentType  s    }-##r   c                 6    U R                  US 5      (       a  U $ g r1   )r}   r   s     r   r   DOMImplementation.getInterface  s    ??7D))Kr   c                     [        5       $ r1   )Documentr   s    r   r  "DOMImplementation._create_document  s
    zr   r   N)r   r   r   r   r  r}   r  r  r   r  r   r   r   r   r  r    s#    I<
+Zr   r  c                   R    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rSrg)ElementInfoi  zObject 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                     Xl         g r1   r  r~  s     r   r   ElementInfo.__init__  s    r   c                     [         $ r1   r*  r   anames     r   r,  ElementInfo.getAttributeType      r   c                     [         $ r1   r%  r  s      r   r+  ElementInfo.getAttributeTypeNS  r)  r   c                     gr  r   r   s    r   r  ElementInfo.isElementContent  r#  r   c                     g)zIReturns true iff this element is declared to have an EMPTY
content model.Fr   r   s    r   isEmptyElementInfo.isEmpty  s     r   c                     g)z7Returns true iff the named attribute is a DTD-style ID.Fr   r&  s     r   r$  ElementInfo.isId      r   c                     g)z<Returns true iff the identified attribute is a DTD-style ID.Fr   r  s      r   r#  ElementInfo.isIdNS  r3  r   c                     U R                   $ r1   r  r   s    r   r  ElementInfo.__getstate__  r  r   c                     Xl         g r1   r  r  s     r   r  ElementInfo.__setstate__  s    r   N)r   r   r   r   r  r/  r   r,  r+  r  r/  r$  r#  r  r  r   r   r   r   r!  r!    s;     I
r   r!  c                    U R                   [        R                  :X  a"  U R                  R	                  5         S U l        g [        U 5      (       a6  U R                  R                  R	                  5         S U R                  l        g g r1   )r'   r   r(   	_id_cacheclear_id_search_stackr   rw   r   s    r   rV   rV     sb    }}*** $	d		$$**,-1+ 
r   c                      \ rS rSrSr\R                  \R                  \R                  \R                  4r
\" 5       r\R                  rSrSrSrSrS=rrSrSrSrSrSrSrSrSrS rS rS	 rS
 r S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/S r0S r1S r2S r3S r4S r5S  r6S! r7S" r8S# r9S$ r:S% r;  S)S& jr<S' r=S(r>g)*r  i  )
_elem_infor  r=  r3   r;  z	#documentNFr   c                 Z    S U l         [        5       U l        0 U l        0 U l        S U l        g r1   )r  r   r3   r?  r;  r=  r   s    r   r   Document.__init__5  s*    "*  $r   c                     UR                   (       a  UR                   UR                  4nOUR                  nU R                  R	                  U5      $ r1   )r   r   r   r?  rZ  )r   r  r   s      r   r"  Document._get_elem_info>  s?    &&(9(99C//C""3''r   c                     U R                   $ r1   r  r   s    r   r  Document._get_actualEncodingE  r  r   c                     U R                   $ r1   )r  r   s    r   _get_doctypeDocument._get_doctypeH  r  r   c                     U R                   $ r1   )documentURIr   s    r   _get_documentURIDocument._get_documentURIK  s    r   c                     U R                   $ r1   r  r   s    r   r  Document._get_encodingN  r  r   c                     U R                   $ r1   )errorHandlerr   s    r   _get_errorHandlerDocument._get_errorHandlerQ  s       r   c                     U R                   $ r1   )r   r   s    r   _get_standaloneDocument._get_standaloneT  r:   r   c                     U R                   $ r1   )strictErrorCheckingr   s    r   _get_strictErrorChecking!Document._get_strictErrorCheckingW  s    '''r   c                     U R                   $ r1   r  r   s    r   r  Document._get_versionZ  r  r   c                    UR                   U R                  ;  a8  [        R                  R	                  [        U5      < S[        U 5      < 35      eUR                  b  UR                  R                  U5        UR                   [        R                  :X  a4  U R                  5       (       a  [        R                  R	                  S5      e[        R                  X5      $ )NrE   z two document elements disallowed)r'   rJ   rK   rL   rM   rN   rO   rP   r   rp   _get_documentElementrQ   r  s     r   rQ   Document.appendChild]  s    == 6 66''--.24j$t*EG G??& OO''-==D---((**''--24 4++r   c                      U R                   R                  U5        S =Ul        Ul        S Ul        U R                  UL a  S U l	        U$ ! [         a    [        R                  R                  5       ef = fr1   )
r3   rh   rS   rK   rL   rT   rX   rY   rO   documentElementri   s     r   rP   Document.removeChildm  sr    	(OO""8, ;?>x7"8+#'D   	(''%%''	(s   A
 
)A3c                 n    U R                    H%  nUR                  [        R                  :X  d  M#  Us  $    g r1   )r3   r'   r   rp   r  s     r   r]  Document._get_documentElementy  s'    OOD}} 1 11 $r   c                     U R                   b!  U R                   R                  5         S U l         [        R                  U 5        g r1   )r  rn   r   r   s    r   rn   Document.unlink~  s/    <<#LL!DLDr   c                    U(       d  g U R                   R                  S S S 5      nU R                  Ul        U R                  Ul        U R                  Ul        U R
                   H  n[        X1U5      nUR                  R                  U5      (       d   eUR
                  R                  U5        UR                  [        R                  :X  a  UR                  b   eO3UR                  [        R                  :X  a  UR                  b   eXBl        X$l        M     U R#                  [$        R&                  R(                  R*                  X5        U$ r1   )r|   r  r   r   r   r3   rv   rw   r   ro   r'   r   r(   r`  r  r  rO   r   rK   rL   r  r  )r   rx   r  r  
childclones        r   ry   Document.cloneNode  s   ##224tD??A$Qe4J++66u====##J/""d&8&88,,444$$(?(??}},,, *$)! ! 	$$SWW%<%<%H%H%)	2r   c                 &    [        5       nXl        U$ r1   )r   rw   )r   r   s     r   createDocumentFragmentDocument.createDocumentFragment  s    r   c                 (    [        U5      nXl        U$ r1   )r  rw   )r   r   r  s      r   createElementDocument.createElement  s    Gr   c                 r    [        U[        5      (       d  [        S5      e[        5       nXl        Xl        U$ Nznode contents must be a string)rM  rN  ry  r   rm   rw   )r   rm   ts      r   createTextNodeDocument.createTextNode  s1    $$$<==Fr   c                 r    [        U[        5      (       d  [        S5      e[        5       nXl        Xl        U$ rp  )rM  rN  ry  r  rm   rw   r   rm   r\   s      r   createCDATASectionDocument.createCDATASection  s1    $$$<==Nr   c                 (    [        U5      nXl        U$ r1   )r  rw   ru  s      r   createCommentDocument.createComment  s    DMr   c                 (    [        X5      nXl        U$ r1   )r1  rw   )r   r3  rm   ps       r   createProcessingInstruction$Document.createProcessingInstruction  s    !&/r   c                 6    [        U5      nXl        SUl        U$ r   )r   rw   r  )r   r   as      r   createAttributeDocument.createAttribute  s    Kr   c                 D    [        U5      u  p4[        X!U5      nXl        U$ r1   )r  r  rw   )r   r   r  r   r   r  s         r   r  Document.createElementNS  s%    $]3M8r   c                 R    [        U5      u  p4[        X!XC5      nXl        SUl        U$ r   )r  r   rw   r  )r   r   r  r   r   r  s         r   createAttributeNSDocument.createAttributeNS  s,    $]3i@r   c                 *    [        XX45      nXl        U$ r1   )r  rw   )r   r   r  r  r  r  s         r   _create_entityDocument._create_entity  s    48:r   c                 *    [        XU5      nXl        U$ r1   )r  rw   )r   r   r  r  r  s        r   _create_notationDocument._create_notation  s    TX.r   c                    XR                   ;   a  U R                   U   $ U R                  (       d  U R                  (       d  g U R                  nUc  U R                  /nX l        OU(       d  g S nU(       GaC  UR                  5       nUR                  UR                   Vs/ s H  nUR                  [        ;   d  M  UPM     sn5        U R                  U5      nU(       GaW  UR                  R                  5        GH7  nUR                  (       ao  UR                  UR                  UR                  5      (       aB  X@R                   UR                   '   UR                   U:X  a  UnMl  UR"                  (       d    GO.M  M  UR%                  UR&                  5      (       aA  X@R                   UR                   '   UR                   U:X  a  UnM  UR"                  (       d    OM  UR(                  (       d  M  X@R                   UR                   '   UR                   U:X  a  UnGM%  UR"                  S:X  d  GM8    Ot   OqUR"                  (       a`  UR                  R                  5        HB  nUR(                  (       d  M  X@R                   UR                   '   UR                   U:X  d  M@  UnMD     Ub   U$ U(       a  GMC  U$ s  snf )NrF   )r;  r?  r  r=  r`  popextendr3   r'   rU   r"  r   rF  r   r#  r   r  r  r$  r   r  )r   r^  stackresultr]   rs   r&  r   s           r   getElementByIdDocument.getElementById  s#   >>"%%4#7#7%%=))*E$)! 99;DLLT__ I_E"^^/GG  _ I J &&t,D !OO224D((;;t'8'8$..II9=NN4::6#zzR/)-%)%9%9 % &:	 J 499--59tzz2::+%)F!%!5!5! "659tzz2::+%)F!11Q6!' 5( %% OO224D{{{59tzz2::+%)F	 5
 !O eN IIs    J<<J<c                 *    [        X[        5       5      $ r1   r  r~  s     r   r  Document.getElementsByTagName  s    .t8:FFr   c                 ,    [        XU[        5       5      $ r1   r  r  s      r   r  Document.getElementsByTagNameNS  r  r   c                 8    U R                   R                  X5      $ r1   )r|   r}   r~   s      r   r   Document.isSupported  s    ""--g??r   c                    UR                   [        R                  :X  a  [        R                  R                  S5      eUR                   [        R                  :X  a  [        R                  R                  S5      e[        XU 5      $ )Nzcannot import document nodesz!cannot import document type nodes)r'   r   r(   rK   rL   NotSupportedErrr  rv   )r   r]   rx   s      r   
importNodeDocument.importNode!  s_    ==D...''))*HII]]d555''))*MNN4t,,r   c                    / nU(       a  UR                  SU S35        Ub  UR                  SU(       a  SOS S35        UR                  SSR                  U5       SU 35        U R                   H  nUR	                  XX45        M     g )	Nz
encoding="r   zstandalone="yesnoz<?xml version="1.0" r  rE  )ro   r   r}  r3   r)   )	r   r.   r,   r  r-   r   r   declarationsr]   s	            r   r)   Document.writexml(  s    *XJa 89!,
u.MQ OP+CHH\,B+C2dVLMOODMM&): $r   c                 >   UR                   U La1  [        R                  R                  SU < SUR                   < 35      eUR                  [
        R                  [
        R                  4;  a  [        R                  R                  S5      eU[        :w  a  SU;   aX  UR                  SS5      u  pEUS:X  a=  U[        R                  R                  :w  a  [        R                  R                  S5      eOjUS:X  a[  U[        R                  R                  :w  a=  UR                  [
        R                  :X  a  [        R                  R                  S5      eS nUnOS nS nUR                  [
        R                  :X  a-  UR                  nUb  UR                  nUR                  U5        OS nXAl        XQl        X!l        X1l        UR                  [
        R                  :X  a  X1l        U$ X1l        Ub)  UR-                  U5        W(       a  UR/                  U5        U$ )	Nz3cannot rename nodes from other documents;
expected z,
found z8renameNode() only applies to element and attribute nodesr   rF   r  zillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rw   rK   rL   r  r'   r   rp   r0  r  r   r   r   r  r   r  r  r   r   r   r   r   r   r  r  )r   r  r   r   r   r   r  is_ids           r   
renameNodeDocument.renameNode8  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 %
::***I  F"((+..q1 r   )r?  r;  r=  r3   r  r`  )r   r   r   NN)?r   r   r   r   r/  r   rp   r   r   r  rJ   r  r|   r(   r'   r   r   r   rO   rY   rX   r  r   r   r   rW  rP  rJ  r  r   r"  r  rG  rK  r  rQ  rT  rX  r  rQ   rP   r]  rn   ry   rj  rm  rr  rv  ry  r}  r  r  r  r  r  r  r  r  r   r  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                 T   U R                   R                  U5      (       a%  [        R                  R                  R
                  nO$[        R                  R                  R                  nU R                  [        R                  :X  a  UR                  U R                  U R                  5      nU R                  R                  5        Hk  nUR                  UR                  UR                  UR                   5        UR#                  UR                  UR$                  5      nUR&                  Ul        Mm     U(       a0  U R(                   H   n[+        XqU5      nUR-                  U5        M"     GOU R                  [        R.                  :X  aI  UR1                  5       nU(       a0  U R(                   H   n[+        XqU5      nUR-                  U5        M"     GOU R                  [        R2                  :X  a  UR5                  U R6                  5      nGOsU R                  [        R8                  :X  a  UR;                  U R6                  5      nGO8U R                  [        R<                  :X  a(  UR?                  U R@                  U R6                  5      nGOU R                  [        RB                  :X  a  URE                  U R6                  5      nGOU R                  [        RF                  :X  a@  URI                  U R                  U R                  5      nSUl        U R                   Ul        GOYU R                  [        RJ                  :X  Ga  U R                   ULd   e[        R                  R                  R                  nURL                  RO                  U RP                  U RR                  U RT                  5      nX$l         U(       Ga  / URV                  l,        / URZ                  l,        U RZ                  RX                   H~  n	[]        U	R                  U	RR                  U	RT                  5      n
X*l         URZ                  RX                  R_                  U
5        [a        U	S5      (       d  Ml  U	Rc                  X9U
5        M     U RV                  RX                   H  n[e        UR                  URR                  URT                  URf                  5      nURh                  Ul4        URj                  Ul5        URl                  Ul6        X,l         URV                  RX                  R_                  U5        [a        US5      (       d  M  URc                  X;U5        M     O+[        R                  Ro                  S[q        U 5      -  5      e[a        U S5      (       a  U Rc                  X0U5        U$ )zc
Clone a node and give it the new owner document.
Called by Node.cloneNode and Document.importNode
Tr   zCannot clone node %s)9rw   r   rK   rL   r  r  NODE_IMPORTEDr'   r   rp   r  r   r   r   rF  r  r  r  r   r   r3   rv   rQ   rG   rj  rl   rr  rm   r   rv  r   r}  r3  r   ry  r0  r  r  r|   r  r   r  r  r  r  r  r  ro   r   r   r  r  r  r   r   r  rN   )r]   rx   newOwnerDocumentr   r  r   r  rs   r\   r  r  r  r  s                r   rv   rv   q  s
   
 $$%566GG++77	GG++99	}}))) 001B1B15@OO**,D  !2!2DMM4::N(():):DNNKA..AK -
 -=>!!!$ ) 
$55	5 779-=>!!!$ ) 
$..	( //		:	$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 ^^((#AJJ

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

AJJ

 !0()(8(8%"#**!"'7$##**621788--iFC ( gg%%&<tDz&IJJ
 t.//$$Ye<Lr   c                 V    U R                  SS5      n[        U5      S:X  a  U$ S US   4$ )Nr   rF      r   )r   r<  )r  fieldss     r   r  r    s4      a(F
6{afQi  r   c                 |    U " U0 UD6nUR                  5       u  pEUR                  U5        UR                  5         U$ r1   )getEvent
expandNoder<  )funcargskwargseventstoktyperootNodes         r   _do_pulldom_parser    s<    4"6"F)G
h
LLNOr   c                     Uc  U(       d  SSK Jn  UR                  U 5      $ SSK Jn  [	        UR                  U 4XS.5      $ )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                 v    Uc  SSK Jn  UR                  U 5      $ SSK Jn  [	        UR                  U 4SU05      $ )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                     U (       a\  [        U [        5      (       a  [        R                  " U 5      n U  H+  u  p[        R
                  R                  X5      (       a  M+    g    [        R
                  $ r1   )rM  rN  r   _parse_feature_stringr  r|   r}   )featuresfvs      r   getDOMImplementationr    sV    h$$33H=HDA**55a;;  """r   r   r1   )7r  r#   r  rK   r   r   r   r   xml.dom.minicompatxml.dom.xmlbuilderr   r	   rL   r   rp   r   rU   defpropertyra   r   r   r   r   r   r   objectr4  AttributeListr  r*  r  r  r  r1  rI  r   r  r  r  r  r  r  r  r  r  r  r!  rV   r  rv   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   