
    d,
                       d Z ddlZddlZddlmZmZmZmZ ddlT ddl	m
Z
mZ ej        j        j        ej        j        j        fZ G d d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Z6dS )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 dS )NodeNc                     dS )NT selfs    !  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/xml/dom/minidom.py__bool__zNode.__bool__+       t    c                 2    |                      dd||          S N )toprettyxml)r   encoding
standalones      r   toxmlz
Node.toxml.   s    B*===r   	
c                    |t          j                    }n)t          j        t          j                    |dd          }| j        t
          j        k    r|                     |d||||           n|                     |d||           ||                                S |	                                                                S )Nxmlcharrefreplacer   )r   errorsnewliner   )
ioStringIOTextIOWrapperBytesIOnodeTyper   DOCUMENT_NODEwritexmlgetvaluedetach)r   indentnewlr   r   writers         r   r   zNode.toprettyxml1   s    []]FF%bjll/7-@.24 4 4F =D...MM&"fdHjIIIIMM&"fd333??$$$==??++---r   c                 *    t          | j                  S N)bool
childNodesr   s    r   hasChildNodeszNode.hasChildNodesD   s    DO$$$r   c                     | j         S r.   r0   r   s    r   _get_childNodeszNode._get_childNodesG   
    r   c                 .    | j         r| j         d         S d S Nr   r3   r   s    r   _get_firstChildzNode._get_firstChildJ   s#    ? 	&?1%%	& 	&r   c                 .    | j         r| j         d         S d S Nr3   r   s    r   _get_lastChildzNode._get_lastChildN   s#    ? 	'?2&&	' 	'r   c                    |j         | j        k    r/t          |j                  D ]}|                     ||           |S |j         | j        vr>t          j                            t          |          dt          |                     |j
        |j
                            |           ||                     |           n	 | j                            |          }n,# t          $ r t          j                                        w xY w|j         t           v rt#          |            | j                            ||           ||_        ||_        |r| j        |dz
           }||_        ||_        nd |_        | |_
        |S )N cannot be child of    )r%   DOCUMENT_FRAGMENT_NODEtupler0   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crK   nodes         r   rB   zNode.insertBeforeR   s    ;;;8.// / /!!!X....OD$:::'--.28nnnnd4jjjIK K K*++H555X&&&&,--h77 , , ,g))+++, $<<<%%%O""5(333#+H '/H$ 0uQw/#+ +/((+/("&Hs   C! !)D
c                    |j         | j        k    r.t          |j                  D ]}|                     |           |S |j         | j        vr>t          j                            t          |          dt          |                     |j         t          v rt          |            |j        |j                            |           t          | |           d |_        |S Nr>   )r%   r@   rA   r0   rJ   rC   rD   rE   rF   rG   rN   rO   rH   rI   _append_childrQ   )r   rV   rU   s      r   rJ   zNode.appendChildr   s    =D7774?++ $ $  ####K= 666'--.24jjjj$t***EG G G]666D!!!?&O''---dD!!!r   c                    |j         | j        k    r2|j        }|                     |           |                     ||          S |j         | j        vr>t          j                            t          |          dt          |                     ||u rd S |j
        |j
                            |           	 | j                            |          }n,# t          $ r t          j                                        w xY w|| j        |<   | |_
        d |_
        |j         t          v s|j         t          v rt!          |            |j        |_        |j        |_        d |_        d |_        |j        r||j        _        |j        r||j        _        |S rX   )r%   r@   rQ   rI   rB   rC   rD   rE   rF   rG   rH   r0   rK   rL   rM   rN   rO   rR   )r   rS   oldChildrT   rK   s        r   replaceChildzNode.replaceChild   s    ;;;+HX&&&$$Xx888D$:::'--.28nnnnd4jjjIK K KxF*++H555	(O))(33EE 	( 	( 	('%%'''	(!)""!999 $<<<D!!!'3#+#; ##' # 	<3;H$0 	<3;H 0s   7C )C;c                 Z   	 | j                             |           n,# t          $ r t          j                                        w xY w|j        |j        |j        _        |j        |j        |j        _        d x|_        |_        |j        t          v rt          |            d |_        |S r.   )r0   removerL   rD   rE   rM   rQ   rR   r%   rN   rO   rH   r   r[   s     r   rI   zNode.removeChild   s    	(O""8,,,, 	( 	( 	('%%'''	(+3;3KH 0#/3;3GH$0:>>x7 888D!!!"	    )Ac                 l   g }| j         D ]}|j        t          j        k    r|j        sA|r|j        |d         _        |j        r|j        |j        _        |                                 `|rf|d         j        |j        k    rP|d         }|j        |j        z   |_        |j        |_        |j        r||j        _        |                                 |                    |           |                    |           |j        t          j	        k    r|
                                 || j         d d <   d S r:   )r0   r%   r   	TEXT_NODEdatarQ   rR   unlinkappendELEMENT_NODE	normalize)r   LchildrV   s       r   rg   zNode.normalize   s,   _ 	& 	&E~//z $ >,1,=")( R<A<Q)9LLNNNN 	$1R5>U^;;R5D $	EJ 6DI','8D$( A<@)9LLNNNNHHUOOOO>T%666OO%%%r   c                 2    t          | || j        p|           S r.   )_clone_nodeownerDocument)r   deeps     r   	cloneNodezNode.cloneNode   s    4t'9'ATBBBr   c                 B    | j         j                            ||          S r.   )rl   implementation
hasFeaturer   featureversions      r   isSupportedzNode.isSupported   s    !0;;GWMMMr   c                     d S r.   r   r   s    r   _get_localNamezNode._get_localName   s    tr   c                 
    | |u S r.   r   r   others     r   
isSameNodezNode.isSameNode   s    u}r   c                 6    |                      |d           r| S d S r.   )ru   r   rs   s     r   getInterfacezNode.getInterface   s$    GT** 	K4r   c                 Z    	 | j         |         d         S # t          t          f$ r Y d S w xY wr7   )
_user_dataAttributeErrorKeyErrorr   keys     r   getUserDatazNode.getUserData   s@    	?3'**) 	 	 	44	s    **c                     d }	 | j         }n# t          $ r i }|| _         Y nw xY w||v r||         d         }|d }|||= n||f||<   |S r7   )r   r   )r   r   rc   handleroldds         r   setUserDatazNode.setUserData   s    	 AA 	  	  	 ADOOO	  !88C&)C<GcFG_AcF
s    ""c                     t          | d          rJt          | j                                                  D ]%\  }\  }}||                    |||||           $d S d S )Nr   )hasattrlistr   itemshandle)r   	operationsrcdstr   rc   r   s          r   _call_user_data_handlerzNode._call_user_data_handler   s~    4&& 	C(,T_-B-B-D-D(E(E C C$_dG&NN9c4cBBB	C 	CC Cr   c                     d x| _         | _        | j        r1| j        D ]}|                                 t	                      | _        d | _        d | _        d S r.   )rH   rl   r0   rd   NodeListrR   rQ   )r   ri   s     r   rd   zNode.unlink  s\    /33$,? 	)  &jjDO#r   c                     | S r.   r   r   s    r   	__enter__zNode.__enter__  s    r   c                 .    |                                   d S r.   )rd   )r   etevtbs       r   __exit__zNode.__exit__  s    r   NN)r   r   NN)!__name__
__module____qualname__namespaceURIrH   rl   rQ   rR   r   prefixr   r   r   r1   r4   r8   r<   rB   rJ   r\   rI   rg   rn   ru   rw   r{   r~   r   r   r   rd   r   r   r   r   r   r   r   "   s       LJMKOF  > > > > <@#. . . .&% % %  & & &' ' '  @  "  @     6C C CN N N          $C C C           r   r   
firstChildzFirst child node, or None.)doc	lastChildzLast child node, or None.	localNamez"Namespace-local name of this node.c                 |    | j         }|r|d         }||_        ||_        |                    |           | |_        d S r:   )r0   rR   rQ   re   rH   )r   rV   r0   lasts       r   rY   rY     sI    J  "~#dDOOOr   c                 J    |  | j         t          j        k    rdS | j        } |  dS NTF)r%   r   r&   rH   rV   s    r   _in_documentr   '  s3    

