MINI MINI MANI MO
3
  \                @   s  d Z ddlZddlZddlmZmZmZmZ ddlT ddl	m
Z
mZ ejj
jejj
jfZG dd dejj
Z
ee
dd	d
 ee
ddd
 ee
d
dd
 dd Zdd Zdd Zdd Zdd ZG dd de
ZG dd de
Zeeddd
 eed
dd
 eed d!d
 G d"d# d#eZeed$d%d
 eZG d&d' d'eZeddZG d(d) d)e
Zeed*d+d
 eed
d,d
 d-d. ZG d/d0 d0Z G d1d2 d2e e
Z!G d3d4 d4e e
Z"ee"d$d5d
 G d6d7 d7e"Z#ee#d8d9d
 ee#d:d;d
 d<d= Z$d>d? Z%G d@dA dAe"Z&G dBdC dCe#Z'G dDdE dEeZ(ee(d$dFd
 G dGdH dHZ)G dIdJ dJe)e e
Z*G dKdL dLe)e
Z+G dMdN dNe)e e
Z,G dOdP dPe
Z-G dQdR dReZ.dSdT Z/G dUdV dVe
eZ0ee0dWdXd
 dYdZ Z1d[d\ Z2d]d^ Z3ded_d`Z4dfdadbZ5dgdcddZ6dS )hac  Simple implementation of the Level 1 DOM.
Namespaces and other minor Level 2 features are also supported.
parse("foo.xml")
parseString("<foo><bar/></foo>")
Todo:
=====
 * convenience methods for getting elements and text.
 * more testing
 * bring some of the writer and linearizer code into conformance with this
        interface
 * SAX 2 namespaces
    N)EMPTY_NAMESPACEEMPTY_PREFIXXMLNS_NAMESPACEdomreg)*)DOMImplementationLS
DocumentLSc               @   s   e Zd ZdZdZdZdZdZeZ	dd Z
d2ddZd3dd	Zd
d Z
dd
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Z dS )4NodeNc             C   s   dS )NT )selfr
   r
   '/usr/lib64/python3.6/xml/dom/minidom.py__bool__+   s    z
Node.__bool__c             C   s   | j dd|S )N )toprettyxml)r   encodingr
   r
   r   toxml.   s    z
Node.toxml	
c             C   sx   |d krt j }nt jt j |ddd}| jtjkrH| j|d||| n| j|d|| |d krh|j S |j	 j S d S )Nxmlcharrefreplacer   )r   errorsnewliner   )
ioStringIO
TextIOWrapperBytesIOnodeTyper	   
DOCUMENT_NODEwritexmlgetvaluedetach)r   indentnewlr   writerr
   r
   r   r   1   s    
zNode.toprettyxmlc             C   s
   t | jS )N)bool
childNodes)r   r
   r
   r   
hasChildNodesC   s    zNode.hasChildNodesc             C   s   | j S )N)r$   )r   r
   r
   r   _get_childNodesF   s    zNode._get_childNodesc             C   s   | j r| j d S d S )Nr   )r$   )r   r
   r
   r   _get_firstChildI   s    zNode._get_firstChildc             C   s   | j r| j d S d S )N   )r$   )r   r
   r
   r   _get_lastChildM   s    zNode._get_lastChildc             C   s  |j | jkr0xt|jD ]}| j|| qW |S |j | jkrXtjjdt	|t	| f |j
d k	rn|j
j| |d kr| j| ny| jj
|}W n tk
r   tjj Y nX |j tkrt|  | jj|| ||_||_|r| j|d  }||_||_nd |_| |_
|S )Nz%s cannot be child of %sr(   )r   DOCUMENT_FRAGMENT_NODEtupler$   insertBefore_child_node_typesxmldomHierarchyRequestErrrepr
parentNoderemoveChildappendChildindex
ValueErrorNotFoundErr_nodeTypes_with_children_clear_id_cacheinsertnextSiblingpreviousSibling)r   newChildrefChildcr6   noder
   r
   r   r-   Q   s6    
zNode.insertBeforec             C   s   |j | jkr.xt|jD ]}| j| qW |S |j | jkrXtjjdt	|t	| f n|j t
krjt|  |jd k	r|jj
| t| | d |_|S )Nz%s cannot be child of %s)r   r+   r,   r$   r5   r.   r/   r0   r1   r2   r9   r:   r3   r4   
_append_childr<