PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  pY@s1dZddlZddlZddlmZmZmZmZddlTddl m Z m Z ej j jej j jfZGdddej j Z ee dd d ee d d d ee d d dddZddZddZddZddZGddde ZGddde Zeedd deed d deed 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$d d5Gd6d7d7e"Z#ee#d8d d9ee#d:d d;d<d=Z$d>d?Z%Gd@dAdAe"Z&GdBdCdCe#Z'GdDdEdEeZ(ee(d$d dFGdGdHdHZ)GdIdJdJe)e e Z*GdKdLdLe)e Z+GdMdNdNe)e e Z,GdOdPdPe Z-GdQdRdReZ.dSdTZ/GdUdVdVe e Z0ee0dWd dXdYdZZ1d[d\Z2d]d^Z3ddd_d`Z4ddadbZ5ddcddZ6dS)eacSimple 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@sTeZdZdZdZdZdZdZeZ ddZ dddZ ddddd Z d d Z d d ZddZddZddZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Z dS)2NodeNcCsdS)NT)selfr r &/opt/python35/lib/python3.5/minidom.py__bool__+sz Node.__bool__cCs|jdd|S)N) toprettyxml)r encodingr r r toxml.sz Node.toxml  cCs|dkrtj}n'tjtjd|dddd}|jtjkrp|j|d|||n|j|d|||dkr|jS|j jSdS)Nrerrorsxmlcharrefreplacenewlinerr) 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_firstChildIs zNode._get_firstChildcCs|jr|jdSdS)N)r$)r r r r _get_lastChildMs zNode._get_lastChildc Cso|j|jkr@x't|jD]}|j||q"W|S|j|jkrztjjdt |t |f|j dk r|j j ||dkr|j |ny|jj |}Wn!tk rtjjYnX|jtkrt||jj||||_||_|rY|j|d}||_||_n d|_||_ |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=x$t|jD]}|j|q"W|S|j|jkrztjjdt |t |fn|jt krt ||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 Csz|j|jkr8|j}|j||j||S|j|jkrrtjjdt |t |f||krdS|j dk r|j j|y|j j |}Wn!t k rtjjYnX||j |<||_ d|_ |jtks|jtkr"t||j|_|j|_d|_d|_|jra||j_|jrv||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|Wn!tk r7tjjYnX|jdk rV|j|j_|jdk rt|j|j_d|_|_|jt krt |d|_ |S)N) r$remover7r/r0r8r<r=rr9r:r3)r rCr r r r4s   zNode.removeChildcCs'g}x|jD]}|jtjkr|jsl|rG|j|d_|jr_|j|j_|jq |r|dj|jkr|d}|j|j|_|j|_|jr||j_|jq |j|q|j||jtj kr|j qW||jddz>N)replacewrite)r"rGr r r _write_data.srcCsbx[|jD]P}|jtjkrJ|dks=|j|krJ|j|t|||q W|S)Nr)r$rr rJtagNamerI_get_elements_by_tagName_helper)parentnamercrAr r r r5s  rcCsxy|jD]n}|jtjkr |dks=|j|kre|dksX|j|kre|j|t||||q W|S)Nr)r$rr rJryrtrI"_get_elements_by_tagName_ns_helper)rZnsURIryrrAr r r r=s rc@smeZdZejZdZdZdZdZ ej ej ej ej ejejejfZddZdS)DocumentFragmentz#document-fragmentNcCst|_dS)N)rlr$)r r r r __init__TszDocumentFragment.__init__)rqrrrsr r+rnodeName nodeValue attributesr3rJrFCDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODE COMMENT_NODE NOTATION_NODEr.rr r r r rFs   rc@seZdZd#ZejZd Zd Zd Z ej ej fZ e d d d d Zd dZddZddZddZeeeZZddZddZeeeZZddZddZeeeZddZdd Zd!d"Zd S)$Attr_name_valuert_prefixr$ _localNamerO ownerElementNFcCsGd|_||_||_||_t|_|jjtdS)N)rrrtrrlr$rIText)r qNamertryrur r r rbs      z Attr.__init__c Cs;y |jSWn)tk r6|jjdddSYnXdS)N:r(r))rr\rsplit)r r r r rWos  zAttr._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 r%t|jdS)N)rrr:)r valuer r r _set_name{s zAttr._set_namecCs|jS)N)r)r r r r _get_valueszAttr._get_valuecCsI||_||jd_|jdk r5t|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_prefixcCs|j}|dkr9|r9|tkr9tjjd||_|dkrZ|j}nd||jf}|jrt|j||_ dS)Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacez%s:%s) rtrr/r0 NamespaceErrrryrr:r)r ruZnsuriZnewNamer r r _set_prefixs         zAttr._set_prefixcCs|j}|dk rk|j|j=|j|j|jf=|jrkd|_|jd8_|jj d8_ x|j D]}|j quW|j dd=dS)NFr() r_attrsr_attrsNSrtry_is_id_magic_id_nodesrO_magic_id_countr$rH)r elemrMr r r rHs     z Attr.unlinkcCs|jr dS|j}|j}|dks7|dkr;dS|j|}|dkrZdS|jry|j|j|jS|j|jSdS)NTF) rrOr_get_elem_infortisIdNSryisIdr)r rwrinfor r r _get_isIds     zAttr._get_isIdcCs|j}|j}|dks*|dkr.tS|j|}|dkrMtS|jrl|j|j|jS|j|jSdS)N) rOr_no_typerrtgetAttributeTypeNSrygetAttributeTyper)r rwrrr r r _get_schemaTypes    zAttr._get_schemaType)rrrtrr$rrOr) rqrrrs __slots__r ATTRIBUTE_NODErrrrrFrr.rrrWrrrpropertyrrrrrrrrrurHrrr 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@sieZdZdZd<ZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ dddZeZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Z dS)= 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 rs  zNamedNodeMap.__init__cCs t|jS)N)lenr)r r r r _get_lengthszNamedNodeMap._get_lengthc Cs<y|t|jj|SWntk r7dSYnXdS)N)rerkeys IndexError)r r6r r r items zNamedNodeMap.itemcCs=g}x0|jjD]}|j|j|jfqW|S)N)rvaluesrIrr)r rLrAr r r rfszNamedNodeMap.itemscCsFg}x9|jjD](}|j|j|jf|jfqW|S)N)rrrIrtryr)r rLrAr r r itemsNSs&zNamedNodeMap.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.getcCsO|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 Cst|triy|j|}Wn:tk r\t|}|jj|_|j|YnX||_n.t|tst 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|SWntk r'dSYnXdS)N)rr])r rr r r getNamedItem:s zNamedNodeMap.getNamedItemc Cs2y|j||fSWntk r-dSYnXdS)N)rr])r rtryr r r getNamedItemNS@s zNamedNodeMap.getNamedItemNScCsz|j|}|dk rgt|j|j|j=|j|j|jf=t|drcd|_ |St j j dS)Nr) rr:rrrrrtryrdrr/r0r8)r rnr r r removeNamedItemFs    zNamedNodeMap.removeNamedItemcCs}|j||}|dk rjt|j|j|j|jf=|j|j=t|drfd|_ |St j j dS)Nr) rr:rrrtryrrrdrr/r0r8)r rtryrr r r removeNamedItemNSRs    zNamedNodeMap.removeNamedItemNScCst|ts7tjjdt|t|f|jj|j}|r\|j ||j|j<||j |j |j f<|j |_t|j|S)Nz%s cannot be child of %s)rrr/r0r1r2rrrrHrrtryrrr:)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)!rqrrrs__doc__rrrrrfrrrrrr__len__rrrrrrrrrrrrrrrrrr r r r rs<                       rlengthz$Number of nodes in the NamedNodeMap.c@sFeZdZd ZddZddZddZd d Zd S) TypeInfo namespacercCs||_||_dS)N)rr)r rrr r r rs zTypeInfo.__init__cCsA|jr&d|jj|j|jfSd|jj|jfSdS)Nz<%s %r (from %r)>z<%s %r>)r __class__rqr)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)rqrrrsrrrrrr r r r rs    rc @seZdZdDZejZd ZeZ dZ ejej ej ej ejejfZed d ddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&ZeZd'd(Zd)d*Z d+d,Z!e!Z"d-d.Z#d/d0Z$d1d2Z%d3d4Z&d5d6Z'd7d7d7d8d9Z(d:d;Z)d<d=Z*d>d?Z+d@dAZ,dBdCZ-d S)EElementrOr3rrrurtrr$rrr<r=NrcCs]d|_||_|_||_||_t|_d|_|_d|_ d|_ dS)N) r3rrrurtrlr$r<r=rr)r rrtruryr r r rs     zElement.__init__cCs%|jdkr!i|_i|_dS)N)rr)r r r r _ensure_attributess zElement._ensure_attributesc Cs;y |jSWn)tk r6|jjdddSYnXdS)Nrr(r))rr\rr)r r r r rWs  zElement._get_localNamecCs|jS)N)r)r r r r _get_tagNameszElement._get_tagNamecCs\|jdk r9x't|jjD]}|jq%Wd|_d|_tj|dS)N)rrerrHrr )r attrr r r rHs   zElement.unlinkc CsB|jdkrdSy|j|jSWntk r=dSYnXdS)Nr)rrr])r rr r r getAttributes  zElement.getAttributec CsH|jdkrdSy|j||fjSWntk rCdSYnXdS)Nr)rrr])r rtryr r r getAttributeNSs  zElement.getAttributeNScCs{|j|}|dkrLt|}||_|j|_|j|n+||jkrw||_|jrwt|dS)N)getAttributeNoderrrOsetAttributeNoderr:)r rrrr r r setAttributes      zElement.setAttributecCst|\}}|j||}|dkrjt||||}||_|j|_|j|nL||jkr||_|jrt||j|kr||_||_ dS)N) _nssplitgetAttributeNodeNSrrrOrrr:rur)r rt qualifiedNamerru localnamerr r r setAttributeNSs       zElement.setAttributeNScCs#|jdkrdS|jj|S)N)rr)r Zattrnamer r r rszElement.getAttributeNodecCs)|jdkrdS|jj||fS)N)rr)r rtryr r r rszElement.getAttributeNodeNScCs|jd|fkr'tjjd|j|jj|jd}|dk rb|j||j j|j |j fd}|dk r||k r|j|t ||||k r|S||k r|SdS)Nzattribute node already owned) rr/r0ZInuseAttributeErrrrrrremoveAttributeNoderrtry_set_attribute_node)r rZold1Zold2r r r rs   !    zElement.setAttributeNodec Csd|jdkrtjjy|j|}Wn!tk rRtjjYnX|j|dS)N)rr/r0r8rr]r)r rrr r r removeAttributes zElement.removeAttributec Csj|jdkrtjjy|j||f}Wn!tk rXtjjYnX|j|dS)N)rr/r0r8r]r)r rtryrr r r removeAttributeNS%s zElement.removeAttributeNSc Csu|dkrtjjy|j|jWn!tk rPtjjYnXt||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=szElement.hasAttributecCs&|jdkrdS||f|jkS)NF)r)r rtryr r r hasAttributeNSBszElement.hasAttributeNScCst||tS)N)rrl)r rr r r getElementsByTagNameGszElement.getElementsByTagNamecCst|||tS)N)rrl)r rtryr r r getElementsByTagNameNSJszElement.getElementsByTagNameNScCsd|jt|fS)Nz)rr)r r r r rNszElement.__repr__rc CsW|j|d|j|j}t|j}x@|D]8}|jd|t|||j|jdq=W|jrB|jdt|jdkr|jdj t j kr|jdj |dddnH|j|x+|jD] }|j |||||qW|j||jd|j|fn|jd |dS) Nr|z %s="r}r~r(rrz%sz/>%s) rr_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 rls zElement._get_attributescCs|jr dSdSdS)NTF)r)r r r r hasAttributesps zElement.hasAttributescCs |j|}|j|dS)N)rsetIdAttributeNode)r ridAttrr r r setIdAttributexszElement.setIdAttributecCs#|j||}|j|dS)N)rr)r rtryrr r r setIdAttributeNS|szElement.setIdAttributeNScCs|dks|j|j r.tjjt|dk rOtjj|jsd|_|jd7_|j j d7_ t |dS)NTr() rYrr/r0r8_get_containing_entrefNoModificationAllowedErrrrrOrr:)r rr r r rs  zElement.setIdAttributeNode) rOr3rrrurtrr$rrr<r=).rqrrrsrr rJrrrrrrrrFrrr.rrrrWrrHrrrrrrrZsetAttributeNodeNSrrrZremoveAttributeNodeNSrrrrrrrrrrrr r r r rsT                       rrz*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.cCsJt||j||j|j<||j|j|jf<||_dS)N)r:rrrrrtryr)elementrr r r rs   rc@seZdZdZfZdZeZdZdZ 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 r5s zChildless.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-s zChildless.insertBeforecCstjj|jddS)Nz nodes do not have children)r/r0r8r)r rCr r r r4s zChildless.removeChildcCsdS)Nr )r r r r rKszChildless.normalizecCstjj|jddS)Nz nodes do not have children)r/r0r1r)r r>rCr r r rDs zChildless.replaceChild)rqrrrsrrrZ EmptyNodeListr$rvrxr'r*r5r%r-r4rKrDr r r r r s         r c@seZdZejZdZddZddZddZ e ee Z d d Z d d Z e e e Zd d d ddZdS)ProcessingInstructiontargetrGcCs||_||_dS)N)r rG)r r rGr r r rs zProcessingInstruction.__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)rr rG)r r"r rr!r r r rszProcessingInstruction.writexmlN)r rG)rqrrrsr rrrrr rrrrrrrr r r r r s       r c@seZdZdZddZdd 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_datacCsK|j}t|dkr$d}nd}d|jj|dd|fS)N z...rzr)rGrrrq)r rGZ dotdotdotr r r rs   zCharacterData.__repr__cCsx|dkrtjjd|t|jkrEtjjd|dkrctjjd|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.appendDatacCs|dkrtjjd|t|jkrEtjjd|r{d|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.insertDatacCs|dkrtjjd|t|jkrEtjjd|dkrctjjd|r|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.deleteDatacCs|dkrtjjd|t|jkrEtjjd|dkrctjjd|rd|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<)rqrrrsrrrrrrrrGrrrrrrrr r r r rs       rzLength of the string data.c@speZdZfZejZdZdZddZ dddddZ dd Z d d Z d d Z dS)rz#textNcCs|dks!|t|jkr3tjjd|j}|j|d|_|j|_|j}|jr||jj kr|dkr|jj |n|jj |||jd||_|S)Nrzillegal offset value) rrGr/r0rrrOr<r3r$r5r-)r rZnewTextnextr r r splitText0s!    zText.splitTextrcCs!t|d||j|fdS)Nz%s%s%s)rrG)r r"r rr!r r r r?sz Text.writexmlcCs|jg}|j}xK|dk rb|jtjtjfkr^|jd|j|j}qPqW|j}xH|dk r|jtjtjfkr|j|j|j}qoPqoWdj |S)Nrr) rGr=rr rFrr;r<rIjoin)r rLrr r r _get_wholeTextDs     zText._get_wholeTextcCs|j}|j}xK|dk r_|jtjtjfkr[|j}|j||}qPqW|j}|s||j|xK|dk r|jtjtjfkr|j}|j||}qPqW|r||_|SdSdS)N) r3r=rr rFrr4r<rG)r Zcontentrrrr r r replaceWholeTextVs*           zText.replaceWholeTextcCs_|jjrdSt|}|dkr/dS|jj|}|dkrQdS|jSdS)NF)rGstrip_get_containing_elementrOrisElementContent)r rrr r r !_get_isWhitespaceInElementContentrs   z&Text._get_isWhitespaceInElementContent)rqrrrsrr rFrrrr rr"r#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}q WdS)N)r3rr rJ)rAr@r r r r%s   r%cCs?|j}x/|dk r:|jtjkr.|S|j}q WdS)N)r3rr r)rAr@r r r rs   rc@s@eZdZejZdZddZdddddZdS)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) rqrrrsr rrrrrr r r r r(s   r(c@s:eZdZfZejZdZdddddZdS) CDATASectionz#cdata-sectionrcCs<|jjddkr$td|jd|jdS)Nz]]>rz$']]>' not allowed in a CDATA sectionz)rGfindr7r)r r"r rr!r r r rs zCDATASection.writexmlN) rqrrrsrr rrrrr r r r r)s  r)c@seZdZdZfddZddZddZdd 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 |Sq WdS)N)r,r)r rrr r r rsz+ReadOnlySequentialNamedNodeMap.getNamedItemcCs:x3|jD](}|j|kr |j|kr |Sq WdS)N)r,rtry)r rtryrr r r rsz-ReadOnlySequentialNamedNodeMap.getNamedItemNScCsLt|tr!|j|}n|j|}|dkrHt||S)N)rr,rrr])r Z name_or_tuplerAr r r rs   z*ReadOnlySequentialNamedNodeMap.__getitem__c Cs<|dkrdSy|j|SWntk r7dSYnXdS)Nr)r,r)r r6r r r rs   z#ReadOnlySequentialNamedNodeMap.itemcCstjjddS)Nz"NamedNodeMap instance is read-only)r/r0r)r rr r r rs z.ReadOnlySequentialNamedNodeMap.removeNamedItemcCstjjddS)Nz"NamedNodeMap instance is read-only)r/r0r)r rtryr r r rs z0ReadOnlySequentialNamedNodeMap.removeNamedItemNScCstjjddS)Nz"NamedNodeMap instance is read-only)r/r0r)r rAr r r rs z+ReadOnlySequentialNamedNodeMap.setNamedItemcCstjjddS)Nz"NamedNodeMap instance is read-only)r/r0r)r rAr r r rs z-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,)rqrrrsrrrrrrrrrrrrrrr 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/r0)r r/r0r r r _identified_mixin_inits z!Identified._identified_mixin_initcCs|jS)N)r/)r r r r _get_publicIdszIdentified._get_publicIdcCs|jS)N)r0)r r r r _get_systemIdszIdentified._get_systemIdN)r/r0)rqrrrsrrr1r2r3r r r r r.s   r.c@speZdZejZdZdZdZdZ dZ ddZ ddZ ddZ dddd d ZdS) DocumentTypeNcCsIt|_t|_|r9t|\}}||_|j|_dS)N)r+entities notationsrrr)r rrurr r r r s    zDocumentType.__init__cCs|jS)N)internalSubset)r r r r _get_internalSubsetsz DocumentType._get_internalSubsetcCsY|jdkrQtd}|j|_|j|_tjjj}|r:g|j_ g|j _ xU|j j D]G}t |j|j |j }|j j j||j|||qmWx|jj D]q}t|j|j |j |j}|j|_|j|_|j|_|jj j||j|||qW|j||||SdSdS)N)rOr4rrr/r0UserDataHandler NODE_CLONEDr5r,r6Notationr/r0rIrkEntity notationNameactualEncodingrrU)r rPclonerhrnotationeentityr r r rQs.         zDocumentType.cloneNodercCs|jd|j|j|jrL|jd||j||jfn#|jro|jd||jf|jdk r|jd|j|j|jd|jd|dS)Nz )r r r r _get_actualEncodingLszEntity._get_actualEncodingcCs|jS)N)r)r r r r _get_encodingOszEntity._get_encodingcCs|jS)N)rU)r r r r _get_versionRszEntity._get_versioncCstjjddS)Nz(cannot append children to an entity node)r/r0r1)r r>r r r r5Us zEntity.appendChildcCstjjddS)Nz+cannot insert children below an entity node)r/r0r1)r r>r?r r r r-Ys zEntity.insertBeforecCstjjddS)Nz*cannot remove children from an entity node)r/r0r1)r rCr r r r4]s zEntity.removeChildcCstjjddS)Nz)cannot replace children of an entity node)r/r0r1)r r>rCr r r rDas zEntity.replaceChild)rqrrrsrr Z ENTITY_NODErrr>rrUrrErFrGr5r-r4rDr r r r r<=s         r<c@s+eZdZejZdZddZdS)r;NcCs||_|j||dS)N)rr1)r rr/r0r r r ris zNotation.__init__)rqrrrsr rrrrr r r r r;es  r;c @sjeZdZddddddddgZdd Zd d Zd d ZddZddZdS)DOMImplementationcore1.02.0Nr/ls-load3.0cCs+|dkrd}|j|f|jkS)Nr)lower _features)r rTrUr r r rSys zDOMImplementation.hasFeaturec Cs6|r'|jdk r'tjjd|j}|dkoT|dkoT|dk }| rw|rwtjjd|r t|\}}|dkr|dkrtjjd|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 rtrrSrwZadd_root_elementrurr r r r createDocument~s4                z DOMImplementation.createDocumentcCs"t|}||_||_|S)N)r4r/r0)r rr/r0rSr r r createDocumentTypes   z$DOMImplementation.createDocumentTypecCs|j|dr|SdSdS)N)rS)r rTr r r rZszDOMImplementation.getInterfacecCstS)N)Document)r r r r rQsz"DOMImplementation._create_document)rIrJ)rIrK)rIN)r/rJ)r/rK)r/N)rLrM)rLN) rqrrrsrOrSrTrUrZrQr r r r rHns    -  rHc@seZdZdZdZddZddZddZd 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 rtryr 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 rXr r r rszElementInfo.isIdcCsdS)zd?Z6d@dAZ7dBdCZ8dDdEZ9dFdGZ:dHdHdHddIdJZ;dKdLZ<dS)NrV _elem_inforSr\r$rZz #documentNFrcCs4d|_t|_i|_i|_d|_dS)N)rSrlr$r]rZr\)r r r r r s     zDocument.__init__cCs7|jr|j|jf}n |j}|jj|S)N)rtryrr]r)r r r^r r r rs  zDocument._get_elem_infocCs|jS)N)r>)r r r r rEszDocument._get_actualEncodingcCs|jS)N)rS)r r r r _get_doctypeszDocument._get_doctypecCs|jS)N) documentURI)r r r r _get_documentURI szDocument._get_documentURIcCs|jS)N)r)r r r r rF#szDocument._get_encodingcCs|jS)N) errorHandler)r r r r _get_errorHandler&szDocument._get_errorHandlercCs|jS)N) standalone)r r r r _get_standalone)szDocument._get_standalonecCs|jS)N)strictErrorChecking)r r r r _get_strictErrorChecking,sz!Document._get_strictErrorCheckingcCs|jS)N)rU)r r r r rG/szDocument._get_versioncCs|j|jkr:tjjdt|t|f|jdk rY|jj||jtj kr|j rtjjdtj ||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 Csmy|jj|Wn!tk r7tjjYnXd|_|_d|_|j |krid|_ |S)N) r$rEr7r/r0r8r<r=r3documentElement)r rCr r r r4Bs   zDocument.removeChildcCs.x'|jD]}|jtjkr |Sq WdS)N)r$rr rJ)r rAr r r rgNszDocument._get_documentElementcCs6|jdk r%|jjd|_tj|dS)N)rSrHr )r r r r rHSs  zDocument.unlinkcCs|s dS|jjddd}|j|_|j|_|j|_x|jD]}t|||}|jj|st |jj ||j t j kr|jdkst n0|j t jkr|jdkst ||_||_qPW|jtjjj|||S)N)rRrTrrcrUr$rNrOrYAssertionErrorrIrr rrhrDrSr3rkr/r0r9r:)r rPr?rZ childcloner r r rQYs&      zDocument.cloneNodecCst}||_|S)N)rrO)r rbr r r createDocumentFragmentns  zDocument.createDocumentFragmentcCst|}||_|S)N)rrO)r rrAr r r createElementss  zDocument.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 createComments  zDocument.createCommentcCst||}||_|S)N)r rO)r r rGpr r r createProcessingInstructions z$Document.createProcessingInstructioncCs"t|}||_d|_|S)Nr)rrOr)r rar r r createAttributes   zDocument.createAttributecCs1t|\}}t|||}||_|S)N)rrrO)r rtrruryrAr r r rRs zDocument.createElementNScCs=t|\}}t||||}||_d|_|S)Nr)rrrOr)r rtrruryrrr r r createAttributeNSs   zDocument.createAttributeNScCs"t||||}||_|S)N)r<rO)r rr/r0r=rAr r r _create_entitys zDocument._create_entitycCst|||}||_|S)N)r;rO)r rr/r0rr r r _create_notations zDocument._create_notationcCs||jkr|j|S|jp)|js0dS|j}|dkr]|jg}||_n |sgdSd}x|r|j}|jdd|jD|j|}|rxI|j j D]}|j r |j |j |j r||j|j<|j|kr|}q|jsPq|j|jrg||j|j<|j|krZ|}q|jsPq|jr||j|j<|j|kr|}q|jdkrPqWnQ|jrxE|j j D]4}|jr||j|j<|j|kr|}qW|dk rpPqpW|S)NcSs%g|]}|jtkr|qSr )rr9).0rMr r r s z+Document.getElementById..r()rZr]rr\rhpopextendr$rrrrtrryrrrrr)r rstackresultrArrr r r getElementByIdsZ                  zDocument.getElementByIdcCst||tS)N)rrl)r rr r r rszDocument.getElementsByTagNamecCst|||tS)N)rrl)r rtryr r r rszDocument.getElementsByTagNameNScCs|jj||S)N)rRrS)r rTrUr r r rVszDocument.isSupportedcCs[|jtjkr'tjjdn$|jtjkrKtjjdt|||S)Nzcannot import document nodesz!cannot import document type nodes)rr rr/r0NotSupportedErrrDrN)r rArPr r r importNodes zDocument.importNodercCse|dkr |jd|n|jd||fx'|jD]}|j||||qAWdS)Nzz%%s)rr$r)r r"r rr!rrAr r r rs   zDocument.writexmlcCs|j|k r.tjjd||jf|jtjtjfkr[tjjd|t krd|kr|j dd\}}|dkr |tjj kr tjj dq|dkr|tjj kr|jtjkrtjj dd}|}n d}d}|jtjkr[|j }|dk ra|j}|j|nd}||_||_||_||_|jtjkr||_n5||_|dk r|j||r|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/r0rPrr rJrr~rrrrrrrrurrtrrrrr)r rrtrruryr Zis_idr r r renameNodesR                        zDocument.renameNode)r]rSr\r$rZ)=rqrrrsrr rJrrrDr.rHrRrrrrrr3r=r<r>rrcrUrerar_rrrrEr^r`rFrbrdrfrGr5r4rgrHrQrjrkrmrnrorqrsrRrtrurvr}rrrVrrrr r r r rVsh                             :     rVrhz#Top-level element of this document.c Cs|jj|r$tjjj}ntjjj}|jtj kr|j |j |j }xW|j jD]F}|j|j |j |j|j|j |j}|j|_qmW|rx|jD]%}t|||}|j|qWn|jtjkrM|j}|rx|jD]%}t|||}|j|q!Wn|jtjkrt|j|j}nd|jtjkr|j|j}n=|jtjkr|j|j |j}n|jtj!kr|j"|j}n|jtj#kr1|j$|j |j }d|_|j|_n|jtj%kr|j|k sXt&tjjj}|j'j(|j)|j*|j+}||_|rg|j,_-g|j._-xm|j.j-D]_} t/| j | j*| j+} || _|j.j-j0| t1| dr| j2|| | qWx|j,j-D]} t3| j | j*| j+| j4} | j5| _5| j6| _6| j7| _7|| _|j,j-j0| t1| dr,| j2|| | q,Wntjj8dt9|t1|dr|j2||||S)zo Clone a node and give it the new owner document. Called by Node.cloneNode and Document.importNode TrkzCannot clone node %s):rOrYr/r0r9r:Z NODE_IMPORTEDrr rJrRrtrrrrrrryrr$rNr5r+rjrFrmrGrrnrrqr rrorrtrDrirRrUrr/r0r5r,r6r;rIrdrkr<r=r>rrUr~r2) rArPZnewOwnerDocumentrhr?rrrrMr@rr@rArBr r r rNAs~                 rNcCs:|jdd}t|dkr(|Sd|dfSdS)Nrr(r)rr)rZfieldsr r r rsrcCs<|||}|j\}}|j||j|S)N)ZgetEventZ expandNoder[)funcargskwargseventsZtoktypeZrootNoder r r _do_pulldom_parses   rcCsf|dkr0| r0ddlm}|j|Sddlm}t|j|fd|d|iSdS)z3Parse a file into a DOM by filename or file object.Nr) expatbuilder)pulldomparserbufsize)xml.domrparserr)filerrrrr r r rs  rcCsY|dkr)ddlm}|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   rcCs[|rTt|tr$tj|}x-|D]%\}}tjj||s+dSq+WtjS)N)rrrZ_parse_feature_stringrVrRrS)Zfeaturesfvr r r getDOMImplementationsr)7rrrr/rrrrZxml.dom.minicompatZxml.dom.xmlbuilderrrr0r rJrr9Z defpropertyrBrzrrrrrobjectrZ AttributeListrrrrr r rrr%rr(r)r+r.r4r<r;rHrWr:rVrNrrrrrr r r r s  "      y    )GU     > <( O* O  R