=D...4 
 5r   c                     |ri|                     dd                               dd                               dd                               dd          }|                     |           d	S d	S )
zWrites datachars to writer.&z&amp;<z&lt;"z&quot;>z&gt;N)replacewrite)r,   rc   s     r   _write_datar   /  so     ||C))11#v>>GD(++GGC,@,@ 	T r   c                     | j         D ]N}|j        t          j        k    r&|dk    s|j        |k    r|                    |           t          |||           O|S Nr   )r0   r%   r   rf   tagNamere   _get_elements_by_tagName_helper)parentnamercrV   s       r   r   r   6  sb    ! 8 8=D---S[[DLD00IIdOOO'dB7777Ir   c                     | j         D ]`}|j        t          j        k    rI|dk    s|j        |k    r&|dk    s|j        |k    r|                    |           t          ||||           a|S r   )r0   r%   r   rf   r   r   re   "_get_elements_by_tagName_ns_helper)r   nsURIr   r   rV   s        r   r   r   >  s|    ! K K=D---c!!T^y%@%@#!2e!;!;		$.tUIrJJJ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dS )DocumentFragmentz#document-fragmentNc                 ,    t                      | _        d S r.   )r   r0   r   s    r   __init__zDocumentFragment.__init__U  s    "**r   )r   r   r   r   r@   r%   nodeName	nodeValue
attributesrH   rf   rb   CDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODECOMMENT_NODENOTATION_NODErC   r   r   r   r   r   r   G  sp        *H#HIJJ*03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dS )Attr)_name_valuer   _prefixr0   
_localNamerl   ownerElementNFc                     d | _         || _        || _        || _        ||| _        t                      | _        | j                            t                                 d S r.   )	r   r   r   r   r   r   r0   re   Text)r   qNamer   r   r   s        r   r   zAttr.__init__c  sZ     
( 'DO"** 	tvv&&&&&r   c                 t    	 | j         S # t          $ r$ | j                            dd          d         cY S w xY wN:r?   r;   )r   r   r   splitr   s    r   rw   zAttr._get_localNamer  sM    	3?" 	3 	3 	3=&&sA..r2222	3   	 +77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{  
    zr   c                 N    || _         | j        t          | j                   d S d S r.   )r   r   rO   r   values     r   	_set_namezAttr._set_name~  s1    
(D-..... )(r   c                     | j         S r.   )r   r   s    r   
_get_valuezAttr._get_value  
    {r   c                     || _         || j        d         _        | j        t	          | j                   || j        d         _        d S r7   )r   r0   rc   r   rO   r   s     r   
_set_valuezAttr._set_value  sG    "'(D-..."'r   c                     | j         S r.   )r   r   s    r   _get_prefixzAttr._get_prefix  
    |r   c                     | j         }|dk    r,|r*|t          k    rt          j                            d          || _        || j        }n|d| j        }| j        rt          | j                   || _	        d S )Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacer   )
