+e@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 4/opt/alt/python34/lib64/python3.4/xml/dom/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 Csx|j|jkr@x't|jD]}|j||q"W|S|j|jkr}tjjdt |t |fn|j dk r|j j |n|dkr|j |ny|jj |}Wn!tk rtjjYnX|jtkrt|n|jj||||_||_|rb|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 |n|j dk r|j j |nt||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|jkr8|j}|j||j||S|j|jkrutjjdt |t |fn||krdS|j dk r|j j|ny|j j |}Wn!t k rtjjYnX||j |<||_ d|_ |jtks|jtkr+t|n|j|_|j|_d|_d|_|jrm||j_n|jr||j_n|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 rY|j|j_n|jdk rz|j|j_nd|_|_|jt krt |nd|_ |S)N) r$remover7r/r0r8r<r=rr9r:r3)r rCr r r r4s   zNode.removeChildcCs3g}x|jD]}|jtjkr|jsr|rJ|j|d_n|jre|j|j_n|jq|r|dj|jkr|d}|j|j|_|j|_|jr||j_n|jq|j|q|j||jtj kr|j qqW||jddz>N)replacewrite)r"rGr r r _write_data.srcCsex^|jD]S}|jtjkrM|dks=|j|krM|j|nt|||q W|S)Nr)r$rr rJtagNamerI_get_elements_by_tagName_helper)parentnamercrAr r r r5s rcCsx|jD]t}|jtjkr |dks=|j|krh|dksX|j|krh|j|nt||||q q W|S)Nr)r$rr rJrvrqrI"_get_elements_by_tagName_ns_helper)rZnsURIrvrrAr r r r=src@smeZdZejZdZdZdZdZ ej ej ej ej ejejejfZddZdS)DocumentFragmentz#document-fragmentNcCst|_dS)N)rjr$)r r r r __init__TszDocumentFragment.__init__)rnrorpr 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_valuerq_prefixr$ _localNamerO ownerElementNFcCsGd|_||_||_||_t|_|jjtdS)N)rrrqrrjr$rIText)r qNamerqrvrrr 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|jndS)N)rrr:)r valuer r r _set_name{s zAttr._set_namecCs|jS)N)r)r r r r _get_valueszAttr._get_valuecCsL||_||jd_|jdk r8t|jn||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}|dkr?|r?|tkr?tjjdq?n||_|dkr`|j}nd||jf}|jrt|jn||_ dS)Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacez%s:%s) rqrr/r0 NamespaceErrrrvrr:r)r rrZnsuriZnewNamer r r _set_prefixs       zAttr._set_prefixcCs|j}|dk rq|j|j=|j|j|jf=|jrqd|_|jd8_|jj d8_ qqnx|j D]}|j q{W|j dd=dS)NFr() r_attrsr_attrsNSrqrv_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_inforqisIdNSrvisIdr)r rtrinfor r r _get_isIds     zAttr._get_isIdcCs|j}|j}|dks*|dkr.tS|j|}|dkrMtS|jrl|j|j|jS|j|jSdS)N) rOr_no_typerrqgetAttributeTypeNSrvgetAttributeTyper)r rtrrr r r _get_schemaTypes    zAttr._get_schemaType)z_namez_valuez namespaceURIz_prefixz childNodesz _localNamez ownerDocumentz ownerElement) rnrorp __slots__r ATTRIBUTE_NODErrrrrFrr.rrrWrrrpropertyrrrrrrrrrrrHrrr 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@sueZdZdZd>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 d<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)rrrIrqrvr)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|j|dkS)Nr)r)r rXr r r __ne__$szNamedNodeMap.__ne__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||_n1t|tst dn|}|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 rqrvr r r getNamedItemNSCs zNamedNodeMap.getNamedItemNScCs}|j|}|dk rjt|j|j|j=|j|j|jf=t|drfd|_ n|St j j dS)Nr) rr:rrrrrqrvrdrr/r0r8)r rnr r r removeNamedItemIs    zNamedNodeMap.removeNamedItemcCs|j||}|dk rmt|j|j|j|jf=|j|j=t|drid|_ n|St j j dS)Nr) rr:rrrqrvrrrdrr/r0r8)r rqrvrr r r removeNamedItemNSUs    zNamedNodeMap.removeNamedItemNScCst|ts:tjjdt|t|fn|jj|j}|rb|j n||j|j<||j |j |j f<|j |_t|j|S)Nz%s cannot be child of %s)rrr/r0r1r2rrrrHrrqrvrrr:)r rArar r r ras "   zNamedNodeMap.setNamedItemcCs |j|S)N)r)r rAr r r setNamedItemNSnszNamedNodeMap.setNamedItemNScCs%||}t|j|jdS)N)r:rrH)r rrAr r r __delitem__qs  zNamedNodeMap.__delitem__cCs|j|j|jfS)N)rrr)r r r r __getstate__vszNamedNodeMap.__getstate__cCs|\|_|_|_dS)N)rrr)r stater r r __setstate__yszNamedNodeMap.__setstate__)z_attrsz_attrsNSz _ownerElement)"rnrorp__doc__rrrrrfrrrrrr__len__rrrrrrrrrrrrrrrrrrr r r r rs>                        rZlengthz$Number of nodes in the NamedNodeMap.c@sFeZdZd ZddZddZddZd d Zd S) TypeInfo namespacercCs||_||_dS)N)rr)r rrr r r rs zTypeInfo.__init__cCs,|jrd|j|jfSd|jSdS)Nzz )rr)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)z namespacezname)rnrorprrrrrr 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)EElementrOr3rrrrrqrr$rrr<r=NrcCs]d|_||_|_||_||_t|_d|_|_d|_ d|_ dS)N) r3rrrrrqrjr$r<r=rr)r rrqrrrvr r r rs     zElement.__init__cCs(|jdkr$i|_i|_ndS)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 r<x*t|jjD]}|jq%Wnd|_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 rqrvr r r getAttributeNSs  zElement.getAttributeNScCs|j|}|dkrLt|}||_|j|_|j|n1||jkr}||_|jr}t|q}ndS)N)getAttributeNoderrrOsetAttributeNoderr:)r rrrr r r setAttributes      zElement.setAttributecCst|\}}|j||}|dkrjt||||}||_|j|_|j|nU||jkr||_|jrt|qn|j|kr||_||_ ndS)N) _nssplitgetAttributeNodeNSrrrOrrr:rrr)r rq qualifiedNamerrr localnamerr r r setAttributeNSs      zElement.setAttributeNScCs#|jdkrdS|jj|S)N)rr)r Zattrnamer r r rszElement.getAttributeNodecCs)|jdkrdS|jj||fS)N)rr)r rqrvr r r rszElement.getAttributeNodeNScCs|jd|fkr*tjjdn|j|jj|jd}|dk rh|j|n|j j|j |j fd}|dk r||k r|j|nt ||||k r|S||k r|SdS)Nzattribute node already owned) rr/r0ZInuseAttributeErrrrrrremoveAttributeNoderrqrv_set_attribute_node)r rZold1Zold2r r r r s  !   zElement.setAttributeNodec Csg|jdkr!tjjny|j|}Wn!tk rUtjjYnX|j|dS)N)rr/r0r8rr]r)r rrr r r removeAttributes zElement.removeAttributec Csm|jdkr!tjjny|j||f}Wn!tk r[tjjYnX|j|dS)N)rr/r0r8r]r)r rqrvrr r r removeAttributeNS's zElement.removeAttributeNSc Csx|dkrtjjny|j|jWn!tk rStjjYnXt||j|j|_dS)N) r/r0r8rrr]r:rHrO)r rAr r r r0s    zElement.removeAttributeNodecCs |jdkrdS||jkS)NF)r)r rr r r hasAttribute?szElement.hasAttributecCs&|jdkrdS||f|jkS)NF)r)r rqrvr r r hasAttributeNSDszElement.hasAttributeNScCst||tS)N)rrj)r rr r r getElementsByTagNameIszElement.getElementsByTagNamecCst|||tS)N)rrj)r rqrvr r r getElementsByTagNameNSLszElement.getElementsByTagNameNScCsd|jt|fS)Nz)rr)r r r r rPszElement.__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) Nrzz %s="r{r|r(rrz%sz/>%s) r~r_get_attributessortedrrrr$rrr rFr) r r"r addindentr!rZa_namesZa_namerAr r r rSs$       zElement.writexmlcCs |jt|j|j|S)N)rrrr)r r r r rns zElement._get_attributescCs|jr dSdSdS)NTF)r)r r r r hasAttributesrs zElement.hasAttributescCs |j|}|j|dS)N)rsetIdAttributeNode)r ridAttrr r r setIdAttributezszElement.setIdAttributecCs#|j||}|j|dS)N)rr)r rqrvrr r r setIdAttributeNS~szElement.setIdAttributeNScCs|dks|j|j r1tjjnt|dk rUtjjn|jsd|_|jd7_|j j d7_ t |ndS)NTr() rYrr/r0r8_get_containing_entrefNoModificationAllowedErrrrrOrr:)r rr r r rs  zElement.setIdAttributeNode) z ownerDocumentz parentNodeztagNameznodeNamezprefixz namespaceURIz _localNamez childNodesz_attrsz_attrsNSz nextSiblingzpreviousSibling).rnrorprr 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:rrrrrqrvr)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)rnrorprrrZ EmptyNodeListr$rsrur'r*r5r%r-r4rKrDr r r r rs         rc@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)r~r rG)r r"r rr!r r r rszProcessingInstruction.writexmlN)ztargetzdata)rnrorpr rrrrr r rrr r rrr r r r rs       rc@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)rGr __class__rn)r rGZ dotdotdotr r r rs   zCharacterData.__repr__cCs|dkr!tjjdn|t|jkrKtjjdn|dkrltjjdn|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|dkr!tjjdn|t|jkrKtjjdn|rd|jd|||j|df|_ndS)Nrzoffset cannot be negativez#offset cannot be beyond end of dataz%s%s%s)r/r0rrrG)r rrr r r insertData s zCharacterData.insertDatacCs|dkr!tjjdn|t|jkrKtjjdn|dkrltjjdn|r|jd||j||d|_ndS)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negative)r/r0rrrG)r rrr r r deleteDatas  zCharacterData.deleteDatacCs|dkr!tjjdn|t|jkrKtjjdn|dkrltjjdn|rd|jd|||j||df|_ndS)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)z_dataz ownerDocumentz parentNodezpreviousSiblingz nextSibling)rnrorprrrrrrrrGrrrrrrrr 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|jkr6tjjdn|j}|j|d|_|j|_|j}|jr||jj kr|dkr|jj |q|jj ||n|jd||_|S)Nrzillegal offset value) rrGr/r0rrrOr<r3r$r5r-)r rZnewTextnextr r r splitText2s!    zText.splitTextrcCs!t|d||j|fdS)Nz%s%s%s)rrG)r r"r rr!r r r rAsz 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_wholeTextFs     zText._get_wholeTextcCs|j}|j}xK|dk r_|jtjtjfkr[|j}|j||}qPqW|j}|s|j|nxK|dk r|jtjtjfkr|j}|j||}qPqW|r||_|SdSdS)N) r3r=rr rFrr4r<rG)r Zcontentrrrr r r replaceWholeTextXs*          zText.replaceWholeTextcCs_|jjrdSt|}|dkr/dS|jj|}|dkrQdS|jSdS)NF)rGstrip_get_containing_elementrOrisElementContent)r rrr r r !_get_isWhitespaceInElementContentts   z&Text._get_isWhitespaceInElementContent)rnrorprr rFrrrrrr 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|jkrtdn|jd||j|fdS)Nz--z%'--' is not allowed in a comment nodez %s%s)rGr7r~)r r"r rr!r r r rszComment.writexmlN) rnrorpr rrrrrr r r r r&s   r&c@s:eZdZfZejZdZdddddZdS) CDATASectionz#cdata-sectionrcCs?|jjddkr'tdn|jd|jdS)Nz]]>rz$']]>' not allowed in a CDATA sectionz)rGfindr7r~)r r"r rr!r r r rszCDATASection.writexmlN) rnrorprr 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*rqrv)r rqrvrr r r rsz-ReadOnlySequentialNamedNodeMap.getNamedItemNScCsOt|tr!|j|}n|j|}|dkrKt|n|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 rqrvr 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)z_seq)rnrorprrrrrrrrrrrrrrr 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_inits z!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)zpublicIdzsystemId)rnrorprrr/r0r1r r r r r,s   r,c@speZdZejZdZdZdZdZ dZ ddZ ddZ ddZ dddd d ZdS) DocumentTypeNcCsLt|_t|_|r<t|\}}||_n|j|_dS)N)r)entities notationsrrr)r rrrrr r r r s    zDocumentType.__init__cCs|jS)N)internalSubset)r r r r _get_internalSubsetsz DocumentType._get_internalSubsetcCs\|jdkrTtd}|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|||qWn|j||||SdSdS)N)rOr2rrr/r0UserDataHandler NODE_CLONEDr3r*r4Notationr-r.rIriEntity notationNameactualEncodingrrU)r rPclonergrnotationeentityr r r rQs.         zDocumentType.cloneNodercCs|jd|j|j|jrL|jd||j||jfn&|jrr|jd||jfn|jdk r|jd|j|j|jdn|jd|dS)Nz r r r rHs   zEntity.__init__cCs|jS)N)r<)r r r r _get_actualEncodingNszEntity._get_actualEncodingcCs|jS)N)r)r r r r _get_encodingQszEntity._get_encodingcCs|jS)N)rU)r r r r _get_versionTszEntity._get_versioncCstjjddS)Nz(cannot append children to an entity node)r/r0r1)r r>r r r r5Ws zEntity.appendChildcCstjjddS)Nz+cannot insert children below an entity node)r/r0r1)r r>r?r r r r-[s 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 rDcs zEntity.replaceChild)rnrorprr Z ENTITY_NODErrr<rrUrrCrDrEr5r-r4rDr r r r r:?s         r:c@s+eZdZejZdZddZdS)r9NcCs||_|j||dS)N)rr/)r rr-r.r r r rks zNotation.__init__)rnrorpr rrrrr r r r r9gs  r9c @sjeZdZddddddddgZdd Zd d Zd d ZddZddZdS)DOMImplementationcore1.02.0Nr/ls-load3.0cCs.|dkrd}n|j|f|jkS)Nr)lower _features)r rTrUr r r rS{s  zDOMImplementation.hasFeaturec CsK|r*|jdk r*tjjdn|j}|dkoW|dkoW|dk }| r}|r}tjjdn|rt|\}}|dkr|dkrtjjdn|r| rtjjdn|j||}|r |j |n|j |n|r5||_|_ n||_ ||_ |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 rqrrQrtZadd_root_elementrrrrr r r createDocuments4              z DOMImplementation.createDocumentcCs"t|}||_||_|S)N)r2r-r.)r rr-r.rQr r r createDocumentTypes   z$DOMImplementation.createDocumentTypecCs|j|dr|SdSdS)N)rS)r rTr r r rZszDOMImplementation.getInterfacecCstS)N)Document)r r r r rOsz"DOMImplementation._create_document)rGrH)rGrI)rGN)xmlrH)rUrI)rUN)rJrK)rJN) rnrorprMrSrRrSrZrOr r r r rFps    -  rFc@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 rqrvr 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 rWr r r rszElementInfo.isIdcCsdS)zd?Z6d@dAZ7dBdCZ8dDdEZ9dFdGZ:dHdHdHddIdJZ;dKdLZ<dS)NrT _elem_inforQr[r$rYz #documentNFrcCs4d|_t|_i|_i|_d|_dS)N)rQrjr$r\rYr[)r r r r r s     zDocument.__init__cCs7|jr|j|jf}n |j}|jj|S)N)rqrvrr\r)r rr^r r r rs  zDocument._get_elem_infocCs|jS)N)r<)r r r r rCszDocument._get_actualEncodingcCs|jS)N)rQ)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 rD%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 rE1szDocument._get_versioncCs|j|jkr=tjjdt|t|fn|jdk r_|jj|n|jtj kr|j rtjjdntj ||S)Nz%s cannot be child of %sz two document elements disallowed) rr.r/r0r1r2r3r4r rJ_get_documentElementr5)r rAr r r r54s "   zDocument.appendChildc Cspy|jj|Wn!tk r7tjjYnXd|_|_d|_|j |krld|_ n|S)N) r$rEr7r/r0r8r<r=r3documentElement)r rCr r r r4Ds   zDocument.removeChildcCs.x'|jD]}|jtjkr |Sq WdS)N)r$rr rJ)r rAr r r rfPszDocument._get_documentElementcCs9|jdk r(|jjd|_ntj|dS)N)rQrHr )r r r r rHUs  zDocument.unlinkcCs|s dS|jjddd}|j|_|j|_|j|_x|jD]}t|||}|jj|st |jj ||j t j kr|jdkst n3|j t jkr|jdkst ||_n||_qPW|jtjjj|||S)N)rRrRrrbrUr$rNrOrYAssertionErrorrIrr rrgrBrQr3rir/r0r7r8)r rPr=rZ childcloner r r rQ[s&      zDocument.cloneNodecCst}||_|S)N)rrO)r rbr r r createDocumentFragmentps  zDocument.createDocumentFragmentcCst|}||_|S)N)rrO)r rr?r r r createElementus  zDocument.createElementcCs=t|tstdnt}||_||_|S)Nznode contents must be a string)rrrrrGrO)r rGtr r r createTextNodezs    zDocument.createTextNodecCs=t|tstdnt}||_||_|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)rrO)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 rqrrrrvr?r r r rPs zDocument.createElementNScCs=t|\}}t||||}||_d|_|S)Nr)rrrOr)r rqrrrrvrqr r r createAttributeNSs   zDocument.createAttributeNScCs"t||||}||_|S)N)r:rO)r rr-r.r;r?r r r _create_entitys zDocument._create_entitycCst|||}||_|S)N)r9rO)r rr-r.rr r r _create_notations zDocument._create_notationcCs0||jkr|j|S|jp)|js0dS|j}|dkr]|jg}||_n |sgdSd}x|r+|j}|jdd|jD|j|}|rxa|j j D]}|j r&|j |j |j r||j|j<|j|kr|}q#|js#Pq#qq|j|jrp||j|j<|j|kr`|}q|jsPqq|jr||j|j<|j|kr|}q|jdkrPqqqWnZ|jrxN|j j D]:}|jr||j|j<|j|kr|}qqqWn|dk rpPqpqpW|S)NcSs%g|]}|jtkr|qSr )rr9).0rMr r r s z+Document.getElementById..r()rYr\rr[rgpopextendr$rrrrqrrvrrrrr)r rstackresultrArrr r r getElementByIdsZ                  zDocument.getElementByIdcCst||tS)N)rrj)r rr r r rszDocument.getElementsByTagNamecCst|||tS)N)rrj)r rqrvr r r rszDocument.getElementsByTagNameNScCs|jj||S)N)rRrS)r rTrUr r r rVszDocument.isSupportedcCs^|jtjkr'tjjdn'|jtjkrNtjjdnt|||S)Nzcannot import document nodesz!cannot import document type nodes)rr rr/r0NotSupportedErrrBrN)r rArPr r r importNodes zDocument.importNodercCse|dkr |jd|n|jd||fx'|jD]}|j||||qAWdS)Nzz%%s)r~r$r)r r"r rr!rrAr r r rs   zDocument.writexmlcCs|j|k r1tjjd||jfn|jtjtjfkratjjdn|t krd|kr|j dd\}}|dkr|tjj krtjj dqq'|dkr |tjj kr |jtjkr tjj dnd}|}n d}d}|jtjkrj|j }|dk rp|j}|j|qpnd}||_||_||_||_|jtjkr||_n;||_|dk r|j||r|j|qn|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/r0rNrr rJrr}rrrrrrrrrrrqrrrrr)r rrqrrrrvrZis_idr r r renameNode sR                      zDocument.renameNode)z _elem_infozdoctypez_id_search_stackz childNodesz _id_cache)=rnrorprr rJrrrBr.rFrRrrrrrr3r=r<r<rrbrUrdr`r^rrrrCr]r_rDrarcrerEr5r4rfrHrQrirjrlrmrnrprrrPrsrtrur|rrrVr~rrr r r r rTsh                             :     rTrgz#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|rx3|jD]%}t|||}|j|qWqn|jtjkrS|j}|rx3|jD]%}t|||}|j|q$Wqn|jtjkrz|j|j}nm|jtjkr|j|j}nF|jtjkr|j|j |j}n|jtj!kr|j"|j}n|jtj#kr7|j$|j |j }d|_|j|_n|jtj%kr|j|k s^t&tjjj}|j'j(|j)|j*|j+}||_|rg|j,_-g|j._-xp|j.j-D]b} t/| j | j*| j+} || _|j.j-j0| t1| dr| j2|| | qqWx|j,j-D]} t3| j | j*| j+| j4} | j5| _5| j6| _6| j7| _7|| _|j,j-j0| t1| dr5| j2|| | q5q5Wqntjj8dt9|t1|dr |j2|||n|S)zo Clone a node and give it the new owner document. Called by Node.cloneNode and Document.importNode TrizCannot clone node %s):rOrYr/r0r7r8Z NODE_IMPORTEDrr rJrPrqrrrrrrrvrr$rNr5r+rirFrlrGrrmrrpr rrnrrsrBrhrRrSrr-r.r3r*r4r9rIrdrir:r;r<rrUr}r2) rArPZnewOwnerDocumentrgr=rrqrMr@rr>r?r@r r r rNCs~                  rNcCs:|jdd}t|dkr(|Sd|dfSdS)Nrr(r)rr)rZfieldsr r r rsrcCs<|||}|j\}}|j||j|S)N)ZgetEventZ expandNoderZ)funcargskwargsZeventsZtoktypeZrootNoder r r _do_pulldom_parses   rcCsh|dkr0| r0ddlm}|j|Sddlm}t|j|fi|d6|d6SdS)z3Parse a file into a DOM by filename or file object.Nr) expatbuilder)pulldomparserbufsize)xml.domrparserr)filerrrrr r r rs  rcCsZ|dkr)ddlm}|j|Sddlm}t|j|fi|d6SdS)z&Parse a file into a DOM from a string.Nr)r)rr)rr parseStringrr)stringrrrr r r rs   rcCsa|rZt|tr'tj|}nx0|D]%\}}tjj||s.dSq.WntjS)N)rrrZ_parse_feature_stringrTrRrS)Zfeaturesfvr r r getDOMImplementations r)7rrrr/rrrrZxml.dom.minicompatZxml.dom.xmlbuilderrrr0r rJrr9Z defpropertyrBrxrrrrrobjectrZ AttributeListrrrrrrrrr#rr&r'r)r,r2r:r9rFrVr:rTrNrrrrrr r r r s  "      y    )GU     > <( O* O  R