3 �L�je�@s�ddlZddlZddlmZmZmZmZddlTddlm Z m Z ej j j ej j jfZGdd�dej j �Z ee ddd �ee d d d �ee d d d �dd�Zdd�Zdd�Zdd�ZGdd�de �ZGdd�de �Zeeddd �eed dd �eeddd �Gdd �d e�Zeed!d"d �eZGd#d$�d$e�Zedd�ZGd%d&�d&e �Zeed'd(d �eed d)d �d*d+�ZGd,d-�d-�ZGd.d/�d/ee �ZGd0d1�d1ee �Z ee d!d2d �Gd3d4�d4e �Z!ee!d5d6d �ee!d7d8d �d9d:�Z"d;d<�Z#Gd=d>�d>e �Z$Gd?d@�d@e!�Z%GdAdB�dBe�Z&ee&d!dCd �GdDdE�dE�Z'GdFdG�dGe'ee �Z(GdHdI�dIe'e �Z)GdJdK�dKe'ee �Z*GdLdM�dMe �Z+GdNdO�dOe�Z,dPdQ�Z-GdRdS�dSe e �Z.ee.dTdUd �dVdW�Z/dXdY�Z0dZd[�Z1dbd\d]�Z2dcd^d_�Z3ddd`da�Z4dS)e�N)�EMPTY_NAMESPACE� EMPTY_PREFIX�XMLNS_NAMESPACE�domreg)�*)�DOMImplementationLS� DocumentLSc@s�eZdZdZdZdZdZdZeZ dd�Z d2dd�Z d3dd �Z d d �Z d d �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)4�NodeNcCsdS)NT�)�selfr r �'/usr/lib64/python3.6/xml/dom/minidom.py�__bool__+sz Node.__bool__cCs|jdd|�S)N�)� toprettyxml)r �encodingr r r �toxml.sz Node.toxml� � cCsx|dkrtj�}ntjtj�|ddd�}|jtjkrH|j|d|||�n|j|d||�|dkrh|j�S|j �j�SdS)N�xmlcharrefreplacer)r�errors�newliner) �io�StringIO� TextIOWrapper�BytesIO�nodeTyper � DOCUMENT_NODE�writexml�getvalue�detach)r �indent�newlr�writerr r r r1s   zNode.toprettyxmlcCs t|j�S)N)�bool� childNodes)r r r r � hasChildNodesCszNode.hasChildNodescCs|jS)N)r$)r r r r �_get_childNodesFszNode._get_childNodescCs|jr|jdSdS)Nr)r$)r r r r �_get_firstChildIszNode._get_firstChildcCs|jr|jdSdS)N������)r$)r r r r �_get_lastChildMszNode._get_lastChildc Cs|j|jkr0xt|j�D]}|j||�qW|S|j|jkrXtjjdt |�t |�f��|j dk rn|j j |�|dkr�|j |�n�y|jj |�}Wntk r�tjj��YnX|jtkr�t|�|jj||�||_||_|r�|j|d}||_||_nd|_||_ |S)Nz%s cannot be child of %sr()r�DOCUMENT_FRAGMENT_NODE�tupler$� insertBefore�_child_node_types�xml�dom�HierarchyRequestErr�repr� parentNode� removeChild� appendChild�index� ValueError� NotFoundErr�_nodeTypes_with_children�_clear_id_cache�insert� nextSibling�previousSibling)r �newChild�refChild�cr6�noder r r r-Qs6      zNode.insertBeforecCs�|j|jkr.xt|j�D]}|j|�qW|S|j|jkrXtjjdt |�t |�f��n|jt krjt |�|j dk r�|j j |�t||�d|_|S)Nz%s cannot be child of %s)rr+r,r$r5r.r/r0r1r2r9r:r3r4� _append_childr<)r rAr@r r r r5qs      zNode.appendChildc Cs|j|jkr(|j}|j|�|j||�S|j|jkrPtjjdt |�t |�f��||kr\dS|j dk rr|j j|�y|j j |�}Wnt k r�tjj��YnX||j |<||_ d|_ |jtks�|jtkr�t|�|j|_|j|_d|_d|_|jr�||j_|j�r||j_|S)Nz%s cannot be child of %s)rr+r<r4r-r.r/r0r1r2r3r$r6r7r8r9r:r=)r r>�oldChildr?r6r r r � replaceChild�s<         zNode.replaceChildc Cs�y|jj|�Wntk r.tjj��YnX|jdk rD|j|j_|jdk rX|j|j_d|_|_|jt krvt |�d|_ |S)N) r$�remover7r/r0r8r<r=rr9r:r3)r rCr r r r4�s      zNode.removeChildcCs�g}x�|jD]�}|jtjkr�|jsL|r2|j|d_|jrB|j|j_|j�q�|r�|dj|jkr�|d}|j|j|_|j|_|jr�||j_|j�q�|j|�q |j|�|jtj kr |j �q W||jdd�<dS)Nr(r)r)r)) r$rr � TEXT_NODE�datar<r=�unlink�append� ELEMENT_NODE� normalize)r �L�childrAr r r rK�s*          zNode.normalizecCst|||jp|�S)N)� _clone_node� ownerDocument)r �deepr r r � cloneNode�szNode.cloneNodecCs|jjj||�S)N)rO�implementation� hasFeature)r �feature�versionr r r � isSupported�szNode.isSupportedcCsdS)Nr )r r r r �_get_localName�szNode._get_localNamecCs||kS)Nr )r �otherr r r � isSameNode�szNode.isSameNodecCs|j|d�r|SdSdS)N)rV)r rTr r r � getInterface�s zNode.getInterfacec Cs,y|j|dSttfk r&dSXdS)Nr)� _user_data�AttributeError�KeyError)r �keyr r r � getUserData�szNode.getUserDatac Csnd}y |j}Wntk r,i}||_YnX||krB||d}|dkr^d}|dk rj||=n ||f||<|S)Nr)r[r\)r r^rG�handler�old�dr r r � setUserData�s    zNode.setUserDatacCsHt|d�rDx8t|jj��D]&\}\}}|dk r|j|||||�qWdS)Nr[)�hasattr�listr[�itemsZhandle)r � operation�src�dstr^rGr`r r r �_call_user_data_handler�s zNode._call_user_data_handlercCsBd|_|_|jr2x|jD] }|j�qWt�|_d|_d|_dS)N)r3rOr$rH�NodeListr=r<)r rMr r r rHs   z Node.unlinkcCs|S)Nr )r r r r � __enter__szNode.__enter__cCs |j�dS)N)rH)r ZetZev�tbr r r �__exit__sz Node.__exit__)N)rrN)!�__name__� __module__� __qualname__� namespaceURIr3rOr<r=r�prefixr rrr%r&r'r*r-r5rDr4rKrQrVrWrYrZr_rcrjrHrlrnr r r r r "s:      r � firstChildzFirst child node, or None.)�doc� lastChildzLast child node, or None.� localNamez"Namespace-local name of this node.cCs2|j}|r|d}||_||_|j|�||_dS)Nr(r))r$r=r<rIr3)r rAr$Zlastr r r rBs rBcCs6|r2|jdd�jdd�jdd�jdd�}|j|�dS) N�&z&�z>)�replace�write)r"rGr r r � _write_data'sr~cCsHxB|jD]8}|jtjkr4|dks*|j|kr4|j|�t|||�qW|S)Nr)r$rr rJ�tagNamerI�_get_elements_by_tagName_helper)�parent�name�rcrAr r r r�.s    r�cCs\xV|jD]L}|jtjkr|dks*|j|krF|dks<|j|krF|j|�t||||�qW|S)Nr)r$rr rJrwrrrI�"_get_elements_by_tagName_ns_helper)r�ZnsURIrwr�rAr r r r�6s   r�c@sJeZdZejZdZdZdZdZ ej ej ej ej ejejejfZdd�ZdS)�DocumentFragmentz#document-fragmentNcCs t�|_dS)N)rkr$)r r r r �__init__MszDocumentFragment.__init__)rorprqr r+r�nodeName� nodeValue� attributesr3rJrF�CDATA_SECTION_NODE�ENTITY_REFERENCE_NODE�PROCESSING_INSTRUCTION_NODE� COMMENT_NODE� NOTATION_NODEr.r�r r r r r�?sr�c@s�eZdZd#ZejZd Zd Zd Z ej ej fZ e d d fd d �Zd d�Zdd�Zdd�Zdd�Zeee�ZZdd�Zdd�Zeee�ZZdd�Zdd�Zeee�Zdd�Zdd �Zd!d"�Zd S)$�Attr�_name�_valuerr�_prefixr$� _localNamerO� ownerElementNFcCs8d|_d|_||_||_||_t�|_|jjt��dS)N) r�rOr�rrr�rkr$rI�Text)r �qNamerrrwrsr r r r�[sz Attr.__init__c Cs.y|jStk r(|jjdd�dSXdS)N�:r(r))r�r\r��split)r r r r rWiszAttr._get_localNamecCs|jS)N)� specified)r r r r �_get_specifiedoszAttr._get_specifiedcCs|jS)N)r�)r r r r � _get_namerszAttr._get_namecCs||_|jdk rt|j�dS)N)r�r�r:)r �valuer r r � _set_nameus zAttr._set_namecCs|jS)N)r�)r r r r � _get_value|szAttr._get_valuecCs6||_||jd_|jdk r&t|j�||jd_dS)Nr)r�r$rGr�r:)r r�r r r � _set_values    zAttr._set_valuecCs|jS)N)r�)r r r r � _get_prefix�szAttr._get_prefixcCsd|j}|dkr&|r&|tkr&tjjd��||_|dkr<|j}nd||jf}|jrZt|j�||_ dS)N�xmlnsz5illegal use of 'xmlns' prefix for the wrong namespacez%s:%s) rrrr/r0� NamespaceErrr�rwr�r:r�)r rsZnsuriZnewNamer r r � _set_prefix�s  zAttr._set_prefixcCsz|j}|dk rR|j|j=|j|j|jf=|jrRd|_|jd8_|jj d8_ x|j D] }|j �qZW|j dd�=dS)NFr() r��_attrsr��_attrsNSrrrw�_is_id�_magic_id_nodesrO�_magic_id_countr$rH)r �elemrMr r r rH�s   z Attr.unlinkcCsf|jr dS|j}|j}|dks&|dkr*dS|j|�}|dkr@dS|jrV|j|j|j�S|j|j�SdS)NTF) r�rOr��_get_elem_inforr�isIdNSrw�isIdr�)r rur��infor r r � _get_isId�s zAttr._get_isIdcCs\|j}|j}|dks|dkr tS|j|�}|dkr6tS|jrL|j|j|j�S|j|j�SdS)N) rOr��_no_typer�rr�getAttributeTypeNSrw�getAttributeTyper�)r rur�r�r r r �_get_schemaType�s zAttr._get_schemaType)r�r�rrr�r$r�rOr�) rorprq� __slots__r �ATTRIBUTE_NODErr�r�r�rFr�r.rr�rWr�r�r��propertyr�r�r�r�r�r�r�r�rsrHr�r�r r r r r�Qs.   r�r�z True if this attribute is an ID.z'Namespace-local name of this attribute.� schemaTypezSchema type for this attribute.c@s�eZdZd;Zdd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dd�Z dd�Z dd�Z dz<%s %r>)r�� __class__ror�)r r r r �__repr__�s  zTypeInfo.__repr__cCs|jS)N)r�)r r r r r��szTypeInfo._get_namecCs|jS)N)r�)r r r r �_get_namespace�szTypeInfo._get_namespaceN)r�r�)rorprqr�r�r�r�r�r r r r r�ys r�c @s eZdZdDZejZd ZeZ dZ ejej ej ej ejejfZed d fdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�ZeZd'd(�Zd)d*�Z d+d,�Z!e!Z"d-d.�Z#d/d0�Z$d1d2�Z%d3d4�Z&d5d6�Z'dEd8d9�Z(d:d;�Z)dd?�Z+d@dA�Z,dBdC�Z-d S)F�ElementrOr3rr�rsrrr�r$r�r�r<r=NrcCsHd|_d|_||_|_||_||_t�|_d|_|_ d|_ d|_ dS)N) rOr3rr�rsrrrkr$r<r=r�r�)r rrrrsrwr r r r��s  zElement.__init__cCs|jdkri|_i|_dS)N)r�r�)r r r r �_ensure_attributes�s zElement._ensure_attributesc Cs.y|jStk r(|jjdd�dSXdS)Nr�r(r))r�r\rr�)r r r r rW�szElement._get_localNamecCs|jS)N)r)r r r r � _get_tagName�szElement._get_tagNamecCsD|jdk r*xt|jj��D] }|j�qWd|_d|_tj|�dS)N)r�rer�rHr�r )r �attrr r r rH�s   zElement.unlinkc Cs4|jdkrdSy |j|jStk r.dSXdS)Nr)r�r�r])r r�r r r � getAttribute�s   zElement.getAttributec Cs8|jdkrdSy|j||fjStk r2dSXdS)Nr)r�r�r])r rrrwr r r �getAttributeNS�s  zElement.getAttributeNScCsV|j|�}|dkr4t|�}||_|j|_|j|�n||jkrR||_|jrRt|�dS)N)�getAttributeNoder�r�rO�setAttributeNoder�r:)r r�r�r�r r r � setAttribute�s   zElement.setAttributecCs�t|�\}}|j||�}|dkrHt||||�}||_|j|_|j|�n4||jkrf||_|jrft|�|j|kr|||_||_ dS)N) �_nssplit�getAttributeNodeNSr�r�rOr�r�r:rsr�)r rr� qualifiedNamer�rs� localnamer�r r r �setAttributeNS�s     zElement.setAttributeNScCs|jdkrdS|jj|�S)N)r�r�)r Zattrnamer r r r��s zElement.getAttributeNodecCs|jdkrdS|jj||f�S)N)r�r�)r rrrwr r r r��s zElement.getAttributeNodeNScCs�|jd|fkrtjjd��|j�|jj|jd�}|dk rD|j|�|j j|j |j fd�}|dk rt||k rt|j|�t ||�||k r�|S||k r�|SdS)Nzattribute node already owned) r�r/r0ZInuseAttributeErrr�r�r�r��removeAttributeNoder�rrrw�_set_attribute_node)r r�Zold1Zold2r r r r�s    zElement.setAttributeNodec CsP|jdkrtjj��y|j|}Wntk r@tjj��YnX|j|�dS)N)r�r/r0r8r�r]r�)r r�r�r r r �removeAttributes  zElement.removeAttributec CsT|jdkrtjj��y|j||f}Wntk rDtjj��YnX|j|�dS)N)r�r/r0r8r]r�)r rrrwr�r r r �removeAttributeNS s  zElement.removeAttributeNSc Cs^|dkrtjj��y|j|jWntk r@tjj��YnXt|�|j�|j|_dS)N) r/r0r8r�r�r]r:rHrO)r rAr r r r�)s zElement.removeAttributeNodecCs|jdkrdS||jkS)NF)r�)r r�r r r � hasAttribute8s zElement.hasAttributecCs|jdkrdS||f|jkS)NF)r�)r rrrwr r r �hasAttributeNS=s zElement.hasAttributeNScCst||t��S)N)r�rk)r r�r r r �getElementsByTagNameBszElement.getElementsByTagNamecCst|||t��S)N)r�rk)r rrrwr r r �getElementsByTagNameNSEszElement.getElementsByTagNameNScCsd|jt|�fS)Nz)rr�)r r r r r�IszElement.__repr__rc Cs|j|d|j�|j�}t|j��}x4|D],}|jd|�t|||j�|jd�q.W|jr�|jd�t|j�dkr�|jdj t j kr�|jdj |ddd�n8|j|�x"|jD]}|j |||||�q�W|j|�|jd|j|f�n|jd |�dS) Nryz %s="rzr{r(rrz%sz/>%s) r}r�_get_attributes�sortedr�r~r�r$r�rr rFr) r r"r � addindentr!r�Za_namesZa_namerAr r r rLs$      zElement.writexmlcCs|j�t|j|j|�S)N)r�r�r�r�)r r r r r�gszElement._get_attributescCs|jr dSdSdS)NTF)r�)r r r r � hasAttributeskszElement.hasAttributescCs|j|�}|j|�dS)N)r��setIdAttributeNode)r r��idAttrr r r �setIdAttributess zElement.setIdAttributecCs|j||�}|j|�dS)N)r�r�)r rrrwr�r r r �setIdAttributeNSws zElement.setIdAttributeNScCsl|dks|j|j� r tjj��t|�dk r6tjj��|jshd|_|jd7_|j j d7_ t |�dS)NTr() rYr�r/r0r8�_get_containing_entref�NoModificationAllowedErrr�r�rOr�r:)r r�r r r r�{s   zElement.setIdAttributeNode) rOr3rr�rsrrr�r$r�r�r<r=)rrr).rorprqr�r rJrr�r�r�r�r�r�rFr�r�r.rr�r�rWr�rHr�r�r�r�r�r�r�ZsetAttributeNodeNSr�r�r�ZremoveAttributeNodeNSr�r�r�r�r�rr�r�rrr�r r r r r��sT      r�r�z*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.cCs8t|�|j�||j|j<||j|j|jf<||_dS)N)r:r�r�r�r�rrrwr�)�elementr�r r r r��s  r�c@sbeZdZfZdZe�ZdZdZdd�Z dd�Z dd�Z dd �Z d d �Z d d �Zdd�Zdd�ZdS)� ChildlessNcCsdS)Nr )r r r r r'�szChildless._get_firstChildcCsdS)Nr )r r r r r*�szChildless._get_lastChildcCstjj|jd��dS)Nz nodes cannot have children)r/r0r1r�)r rAr r r r5�szChildless.appendChildcCsdS)NFr )r r r r r%�szChildless.hasChildNodescCstjj|jd��dS)Nz nodes do not have children)r/r0r1r�)r r>r?r r r r-�szChildless.insertBeforecCstjj|jd��dS)Nz nodes do not have children)r/r0r8r�)r rCr r r r4�szChildless.removeChildcCsdS)Nr )r r r r rK�szChildless.normalizecCstjj|jd��dS)Nz nodes do not have children)r/r0r1r�)r r>rCr r r rD�szChildless.replaceChild)rorprqr�r�Z EmptyNodeListr$rtrvr'r*r5r%r-r4rKrDr r r r r�src@s\eZdZejZdZdd�Zdd�Zdd�Z e ee �Z d d �Z d d �Z e e e �Zddd�ZdS)�ProcessingInstruction�targetrGcCs||_||_dS)N)rrG)r rrGr r r r��szProcessingInstruction.__init__cCs|jS)N)rG)r r r r �_get_nodeValue�sz$ProcessingInstruction._get_nodeValuecCs ||_dS)N)rG)r r�r r r �_set_nodeValue�sz$ProcessingInstruction._set_nodeValuecCs|jS)N)r)r r r r � _get_nodeName�sz#ProcessingInstruction._get_nodeNamecCs ||_dS)N)r)r r�r r r � _set_nodeName�sz#ProcessingInstruction._set_nodeNamercCs|jd||j|j|f�dS)Nz %s%s)r}rrG)r r"r r�r!r r r r�szProcessingInstruction.writexmlN)rrG)rrr)rorprqr r�rr�r�rr r�r�r r r�rr r r r r�s  rc@sreZdZdZdd�Zdd �ZeZd d �Zd d �Ze ee�Z Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�ZdS)� CharacterData�_datarOr3r=r<cCs,d|_|_d|_|_d|_tj|�dS)Nr)rOr3r=r<r r r�)r r r r r��s  zCharacterData.__init__cCs t|j�S)N)r�rG)r r r r r��szCharacterData._get_lengthcCs|jS)N)r )r r r r � _get_data�szCharacterData._get_datacCs ||_dS)N)r )r rGr r r � _set_data�szCharacterData._set_datacCs6|j}t|�dkrd}nd}d|jj|dd�|fS)N� z...rzr)rGr�r�ro)r rGZ dotdotdotr r r r��s  zCharacterData.__repr__cCsT|dkrtjjd��|t|j�kr.tjjd��|dkrBtjjd��|j|||�S)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negative)r/r0� IndexSizeErrr�rG)r �offset�countr r r � substringData�s   zCharacterData.substringDatacCs|j||_dS)N)rG)r �argr r r � appendDataszCharacterData.appendDatacCsZ|dkrtjjd��|t|j�kr.tjjd��|rVd|jd|�||j|d�f|_dS)Nrzoffset cannot be negativez#offset cannot be beyond end of dataz%s%s%s)r/r0rr�rG)r rrr r r � insertDatas  zCharacterData.insertDatacCsl|dkrtjjd��|t|j�kr.tjjd��|dkrBtjjd��|rh|jd|�|j||d�|_dS)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negative)r/r0rr�rG)r rrr r r � deleteData s   zCharacterData.deleteDatacCsr|dkrtjjd��|t|j�kr.tjjd��|dkrBtjjd��|rnd|jd|�||j||d�f|_dS)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negativez%s%s%s)r/r0rr�rG)r rrrr r r � replaceDatas   zCharacterData.replaceDataN)r rOr3r=r<)rorprqr�r�r�r�rrr�rGr�r�rrrrrr r r r r �s    r zLength of the string data.c@sHeZdZfZejZdZdZdd�Z ddd�Z dd �Z d d �Z d d �Z dS)r�z#textNcCs�|dks|t|j�kr"tjjd��|j�}|j|d�|_|j|_|j}|jr~||jj kr~|dkrp|jj |�n|jj ||�|jd|�|_|S)Nrzillegal offset value) r�rGr/r0rr�rOr<r3r$r5r-)r rZnewText�nextr r r � splitText+s zText.splitTextrcCst|d||j|f�dS)Nz%s%s%s)r~rG)r r"r r�r!r r r r:sz Text.writexmlcCs�|jg}|j}x6|dk rD|jtjtjfkr@|jd|j�|j}qPqW|j}x4|dk r�|jtjtjfkr||j|j�|j}qNPqNWdj |�S)Nrr) rGr=rr rFr�r;r<rI�join)r rLr�r r r �_get_wholeText?s   zText._get_wholeTextcCs�|j}|j}x6|dk rB|jtjtjfkr>|j}|j|�|}qPqW|j}|sX|j|�x6|dk r�|jtjtjfkr�|j}|j|�|}qZPqZW|r�||_|SdSdS)N) r3r=rr rFr�r4r<rG)r Zcontentr�r�rr r r �replaceWholeTextQs*     zText.replaceWholeTextcCsF|jj�rdSt|�}|dkr"dS|jj|�}|dkr:dS|j�SdS)NF)rG�strip�_get_containing_elementrOr��isElementContent)r r�r�r r r �!_get_isWhitespaceInElementContentms  z&Text._get_isWhitespaceInElementContent)rrr)rorprqr�r rFrr�r�rrrrr"r r r r r�$s r�ZisWhitespaceInElementContentzKTrue iff this text node contains only whitespace and is in element content.Z wholeTextz.The text of all logically-adjacent text nodes.cCs.|j}x"|dk r(|jtjkr |S|j}qWdS)N)r3rr rJ)rAr@r r r r �s    r cCs.|j}x"|dk r(|jtjkr |S|j}qWdS)N)r3rr r�)rAr@r r r r�s    rc@s(eZdZejZdZdd�Zddd�ZdS) �Commentz#commentcCstj|�||_dS)N)r r�r )r rGr r r r��s zComment.__init__rcCs,d|jkrtd��|jd||j|f�dS)Nz--z%'--' is not allowed in a comment nodez %s%s)rGr7r})r r"r r�r!r r r r�s zComment.writexmlN)rrr) rorprqr r�rr�r�rr r r r r#�sr#c@s$eZdZfZejZdZddd�ZdS)� CDATASectionz#cdata-sectionrcCs,|jjd�dkrtd��|jd|j�dS)Nz]]>rz$']]>' not allowed in a CDATA sectionz)rG�findr7r})r r"r r�r!r r r r�szCDATASection.writexmlN)rrr) rorprqr�r r�rr�rr r r r r$�sr$c@s|eZdZdZffdd�Zdd�Zdd�Zdd �Zd d �Zd d �Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�ZdS)�ReadOnlySequentialNamedNodeMap�_seqcCs ||_dS)N)r')r �seqr r r r��sz'ReadOnlySequentialNamedNodeMap.__init__cCs t|j�S)N)r�r')r r r r r��sz&ReadOnlySequentialNamedNodeMap.__len__cCs t|j�S)N)r�r')r r r r r��sz*ReadOnlySequentialNamedNodeMap._get_lengthcCs"x|jD]}|j|kr|SqWdS)N)r'r�)r r�r�r r r r��s  z+ReadOnlySequentialNamedNodeMap.getNamedItemcCs,x&|jD]}|j|kr|j|kr|SqWdS)N)r'rrrw)r rrrwr�r r r r��s z-ReadOnlySequentialNamedNodeMap.getNamedItemNScCs4t|t�r|j|�}n |j|�}|dkr0t|��|S)N)r�r,r�r�r])r Z name_or_tuplerAr r r r��s    z*ReadOnlySequentialNamedNodeMap.__getitem__c Cs0|dkr dSy |j|Stk r*dSXdS)Nr)r'r�)r r6r r r r��s  z#ReadOnlySequentialNamedNodeMap.itemcCstjjd��dS)Nz"NamedNodeMap instance is read-only)r/r0r)r r�r r r r��sz.ReadOnlySequentialNamedNodeMap.removeNamedItemcCstjjd��dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rrrwr r r r��sz0ReadOnlySequentialNamedNodeMap.removeNamedItemNScCstjjd��dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rAr r r r��sz+ReadOnlySequentialNamedNodeMap.setNamedItemcCstjjd��dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rAr r r r��sz-ReadOnlySequentialNamedNodeMap.setNamedItemNScCs|jgS)N)r')r r r r r��sz+ReadOnlySequentialNamedNodeMap.__getstate__cCs|d|_dS)Nr)r')r r�r r r r��sz+ReadOnlySequentialNamedNodeMap.__setstate__N)r')rorprqr�r�r�r�r�r�r�r�r�r�r�r�r�r�r r r r r&�s  r&z&Number of entries in the NamedNodeMap.c@s(eZdZd Zdd�Zdd�Zdd�Zd S) � Identified�publicId�systemIdcCs||_||_dS)N)r*r+)r r*r+r r r �_identified_mixin_init�sz!Identified._identified_mixin_initcCs|jS)N)r*)r r r r � _get_publicId�szIdentified._get_publicIdcCs|jS)N)r+)r r r r � _get_systemId�szIdentified._get_systemIdN)r*r+)rorprqr�r,r-r.r r r r r)�sr)c@sHeZdZejZdZdZdZdZ dZ dd�Z dd�Z dd�Z d d d �ZdS) � DocumentTypeNcCs2t�|_t�|_|r&t|�\}}||_|j|_dS)N)r&�entities� notationsr�r�r�)r r�rsr�r r r r�s  zDocumentType.__init__cCs|jS)N)�internalSubset)r r r r �_get_internalSubset sz DocumentType._get_internalSubsetcCs�|jdkr�td�}|j|_|j|_tjjj}|r�g|j_ g|j _ x>|j j D]2}t |j|j |j �}|j j j|�|j|||�qJWxZ|jj D]N}t|j|j |j |j�}|j|_|j|_|j|_|jj j|�|j|||�q�W|j|||�|SdSdS)N)rOr/r�r�r/r0�UserDataHandler� NODE_CLONEDr0r'r1�Notationr*r+rIrj�Entity� notationName�actualEncodingrrU)r rP�clonergr��notation�e�entityr r r rQs.  zDocumentType.cloneNodercCs�|jd�|j|j�|jr8|jd||j||jf�n|jrR|jd||jf�|jdk r||jd�|j|j�|jd�|jd|�dS)Nz r r r r5PszEntity.appendChildcCstjjd��dS)Nz+cannot insert children below an entity node)r/r0r1)r r>r?r r r r-TszEntity.insertBeforecCstjjd��dS)Nz*cannot remove children from an entity node)r/r0r1)r rCr r r r4XszEntity.removeChildcCstjjd��dS)Nz)cannot replace children of an entity node)r/r0r1)r r>rCr r r rD\szEntity.replaceChild)rorprqr�r Z ENTITY_NODErr�r9rrUr�r@rArBr5r-r4rDr r r r r78sr7c@seZdZejZdZdd�ZdS)r6NcCs||_|j||�dS)N)r�r,)r r�r*r+r r r r�dszNotation.__init__)rorprqr r�rr�r�r r r r r6`sr6c @sHeZdZddddddddgZdd �Zd d �Zd d �Zdd�Zdd�ZdS)�DOMImplementation�core�1.0�2.0Nr/�ls-load�3.0cCs|dkr d}|j�|f|jkS)Nr)�lower� _features)r rTrUr r r rStszDOMImplementation.hasFeaturec Cs�|r|jdk rtjjd��|j�}|dko8|dko8|dk }| rR|rRtjjd��|r�t|�\}}|dkr~|dkr~tjjd��|r�| r�tjjd��|j||�}|r�|j |�|j |�|r�||_|_ ||_ ||_ |S)Nz(doctype object owned by another DOM treezElement with no namer/z$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces) r3r/r0�WrongDocumentErr�_create_documentZInvalidCharacterErrr�r��createElementNSr5rO�doctyperR) r rrr�rNruZadd_root_elementrsr�rr r r �createDocumentys4         z DOMImplementation.createDocumentcCst|�}||_||_|S)N)r/r*r+)r r�r*r+rNr r r �createDocumentType�sz$DOMImplementation.createDocumentTypecCs|j|d�r|SdSdS)N)rS)r rTr r r rZ�s zDOMImplementation.getInterfacecCst�S)N)�Document)r r r r rL�sz"DOMImplementation._create_document)rDrE)rDrF)rDN)r/rE)r/rF)r/N)rGrH)rGN) rorprqrJrSrOrPrZrLr r r r rCis-rCc@sXeZdZdZdd�Zdd�Zdd�Zdd �Zd d �Zd d �Z dd�Z dd�Z dd�Z dS)� ElementInforcCs ||_dS)N)r)r r�r r r r��szElementInfo.__init__cCstS)N)r�)r �anamer r r r��szElementInfo.getAttributeTypecCstS)N)r�)r rrrwr r r r��szElementInfo.getAttributeTypeNScCsdS)NFr )r r r r r!�szElementInfo.isElementContentcCsdS)NFr )r r r r �isEmpty�szElementInfo.isEmptycCsdS)NFr )r rSr r r r��szElementInfo.isIdcCsdS)NFr )r rrrwr r r r��szElementInfo.isIdNScCs|jS)N)r)r r r r r��szElementInfo.__getstate__cCs ||_dS)N)r)r r�r r r r��szElementInfo.__setstate__N)r) rorprqr�r�r�r�r!rTr�r�r�r�r r r r rR�s rRcCs<|jtjkr|jj�d|_n|jr8|jjj�d|j_dS)N)rr r� _id_cache�clear�_id_search_stackrO)rAr r r r:�s    r:c@sreZdZdMZejejejejfZ e �Z ej Z dZdZdZdZdZZdZdZdZdZdZdZdZd Zd d �Zd d �Zdd�Zdd�Zdd�Z dd�Z!dd�Z"dd�Z#dd�Z$dd�Z%dd�Z&d d!�Z'd"d#�Z(d$d%�Z)d&d'�Z*d(d)�Z+d*d+�Z,d,d-�Z-d.d/�Z.d0d1�Z/d2d3�Z0d4d5�Z1d6d7�Z2d8d9�Z3d:d;�Z4dd?�Z6d@dA�Z7dBdC�Z8dDdE�Z9dFdG�Z:dNdIdJ�Z;dKdL�Z|jj|�|jtj kr^|j �r^tjjd��tj ||�S)Nz%s cannot be child of %sz two document elements disallowed) rr.r/r0r1r2r3r4r rJ�_get_documentElementr5)r rAr r r r5-s    zDocument.appendChildc CsVy|jj|�Wntk r.tjj��YnXd|_|_d|_|j |krRd|_ |S)N) r$rEr7r/r0r8r<r=r3�documentElement)r rCr r r r4=s  zDocument.removeChildcCs$x|jD]}|jtjkr|SqWdS)N)r$rr rJ)r rAr r r rbIs  zDocument._get_documentElementcCs(|jdk r|jj�d|_tj|�dS)N)rNrHr )r r r r rHNs  zDocument.unlinkcCs�|sdS|jjddd�}|j|_|j|_|j|_xL|jD]B}t|||�}|jj|�|jt j krbn|jt j krt||_ ||_ q8W|jtjjj||�|S)N)rRrOrr^rUr$rNrIrr rr?rNr3rjr/r0r4r5)r rPr:r�Z childcloner r r rQTs"       zDocument.cloneNodecCst�}||_|S)N)r�rO)r rbr r r �createDocumentFragmentiszDocument.createDocumentFragmentcCst|�}||_|S)N)r�rO)r rr<r r r � createElementnszDocument.createElementcCs(t|t�std��t�}||_||_|S)Nznode contents must be a string)r�r�r�r�rGrO)r rG�tr r r �createTextNodess  zDocument.createTextNodecCs(t|t�std��t�}||_||_|S)Nznode contents must be a string)r�r�r�r$rGrO)r rGr@r r r �createCDATASection{s  zDocument.createCDATASectioncCst|�}||_|S)N)r#rO)r rGr@r r r � createComment�szDocument.createCommentcCst||�}||_|S)N)rrO)r rrG�pr r r �createProcessingInstruction�s z$Document.createProcessingInstructioncCst|�}||_d|_|S)Nr)r�rOr�)r r��ar r r �createAttribute�szDocument.createAttributecCs"t|�\}}t|||�}||_|S)N)r�r�rO)r rrr�rsrwr<r r r rM�s  zDocument.createElementNScCs*t|�\}}t||||�}||_d|_|S)Nr)r�r�rOr�)r rrr�rsrwrlr r r �createAttributeNS�s  zDocument.createAttributeNScCst||||�}||_|S)N)r7rO)r r�r*r+r8r<r r r �_create_entity�szDocument._create_entitycCst|||�}||_|S)N)r6rO)r r�r*r+r�r r r �_create_notation�s zDocument._create_notationcCs�||jkr|j|S|jp|js$dS|j}|dkrB|jg}||_n|sJdSd}�x>|�r�|j�}|jdd�|jD��|j|�}|�r@x�|j j �D]�}|j r�|j |j |j �r�||j|j<|j|kr�|}n|js�Pq�|j|j��r ||j|j<|j|k�r�|}n |j�s:Pq�|jr�||j|j<|j|k�r.|}q�|jdkr�Pq�WnB|j�r�x8|j j �D]*}|j�rT||j|j<|j|k�rT|}�qTW|dk rRPqRW|S)NcSsg|]}|jtkr|�qSr )rr9)�.0rMr r r � �sz+Document.getElementById..r()rUrXr�rWrc�pop�extendr$r�r�r�rrr�rwr�r�r�r�r�)r r��stack�resultrAr�r�r r r �getElementById�sZ               zDocument.getElementByIdcCst||t��S)N)r�rk)r r�r r r r��szDocument.getElementsByTagNamecCst|||t��S)N)r�rk)r rrrwr r r r��szDocument.getElementsByTagNameNScCs|jj||�S)N)rRrS)r rTrUr r r rV�szDocument.isSupportedcCs>|jtjkrtjjd��n|jtjkr2tjjd��t|||�S)Nzcannot import document nodesz!cannot import document type nodes)rr rr/r0�NotSupportedErrr?rN)r rArPr r r � importNode�s    zDocument.importNodercCsN|dkr|jd|�n|jd||f�x|jD]}|j||||�q2WdS)Nzz%%s)r}r$r)r r"r r�r!rrAr r r r�s   zDocument.writexmlcCsJ|j|k r tjjd||jf��|jtjtjfkr>tjjd��|t kr�d|kr�|j dd�\}}|dkr�|tjj kr�tjj d��q�|dkr�|tjj kr�|jtjkr�tjj d��d}|}nd}d}|jtjkr�|j }|dk r�|j}|j|�nd}||_||_||_||_|jtjk�r||_n*||_|dk �rF|j|�|�rF|j|�|S)Nz?cannot rename nodes from other documents; expected %s, found %sz8renameNode() only applies to element and attribute nodesr�r(r�zillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rOr/r0rKrr rJr�rxrr�rr�r�r�r�rsr�rrr�rr�r�r�)r r�rrr�rsrwrZis_idr r r � renameNodesR         zDocument.renameNode)rXrNrWr$rU)rrrN)=rorprqr�r rJr�r�r?r.rCrRrrr�r�r�r3r=r<r9rr^rUr`r\rZr�r�r�r@rYr[rAr]r_rarBr5r4rbrHrQrdrergrhrirkrmrMrnrorprwr�r�rVryrrzr r r r rQ�sh    : rQrcz#Top-level element of this document.c Cs�|jj|�rtjjj}n tjjj}|jtj kr�|j |j |j �}x>|j j�D]0}|j|j |j |j�|j|j |j�}|j|_qJW|r�x$|jD]}t|||�}|j|�q�W�n|jtjkr�|j�}|r�x$|jD]}t|||�}|j|�q�W�n�|jtjk�r |j|j�}�n�|jtjk�r*|j|j�}�n�|jtjk�rL|j|j |j�}�nr|jtj!k�rj|j"|j�}�nT|jtj#k�r�|j$|j |j �}d|_|j|_�n$|jtj%k�r�tjjj}|j&j'|j(|j)|j*�}||_|�r�g|j+_,g|j-_,xR|j-j,D]F} t.| j | j)| j*�} || _|j-j,j/| �t0| d��r�| j1|| | ��q�Wx�|j+j,D]b} t2| j | j)| j*| j3�} | j4| _4| j5| _5| j6| _6|| _|j+j,j/| �t0| d��rB| j1|| | ��qBWntjj7dt8|���t0|d��r�|j1|||�|S)NTrjzCannot clone node %s)9rOrYr/r0r4r5Z NODE_IMPORTEDrr rJrMrrr�r�r�r�r�r�rwr�r$rNr5r+rdrFrgrGr�rhr�rkrr�rir�rnr?rRrPr�r*r+r0r'r1r6rIrdrjr7r8r9rrUrxr2) rArPZnewOwnerDocumentrgr:r�rlrMr@r�r;r<r=r r r rN<s|                rNcCs,|jdd�}t|�dkr|Sd|dfSdS)Nr�r(�r)r�r�)r�Zfieldsr r r r��s  r�cCs,|||�}|j�\}}|j|�|j�|S)N)ZgetEventZ expandNoderV)�func�args�kwargsZeventsZtoktypeZrootNoder r r �_do_pulldom_parse�s    rcCsJ|dkr$| r$ddlm}|j|�Sddlm}t|j|f||d��SdS)Nr)� expatbuilder)�pulldom)�parser�bufsize)�xml.domr��parser�r)�filer�r�r�r�r r r r��s     r�cCsB|dkrddlm}|j|�Sddlm}t|j|fd|i�SdS)Nr)r�)r�r�)r�r�� parseStringr�r)�stringr�r�r�r r r r��s     r�cCsB|rs� v  z$ x )GU  ><( O*PR