r   r   rD   rE   NamespaceErrr   r   r   rO   r   )r   r   nsurinewNames       r   _set_prefixzAttr._set_prefix  s    !W M/11g**KM M M>nGG!'8G 	/D-...			r   c                    | j         }|T|j        | j        = |j        | j        | j        f= | j        r,d| _        |xj        dz  c_        | j        xj	        dz  c_	        | j
        D ]}|                                 | j
        d d = d S )NFr?   )r   _attrsr   _attrsNSr   r   _is_id_magic_id_nodesrl   _magic_id_countr0   rd   )r   elemri   s      r   rd   zAttr.unlink  s    
  DM*t0$.AB{ 8#$$)$$"22a722_ 	 	ELLNNNNOAAAr   c                     | j         rdS | j        }| j        }||dS |                    |          }|dS | j        r |                    | j        | j                  S |                    | j                  S r   )	r   rl   r   _get_elem_infor   isIdNSr   isIdr   r   r   r   infos       r   	_get_isIdzAttr._get_isId  s    ; 	4  ;$,5!!$''<5 	,;;t0$.AAA99T]+++r   c                     | j         }| j        }||t          S |                    |          }|t          S | j        r |                    | j        | j                  S |                    | j                  S r.   )	rl   r   _no_typer   r   getAttributeTypeNSr   getAttributeTyper   r   s       r   _get_schemaTypezAttr._get_schemaType  sy      ;$,O!!$''<O 	8**4+<dnMMM((777r   ) r   r   r   	__slots__r   ATTRIBUTE_NODEr%   r   r   r   rb   r   rC   r   r   rw   r   r   r   propertyr   r   r   r   r   r   r   r   r   rd   r   r  r   r   r   r   r   Y  sG       WI"HJIF)CD+:d' ' ' '3 3 3    / / /
 hy)444Ht  ( ( ( !Z888I     Xk;//F  ", , , 8 8 8 8 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 dS ) NamedNodeMapa  The attribute list is a transient interface to the underlying
    dictionaries.  Mutations here will change the underlying element's
    dictionary.

    Ordering is imposed artificially and does not reflect the order of
    attributes as found in an input document.
    r   r   _ownerElementc                 0    || _         || _        || _        d S 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          | j                                                  |                  S # t          $ r Y d S w xY wr.   )r   r   keys
IndexErrorr   rK   s     r   itemzNamedNodeMap.item  sO    	T[--//00788 	 	 	44	s   14 
AAc                     g }| j                                         D ]#}|                    |j        |j        f           $|S r.   )r   valuesre   r   r   r   rh   rV   s      r   r   zNamedNodeMap.items  sG    K&&(( 	2 	2DHHdmTZ01111r   c                     g }| j                                         D ]*}|                    |j        |j        f|j        f           +|S r.   )r   r  re   r   r   r   r  s      r   itemsNSzNamedNodeMap.itemsNS  sQ    K&&(( 	H 	HDHHt($.94:FGGGGr   c                 P    t          |t                    r	|| j        v S || j        v S r.   )
isinstancestrr   r   r   s     r   __contains__zNamedNodeMap.__contains__  s.    c3 	($+%%$-''r   c                 4    | j                                         S r.   )r   r  r   s    r   r  zNamedNodeMap.keys  s    {!!!r   c                 4    | j                                         S r.   )r   r  r   s    r   keysNSzNamedNodeMap.keysNS  s    }!!###r   c                 4    | j                                         S r.   )r   r  r   s    r   r  zNamedNodeMap.values
  s    {!!###r   Nc                 8    | j                             ||          S r.   r   get)r   r   r   s      r   r(  zNamedNodeMap.get  s    {tU+++r   c                     | j         t          |dd           u rdS t          |           t          |          k    t          |           t          |          k     z
  S )Nr   r   )r   getattridry   s     r   _cmpzNamedNodeMap._cmp  sM    ;'%488881tHHr%yy(RXX5		-ABBr   c                 4    |                      |          dk    S r7   r,  ry   s     r   __eq__zNamedNodeMap.__eq__      yy1$$r   c                 4    |                      |          dk    S r7   r.  ry   s     r   __ge__zNamedNodeMap.__ge__  r0  r   c                 4    |                      |          dk    S r7   r.  ry   s     r   __gt__zNamedNodeMap.__gt__      yy!##r   c                 4    |                      |          dk    S r7   r.  ry   s     r   __le__zNamedNodeMap.__le__!  r0  r   c                 4    |                      |          dk     S r7   r.  ry   s     r   __lt__zNamedNodeMap.__lt__$  r5  r   c                 `    t          |t                    r| j        |         S | j        |         S r.   )r  rA   r   r   )r   attname_or_tuples     r   __getitem__zNamedNodeMap.__getitem__'  s1    &.. 	1=!122;/00r   c                 `   t          |t                    r]	 | j        |         }nE# t          $ r8 t	          |          }| j        j        |_        |                     |           Y nw xY w||_        d S t          |t                    st          d          |}|                     |           d S )Nz%value must be a string or Attr object)
r  r   r   r   r   r  rl   setNamedItemr   	TypeError)r   attnamer   rV   s       r   __setitem__zNamedNodeMap.__setitem__.  s    eS!! 	$({7+ ( ( (G}}%)%7%E"!!$'''''( DJJJeT** I GHHHDd#####s   % ?A'&A'c                 @    	 | j         |         S # t          $ r Y d S w xY wr.   )r   r   r   r   s     r   getNamedItemzNamedNodeMap.getNamedItem=  s6    	;t$$ 	 	 	44	s    
c                 D    	 | j         ||f         S # t          $ r Y d S w xY wr.   )r   r   r   r   r   s      r   getNamedItemNSzNamedNodeMap.getNamedItemNSC  s;    	=,	!:;; 	 	 	44	s    
c                    |                      |          }|Nt          | j                   | j        |j        = | j        |j        |j        f= t          |d          rd |_	        |S t          j                                        Nr   )rD  rO   r  r   r   r   r   r   r   r   rD   rE   rM   r   r   ns      r   removeNamedItemzNamedNodeMap.removeNamedItemI  s|    d##=D.///AJ'q~q{;<q.)) &!%H'%%'''r   c                 
   |                      ||          }|Nt          | j                   | j        |j        |j        f= | j        |j        = t          |d          rd |_	        |S t          j                                        rI  )rG  rO   r  r   r   r   r   r   r   r   rD   rE   rM   r   r   r   rK  s       r   removeNamedItemNSzNamedNodeMap.removeNamedItemNSU  s~    i88=D.///q~q{;<AJ'q.)) &!%H'%%'''r   c                    t          |t                    s>t          j                            t          |          dt          |                     | j                            |j                  }|r|	                                 || j        |j        <   || j
        |j        |j        f<   | j        |_        t          |j                   |S rX   )r  r   rD   rE   rF   rG   r   r(  r   rd   r   r   r   r  r   rO   )r   rV   r   s      r   r>  zNamedNodeMap.setNamedItema  s    $%% 	G'--.24jjjj$t***EG G Gkoodi(( 	JJLLL!%DI=At($.9: .)***
r   c                 ,    |                      |          S r.   )r>  r   rV   s     r   setNamedItemNSzNamedNodeMap.setNamedItemNSn  s      &&&r   c                 f    | |         }t          |j                   |                                 d S r.   )rO   r   rd   )r   r;  rV   s      r   __delitem__zNamedNodeMap.__delitem__q  s/    $%)***r   c                 *    | j         | j        | j        fS r.   r  r   s    r   __getstate__zNamedNodeMap.__getstate__v  s    {DM4+===r   c                 0    |\  | _         | _        | _        d S r.   r  r   states     r   __setstate__zNamedNodeMap.__setstate__y  s    9>6T]D$6$6$6r   r.   )!r   r   r   __doc__r  r   r  r  r   r  r!  r  r$  r  r(  __len__r,  r/  r2  r4  r7  r9  r<  rA  rD  rG  rL  rO  r>  rS  rU  rW  r[  r   r   r   r  r    s         8I* * *
           ( ( (" " "$ $ $$ $ $, , , , GC C C% % %% % %$ $ $% % %$ $ $1 1 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dS )TypeInfo	namespacer   c                 "    || _         || _        d S r.   ra  )r   rb  r   s      r   r   zTypeInfo.__init__  s    "			r   c                     | j         r d| j        j        d| j        d| j         dS d| j        j        d| j        dS )Nr    z (from z)>r   )rb  	__class__r   r   r   s    r   __repr__zTypeInfo.__repr__  s`    > 	D 	D*..*A*A*A4999*....: :	D !% 7 7 7CCr   c                     | j         S r.   )r   r   s    r   r   zTypeInfo._get_name  
    yr   c                     | j         S r.   )rb  r   s    r   _get_namespacezTypeInfo._get_namespace  r   r   N)r   r   r   r  r   rg  r   rk  r   r   r   r`  r`    sX        #I  D D D      r   r`  c                   &   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-dS ) Element)rl   rH   r   r   r   r   r   r0   r   r   rQ   rR   Nr   c                     d | _         |x| _        | _        || _        || _        t                      | _        d x| _        | _        d | _	        d | _
        d S r.   )rH   r   r   r   r   r   r0   rQ   rR   r   r   )r   r   r   r   r   s        r   r   zElement.__init__  sU    '..t}("**2664/ r   c                 4    | j         i | _         i | _        d S d S r.   )r   r   r   s    r   _ensure_attributeszElement._ensure_attributes  s$    ;DKDMMM r   c                 t    	 | j         S # t          $ r$ | j                            dd          d         cY S w xY wr   )r   r   r   r   r   s    r   rw   zElement._get_localName  sM    	2?" 	2 	2 	2<%%c1--b1111	2r   c                     | j         S r.   r   r   s    r   _get_tagNamezElement._get_tagName  r   r   c                     | j         =t          | j                                                   D ]}|                                 d | _         d | _        t
                              |            d S r.   )r   r   r  rd   r   r   )r   attrs     r   rd   zElement.unlink  sd    ;"T[//1122  Dr   c                 \    | j         dS 	 | j         |         j        S # t          $ r Y dS 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.
        Nr   )r   r   r   )r   r@  s     r   getAttributezElement.getAttribute  sH     ;2	;w'-- 	 	 	22	s    
