PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB`3 ie@sdZddlZddlZddlmZmZmZmZddlTddl m Z m Z ej j jej j jfZGdddej j Z ee dd d ee d d d ee d dd ddZddZddZddZGddde ZGddde Zeeddd eed dd eeddd Gd d!d!eZeed"d#d eZGd$d%d%eZeddZGd&d'd'e Zeed(d)d eed d*d d+d,ZGd-d.d.ZGd/d0d0ee Z Gd1d2d2ee Z!ee!d"d3d Gd4d5d5e!Z"ee"d6d7d ee"d8d9d d:d;Z#dd?d?e!Z%Gd@dAdAe"Z&GdBdCdCeZ'ee'd"dDd GdEdFdFZ(GdGdHdHe(ee Z)GdIdJdJe(e Z*GdKdLdLe(ee Z+GdMdNdNe Z,GdOdPdPeZ-dQdRZ.GdSdTdTe e Z/ee/dUdVd dWdXZ0dYdZZ1d[d\Z2dcd]d^Z3ddd_d`Z4dedadbZ5dS)facSimple 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 '/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|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 rBcCs6|r2|jddjddjddjdd}|j|d S) zWrites datachars to writer.&z&z>N)replacewrite)r"rGr r r _write_data'sr~cCsHxB|jD]8}|jtjkr4|dks*|j|kr4|j|t|||qW|S)Nr)r$rr rJtagNamerI_get_elements_by_tagName_helper)parentnamercrAr r r r.s    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 r6s   rc@sJeZdZejZdZdZdZdZ ej ej ej ej ejejejfZddZdS)DocumentFragmentz#document-fragmentNcCs t|_dS)N)rkr$)r r r r __init__MszDocumentFragment.__init__)rorprqr r+rnodeName nodeValue attributesr3rJrFCDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODE COMMENT_NODE NOTATION_NODEr.rr r r r r?src@seZdZd#ZejZd Zd Zd Z ej ej fZ e d d fd d Zd dZddZddZddZeeeZZddZddZeeeZZddZddZeeeZddZdd Zd!d"Zd S)$Attr_name_valuerr_prefixr$ _localNamerO ownerElementNFcCs8d|_d|_||_||_||_t|_|jjtdS)N) rrOrrrrrkr$rIText)r qNamerrrwrsr r r r[sz Attr.__init__c Cs.y|jStk r(|jjdddSXdS)N:r(r))rr\rsplit)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|jdS)N)rrr:)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)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 rQs.   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 rszNamedNodeMap.getcCs:|jt|ddkrdSt|t|kt|t|kSdS)Nrr)rgetattrid)r rXr r r _cmp szNamedNodeMap._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 getNamedItem4s 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 removeNamedItem@s    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 removeNamedItemNSLs    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 rXs   zNamedNodeMap.setNamedItemcCs |j|S)N)r)r rAr r r setNamedItemNSeszNamedNodeMap.setNamedItemNScCs||}t|j|jdS)N)r:rrH)r rrAr r r __delitem__hs zNamedNodeMap.__delitem__cCs|j|j|jfS)N)rrr)r r r r __getstate__mszNamedNodeMap.__getstate__cCs|\|_|_|_dS)N)rrr)r stater r r __setstate__pszNamedNodeMap.__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 r|szTypeInfo.__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 rys 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=NrcCsHd|_d|_||_|_||_||_t|_d|_|_ d|_ d|_ dS)N) rOr3rrrsrrrkr$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 hasAttribute8s zElement.hasAttributecCs|jdkrdS||f|jkS)NF)r)r rrrwr r r hasAttributeNS=s zElement.hasAttributeNScCst||tS)N)rrk)r rr r r getElementsByTagNameBszElement.getElementsByTagNamecCst|||tS)N)rrk)r rrrwr r r getElementsByTagNameNSEszElement.getElementsByTagNameNScCsd|jt|fS)Nz)rr)r r r r rIszElement.__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) Nryz %s="rzr{r(rrz%sz/>%s) r}r_get_attributessortedrr~rr$rrr rFr) r r"r addindentr!rZa_namesZa_namerAr r r rLs$      zElement.writexmlcCs|jt|j|j|S)N)rrrr)r r r r rgszElement._get_attributescCs|jr dSdSdS)NTF)r)r r r r hasAttributeskszElement.hasAttributescCs|j|}|j|dS)N)rsetIdAttributeNode)r ridAttrr r r setIdAttributess zElement.setIdAttributecCs|j||}|j|dS)N)rr)r rrrwrr r r setIdAttributeNSws 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 r{s   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)rrG)r rrGr 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}rrG)r r"r rr!r r r rszProcessingInstruction.writexmlN)rrG)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 deleteData s   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 r s    r zLength 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 splitText+s zText.splitTextrcCst|d||j|fdS)Nz%s%s%s)r~rG)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_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 rFrr4r<rG)r Zcontentrrrr r r replaceWholeTextQs*     zText.replaceWholeTextcCsF|jjrdSt|}|dkr"dS|jj|}|dkr:dS|jSdS)NF)rGstrip_get_containing_elementrOrisElementContent)r rrr r r !_get_isWhitespaceInElementContentms  z&Text._get_isWhitespaceInElementContent)rrr)rorprqrr rFrrrrrrrr#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)r rr)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.r/r 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 rs  zDocumentType.__init__cCs|jS)N)internalSubset)r r r r _get_internalSubset sz 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)rOr0rrr/r0UserDataHandler NODE_CLONEDr1r(r2Notationr+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 r5PszEntity.appendChildcCstjjddS)Nz+cannot insert children below an entity node)r/r0r1)r r>r?r r r r-TszEntity.insertBeforecCstjjddS)Nz*cannot remove children from an entity node)r/r0r1)r rCr r r r4XszEntity.removeChildcCstjjddS)Nz)cannot replace children of an entity node)r/r0r1)r r>rCr r r rD\szEntity.replaceChild)rorprqrr Z ENTITY_NODErrr:rrUrrArBrCr5r-r4rDr r r r r88sr8c@seZdZejZdZddZdS)r7NcCs||_|j||dS)N)rr-)r rr+r,r r r rdszNotation.__init__)rorprqr rrrrr r r r r7`sr7c @sHeZdZddddddddgZdd Zd d Zd d ZddZddZdS)DOMImplementationcore1.02.0Nr/ls-load3.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|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 rrrrOruZadd_root_elementrsrrr r r createDocumentys4         z DOMImplementation.createDocumentcCst|}||_||_|S)N)r0r+r,)r rr+r,rOr r r createDocumentTypesz$DOMImplementation.createDocumentTypecCs|j|dr|SdSdS)N)rS)r rTr r r rZs zDOMImplementation.getInterfacecCstS)N)Document)r r r r rMsz"DOMImplementation._create_document)rErF)rErG)rEN)r/rF)r/rG)r/N)rHrI)rHN) rorprqrKrSrPrQrZrMr r r r rDis-rDc@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 rTr r r rszElementInfo.isIdcCsdS)zd?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 r5-s    zDocument.appendChildc CsVy|jj|Wntk r.tjjYnXd|_|_d|_|j |krRd|_ |S)N) r$rEr7r/r0r8r<r=r3documentElement)r rCr r r r4=s  zDocument.removeChildcCs$x|jD]}|jtjkr|SqWdS)N)r$rr rJ)r rAr r r rcIs  zDocument._get_documentElementcCs(|jdk r|jjd|_tj|dS)N)rOrHr )r r r r rHNs  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)rRrPrr_rUr$rNrOrYAssertionErrorrIrr rrdr@rOr3rjr/r0r5r6)r rPr;rZ childcloner r r rQTs&       zDocument.cloneNodecCst}||_|S)N)rrO)r rbr r r createDocumentFragmentiszDocument.createDocumentFragmentcCst|}||_|S)N)rrO)r rr=r r r createElementnszDocument.createElementcCs(t|tstdt}||_||_|S)Nznode contents must be a string)rrrrrGrO)r rGtr r r createTextNodess  zDocument.createTextNodecCs(t|tstdt}||_||_|S)Nznode contents must be a string)rrrr%rGrO)r rGr@r r r createCDATASection{s  zDocument.createCDATASectioncCst|}||_|S)N)r$rO)r rGr@r r r createCommentszDocument.createCommentcCst||}||_|S)N)rrO)r rrGpr 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 rNs  zDocument.createElementNScCs*t|\}}t||||}||_d|_|S)Nr)rrrOr)r rrrrsrwrnr r r createAttributeNSs  zDocument.createAttributeNScCst||||}||_|S)N)r8rO)r rr+r,r9r=r r r _create_entityszDocument._create_entitycCst|||}||_|S)N)r7rO)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()rVrYrrXrdpopextendr$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/r0NotSupportedErrr@rN)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/r0rLrr rJrrzrrrrrrrrsrrrrrrrr)r rrrrrsrwrZis_idr r r renameNodesR         zDocument.renameNode)rYrOrXr$rV)rrrN)=rorprqrr rJrrr@r.rDrRrrrrrr3r=r<r:rr_rUrar]r[rrrrArZr\rBr^r`rbrCr5r4rcrHrQrfrgrirjrkrmrorNrprqrrryrrrVr{rr|r r r r rRsh    : rRrdz#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/r0r5r6Z NODE_IMPORTEDrr rJrNrrrrrrrrrwrr$rNr5r+rfrFrirGrrjrrmrrrkrrpr@rerRrQrr+r,r1r(r2r7rIrdrjr8r9r:rrUrzr2) rArPZnewOwnerDocumentrgr;rrnrMr@rr<r=r>r r r rN<s~                rNcCs,|jdd}t|dkr|Sd|dfSdS)Nrr(r)rr)rZfieldsr r r rs  rcCs,|||}|j\}}|j||j|S)N)ZgetEventZ expandNoderW)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  z$ x )GU  ><( O*PR