3  f@sdZddlZddlZddlmZmZmZmZddlTddl m Z m Z ej j jej j jfZGdddej j Z ee dd d ee d d d ee d dd ddZddZddZddZddZGddde ZGddde Zeeddd eed dd eed d!d Gd"d#d#eZeed$d%d eZGd&d'd'eZeddZGd(d)d)e Zeed*d+d eed d,d d-d.ZGd/d0d0Z Gd1d2d2e e Z!Gd3d4d4e e Z"ee"d$d5d Gd6d7d7e"Z#ee#d8d9d ee#d:d;d dd?Z%Gd@dAdAe"Z&GdBdCdCe#Z'GdDdEdEeZ(ee(d$dFd GdGdHdHZ)GdIdJdJe)e e Z*GdKdLdLe)e Z+GdMdNdNe)e e Z,GdOdPdPe Z-GdQdRdReZ.dSdTZ/GdUdVdVe e Z0ee0dWdXd dYdZZ1d[d\Z2d]d^Z3ded_d`Z4dfdadbZ5dgdcddZ6dS)hacSimple implementation of the Level 1 DOM. Namespaces and other minor Level 2 features are also supported. parse("foo.xml") parseString("") 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_PREFIXXMLNS_NAMESPACEdomreg)*)DOMImplementationLS DocumentLSc@seZdZdZdZdZdZdZeZ ddZ d2ddZ d3dd Z d d Z d d ZddZddZddZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Z dS)4NodeNcCsdS)NT)selfr r 4/opt/alt/python36/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|jS|j jSdS)Nxmlcharrefreplacer)rerrorsnewliner) ioStringIO TextIOWrapperBytesIOnodeTyper DOCUMENT_NODEwritexmlgetvaluedetach)r indentnewlrwriterr r r r1s   zNode.toprettyxmlcCs t|jS)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|jD]}|j||qW|S|j|jkrXtjjdt |t |f|j dk rn|j j ||dkr|j |ny|jj |}Wntk rtjjYnX|jtkrt||jj||||_||_|r|j|d}||_||_nd|_||_ |S)Nz%s cannot be child of %sr()rDOCUMENT_FRAGMENT_NODEtupler$ insertBefore_child_node_typesxmldomHierarchyRequestErrrepr parentNode removeChild appendChildindex ValueError NotFoundErr_nodeTypes_with_children_clear_id_cacheinsert nextSiblingpreviousSibling)r newChildrefChildcr6noder r r r-Qs6      zNode.insertBeforecCs|j|jkr.xt|jD]}|j|qW|S|j|jkrXtjjdt |t |fn|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 rtjjYnX||j |<||_ d|_ |jtks|jtkrt||j|_|j|_d|_d|_|jr||j_|jr||j_|S)Nz%s cannot be child of %s)rr+r<r4r-r.r/r0r1r2r3r$r6r7r8r9r:r=)r r>oldChildr?r6r r r replaceChilds<         zNode.replaceChildc Csy|jj|Wntk r.tjjYnX|jdk rD|j|j_|jdk rX|j|j_d|_|_|jt krvt |d|_ |S)N) r$remover7r/r0r8r<r=rr9r:r3)r rCr r r r4s      zNode.removeChildcCsg}x|jD]}|jtjkr|jsL|r2|j|d_|jrB|j|j_|jq|r|dj|jkr|d}|j|j|_|j|_|jr||j_|jq|j|q |j||jtj kr |j q W||jdd<dS)Nr(r)r)r)) r$rr TEXT_NODEdatar<r=unlinkappend ELEMENT_NODE normalize)r LchildrAr r r rKs*          zNode.normalizecCst|||jp|S)N) _clone_node ownerDocument)r deepr r r cloneNodeszNode.cloneNodecCs|jjj||S)N)rOimplementation hasFeature)r featureversionr r r isSupportedszNode.isSupportedcCsdS)Nr )r r r r _get_localNameszNode._get_localNamecCs||kS)Nr )r otherr r r isSameNodeszNode.isSameNodecCs|j|dr|SdSdS)N)rV)r rTr r r getInterfaces zNode.getInterfacec Cs,y|j|dSttfk r&dSXdS)Nr) _user_dataAttributeErrorKeyError)r keyr r r getUserDataszNode.getUserDatac Csnd}y |j}Wntk r,i}||_YnX||krB||d}|dkr^d}|dk rj||=n ||f||<|S)Nr)r[r\)r r^rGhandlerolddr r r setUserDatas    zNode.setUserDatacCsHt|drDx8t|jjD]&\}\}}|dk r|j|||||qWdS)Nr[)hasattrlistr[itemsZhandle)r operationsrcdstr^rGr`r r r _call_user_data_handlers zNode._call_user_data_handlercCsBd|_|_|jr2x|jD] }|jqWt|_d|_d|_dS)N)r3rOr$rHNodeListr=r<)r rMr r r rHs   z Node.unlinkcCs|S)Nr )r r r r __enter__szNode.__enter__cCs |jdS)N)rH)r ZetZevtbr r r __exit__sz Node.__exit__)N)rrN)!__name__ __module__ __qualname__ namespaceURIr3rOr<r=rprefixr 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 rBcCs(x"|dk r"|jtjkrdS|j}qWdS)NTF)rr rr3)rAr r r _in_document&s    rxcCs6|r2|jddjddjddjdd}|j|d S) zWrites datachars to writer.&z&z>N)replacewrite)r"rGr r r _write_data.srcCsHxB|jD]8}|jtjkr4|dks*|j|kr4|j|t|||qW|S)Nr)r$rr rJtagNamerI_get_elements_by_tagName_helper)parentnamercrAr r r r5s    rcCs\xV|jD]L}|jtjkr|dks*|j|krF|dks<|j|krF|j|t||||qW|S)Nr)r$rr rJrwrrrI"_get_elements_by_tagName_ns_helper)rZnsURIrwrrAr r r r=s   rc@sJeZdZejZdZdZdZdZ ej ej ej ej ejejejfZddZdS)DocumentFragmentz#document-fragmentNcCs t|_dS)N)rkr$)r r r r __init__TszDocumentFragment.__init__)rorprqr r+rnodeName nodeValue attributesr3rJrFCDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODE COMMENT_NODE NOTATION_NODEr.rr r r r rFsrc@seZdZd#ZejZd Zd Zd Z ej ej fZ e d d fd d Zd dZddZddZddZeeeZZddZddZeeeZZddZddZeeeZddZdd Zd!d"Zd S)$Attr_name_valuerr_prefixr$ _localNamerO ownerElementNFcCs2d|_||_||_||_t|_|jjtdS)N)rrrrrrkr$rIText)r qNamerrrwrsr r r rbs z Attr.__init__c Cs.y|jStk r(|jjdddSXdS)N:r(r))rr\rsplit)r r r r rWoszAttr._get_localNamecCs|jS)N) specified)r r r r _get_specifieduszAttr._get_specifiedcCs|jS)N)r)r r r r _get_namexszAttr._get_namecCs||_|jdk rt|jdS)N)rrr:)r valuer r r _set_name{s zAttr._set_namecCs|jS)N)r)r r r r _get_valueszAttr._get_valuecCs6||_||jd_|jdk r&t|j||jd_dS)Nr)rr$rGrr:)r rr r r _set_values    zAttr._set_valuecCs|jS)N)r)r r r r _get_prefixszAttr._get_prefixcCsd|j}|dkr&|r&|tkr&tjjd||_|dkr<|j}nd||jf}|jrZt|j||_ dS)Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacez%s:%s) rrrr/r0 NamespaceErrrrwrr:r)r rsZnsuriZnewNamer r r _set_prefixs  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 rHs   z Attr.unlinkcCsf|jr dS|j}|j}|dks&|dkr*dS|j|}|dkr@dS|jrV|j|j|jS|j|jSdS)NTF) rrOr_get_elem_inforrisIdNSrwisIdr)r rurinfor r r _get_isIds zAttr._get_isIdcCs\|j}|j}|dks|dkr tS|j|}|dkr6tS|jrL|j|j|jS|j|jSdS)N) rOr_no_typerrrgetAttributeTypeNSrwgetAttributeTyper)r rurrr r r _get_schemaTypes zAttr._get_schemaType)rrrrrr$rrOr) rorprq __slots__r ATTRIBUTE_NODErrrrrFrr.rrrWrrrpropertyrrrrrrrrrsrHrrr r r r rXs.   rrz True if this attribute is an ID.z'Namespace-local name of this attribute. schemaTypezSchema type for this attribute.c@seZdZdZd NamedNodeMapaThe 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. rr _ownerElementcCs||_||_||_dS)N)rrr)r attrsZattrsNSrr r r rszNamedNodeMap.__init__cCs t|jS)N)lenr)r r r r _get_lengthszNamedNodeMap._get_lengthc Cs0y|t|jj|Stk r*dSXdS)N)rerkeys IndexError)r r6r r r itemszNamedNodeMap.itemcCs.g}x$|jjD]}|j|j|jfqW|S)N)rvaluesrIrr)r rLrAr r r rfszNamedNodeMap.itemscCs4g}x*|jjD]}|j|j|jf|jfqW|S)N)rrrIrrrwr)r rLrAr r r itemsNSszNamedNodeMap.itemsNScCs"t|tr||jkS||jkSdS)N) isinstancestrrr)r r^r r r __contains__s  zNamedNodeMap.__contains__cCs |jjS)N)rr)r r r r rszNamedNodeMap.keyscCs |jjS)N)rr)r r r r keysNSszNamedNodeMap.keysNScCs |jjS)N)rr)r r r r rszNamedNodeMap.valuesNcCs|jj||S)N)rget)r rrr r r r szNamedNodeMap.getcCs:|jt|ddkrdSt|t|kt|t|kSdS)Nrr)rgetattrid)r rXr r r _cmpszNamedNodeMap._cmpcCs|j|dkS)Nr)r)r rXr r r __eq__szNamedNodeMap.__eq__cCs|j|dkS)Nr)r)r rXr r r __ge__szNamedNodeMap.__ge__cCs|j|dkS)Nr)r)r rXr r r __gt__szNamedNodeMap.__gt__cCs|j|dkS)Nr)r)r rXr r r __le__szNamedNodeMap.__le__cCs|j|dkS)Nr)r)r rXr r r __lt__!szNamedNodeMap.__lt__cCs"t|tr|j|S|j|SdS)N)rr,rr)r attname_or_tupler r r __getitem__$s  zNamedNodeMap.__getitem__c Csvt|trRy|j|}Wn0tk rHt|}|jj|_|j|YnX||_n t|tsdt d|}|j|dS)Nz%value must be a string or Attr object) rrrr]rrrO setNamedItemr TypeError)r attnamerrAr r r __setitem__+s   zNamedNodeMap.__setitem__c Cs$y |j|Stk rdSXdS)N)rr])r rr r r getNamedItem:s zNamedNodeMap.getNamedItemc Cs(y|j||fStk r"dSXdS)N)rr])r rrrwr r r getNamedItemNS@szNamedNodeMap.getNamedItemNScCsX|j|}|dk rJt|j|j|j=|j|j|jf=t|drFd|_ |St j j dS)Nr) rr:rrrrrrrwrdrr/r0r8)r rnr r r removeNamedItemFs    zNamedNodeMap.removeNamedItemcCsZ|j||}|dk rLt|j|j|j|jf=|j|j=t|drHd|_ |St j j dS)Nr) rr:rrrrrwrrrdrr/r0r8)r rrrwrr r r removeNamedItemNSRs    zNamedNodeMap.removeNamedItemNScCstt|ts&tjjdt|t|f|jj|j}|r@|j ||j|j<||j |j |j f<|j |_t|j|S)Nz%s cannot be child of %s)rrr/r0r1r2rrrrHrrrrwrrr:)r rArar r r r^s   zNamedNodeMap.setNamedItemcCs |j|S)N)r)r rAr r r setNamedItemNSkszNamedNodeMap.setNamedItemNScCs||}t|j|jdS)N)r:rrH)r rrAr r r __delitem__ns zNamedNodeMap.__delitem__cCs|j|j|jfS)N)rrr)r r r r __getstate__sszNamedNodeMap.__getstate__cCs|\|_|_|_dS)N)rrr)r stater r r __setstate__vszNamedNodeMap.__setstate__)rrr)N)!rorprq__doc__rrrrrfrrrrrr__len__rrrrrrrrrrrrrrrrrr r r r rs<    rZlengthz$Number of nodes in the NamedNodeMap.c@s0eZdZd ZddZddZddZd d Zd S) TypeInfo namespacercCs||_||_dS)N)rr)r rrr r r rszTypeInfo.__init__cCs2|jrd|jj|j|jfSd|jj|jfSdS)Nz<%s %r (from %r)>z<%s %r>)r __class__ror)r r r r __repr__s  zTypeInfo.__repr__cCs|jS)N)r)r r r r rszTypeInfo._get_namecCs|jS)N)r)r r r r _get_namespaceszTypeInfo._get_namespaceN)rr)rorprqrrrrrr r r r rs rc @s eZdZdDZejZd ZeZ dZ ejej ej ej ejejfZed d fddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&ZeZd'd(Zd)d*Z d+d,Z!e!Z"d-d.Z#d/d0Z$d1d2Z%d3d4Z&d5d6Z'dEd8d9Z(d:d;Z)dd?Z+d@dAZ,dBdCZ-d S)FElementrOr3rrrsrrrr$rrr<r=NrcCsBd|_||_|_||_||_t|_d|_|_d|_ d|_ dS)N) r3rrrsrrrkr$r<r=rr)r rrrrsrwr r r rs  zElement.__init__cCs|jdkri|_i|_dS)N)rr)r r r r _ensure_attributess zElement._ensure_attributesc Cs.y|jStk r(|jjdddSXdS)Nrr(r))rr\rr)r r r r rWszElement._get_localNamecCs|jS)N)r)r r r r _get_tagNameszElement._get_tagNamecCsD|jdk r*xt|jjD] }|jqWd|_d|_tj|dS)N)rrerrHrr )r attrr r r rHs   zElement.unlinkc Cs4|jdkrdSy |j|jStk r.dSXdS)Nr)rrr])r rr r r getAttributes   zElement.getAttributec Cs8|jdkrdSy|j||fjStk r2dSXdS)Nr)rrr])r rrrwr r r getAttributeNSs  zElement.getAttributeNScCsV|j|}|dkr4t|}||_|j|_|j|n||jkrR||_|jrRt|dS)N)getAttributeNoderrrOsetAttributeNoderr:)r rrrr r r setAttributes   zElement.setAttributecCst|\}}|j||}|dkrHt||||}||_|j|_|j|n4||jkrf||_|jrft||j|kr|||_||_ dS)N) _nssplitgetAttributeNodeNSrrrOrrr:rsr)r rr qualifiedNamerrs localnamerr r r setAttributeNSs     zElement.setAttributeNScCs|jdkrdS|jj|S)N)rr)r Zattrnamer r r rs zElement.getAttributeNodecCs|jdkrdS|jj||fS)N)rr)r rrrwr r r rs 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) rr/r0ZInuseAttributeErrrrrrremoveAttributeNoderrrrw_set_attribute_node)r rZold1Zold2r r r rs    zElement.setAttributeNodec CsP|jdkrtjjy|j|}Wntk r@tjjYnX|j|dS)N)rr/r0r8rr]r)r rrr r r removeAttributes  zElement.removeAttributec CsT|jdkrtjjy|j||f}Wntk rDtjjYnX|j|dS)N)rr/r0r8r]r)r rrrwrr r r removeAttributeNS%s  zElement.removeAttributeNSc Cs^|dkrtjjy|j|jWntk r@tjjYnXt||j|j|_dS)N) r/r0r8rrr]r:rHrO)r rAr r r r.s zElement.removeAttributeNodecCs|jdkrdS||jkS)NF)r)r rr r r hasAttribute=s zElement.hasAttributecCs|jdkrdS||f|jkS)NF)r)r rrrwr r r hasAttributeNSBs zElement.hasAttributeNScCst||tS)N)rrk)r rr r r getElementsByTagNameGszElement.getElementsByTagNamecCst|||tS)N)rrk)r rrrwr r r getElementsByTagNameNSJszElement.getElementsByTagNameNScCsd|jt|fS)Nz)rr)r r r r rNszElement.__repr__rc Cs|j|d|j|j}t|j}x4|D],}|jd|t|||j|jdq.W|jr|jdt|jdkr|jdj t j kr|jdj |dddn8|j|x"|jD]}|j |||||qW|j||jd|j|fn|jd |dS) Nrzz %s="r{r|r(rrz%sz/>%s) r~r_get_attributessortedrrrr$rrr rFr) r r"r addindentr!rZa_namesZa_namerAr r r rQs$      zElement.writexmlcCs|jt|j|j|S)N)rrrr)r r r r rlszElement._get_attributescCs|jr dSdSdS)NTF)r)r r r r hasAttributespszElement.hasAttributescCs|j|}|j|dS)N)rsetIdAttributeNode)r ridAttrr r r setIdAttributexs zElement.setIdAttributecCs|j||}|j|dS)N)rr)r rrrwrr r r setIdAttributeNS|s zElement.setIdAttributeNScCsl|dks|j|j r tjjt|dk r6tjj|jshd|_|jd7_|j j d7_ t |dS)NTr() rYrr/r0r8_get_containing_entrefNoModificationAllowedErrrrrOrr:)r rr r r rs   zElement.setIdAttributeNode) rOr3rrrsrrrr$rrr<r=)rrr).rorprqrr rJrrrrrrrrFrrr.rrrrWrrHrrrrrrrZsetAttributeNodeNSrrrZremoveAttributeNodeNSrrrrrrrrrrrr r r r rsT      rrz*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.cCs8t||j||j|j<||j|j|jf<||_dS)N)r:rrrrrrrwr)elementrr r r rs  rc@sfeZdZdZfZdZeZdZdZ ddZ ddZ ddZ d d Z d d Zd dZddZddZdS) ChildlesszMixin that makes childless-ness easy to implement and avoids the complexity of the Node methods that deal with children. NcCsdS)Nr )r r r r r'szChildless._get_firstChildcCsdS)Nr )r r r r r*szChildless._get_lastChildcCstjj|jddS)Nz nodes cannot have children)r/r0r1r)r rAr r r r5szChildless.appendChildcCsdS)NFr )r r r r r%szChildless.hasChildNodescCstjj|jddS)Nz nodes do not have children)r/r0r1r)r r>r?r r r r-szChildless.insertBeforecCstjj|jddS)Nz nodes do not have children)r/r0r8r)r rCr r r r4szChildless.removeChildcCsdS)Nr )r r r r rKszChildless.normalizecCstjj|jddS)Nz nodes do not have children)r/r0r1r)r r>rCr r r rDszChildless.replaceChild)rorprqrrrZ EmptyNodeListr$rtrvr'r*r5r%r-r4rKrDr r r r rsrc@s\eZdZejZdZddZddZddZ e ee Z d d Z d d Z e e e ZdddZdS)ProcessingInstructiontargetrGcCs||_||_dS)N)r rG)r r rGr r r rszProcessingInstruction.__init__cCs|jS)N)rG)r r r r _get_nodeValuesz$ProcessingInstruction._get_nodeValuecCs ||_dS)N)rG)r rr r r _set_nodeValuesz$ProcessingInstruction._set_nodeValuecCs|jS)N)r )r r r r _get_nodeNamesz#ProcessingInstruction._get_nodeNamecCs ||_dS)N)r )r rr r r _set_nodeNamesz#ProcessingInstruction._set_nodeNamercCs|jd||j|j|fdS)Nz %s%s)r~r rG)r r"r rr!r r r rszProcessingInstruction.writexmlN)r rG)rrr)rorprqr rrrrr r rrr r rrr r r r rs  rc@sreZdZdZddZdd ZeZd d Zd d Ze eeZ Z ddZ ddZ ddZddZddZddZdS) CharacterData_datarOr3r=r<cCs,d|_|_d|_|_d|_tj|dS)Nr)rOr3r=r<rr r)r r r r rs  zCharacterData.__init__cCs t|jS)N)rrG)r r r r rszCharacterData._get_lengthcCs|jS)N)r)r r r r _get_dataszCharacterData._get_datacCs ||_dS)N)r)r rGr r r _set_dataszCharacterData._set_datacCs6|j}t|dkrd}nd}d|jj|dd|fS)N z...rzr)rGrrro)r rGZ dotdotdotr r r rs  zCharacterData.__repr__cCsT|dkrtjjd|t|jkr.tjjd|dkrBtjjd|j|||S)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negative)r/r0 IndexSizeErrrrG)r offsetcountr r r substringDatas   zCharacterData.substringDatacCs|j||_dS)N)rG)r argr r r appendDataszCharacterData.appendDatacCsZ|dkrtjjd|t|jkr.tjjd|rVd|jd|||j|df|_dS)Nrzoffset cannot be negativez#offset cannot be beyond end of dataz%s%s%s)r/r0rrrG)r rrr r r insertDatas  zCharacterData.insertDatacCsl|dkrtjjd|t|jkr.tjjd|dkrBtjjd|rh|jd||j||d|_dS)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negative)r/r0rrrG)r rrr r r deleteDatas   zCharacterData.deleteDatacCsr|dkrtjjd|t|jkr.tjjd|dkrBtjjd|rnd|jd|||j||df|_dS)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negativez%s%s%s)r/r0rrrG)r rrrr r r replaceDatas   zCharacterData.replaceDataN)rrOr3r=r<)rorprqrrrrrrrrGrrrrrrrr r r r rs    rzLength of the string data.c@sHeZdZfZejZdZdZddZ dddZ dd Z d d Z d d Z dS)rz#textNcCs|dks|t|jkr"tjjd|j}|j|d|_|j|_|j}|jr~||jj kr~|dkrp|jj |n|jj |||jd||_|S)Nrzillegal offset value) rrGr/r0rrrOr<r3r$r5r-)r rZnewTextnextr r r splitText0s zText.splitTextrcCst|d||j|fdS)Nz%s%s%s)rrG)r r"r rr!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 rFrr;r<rIjoin)r rLrr r r _get_wholeTextDs   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 rFrr4r<rG)r Zcontentrrrr r r replaceWholeTextVs*     zText.replaceWholeTextcCsF|jjrdSt|}|dkr"dS|jj|}|dkr:dS|jSdS)NF)rGstrip_get_containing_elementrOrisElementContent)r rrr r r !_get_isWhitespaceInElementContentrs  z&Text._get_isWhitespaceInElementContent)rrr)rorprqrr rFrrrrrrr r$r r r r r)s rZisWhitespaceInElementContentzKTrue 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 rs    rc@s(eZdZejZdZddZdddZdS) Commentz#commentcCstj|||_dS)N)rrr)r rGr r r rs zComment.__init__rcCs,d|jkrtd|jd||j|fdS)Nz--z%'--' is not allowed in a comment nodez %s%s)rGr7r~)r r"r rr!r r r rs zComment.writexmlN)rrr) rorprqr rrrrrr r r r r%sr%c@s$eZdZfZejZdZdddZdS) CDATASectionz#cdata-sectionrcCs,|jjddkrtd|jd|jdS)Nz]]>rz$']]>' not allowed in a CDATA sectionz)rGfindr7r~)r r"r rr!r r r rszCDATASection.writexmlN)rrr) rorprqrr rrrrr r r r r&sr&c@s|eZdZdZffddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZdS)ReadOnlySequentialNamedNodeMap_seqcCs ||_dS)N)r))r seqr r r rsz'ReadOnlySequentialNamedNodeMap.__init__cCs t|jS)N)rr))r r r r rsz&ReadOnlySequentialNamedNodeMap.__len__cCs t|jS)N)rr))r r r r rsz*ReadOnlySequentialNamedNodeMap._get_lengthcCs"x|jD]}|j|kr|SqWdS)N)r)r)r rrr r r rs  z+ReadOnlySequentialNamedNodeMap.getNamedItemcCs,x&|jD]}|j|kr|j|kr|SqWdS)N)r)rrrw)r rrrwrr r r rs z-ReadOnlySequentialNamedNodeMap.getNamedItemNScCs4t|tr|j|}n |j|}|dkr0t||S)N)rr,rrr])r Z name_or_tuplerAr r r rs    z*ReadOnlySequentialNamedNodeMap.__getitem__c Cs0|dkr dSy |j|Stk r*dSXdS)Nr)r)r)r r6r r r rs  z#ReadOnlySequentialNamedNodeMap.itemcCstjjddS)Nz"NamedNodeMap instance is read-only)r/r0r)r rr r r rsz.ReadOnlySequentialNamedNodeMap.removeNamedItemcCstjjddS)Nz"NamedNodeMap instance is read-only)r/r0r)r rrrwr r r rsz0ReadOnlySequentialNamedNodeMap.removeNamedItemNScCstjjddS)Nz"NamedNodeMap instance is read-only)r/r0r)r rAr r r rsz+ReadOnlySequentialNamedNodeMap.setNamedItemcCstjjddS)Nz"NamedNodeMap instance is read-only)r/r0r)r rAr r r rsz-ReadOnlySequentialNamedNodeMap.setNamedItemNScCs|jgS)N)r))r r r r rsz+ReadOnlySequentialNamedNodeMap.__getstate__cCs|d|_dS)Nr)r))r rr r r rsz+ReadOnlySequentialNamedNodeMap.__setstate__N)r))rorprqrrrrrrrrrrrrrrr r r r r(s  r(z&Number of entries in the NamedNodeMap.c@s,eZdZdZd ZddZddZdd Zd S) Identifiedz@Mix-in class that supports the publicId and systemId attributes.publicIdsystemIdcCs||_||_dS)N)r,r-)r r,r-r r r _identified_mixin_initsz!Identified._identified_mixin_initcCs|jS)N)r,)r r r r _get_publicIdszIdentified._get_publicIdcCs|jS)N)r-)r r r r _get_systemIdszIdentified._get_systemIdN)r,r-)rorprqrrr.r/r0r r r r r+s r+c@sHeZdZejZdZdZdZdZ dZ ddZ ddZ ddZ d d d ZdS) DocumentTypeNcCs2t|_t|_|r&t|\}}||_|j|_dS)N)r(entities notationsrrr)r rrsrr r r r s  zDocumentType.__init__cCs|jS)N)internalSubset)r r r r _get_internalSubsetsz DocumentType._get_internalSubsetcCs|jdkrtd}|j|_|j|_tjjj}|rg|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|||qW|j||||SdSdS)N)rOr1rrr/r0UserDataHandler NODE_CLONEDr2r)r3Notationr,r-rIrjEntity notationNameactualEncodingrrU)r rPclonergrnotationeentityr r r rQs.  zDocumentType.cloneNodercCs|jd|j|j|jr8|jd||j||jfn|jrR|jd||jf|jdk r||jd|j|j|jd|jd|dS)Nz r r r r5UszEntity.appendChildcCstjjddS)Nz+cannot insert children below an entity node)r/r0r1)r r>r?r r r r-YszEntity.insertBeforecCstjjddS)Nz*cannot remove children from an entity node)r/r0r1)r rCr r r r4]szEntity.removeChildcCstjjddS)Nz)cannot replace children of an entity node)r/r0r1)r r>rCr r r rDaszEntity.replaceChild)rorprqrr Z ENTITY_NODErrr;rrUrrBrCrDr5r-r4rDr r r r r9=sr9c@seZdZejZdZddZdS)r8NcCs||_|j||dS)N)rr.)r rr,r-r r r riszNotation.__init__)rorprqr rrrrr r r r r8esr8c @sHeZdZddddddddgZdd Zd d Zd d ZddZddZdS)DOMImplementationcore1.02.0Nr/ls-load3.0cCs|dkr d}|j|f|jkS)Nr)lower _features)r rTrUr r r rSyszDOMImplementation.hasFeaturec Cs|r|jdk rtjjd|j}|dko8|dko8|dk }| rR|rRtjjd|rt|\}}|dkr~|dkr~tjjd|r| rtjjd|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/r0WrongDocumentErr_create_documentZInvalidCharacterErrrrcreateElementNSr5rOdoctyperR) r rrrrPruZadd_root_elementrsrrr r r createDocument~s4         z DOMImplementation.createDocumentcCst|}||_||_|S)N)r1r,r-)r rr,r-rPr r r createDocumentTypesz$DOMImplementation.createDocumentTypecCs|j|dr|SdSdS)N)rS)r rTr r r rZs zDOMImplementation.getInterfacecCstS)N)Document)r r r r rNsz"DOMImplementation._create_document)rFrG)rFrH)rFN)r/rG)r/rH)r/N)rIrJ)rIN) rorprqrLrSrQrRrZrNr r r r rEns-rEc@s\eZdZdZdZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ dS) 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. rcCs ||_dS)N)r)r rr r r rszElementInfo.__init__cCstS)N)r)r anamer r r rszElementInfo.getAttributeTypecCstS)N)r)r rrrwr r r rszElementInfo.getAttributeTypeNScCsdS)NFr )r r r r r#szElementInfo.isElementContentcCsdS)zQReturns true iff this element is declared to have an EMPTY content model.Fr )r r r r isEmptyszElementInfo.isEmptycCsdS)z7Returns true iff the named attribute is a DTD-style ID.Fr )r rUr r r rszElementInfo.isIdcCsdS)z|jtjkr|jjd|_nt|r:|jjjd|j_dS)N)rr r _id_cacheclear_id_search_stackrxrO)rAr r r r:s    r:c@sreZdZdMZejejejejfZ e Z ej Z dZdZdZdZdZZdZdZdZdZdZdZdZd Zd d Zd d ZddZddZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&d d!Z'd"d#Z(d$d%Z)d&d'Z*d(d)Z+d*d+Z,d,d-Z-d.d/Z.d0d1Z/d2d3Z0d4d5Z1d6d7Z2d8d9Z3d:d;Z4dd?Z6d@dAZ7dBdCZ8dDdEZ9dFdGZ:dNdIdJZ;dKdLZ|jj||jtj kr^|j r^tjjdtj ||S)Nz%s cannot be child of %sz two document elements disallowed) rr.r/r0r1r2r3r4r rJ_get_documentElementr5)r rAr r r r52s    zDocument.appendChildc CsVy|jj|Wntk r.tjjYnXd|_|_d|_|j |krRd|_ |S)N) r$rEr7r/r0r8r<r=r3documentElement)r rCr r r r4Bs  zDocument.removeChildcCs$x|jD]}|jtjkr|SqWdS)N)r$rr rJ)r rAr r r rdNs  zDocument._get_documentElementcCs(|jdk r|jjd|_tj|dS)N)rPrHr )r r r r rHSs  zDocument.unlinkcCs|sdS|jjddd}|j|_|j|_|j|_xx|jD]n}t|||}|jj|sXt |jj ||j t j kr|jdkst n |j t jkr|jdkst ||_||_q8W|jtjjj|||S)N)rRrQrr`rUr$rNrOrYAssertionErrorrIrr rrerArPr3rjr/r0r6r7)r rPr<rZ childcloner r r rQYs&       zDocument.cloneNodecCst}||_|S)N)rrO)r rbr r r createDocumentFragmentnszDocument.createDocumentFragmentcCst|}||_|S)N)rrO)r rr>r r r createElementsszDocument.createElementcCs(t|tstdt}||_||_|S)Nznode contents must be a string)rrrrrGrO)r rGtr r r createTextNodexs  zDocument.createTextNodecCs(t|tstdt}||_||_|S)Nznode contents must be a string)rrrr&rGrO)r rGr@r r r createCDATASections  zDocument.createCDATASectioncCst|}||_|S)N)r%rO)r rGr@r r r createCommentszDocument.createCommentcCst||}||_|S)N)rrO)r r rGpr r r createProcessingInstructions z$Document.createProcessingInstructioncCst|}||_d|_|S)Nr)rrOr)r rar r r createAttributeszDocument.createAttributecCs"t|\}}t|||}||_|S)N)rrrO)r rrrrsrwr>r r r rOs  zDocument.createElementNScCs*t|\}}t||||}||_d|_|S)Nr)rrrOr)r rrrrsrwror r r createAttributeNSs  zDocument.createAttributeNScCst||||}||_|S)N)r9rO)r rr,r-r:r>r r r _create_entityszDocument._create_entitycCst|||}||_|S)N)r8rO)r rr,r-rr r r _create_notations 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|jsPq|j|jr ||j|j<|j|kr|}n |js:Pq|jr||j|j<|j|kr.|}q|jdkrPqWnB|jrx8|j j D]*}|jrT||j|j<|j|krT|}qTW|dk rRPqRW|S)NcSsg|]}|jtkr|qSr )rr9).0rMr r r sz+Document.getElementById..r()rWrZrrYrepopextendr$rrrrrrrwrrrrr)r rstackresultrArrr r r getElementByIdsZ               zDocument.getElementByIdcCst||tS)N)rrk)r rr r r rszDocument.getElementsByTagNamecCst|||tS)N)rrk)r rrrwr r r rszDocument.getElementsByTagNameNScCs|jj||S)N)rRrS)r rTrUr r r rVszDocument.isSupportedcCs>|jtjkrtjjdn|jtjkr2tjjdt|||S)Nzcannot import document nodesz!cannot import document type nodes)rr rr/r0NotSupportedErrrArN)r rArPr r r importNodes    zDocument.importNodercCsN|dkr|jd|n|jd||fx|jD]}|j||||q2WdS)Nzz%%s)r~r$r)r r"r rr!rrAr r r rs   zDocument.writexmlcCsJ|j|k r tjjd||jf|jtjtjfkr>tjjd|t krd|kr|j dd\}}|dkr|tjj krtjj dq|dkr|tjj kr|jtjkrtjj dd}|}nd}d}|jtjkr|j }|dk r|j}|j|nd}||_||_||_||_|jtjkr||_n*||_|dk rF|j||rF|j||S)Nz?cannot rename nodes from other documents; expected %s, found %sz8renameNode() only applies to element and attribute nodesrr(rzillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rOr/r0rMrr rJrr{rrrrrrrrsrrrrrrrr)r rrrrrsrwrZis_idr r r renameNodesR         zDocument.renameNode)rZrPrYr$rW)rrrN)=rorprqrr rJrrrAr.rErRrrrrrr3r=r<r;rr`rUrbr^r\rrrrBr[r]rCr_rarcrDr5r4rdrHrQrgrhrjrkrlrnrprOrqrrrsrzrrrVr|rr}r r r r rSsh    : rSrez#Top-level element of this document.c Cs|jj|rtjjj}n tjjj}|jtj kr|j |j |j }x>|j jD]0}|j|j |j |j|j|j |j}|j|_qJW|rx$|jD]}t|||}|j|qWn"|jtjkr|j}|rx$|jD]}t|||}|j|qWn|jtjkr |j|j}n|jtjkr*|j|j}n|jtjkrL|j|j |j}n|jtj!krj|j"|j}nd|jtj#kr|j$|j |j }d|_|j|_n4|jtj%kr|j|k st&tjjj}|j'j(|j)|j*|j+}||_|rg|j,_-g|j._-xR|j.j-D]F} t/| j | j*| j+} || _|j.j-j0| t1| dr| j2|| | qWx|j,j-D]b} t3| j | j*| j+| j4} | j5| _5| j6| _6| j7| _7|| _|j,j-j0| t1| drR| j2|| | qRWntjj8dt9|t1|dr|j2||||S)zo Clone a node and give it the new owner document. Called by Node.cloneNode and Document.importNode TrjzCannot clone node %s):rOrYr/r0r6r7Z NODE_IMPORTEDrr rJrOrrrrrrrrrwrr$rNr5r+rgrFrjrGrrkrrnr rrlrrqrArfrRrRrr,r-r2r)r3r8rIrdrjr9r:r;rrUr{r2) rArPZnewOwnerDocumentrgr<rrorMr@rr=r>r?r r r rNAs~                rNcCs,|jdd}t|dkr|Sd|dfSdS)Nrr(r)rr)rZfieldsr r r rs  rcCs,|||}|j\}}|j||j|S)N)ZgetEventZ expandNoderX)funcargskwargsZeventsZtoktypeZrootNoder r r _do_pulldom_parses    rcCsJ|dkr$| r$ddlm}|j|Sddlm}t|j|f||dSdS)z3Parse a file into a DOM by filename or file object.Nr) expatbuilder)pulldom)parserbufsize)xml.domrparserr)filerrrrr r r rs     rcCsB|dkrddlm}|j|Sddlm}t|j|fd|iSdS)z&Parse a file into a DOM from a string.Nr)r)rr)rr parseStringrr)stringrrrr r r rs     rcCsB|rs v  y$ w )GU  ><( O*PR