++c                 `    | j         dS 	 | j         ||f         j        S # t          $ r Y dS w xY wr   )r   r   r   rF  s      r   getAttributeNSzElement.getAttributeNS  sK    = 2	=,	!:;AA 	 	 	22	s    
--c                     |                      |          }|9t          |          }||_        | j        |_        |                     |           d S ||j        k    r||_        |j        rt          |            d S d S d S r.   )getAttributeNoder   r   rl   setAttributeNoder   rO   )r   r@  r   rv  s       r   setAttributezElement.setAttribute  s    $$W--<==DDJ!%!3D!!$'''''dj  DJy &%%%%% ! & &r   c                 X   t          |          \  }}|                     ||          }|<t          ||||          }||_        | j        |_        |                     |           d S ||j        k    r||_        |j        rt          |            |j        |k    r||_        ||_	        d S d S r.   )
_nssplitgetAttributeNodeNSr   r   rl   r}  r   rO   r   r   )r   r   qualifiedNamer   r   	localnamerv  s          r   setAttributeNSzElement.setAttributeNS  s    $]33	&&|Y??<|YGGDDJ!%!3D!!$'''''
"""
9 *#D))){f$$$ - %$r   c                 H    | j         d S | j                             |          S r.   r'  )r   attrnames     r   r|  zElement.getAttributeNode  s#    ;4{x(((r   c                 L    | j         d S | j                             ||f          S r.   )r   r(  rF  s      r   r  zElement.getAttributeNodeNS  s*    = 4}  ,	!:;;;r   c                    |j         d | fvrt          j                            d          |                                  | j                            |j        d           }||                     |           | j	                            |j
        |j        fd           }|||ur|                     |           t          | |           ||ur|S ||ur|S d S )Nzattribute node already owned)r   rD   rE   InuseAttributeErrrp  r   r(  r   removeAttributeNoder   r   r   _set_attribute_node)r   rv  old1old2s       r   r}  zElement.setAttributeNode  s    T4L00'++,JKKK!!!{ty$//$$T***}  $"3T^!DdKKD 0 0$$T***D$'''t KtK r   c                     | j         t          j                                        	 | j        |         }n,# t
          $ r t          j                                        w xY w|                     |           d S r.   )r   rD   rE   rM   r   r   r  )r   r   rv  s      r   removeAttributezElement.removeAttribute'  sz    = '%%'''	(;t$DD 	( 	( 	('%%'''	(  &&&&&s	   5 )Ac                     | j         t          j                                        	 | j         ||f         }n,# t          $ r t          j                                        w xY w|                     |           d S r.   )r   rD   rE   rM   r   r  )r   r   r   rv  s       r   removeAttributeNSzElement.removeAttributeNS0  s    = '%%'''	(=,	!:;DD 	( 	( 	('%%'''	(  &&&&&s	   7 )A c                 $   |t           j                                        	 | j        |j                  n,# t
          $ r t           j                                        w xY wt          |            |                                 | j        |_        |S r.   )	rD   rE   rM   r   r   r   rO   rd   rl   rR  s     r   r  zElement.removeAttributeNode9  s    <'%%'''	(K	""" 	( 	( 	('%%'''	( "/s	   5 )Ac                 &    | j         dS || 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.
        NFr   rC  s     r   hasAttributezElement.hasAttributeI  s     ;5t{""r   c                 *    | j         dS ||f| j         v S NF)r   rF  s      r   hasAttributeNSzElement.hasAttributeNSS  s!    = 5i(DM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   rC  s     r   getElementsByTagNamezElement.getElementsByTagNameX  s     /tT8::FFFr   c                 >    t          | ||t                                S r.   r   r   rF  s      r   getElementsByTagNameNSzElement.getElementsByTagNameNS`  !    1,	8::7 7 	7r   c                 4    d| j         t          |           fz  S )Nz<DOM Element: %s at %#x>)r   r+  r   s    r   rg  zElement.__repr__d  s    )T\2d88,DDDr   r   c                 B   |                     |dz   | j        z              |                                 }|                                D ]J}|                     d|z             t	          |||         j                   |                     d           K| j        r|                     d           t          | j                  dk    rN| j        d         j        t          j
        t          j        fv r$| j        d                             |ddd           nO|                     |           | j        D ]}|                    |||z   ||           |                     |           |                     d| j        d|           d
S |                     d	|z             d
S )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   r0   r  r%   r   rb   r   r'   )r   r,   r*   	addindentr+   r  a_namerV   s           r   r'   zElement.writexmlg  s    	VCZ$,.///$$&&jjll 	 	FLLF*+++f 3444LL? 	(LLDO$$))"+(?0A A A"++FBB????T""" O M MDMM&&*:ItLLLLV$$$LLLdlllDD9:::::LL'''''r   c                 `    |                                   t          | j        | j        |           S r.   )rp  r  r   r   r   s    r   r  zElement._get_attributes  s*    !!!DK===r   c                     | j         rdS dS r   r  r   s    r   hasAttributeszElement.hasAttributes  s    ; 	45r   c                 Z    |                      |          }|                     |           d S r.   )r|  setIdAttributeNode)r   r   idAttrs      r   setIdAttributezElement.setIdAttribute  s/    &&t,,'''''r   c                 \    |                      ||          }|                     |           d S r.   )r  r  )r   r   r   r  s       r   setIdAttributeNSzElement.setIdAttributeNS  s1    ((yAA'''''r   c                 \   ||                      |j                  st          j                                        t          |           t          j                                        |j        s=d|_        | xj        dz  c_        | j	        xj
        dz  c_
        t          |            d S d S )NTr?   )r{   r   rD   rE   rM   _get_containing_entrefNoModificationAllowedErrr   r   rl   r   rO   )r   r  s     r   r  zElement.setIdAttributeNode  s    >1D!E!E>'%%'''!$''3'22444} 	" FM  A%  ..!3..D!!!!!		" 	"r   r   r   r   ).r   r   r   r  r   rf   r%   r   r  r	  r   r   r   rb   r   r   rC   r   r   rp  rw   rt  rd   rx  rz  r~  r  r|  r  r}  setAttributeNodeNSr  r  r  removeAttributeNodeNSr  r  r  r  rg  r'   r  r  r  r  r  r   r   r   rm  rm    s       1I  HIJO*9*035 .=T   (  
2 2 2         
& 
& 
&. . .") ) )
< < <
  & *' ' '' ' '   0# # #: : :
G G G7 7 7E E E( ( ( (@> > >  ( ( (( ( (	" 	" 	" 	" 	"r   rm  r   z*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.c                     t          |            |                                  || j        |j        <   || j        |j        |j        f<   | |_        d S r.   )rO   rp  r   r   r   r   r   r   )elementrv  s     r   r  r    sW    G    $GN49<@Gd'89
  Dr   c                   f    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dS )	ChildlesszMixin that makes childless-ness easy to implement and avoids
    the complexity of the Node methods that deal with children.
    r   Nc                     d S r.   r   r   s    r   r8   zChildless._get_firstChild  r   r   c                     d S r.   r   r   s    r   r<   zChildless._get_lastChild  r   r   c                 P    t           j                            | j        dz             )Nz nodes cannot have childrenrD   rE   rF   r   rR  s     r   rJ   zChildless.appendChild  '    g))M99; ; 	;r   c                     dS r  r   r   s    r   r1   zChildless.hasChildNodes      ur   c                 P    t           j                            | j        dz             Nz nodes do not have childrenr  r   rS   rT   s      r   rB   zChildless.insertBefore  r  r   c                 P    t           j                            | j        dz             r  )rD   rE   rM   r   r_   s     r   rI   zChildless.removeChild  s'    g!!M99; ; 	;r   c                     d S r.   r   r   s    r   rg   zChildless.normalize  s    r   c                 P    t           j                            | j        dz             r  r  r   rS   r[   s      r   r\   zChildless.replaceChild  r  r   )r   r   r   r\  r  r   EmptyNodeListr0   r   r   r8   r<   rJ   r1   rB   rI   rg   r\   r   r   r   r  r    s          IJJJI    ; ; ;  ; ; ;; ; ;  ; ; ; ; ;r   r  c                   v    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d	S )ProcessingInstructiontargetrc   c                 "    || _         || _        d S r.   r  )r   r  rc   s      r   r   zProcessingInstruction.__init__  s    			r   c                     | j         S r.   rc   r   s    r   _get_nodeValuez$ProcessingInstruction._get_nodeValue  ri  r   c                     || _         d S 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                     || _         d S r.   r  r   s     r   _set_nodeNamez#ProcessingInstruction._set_nodeName  s    r   r   c           	      Z    |                     |d| j        d| j        d|           d S )Nz<?re  ?>)r   r  rc   r   r,   r*   r  r+   s        r   r'   zProcessingInstruction.writexml  s5    t{{{DIIIttLMMMMMr   Nr  )r   r   r   r   r   r%   r  r   r  r  r  r   r  r  r   r'   r   r   r   r  r    s        /H"I  
    88I    x}55HN N N N N Nr   r  c                   n    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dS )CharacterData)_datarl   rH   rR   rQ   c                     d x| _         | _        d x| _        | _        d| _        t
                              |            d S r   )rl   rH   rR   rQ   r  r   r   r   s    r   r   zCharacterData.__init__  s@    /33T_266t/
dr   c                 *    t          | j                  S r.   )r  rc   r   s    r   r  zCharacterData._get_length      49~~r   c                     | j         S r.   r  r   s    r   	_get_datazCharacterData._get_data  r   r   c                     || _         d S r.   r  r   rc   s     r   	_set_datazCharacterData._set_data	  s    


r   c                 z    | j         }t          |          dk    rd}nd}d| j        j        d|dd         |dS )N
   z...r   z<DOM z node "r   z">)rc   r  rf  r   )r   rc   	dotdotdots      r   rg  zCharacterData.__repr__  sO    yt99r>>IIIN###T!B$ZZ< 	<r   c                 (   |dk     rt           j                            d          |t          | j                  k    rt           j                            d          |dk     rt           j                            d          | j        |||z            S Nr   offset cannot be negative#offset cannot be beyond end of datazcount cannot be negativerD   rE   IndexSizeErrr  rc   r   offsetcounts      r   substringDatazCharacterData.substringData  s    A::'&&'BCCCS^^##'&&'LMMM199'&&'ABBByu,--r   c                 $    | j         |z   | _         d S r.   r  )r   args     r   
appendDatazCharacterData.appendData   s    IO			r   c                    |dk     rt           j                            d          |t          | j                  k    rt           j                            d          |r)| j        d |         || j        |d          | _        d S d S )Nr   r  r  r  )r   r  r  s      r   
insertDatazCharacterData.insertData#  s    A::'&&'BCCCS^^##'&&'LMMM 	=	'6'""CC677););=DIII	= 	=r   c                 ^   |dk     rt           j                            d          |t          | j                  k    rt           j                            d          |dk     rt           j                            d          |r)| j        d |         | j        ||z   d          z   | _        d S d S r  r  r  s      r   
deleteDatazCharacterData.deleteData,  s    A::'&&'BCCCS^^##'&&'LMMM199'&&'ABBB 	F	'6'*TYve|}}-EEDIII	F 	Fr   c                 d   |dk     rt           j                            d          |t          | j                  k    rt           j                            d          |dk     rt           j                            d          |r,| j        d |         || j        ||z   d          | _        d S d S r  r  )r   r  r  r  s       r   replaceDatazCharacterData.replaceData6  s    A::'&&'BCCCS^^##'&&'LMMM199'&&'ABBB 	C	'6'""CC6%<==)A)ACDIII	C 	Cr   N)r   r   r   r  r   r  r]  r  r  r  rc   r   rg  r  r  r  r  r  r   r   r   r  r    s        WI    G      x	9555D9< < <. . .$ $ $= = =F F F	C 	C 	C 	C 	Cr   r  zLength of the string data.c                   H    e Zd ZdZej        ZdZdZd Z	d
dZ
d Zd Zd	 ZdS )r   r   z#textNc                    |dk     s|t          | j                  k    rt          j                            d          |                                 }| j        |d          |_        | j        |_        | j        }| j        rF| | j        j	        v r8|| j        
                    |           n| j                            ||           | j        d |         | _        |S )Nr   zillegal offset value)r  rc   rD   rE   r  rf  rl   rQ   rH   r0   rJ   rB   )r   r  newTextnexts       r   	splitTextzText.splitTextK  s    A::#di..00'&&'=>>>..""y) $ 2? 	<tt'AAA|++G4444,,Wd;;;Igvg&	r   r   c                 <    t          ||| j        |           d S r.   )r   rc   r  s        r   r'   zText.writexmlZ  s'    F		44@AAAAAr   c                 r   | j         g}| j        }|E|j        t          j        t          j        fv r#|                    d|j                    |j        }nn|E| j        }|D|j        t          j        t          j        fv r"|                    |j                    |j        }nn|Dd	                    |          S )Nr   r   )
rc   rR   r%   r   rb   r   rP   rQ   re   join)r   rh   rK  s      r   _get_wholeTextzText._get_wholeText_  s    YK mzdnd.EFFFAF###% m mzdnd.EFFF   M m wwqzzr   c                    | j         }| j        }|A|j        t          j        t          j        fv r|j        }|                    |           |}nn|A| j        }|s|                    |            |A|j        t          j        t          j        fv r|j        }|                    |           |}nn|A|r	|| _        | S d S r.   )	rH   rR   r%   r   rb   r   rI   rQ   rc   )r   contentr   rK  r  s        r   replaceWholeTextzText.replaceWholeTextq  s      mzdnd.EFFF(""1%%% m  	%t$$$mzdnd.EFFF}""1%%% m  	DIK4r   c                     | j                                         rdS t          |           }|dS | j                            |          }|dS |                                S r  )rc   strip_get_containing_elementrl   r   isElementContent)r   r   r   s      r   !_get_isWhitespaceInElementContentz&Text._get_isWhitespaceInElementContent  sd    9?? 	5&t,,<5!0066<5((***r   r  )r   r   r   r  r   rb   r%   r   r   r  r'   r  r  r  r   r   r   r   r   D  s~        I~HHJ  B B B 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                 X    | j         }| |j        t          j        k    r|S |j         }| d S r.   )rH   r%   r   rf   rV   rU   s     r   r	  r	    s8    A
-:***HL - 4r   c                 X    | j         }| |j        t          j        k    r|S |j         }| d S r.   )rH   r%   r   r   r  s     r   r  r    s8    A
-:333HL - 4r   c                   .    e Zd Zej        ZdZd ZddZdS )Commentz#commentc                 H    t                               |            || _        d S r.   )r  r   r  r  s     r   r   zComment.__init__  s!    t$$$


r   r   c                 z    d| j         v rt          d          |                    |d| j         d|           d S )Nz--z%'--' is not allowed in a comment nodez<!--z-->)rc   rL   r   r  s        r   r'   zComment.writexml  sI    49DEEE			44@AAAAAr   Nr  )	r   r   r   r   r   r%   r   r   r'   r   r   r   r  r    sJ         HH  B B B B B Br   r  c                   ,    e Zd ZdZej        ZdZddZdS )CDATASectionr   z#cdata-sectionr   c                     | j                             d          dk    rt          d          |                    d| j         z             d S )Nz]]>r   z$']]>' not allowed in a CDATA sectionz<![CDATA[%s]]>)rc   findrL   r   r  s        r   r'   zCDATASection.writexml  sJ    9>>%  A%%CDDD%	122222r   Nr  )	r   r   r   r  r   r   r%   r   r'   r   r   r   r  r    s:        I&HH3 3 3 3 3 3r   r  c                   b    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dS )ReadOnlySequentialNamedNodeMap_seqr   c                     || _         d S 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                 8    | j         D ]}|j        |k    r|c S d S r.   )r  r   rJ  s      r   rD  z+ReadOnlySequentialNamedNodeMap.getNamedItem  s8     	 	AzT!! "	 	r   c                 N    | j         D ]}|j        |k    r|j        |k    r|c S d S r.   )r  r   r   rN  s       r   rG  z-ReadOnlySequentialNamedNodeMap.getNamedItemNS  s@     	 	A~--!+2J2J	 	r   c                     t          |t                    r | j        | }n|                     |          }|t	          |          |S r.   )r  rA   rG  rD  r   )r   name_or_tuplerV   s      r   r<  z*ReadOnlySequentialNamedNodeMap.__getitem__  sP    mU++ 	4&4&6DD$$]33D<=)))r   c                 P    |dk     rd S 	 | j         |         S # t          $ r Y d S w xY wr7   )r  r  r  s     r   r  z#ReadOnlySequentialNamedNodeMap.item  sD    1994	9U## 	 	 	44	s    
%%c                 @    t           j                            d          Nz"NamedNodeMap instance is read-onlyrD   rE   r  rC  s     r   rL  z.ReadOnlySequentialNamedNodeMap.removeNamedItem      g..02 2 	2r   c                 @    t           j                            d          r(  r)  rF  s      r   rO  z0ReadOnlySequentialNamedNodeMap.removeNamedItemNS  r*  r   c                 @    t           j                            d          r(  r)  rR  s     r   r>  z+ReadOnlySequentialNamedNodeMap.setNamedItem  r*  r   c                 @    t           j                            d          r(  r)  rR  s     r   rS  z-ReadOnlySequentialNamedNodeMap.setNamedItemNS  r*  r   c                     | j         gS r.   r  r   s    r   rW  z+ReadOnlySequentialNamedNodeMap.__getstate__  s    	{r   c                      |d         | _         d S r7   r  rY  s     r   r[  z+ReadOnlySequentialNamedNodeMap.__setstate__  s    !H			r   N)r   )r   r   r   r  r   r]  r  rD  rG  r<  r  rL  rO  r>  rS  rW  r[  r   r   r   r  r    s        I         
  
    2 2 22 2 22 2 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dS )
Identifiedz@Mix-in class that supports the publicId and systemId attributes.publicIdsystemIdc                 "    || _         || _        d S r.   r2  )r   r3  r4  s      r   _identified_mixin_initz!Identified._identified_mixin_init  s      r   c                     | j         S r.   )r3  r   s    r   _get_publicIdzIdentified._get_publicId  
    }r   c                     | j         S r.   )r4  r   s    r   _get_systemIdzIdentified._get_systemId  r9  r   N)r   r   r   r\  r  r6  r8  r;  r   r   r   r1  r1    sL        JJ&I! ! !      r   r1  c                   J    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dS )DocumentTypeNc                     t                      | _        t                      | _        |rt          |          \  }}|| _        | j        | _        d S r.   )r  entities	notationsr  r   r   )r   r  r   r  s       r   r   zDocumentType.__init__$  sJ    688799 	" ( 7 7FI!DI	r   c                     | j         S r.   )internalSubsetr   s    r   _get_internalSubsetz DocumentType._get_internalSubset,      ""r   c                    | j         et          d           }| j        |_        | j        |_        t          j        j        j        }|rg |j        _	        g |j
        _	        | j
        j	        D ]X}t          |j        |j        |j                  }|j
        j	                            |           |                    |||           Y| j        j	        D ]}t!          |j        |j        |j        |j                  }|j        |_        |j        |_        |j        |_        |j        j	                            |           |                    |||           |                     || |           |S d S r.   )rl   r=  r   r   rD   rE   UserDataHandlerNODE_CLONEDr?  r  r@  Notationr3  r4  re   r   EntitynotationNameactualEncodingr   rt   )r   rm   cloner   rK  notationeentitys           r   rn   zDocumentType.cloneNode/  s^   % &&EEJ!YEN/;I D&(#')$, F FA'
AJ
KKHO(//999--iHEEEE+ D DA#AJ
AJ$%N4 4F,-,<F)&'jFO%&YFNN'..v666--iFCCCC((D%@@@L4r   r   c           
         |                     d           |                     | j                   | j        r,|                     |d| j        d|d| j        d           n'| j        r |                     |d| j        d           | j        D|                     d           |                     | j                   |                     d           |                     d|z              d S )	Nz
<!DOCTYPE z
  PUBLIC ''z  'z
  SYSTEM 'z []r   )r   r   r3  r4  rB  r  s        r   r'   zDocumentType.writexmlJ  s    \"""TY= 	DLL DD$---t}}}F G G G G] 	DLLdddDMMMBCCC*LLLL,---LLSXr   r  )r   r   r   r   DOCUMENT_TYPE_NODEr%   r   r   r3  r4  rB  r   rC  rn   r'   r   r   r   r=  r=    sv        &HIDHHN" " "# # #  6     r   r=  c                   `    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dS )
rI  Nc                 t    || _         || _        t                      | _        |                     ||           d S r.   )r   rJ  r   r0   r6  )r   r   r3  r4  rM  s        r   r   zEntity.__init__a  s8    $"**##Hh77777r   c                     | j         S r.   rK  r   s    r   _get_actualEncodingzEntity._get_actualEncodingg  rD  r   c                     | j         S r.   r   r   s    r   _get_encodingzEntity._get_encodingj  r9  r   c                     | j         S r.   rt   r   s    r   _get_versionzEntity._get_versionm  r   r   c                 @    t           j                            d          )Nz(cannot append children to an entity noderD   rE   rF   )r   rS   s     r   rJ   zEntity.appendChildp  s    g))68 8 	8r   c                 @    t           j                            d          )Nz+cannot insert children below an entity noder`  r  s      r   rB   zEntity.insertBeforet  s    g))9; ; 	;r   c                 @    t           j                            d          )Nz*cannot remove children from an entity noder`  r_   s     r   rI   zEntity.removeChildx  s    g))8: : 	:r   c                 @    t           j                            d          )Nz)cannot replace children of an entity noder`  r  s      r   r\   zEntity.replaceChild|  s    g))79 9 	9r   )r   r   r   r   r   ENTITY_NODEr%   r   rK  r   rt   r   rX  r[  r^  rJ   rB   rI   r\   r   r   r   rI  rI  X  s        JHINHG8 8 8# # #    8 8 8; ; ;: : :9 9 9 9 9r   rI  c                   &    e Zd Zej        ZdZd ZdS )rH  Nc                 @    || _         |                     ||           d S r.   )r   r6  )r   r   r3  r4  s       r   r   zNotation.__init__  s%    ##Hh77777r   )r   r   r   r   r   r%   r   r   r   r   r   rH  rH    s0        !HI8 8 8 8 8r   rH  c                   4    e Zd Zg dZd Zd Zd Zd Zd ZdS )DOMImplementation))core1.0)ri  2.0)ri  N)rD   rj  )rD   rk  )rD   N)ls-loadz3.0)rl  Nc                 L    |dk    rd }|                                 |f| j        v S r   )lower	_featuresrr   s      r   rq   zDOMImplementation.hasFeature  s*    b==G)T^;;r   c                 b   |r&|j         t          j                            d          |                                 }|d u o|d u o|d u  }|s!|rt          j                            d          |rt          |          \  }}|dk    r%|dk    rt          j                            d          |r!|st          j                            d          |                    ||          }|r|	                    |           |	                    |           |r|x|_         |_
        ||_        | |_        |S )Nz(doctype object owned by another DOM treezElement with no namerD   z$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces)rH   rD   rE   WrongDocumentErr_create_documentInvalidCharacterErrr  r   createElementNSrJ   rl   doctyperp   )	r   r   r  ru  r   add_root_elementr   r  r  s	            r   createDocumentz DOMImplementation.createDocument  sz    	<w)5'**:< < <##%% , 4 !4$1T$9!4$+tO5  	F!1 	F '--.DEEE 	% ( 7 7FI#IIIg**+HIII @l @g**>@ @ @)),FFG )(((OOG$$$ 	=9<<G!6!
r   c                 @    t          |          }||_        ||_        |S r.   )r=  r3  r4  )r   r  r3  r4  ru  s        r   createDocumentTypez$DOMImplementation.createDocumentType  s$    }--##r   c                 6    |                      |d           r| S d S r.   )rq   r}   s     r   r~   zDOMImplementation.getInterface  s"    ??7D)) 	K4r   c                     t                      S r.   )Documentr   s    r   rr  z"DOMImplementation._create_document  s    zzr   N)	r   r   r   ro  rq   rw  ry  r~   rr  r   r   r   rh  rh    sq          I< < <
+ + +Z        r   rh  c                   L    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S )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.

    rs  c                     || _         d S r.   rs  rC  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  rF  s      r   r  zElementInfo.getAttributeTypeNS  r  r   c                     dS r  r   r   s    r   r
  zElementInfo.isElementContent  r  r   c                     dS )zQReturns true iff this element is declared to have an EMPTY
        content model.Fr   r   s    r   isEmptyzElementInfo.isEmpty  s	     ur   c                     dS )z7Returns true iff the named attribute is a DTD-style ID.Fr   r  s     r   r   zElementInfo.isId      ur   c                     dS )z<Returns true iff the identified attribute is a DTD-style ID.Fr   rF  s      r   r   zElementInfo.isIdNS  r  r   c                     | j         S r.   rs  r   s    r   rW  zElementInfo.__getstate__  r   r   c                     || _         d S r.   rs  rY  s     r   r[  zElementInfo.__setstate__  s    r   N)r   r   r   r\  r  r   r  r  r
  r  r   r   rW  r[  r   r   r   r~  r~    s          I          
          r   r~  c                     | j         t          j        k    r"| j                                         d | _        d S t          |           r,| j        j                                         d | j        _        d S d S r.   )r%   r   r&   	_id_cacheclear_id_search_stackr   rl   r   s    r   rO   rO     sw    }*** $	d		 2$**,,,-1+++2 2r   c                   l   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<dS ))r|  )
_elem_inforu  r  r0   r  z	#documentNFr   c                 d    d | _         t                      | _        i | _        i | _        d | _        d S r.   )ru  r   r0   r  r  r  r   s    r   r   zDocument.__init__%  s2    "**  $r   c                 p    |j         r|j         |j        f}n|j        }| j                            |          S r.   )r   r   r   r  r(  )r   r  r   s      r   r   zDocument._get_elem_info.  s<     	"&(99CC/C""3'''r   c                     | j         S r.   rW  r   s    r   rX  zDocument._get_actualEncoding5  rD  r   c                     | j         S r.   )ru  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.   rZ  r   s    r   r[  zDocument._get_encoding>  r9  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  r5   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r>t          j                            t          |          dt          |                     |j        |j                            |           |j         t          j	        k    r3| 
                                rt          j                            d          t                              | |          S )Nr>   z two document elements disallowed)r%   rC   rD   rE   rF   rG   rH   rI   r   rf   _get_documentElementrJ   rR  s     r   rJ   zDocument.appendChildM  s    = 666'--.24jjjj$t***EG G G?& O''---=D---((** .'--24 4 4d+++r   c                     	 | j                             |           n,# t          $ r t          j                                        w xY wd x|_        |_        d |_        | j	        |u rd | _	        |S r.   )
r0   r^   rL   rD   rE   rM   rQ   rR   rH   documentElementr_   s     r   rI   zDocument.removeChild]  s    	(O""8,,,, 	( 	( 	('%%'''	(:>>x7"8++#'D r`   c                 L    | j         D ]}|j        t          j        k    r|c S d S r.   )r0   r%   r   rf   rR  s     r   r  zDocument._get_documentElementi  s;    O 	 	D} 111 2	 	r   c                     | j          | j                                          d | _         t                              |            d S r.   )ru  rd   r   r   s    r   rd   zDocument.unlinkn  s=    <#L!!!DLDr   c                    |sd S | j                             d d d           }| j        |_        | j        |_        | j        |_        | j        D ]}t          |||          }|j                            |          sJ |j        	                    |           |j
        t          j        k    r
|j        J n%|j
        t          j        k    r|j        J ||_        ||_        |                     t$          j        j        j        | |           |S r.   )rp   rw  r   r   rt   r0   rk   rl   r{   re   r%   r   r&   r  rS  ru  rH   r   rD   rE   rF  rG  )r   rm   rL  rK  
childclones        r   rn   zDocument.cloneNodet  s    	4#224tDD? 		* 		*A$Qe44J+66u=====##J///"d&888,4444$(???},,, *$)J!!$$SW%<%H%)5	2 	2 	2r   c                 0    t                      }| |_        |S r.   )r   rl   )r   r   s     r   createDocumentFragmentzDocument.createDocumentFragment  s    r   c                 2    t          |          }| |_        |S r.   )rm  rl   )r   r   rN  s      r   createElementzDocument.createElement  s    Gr   c                     t          |t                    st          d          t                      }||_        | |_        |S Nznode contents must be a string)r  r   r?  r   rc   rl   )r   rc   ts      r   createTextNodezDocument.createTextNode  s?    $$$ 	><===FFr   c                     t          |t                    st          d          t                      }||_        | |_        |S r  )r  r   r?  r  rc   rl   r   rc   rU   s      r   createCDATASectionzDocument.createCDATASection  s?    $$$ 	><===NNr   c                 2    t          |          }| |_        |S r.   )r  rl   r  s      r   createCommentzDocument.createComment  s    DMMr   c                 4    t          ||          }| |_        |S r.   )r  rl   )r   r  rc   ps       r   createProcessingInstructionz$Document.createProcessingInstruction  s    !&$//r   c                 @    t          |          }| |_        d|_        |S r   )r   rl   r   )r   r   as      r   createAttributezDocument.createAttribute  s     KKr   c                 Z    t          |          \  }}t          |||          }| |_        |S r.   )r  rm  rl   )r   r   r  r   r   rN  s         r   rt  zDocument.createElementNS  s1    $]33	M<88r   c                 j    t          |          \  }}t          ||||          }| |_        d|_        |S r   )r  r   rl   r   )r   r   r  r   r   r  s         r   createAttributeNSzDocument.createAttributeNS  s:    $]33	i@@r   c                 8    t          ||||          }| |_        |S r.   )rI  rl   )r   r   r3  r4  rJ  rN  s         r   _create_entityzDocument._create_entity  s!    48\::r   c                 6    t          |||          }| |_        |S r.   )rH  rl   )r   r   r3  r4  rK  s        r   _create_notationzDocument._create_notation  s    T8X..r   c                    || j         v r| j         |         S | j        s	| j        sd S | j        }|| j        g}|| _        n|sd S d }|rx|                                }|                    d |j        D                        |                     |          }|r|j	        
                                D ]}|j        rG|                    |j        |j                  r&|| j         |j        <   |j        |k    r|}F|j        s ntP|                    |j                  r'|| j         |j        <   |j        |k    r|}|j        s n3|j        r*|| j         |j        <   |j        |k    r|}|j        dk    r nnF|j        r?|j	        
                                D ]%}|j        r|| j         |j        <   |j        |k    r|}&|n|x|S )Nc                 .    g | ]}|j         t          v |S r   )r%   rN   ).0ri   s     r   
<listcomp>z+Document.getElementById.<locals>.<listcomp>  s2     I I IE"^/GGG  GGGr   r?   )r  r  r   r  r  popextendr0   r   r   r  r   r   r   r   r   r   r   r   )r   r+  stackresultrV   r   rv  s          r   getElementByIdzDocument.getElementById  sN   >"%% 	4#7 	4%=)*E$)D!! 	 4 &	99;;DLL I IT_ I I I J J J &&t,,D * !O2244 " "D( ";;t'8$.II &9=DN4:6#zR//)-%)%9 & %49-- "59tz2:++%)FF!%!5 "!E" "59tz2:++%)FF!1Q66!E% * O2244 * *D{ *59tz2:++%)F!M  &	N r   c                 <    t          | |t                                S r.   r  rC  s     r   r  zDocument.getElementsByTagName  s    .tT8::FFFr   c                 >    t          | ||t                                S r.   r  rF  s      r   r  zDocument.getElementsByTagNameNS
  r  r   c                 8    | j                             ||          S r.   )rp   rq   rr   s      r   ru   zDocument.isSupported  s    "--gw???r   c                     |j         t          j        k    rt          j                            d          |j         t          j        k    rt          j                            d          t          |||           S )Nzcannot import document nodesz!cannot import document type nodes)r%   r   r&   rD   rE   NotSupportedErrrS  rk   )r   rV   rm   s      r   
importNodezDocument.importNode  sb    =D...'))*HIII]d555'))*MNNN4t,,,r   r   c                    g }|r|                     d| d           ||                     d|rdnd d           |                    dd                    |           d|            | j        D ]}|                    ||||           d S )	Nz
encoding="r   zstandalone="yesnoz<?xml version="1.0" re  r  )re   r   r  r0   r'   )	r   r,   r*   r  r+   r   r   declarationsrV   s	            r   r'   zDocument.writexml  s     	: 8X 8 8 8999! O
/Luu O O OPPPLCHH\,B,BLLdLLMMMO 	; 	;DMM&&)T::::	; 	;r   c                    |j         | ur*t          j                            d| d|j                   |j        t
          j        t
          j        fvrt          j                            d          |t          k    rd|v rT|
                    dd          \  }}|dk    r4|t          j        j        k    rt          j                            d          nX|dk    rI|t          j        j        k    r4|j        t
          j        k    rt          j                            d          d }|}nd }d }|j        t
          j        k    r&|j        }||j        }|                    |           nd }||_        ||_        ||_        ||_        |j        t
          j        k    r||_        n5||_        |,|                    |           |r|                    |           |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)rl   rD   rE   rq  r%   r   rf   r  r  r   r   r   r   r   r   r  r   r   r   r   r   r   r}  r  )r   rK  r   r   r   r   r  is_ids           r   
renameNodezDocument.renameNode(  s   ?$&&'***,0DD!//CD D D :d/1DEEE'))JL L L?**d{{$(JJsA$6$6!	''&#'*AAA'..79 9 9 goo&#'*AAA*(;;;'..>@ @ @ 		FI:,,,nG"++A...G %
:***AII AF"((+++ 2..q111 r   )r   r   r   NN)=r   r   r   r  r   rf   r   r   rS  rC   rh  rp   r&   r%   r   r   r   rH   rR   rQ   rK  r   r   rt   r  r  r  r   r   r   rX  r  r  r[  r  r  r  r^  rJ   rI   r  rd   rn   r  r  r  r  r  r  r  rt  r  r  r  r  r  r  ru   r  r'   r  r   r   r   r|  r|  
  s       @I*D,L*D,CE '&((N!HHIJJ$((Ok
 NHJGLKO% % %( ( (# # #         ! ! !  ( ( (  , , , 
 
 
  
    *  
  
      
  
        
  
8 8 8tG G G7 7 7@ @ @- - - KO ; ; ; ; 3 3 3 3 3r   r|  r  z#Top-level element of this document.c                 	   | j                             |          rt          j        j        j        }nt          j        j        j        }| j        t          j	        k    r|
                    | j        | j                  }| j                                        D ]T}|                    |j        |j        |j                   |                    |j        |j                  }|j        |_        U|r0| j        D ](}t+          |||          }|                    |           )nG| j        t          j        k    rH|                                }|r0| j        D ](}t+          |||          }|                    |           )n| j        t          j        k    r|                    | j                  }n| j        t          j        k    r|                    | j                  }n| j        t          j        k    r"|                    | j         | j                  }nQ| j        t          j!        k    r|"                    | j                  }n | j        t          j#        k    r5|$                    | j        | j                  }d|_        | j        |_        n| j        t          j%        k    r| j         |usJ t          j        j        j        }|j&        '                    | j(        | j)        | j*                  }||_         |r:g |j+        _,        g |j-        _,        | j-        j,        D ]o}	t]          |	j        |	j)        |	j*                  }
||
_         |j-        j,        /                    |
           ta          |	d          r|	1                    ||	|
           p| j+        j,        D ]}te          |j        |j)        |j*        |j3                  }|j4        |_4        |j5        |_5        |j6        |_6        ||_         |j+        j,        /                    |           ta          |d          r|1                    |||           n/t          j        7                    dtq          |           z            ta          | d          r| 1                    || |           |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)9rl   r{   rD   rE   rF  rG  NODE_IMPORTEDr%   r   rf   rt  r   r   r   r  r  r   r  r   r   r0   rk   rJ   r@   r  rb   r  rc   r   r  r   r  r  r   r  r  r  rS  rp   ry  r   r3  r4  r?  r  r@  rH  re   r   r   rI  rJ  rK  r   rt   r  rG   )rV   rm   newOwnerDocumentr   rL  rv  r  ri   rU   rK  rM  rN  rO  s                r   rk   rk   a  sK   
 $$%566 :G+7		G+9	}))) 001B15@ @O**,, 	) 	)D  !2DM4:NNN(():DNKKA.AKK 	% % %t-=>>!!!$$$$	$5	5	5 7799 	% % %t-=>>!!!$$$$	$.	(	( //	::	$1	1	1 33DI>>	$:	:	: <<T[=AYH H	$+	+	+ ..ty99	$-	-	- 2243D37=B Bj	$1	1	1!)99999G+9	 /BBIt}dm5 5. 	D"$EN#%EO ^( F F#AJ
AJGG)9&$++H5551788 F--iHEEE]' 	D 	D
AJ
 !0 0()(8%"#*!"'7$#**62221788 D--iFCCC
 g%%&<tDzz&IJJJ
 t.// =$$Ye<<<Lr   c                 l    |                      dd          }t          |          dk    r|S d |d         fS )Nr   r?      r   )r   r  )r  fieldss     r   r  r    s<      a((F
6{{afQi  r   c                      | |i |}|                                 \  }}|                    |           |                                 |S r.   )getEvent
expandNoder  )funcargskwargseventstoktyperootNodes         r   _do_pulldom_parser    sP    T4"6""F))GX
h
LLNNNOr   c                     ||sddl m} |                    |           S ddl m} t	          |j        | f||d          S )z3Parse a file into a DOM by filename or file object.Nr   expatbuilderpulldom)parserbufsize)xml.domr  parser  r  )filer  r  r  r  s        r   r  r    sh    ~g~((((((!!$'''###### '224 4 	4r   c                 z    |ddl m} |                    |           S ddl m} t	          |j        | fd|i          S )z&Parse a file into a DOM from a string.Nr   r  r  r  )r  r  parseStringr  r  )stringr  r  r  s       r   r  r    sb    ~((((((''///###### !4vi"*F!35 5 	5r   c                     | rTt          | t                    rt          j        |           } | D ](\  }}t          j                            ||          s d S )t          j        S r.   )r  r   r   _parse_feature_stringr|  rp   rq   )featuresfvs      r   getDOMImplementationr     so     h$$ 	>3H==H 	 	DAq*55a;; tt""r   r   r.   )7r\  r!   r  rD   r   r   r   r   xml.dom.minicompatxml.dom.xmlbuilderr   r	   rE   r   rf   r   rN   defpropertyrY   r   r   r   r   r   r   objectr  AttributeListr`  r  rm  r  r  r  r  r   r	  r  r  r  r  r1  r=  rI  rH  rh  r~  rO   r|  rk   r  r  r  r  r   r   r   r   <module>r     s   " 
			  J J J J J J J J J J J J         > > > > > > > >  GL5GL>@ t t t t t37< t t tl D,$@ A A A A D+$? @ @ @ @ D+$H I I I I          % % % % %t % % %$y8 y8 y8 y8 y84 y8 y8 y8v D&$F G G G G D+$M N N N N D,$E F F F Fa? a? a? a? a?6 a? a? a?F L(68 8 8 8     v   ( 8D$L" L" L" L" L"d L" L" L"\ G\<> > > > G[79 9 9 9	  	  	 &; &; &; &; &; &; &; &;RN N N N NIt N N N4EC EC EC EC ECIt EC EC ECN M8)E F F F FS+ S+ S+ S+ S+= S+ S+ S+j D0./ / / / D+@B B B B    B B B B Bm B B B	3 	3 	3 	3 	34 	3 	3 	3< < < < <V < < <| *H8: : : :       : : : : ::y$ : : :x&9 &9 &9 &9 &9Z &9 &9 &9P8 8 8 8 8z9d 8 8 8M M M M M+ M M M^( ( ( ( (& ( ( (T2 2 2Q Q Q Q QtZ Q Q Qf
 H'57 7 7 7O O Od! ! !  4 4 4 45 5 5 5# # # # # #r   