3 « fã@südZddlZddlZddlmZmZmZmZddlTddl m Z m Z ej j jej j jfZGdd„dej j ƒZ ee dd d �ee d d d �ee d dd �dd„Zdd„Zdd„Zdd„Zdd„ZGdd„de ƒZGdd„de ƒZeeddd �eed dd �eed d!d �Gd"d#„d#eƒZeed$d%d �eZGd&d'„d'eƒZeddƒZGd(d)„d)e ƒZeed*d+d �eed d,d �d-d.„ZGd/d0„d0ƒZ Gd1d2„d2e e ƒZ!Gd3d4„d4e e ƒZ"ee"d$d5d �Gd6d7„d7e"ƒZ#ee#d8d9d �ee#d:d;d �dd?„Z%Gd@dA„dAe"ƒZ&GdBdC„dCe#ƒZ'GdDdE„dEeƒZ(ee(d$dFd �GdGdH„dHƒZ)GdIdJ„dJe)e e ƒZ*GdKdL„dLe)e ƒZ+GdMdN„dNe)e e ƒZ,GdOdP„dPe ƒZ-GdQdR„dReƒZ.dSdT„Z/GdUdV„dVe e ƒZ0ee0dWdXd �dYdZ„Z1d[d\„Z2d]d^„Z3ded_d`„Z4dfdadb„Z5dgdcdd„Z6dS)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_PREFIXÚXMLNS_NAMESPACEÚdomreg)Ú*)ÚDOMImplementationLSÚ DocumentLSc@sàeZdZdZdZdZdZdZeZ dd„Z d2dd„Z d3dd „Z d d „Z d d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Z dS)4ÚNodeNcCsdS)NT©)Úselfr r ú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|jƒS|j ƒjƒSdS)NÚxmlcharrefreplacer)rÚerrorsÚnewliner) ÚioÚStringIOÚ TextIOWrapperÚBytesIOÚnodeTyper Ú DOCUMENT_NODEÚwritexmlÚgetvalueÚdetach)r ÚindentÚnewlrÚwriterr r r r1s   zNode.toprettyxmlcCs t|jƒS)N)ÚboolÚ childNodes)r r r r Ú hasChildNodesCszNode.hasChildNodescCs|jS)N)r$)r r r r Ú_get_childNodesFszNode._get_childNodescCs|jr|jdSdS)Nr)r$)r r r r Ú_get_firstChildIszNode._get_firstChildcCs|jr|jdSdS)Nééÿÿÿÿ)r$)r r r r Ú_get_lastChildMszNode._get_lastChildc Cs|j|jkr0xt|jƒD]}|j||ƒqW|S|j|jkrXtjjdt |ƒt |ƒfƒ‚|j dk rn|j j |ƒ|dkr‚|j |ƒnˆy|jj |ƒ}Wntk r°tjjƒ‚YnX|jtkrÄt|ƒ|jj||ƒ||_||_|rþ|j|d}||_||_nd|_||_ |S)Nz%s cannot be child of %sr()rÚDOCUMENT_FRAGMENT_NODEÚtupler$Ú insertBeforeÚ_child_node_typesÚxmlÚdomÚHierarchyRequestErrÚreprÚ parentNodeÚ removeChildÚ appendChildÚindexÚ ValueErrorÚ NotFoundErrÚ_nodeTypes_with_childrenÚ_clear_id_cacheÚinsertÚ nextSiblingÚpreviousSibling)r ÚnewChildÚrefChildÚcr6Únoder r r r-Qs6      zNode.insertBeforecCs”|j|jkr.xt|jƒD]}|j|ƒqW|S|j|jkrXtjjdt |ƒt |ƒfƒ‚n|jt krjt |ƒ|j dk r€|j j |ƒt||ƒd|_|S)Nz%s cannot be child of %s)rr+r,r$r5r.r/r0r1r2r9r:r3r4Ú _append_childr<)r rAr@r r r r5qs      zNode.appendChildc Cs|j|jkr(|j}|j|ƒ|j||ƒS|j|jkrPtjjdt |ƒt |ƒfƒ‚||kr\dS|j dk rr|j j|ƒy|j j |ƒ}Wnt k r tjjƒ‚YnX||j |<||_ d|_ |jtksÌ|jtkrÔt|ƒ|j|_|j|_d|_d|_|jrþ||j_|j�r||j_|S)Nz%s cannot be child of %s)rr+r<r4r-r.r/r0r1r2r3r$r6r7r8r9r:r=)r r>ÚoldChildr?r6r r r Ú replaceChild‚s<         zNode.replaceChildc Cs€y|jj|ƒWntk r.tjjƒ‚YnX|jdk rD|j|j_|jdk rX|j|j_d|_|_|jt krvt |ƒd|_ |S)N) r$Úremover7r/r0r8r<r=rr9r:r3)r rCr r r r4¢s      zNode.removeChildcCsÖg}x¾|jD]´}|jtjkr¢|jsL|r2|j|d_|jrB|j|j_|jƒqÀ|r–|dj|jkr–|d}|j|j|_|j|_|jrŒ||j_|jƒqÀ|j|ƒq |j|ƒ|jtj kr |j ƒq W||jdd…<dS)Nr(r)r)r)) r$rr Ú TEXT_NODEÚdatar<r=ÚunlinkÚappendÚ ELEMENT_NODEÚ normalize)r ÚLÚchildrAr r r rK²s*          zNode.normalizecCst|||jp|ƒS)N)Ú _clone_nodeÚ ownerDocument)r Údeepr r r Ú cloneNodeÍszNode.cloneNodecCs|jjj||ƒS)N)rOÚimplementationÚ hasFeature)r ÚfeatureÚversionr r r Ú isSupportedÐszNode.isSupportedcCsdS)Nr )r r r r Ú_get_localNameÓszNode._get_localNamecCs||kS)Nr )r Úotherr r r Ú isSameNodeÙszNode.isSameNodecCs|j|dƒr|SdSdS)N)rV)r rTr r r Ú getInterfaceÜs zNode.getInterfacec Cs,y|j|dSttfk r&dSXdS)Nr)Ú _user_dataÚAttributeErrorÚKeyError)r Úkeyr r r Ú getUserDataæszNode.getUserDatac Csnd}y |j}Wntk r,i}||_YnX||krB||d}|dkr^d}|dk rj||=n ||f||<|S)Nr)r[r\)r r^rGÚhandlerÚoldÚdr r r Ú setUserDataìs    zNode.setUserDatacCsHt|dƒrDx8t|jjƒƒD]&\}\}}|dk r|j|||||ƒqWdS)Nr[)ÚhasattrÚlistr[ÚitemsZhandle)r Ú operationÚsrcÚdstr^rGr`r r r Ú_call_user_data_handlerþs zNode._call_user_data_handlercCsBd|_|_|jr2x|jD] }|jƒqWtƒ|_d|_d|_dS)N)r3rOr$rHÚNodeListr=r<)r rMr r r rHs   z Node.unlinkcCs|S)Nr )r r r r Ú __enter__szNode.__enter__cCs |jƒdS)N)rH)r ZetZevÚtbr r r Ú__exit__sz Node.__exit__)N)rrN)!Ú__name__Ú __module__Ú __qualname__Ú namespaceURIr3rOr<r=rÚprefixr rrr%r&r'r*r-r5rDr4rKrQrVrWrYrZr_rcrjrHrlrnr r r r r "s:      r Ú firstChildzFirst child node, or None.)ÚdocÚ lastChildzLast child node, or None.Ú localNamez"Namespace-local name of this node.cCs2|j}|r|d}||_||_|j|ƒ||_dS)Nr(r))r$r=r<rIr3)r rAr$Zlastr r r rBs rBcCs(x"|dk r"|jtjkrdS|j}qWdS)NTF)rr rr3)rAr r r Ú _in_document&s    rxcCs6|r2|jddƒjddƒjddƒjddƒ}|j|ƒd S) zWrites datachars to writer.ú&z&úz>N)ÚreplaceÚwrite)r"rGr r r Ú _write_data.srcCsHxB|jD]8}|jtjkr4|dks*|j|kr4|j|ƒt|||ƒqW|S)Nr)r$rr rJÚtagNamerIÚ_get_elements_by_tagName_helper)ÚparentÚnameÚrcrAr r r r�5s    r�cCs\xV|jD]L}|jtjkr|dks*|j|krF|dks<|j|krF|j|ƒt||||ƒqW|S)Nr)r$rr rJrwrrrIÚ"_get_elements_by_tagName_ns_helper)r‚ZnsURIrwr„rAr r r r…=s   r…c@sJeZdZejZdZdZdZdZ ej ej ej ej ejejejfZdd„ZdS)ÚDocumentFragmentz#document-fragmentNcCs tƒ|_dS)N)rkr$)r r r r Ú__init__TszDocumentFragment.__init__)rorprqr r+rÚnodeNameÚ nodeValueÚ attributesr3rJrFÚCDATA_SECTION_NODEÚENTITY_REFERENCE_NODEÚPROCESSING_INSTRUCTION_NODEÚ COMMENT_NODEÚ NOTATION_NODEr.r‡r r r r r†Fsr†c@s¼eZdZd#ZejZd Zd Zd Z ej ej fZ e d d fd d „Zd d„Zdd„Zdd„Zdd„ZeeeƒZZdd„Zdd„ZeeeƒZZdd„Zdd„ZeeeƒZdd„Zdd „Zd!d"„Zd S)$ÚAttrÚ_nameÚ_valuerrÚ_prefixr$Ú _localNamerOÚ ownerElementNFcCs2d|_||_||_||_tƒ|_|jjtƒƒdS)N)r•r‘rrr“rkr$rIÚText)r ÚqNamerrrwrsr r r r‡bs z Attr.__init__c Cs.y|jStk r(|jjddƒdSXdS)Nú:r(r))r”r\rˆÚsplit)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|jƒdS)N)r‘r•r:)r Úvaluer r r Ú _set_name{s zAttr._set_namecCs|jS)N)r’)r r r r Ú _get_value‚szAttr._get_valuecCs6||_||jd_|jdk r&t|jƒ||jd_dS)Nr)r’r$rGr•r:)r r�r r r Ú _set_value…s    zAttr._set_valuecCs|jS)N)r“)r r r r Ú _get_prefixŽszAttr._get_prefixcCsd|j}|dkr&|r&|tkr&tjjdƒ‚||_|dkr<|j}nd||jf}|jrZt|jƒ||_ dS)NÚxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacez%s:%s) rrrr/r0Ú NamespaceErrr“rwr•r:rƒ)r rsZnsuriZnewNamer r r Ú _set_prefix‘s  zAttr._set_prefixcCsz|j}|dk rR|j|j=|j|j|jf=|jrRd|_|jd8_|jj d8_ x|j D] }|j ƒqZW|j dd…=dS)NFr() r•Ú_attrsrˆÚ_attrsNSrrrwÚ_is_idÚ_magic_id_nodesrOÚ_magic_id_countr$rH)r ÚelemrMr r r rH¢s   z Attr.unlinkcCsf|jr dS|j}|j}|dks&|dkr*dS|j|ƒ}|dkr@dS|jrV|j|j|jƒS|j|jƒSdS)NTF) r§rOr•Ú_get_elem_inforrÚisIdNSrwÚisIdrˆ)r rurªÚinfor r r Ú _get_isId³s zAttr._get_isIdcCs\|j}|j}|dks|dkr tS|j|ƒ}|dkr6tS|jrL|j|j|jƒS|j|jƒSdS)N) rOr•Ú_no_typer«rrÚgetAttributeTypeNSrwÚgetAttributeTyperˆ)r rurªr®r r r Ú_get_schemaTypeÃs zAttr._get_schemaType)r‘r’rrr“r$r”rOr•) rorprqÚ __slots__r ÚATTRIBUTE_NODErrŠršr§rFrŒr.rr‡rWr›rœržÚpropertyrˆrƒrŸr r‰r�r¡r¤rsrHr¯r³r r r r r�Xs.   r�r­z True if this attribute is an ID.z'Namespace-local name of this attribute.Ú schemaTypezSchema type for this attribute.c@sòeZdZdZdÚ 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. r¥r¦Ú _ownerElementcCs||_||_||_dS)N)r¥r¦r¹)r ÚattrsZattrsNSr•r r r r‡ászNamedNodeMap.__init__cCs t|jƒS)N)Úlenr¥)r r r r Ú _get_lengthæszNamedNodeMap._get_lengthc Cs0y|t|jjƒƒ|Stk r*dSXdS)N)rer¥ÚkeysÚ IndexError)r r6r r r ÚitemészNamedNodeMap.itemcCs.g}x$|jjƒD]}|j|j|jfƒqW|S)N)r¥ÚvaluesrIrˆr�)r rLrAr r r rfïszNamedNodeMap.itemscCs4g}x*|jjƒD]}|j|j|jf|jfƒqW|S)N)r¥rÀrIrrrwr�)r rLrAr r r ÚitemsNSõszNamedNodeMap.itemsNScCs"t|tƒr||jkS||jkSdS)N)Ú isinstanceÚstrr¥r¦)r r^r r r Ú __contains__ûs  zNamedNodeMap.__contains__cCs |jjƒS)N)r¥r½)r r r r r½szNamedNodeMap.keyscCs |jjƒS)N)r¦r½)r r r r ÚkeysNSszNamedNodeMap.keysNScCs |jjƒS)N)r¥rÀ)r r r r rÀszNamedNodeMap.valuesNcCs|jj||ƒS)N)r¥Úget)r rƒr�r r r rÆ szNamedNodeMap.getcCs:|jt|ddƒkrdSt|ƒt|ƒkt|ƒt|ƒkSdS)Nr¥r)r¥ÚgetattrÚid)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|tƒr|j|S|j|SdS)N)rÂr,r¦r¥)r Úattname_or_tupler r r Ú __getitem__$s  zNamedNodeMap.__getitem__c Csvt|tƒrRy|j|}Wn0tk rHt|ƒ}|jj|_|j|ƒYnX||_n t|tƒsdt dƒ‚|}|j|ƒdS)Nz%value must be a string or Attr object) rÂrÃr¥r]r�r¹rOÚ setNamedItemr�Ú TypeError)r Úattnamer�rAr r r Ú __setitem__+s   zNamedNodeMap.__setitem__c Cs$y |j|Stk rdSXdS)N)r¥r])r rƒr r r Ú getNamedItem:s zNamedNodeMap.getNamedItemc Cs(y|j||fStk r"dSXdS)N)r¦r])r rrrwr r r ÚgetNamedItemNS@szNamedNodeMap.getNamedItemNScCsX|j|ƒ}|dk rJt|jƒ|j|j=|j|j|jf=t|dƒrFd|_ |St j j ƒ‚dS)Nr•) rÕr:r¹r¥rˆr¦rrrwrdr•r/r0r8)r rƒÚnr r r ÚremoveNamedItemFs    zNamedNodeMap.removeNamedItemcCsZ|j||ƒ}|dk rLt|jƒ|j|j|jf=|j|j=t|dƒrHd|_ |St j j ƒ‚dS)Nr•) rÖr:r¹r¦rrrwr¥rˆrdr•r/r0r8)r rrrwr×r r r ÚremoveNamedItemNSRs    zNamedNodeMap.removeNamedItemNScCstt|tƒs&tjjdt|ƒt|ƒfƒ‚|jj|jƒ}|r@|j ƒ||j|j<||j |j |j f<|j |_t|jƒ|S)Nz%s cannot be child of %s)rÂr�r/r0r1r2r¥rÆrƒrHr¦rrrwr¹r•r:)r rArar r r rÑ^s   zNamedNodeMap.setNamedItemcCs |j|ƒS)N)rÑ)r rAr r r ÚsetNamedItemNSkszNamedNodeMap.setNamedItemNScCs||}t|jƒ|jƒdS)N)r:r•rH)r rÏrAr r r Ú __delitem__ns zNamedNodeMap.__delitem__cCs|j|j|jfS)N)r¥r¦r¹)r r r r Ú __getstate__sszNamedNodeMap.__getstate__cCs|\|_|_|_dS)N)r¥r¦r¹)r Ústater r r Ú __setstate__vszNamedNodeMap.__setstate__)r¥r¦r¹)N)!rorprqÚ__doc__r´r‡r¼r¿rfrÁrÄr½rÅrÀrÆÚ__len__rÉrÊrËrÌrÍrÎrÐrÔrÕrÖrØrÙrÑrÚrÛrÜrÞr r r r r¸Ös<    r¸Zlengthz$Number of nodes in the NamedNodeMap.c@s0eZdZd Zdd„Zdd„Zdd„Zd d „Zd S) ÚTypeInfoÚ namespacerƒcCs||_||_dS)N)rârƒ)r rârƒr 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 rœ�szTypeInfo._get_namecCs|jS)N)râ)r r r r Ú_get_namespace�szTypeInfo._get_namespaceN)rârƒ)rorprqr´r‡rärœrår r r r rás rác @s eZdZdDZejZd ZeZ dZ ejej ej ej ejejfZed d fdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„ZeZd'd(„Zd)d*„Z d+d,„Z!e!Z"d-d.„Z#d/d0„Z$d1d2„Z%d3d4„Z&d5d6„Z'dEd8d9„Z(d:d;„Z)dd?„Z+d@dA„Z,dBdC„Z-d S)FÚElementrOr3r€rˆrsrrr”r$r¥r¦r<r=NrcCsBd|_||_|_||_||_tƒ|_d|_|_d|_ d|_ dS)N) r3r€rˆrsrrrkr$r<r=r¥r¦)r r€rrrsrwr r r r‡¦s  zElement.__init__cCs|jdkri|_i|_dS)N)r¥r¦)r r r r Ú_ensure_attributesºs zElement._ensure_attributesc Cs.y|jStk r(|jjddƒdSXdS)Nr˜r(r))r”r\r€r™)r r r r rW¿szElement._get_localNamecCs|jS)N)r€)r r r r Ú _get_tagNameÅszElement._get_tagNamecCsD|jdk r*xt|jjƒƒD] }|jƒqWd|_d|_tj|ƒdS)N)r¥rerÀrHr¦r )r Úattrr r r rHÈs   zElement.unlinkc Cs4|jdkrdSy |j|jStk r.dSXdS)Nr)r¥r�r])r rÓr r r Ú getAttributeÐs   zElement.getAttributec Cs8|jdkrdSy|j||fjStk r2dSXdS)Nr)r¦r�r])r rrrwr r r ÚgetAttributeNSØs  zElement.getAttributeNScCsV|j|ƒ}|dkr4t|ƒ}||_|j|_|j|ƒn||jkrR||_|jrRt|ƒdS)N)ÚgetAttributeNoder�r�rOÚsetAttributeNoder­r:)r rÓr�rér r r Ú setAttributeàs   zElement.setAttributecCs€t|ƒ\}}|j||ƒ}|dkrHt||||ƒ}||_|j|_|j|ƒn4||jkrf||_|jrft|ƒ|j|kr|||_||_ dS)N) Ú_nssplitÚgetAttributeNodeNSr�r�rOrír­r:rsrˆ)r rrÚ qualifiedNamer�rsÚ localnamerér r r ÚsetAttributeNSìs     zElement.setAttributeNScCs|jdkrdS|jj|ƒS)N)r¥rÆ)r Zattrnamer r r rìýs zElement.getAttributeNodecCs|jdkrdS|jj||fƒS)N)r¦rÆ)r rrrwr r r rðs zElement.getAttributeNodeNScCsš|jd|fkrtjjdƒ‚|jƒ|jj|jdƒ}|dk rD|j|ƒ|j j|j |j fdƒ}|dk rt||k rt|j|ƒt ||ƒ||k rŠ|S||k r–|SdS)Nzattribute node already owned) r•r/r0ZInuseAttributeErrrçr¥rÆrƒÚremoveAttributeNoder¦rrrwÚ_set_attribute_node)r réZold1Zold2r r r rís    zElement.setAttributeNodec CsP|jdkrtjjƒ‚y|j|}Wntk r@tjjƒ‚YnX|j|ƒdS)N)r¦r/r0r8r¥r]rô)r rƒrér r r ÚremoveAttributes  zElement.removeAttributec CsT|jdkrtjjƒ‚y|j||f}Wntk rDtjjƒ‚YnX|j|ƒdS)N)r¦r/r0r8r]rô)r rrrwrér r r ÚremoveAttributeNS%s  zElement.removeAttributeNSc Cs^|dkrtjjƒ‚y|j|jWntk r@tjjƒ‚YnXt|ƒ|jƒ|j|_dS)N) r/r0r8r¥rƒr]r:rHrO)r rAr r r rô.s zElement.removeAttributeNodecCs|jdkrdS||jkS)NF)r¥)r rƒr r r Ú hasAttribute=s zElement.hasAttributecCs|jdkrdS||f|jkS)NF)r¦)r rrrwr r r ÚhasAttributeNSBs zElement.hasAttributeNScCst||tƒƒS)N)r�rk)r rƒr r r ÚgetElementsByTagNameGszElement.getElementsByTagNamecCst|||tƒƒS)N)r…rk)r rrrwr r r ÚgetElementsByTagNameNSJszElement.getElementsByTagNameNScCsd|jt|ƒfS)Nz)r€rÈ)r r r r räNszElement.__repr__rc Cs|j|d|jƒ|jƒ}t|jƒƒ}x4|D],}|jd|ƒt|||jƒ|jdƒq.W|jrô|jdƒt|jƒdkr¦|jdj t j kr¦|jdj |dddƒn8|j|ƒx"|jD]}|j |||||ƒq¸W|j|ƒ|jd|j|fƒn|jd |ƒdS) Nrzz %s="r{r|r(rrz%sz/>%s) r~r€Ú_get_attributesÚsortedr½rr�r$r»rr rFr) r r"r Ú addindentr!rºZa_namesZa_namerAr r r rQs$      zElement.writexmlcCs|jƒt|j|j|ƒS)N)rçr¸r¥r¦)r r r r rülszElement._get_attributescCs|jr dSdSdS)NTF)r¥)r r r r Ú hasAttributespszElement.hasAttributescCs|j|ƒ}|j|ƒdS)N)rìÚsetIdAttributeNode)r rƒÚidAttrr r r ÚsetIdAttributexs zElement.setIdAttributecCs|j||ƒ}|j|ƒdS)N)rðr)r rrrwrr r r ÚsetIdAttributeNS|s zElement.setIdAttributeNScCsl|dks|j|jƒ r tjjƒ‚t|ƒdk r6tjjƒ‚|jshd|_|jd7_|j j d7_ t |ƒdS)NTr() rYr•r/r0r8Ú_get_containing_entrefÚNoModificationAllowedErrr§r¨rOr©r:)r rr r r r€s   zElement.setIdAttributeNode) rOr3r€rˆrsrrr”r$r¥r¦r<r=)rrr).rorprqr´r rJrr‰r°r·r¨r�rŽrFr‹rŒr.rr‡rçrWrèrHrêrërîrórìrðríZsetAttributeNodeNSrör÷rôZremoveAttributeNodeNSrørùrúrûrärrürÿrrrr r r r ræ•sT      rærŠz*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.cCs8t|ƒ|jƒ||j|j<||j|j|jf<||_dS)N)r:rçr¥rƒr¦rrrwr•)Úelementrér r r rõ‘s  rõc@sfeZdZdZfZdZeƒZdZdZ dd„Z dd„Z dd„Z d d „Z d d „Zd d„Zdd„Zdd„ZdS)Ú Childlessz�Mixin 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|jdƒ‚dS)Nz nodes cannot have children)r/r0r1rˆ)r rAr r r r5­szChildless.appendChildcCsdS)NFr )r r r r r%±szChildless.hasChildNodescCstjj|jdƒ‚dS)Nz nodes do not have children)r/r0r1rˆ)r r>r?r r r r-´szChildless.insertBeforecCstjj|jdƒ‚dS)Nz nodes do not have children)r/r0r8rˆ)r rCr r r r4¸szChildless.removeChildcCsdS)Nr )r r r r rK¼szChildless.normalizecCstjj|jdƒ‚dS)Nz nodes do not have children)r/r0r1rˆ)r r>rCr r r rDÀszChildless.replaceChild)rorprqrßr´rŠZ EmptyNodeListr$rtrvr'r*r5r%r-r4rKrDr r r r rœsrc@s\eZdZejZdZdd„Zdd„Zdd„Z e ee ƒZ d d „Z d d „Z e e e ƒZddd„ZdS)ÚProcessingInstructionÚtargetrGcCs||_||_dS)N)r rG)r r rGr r r r‡ÉszProcessingInstruction.__init__cCs|jS)N)rG)r r r r Ú_get_nodeValueÎsz$ProcessingInstruction._get_nodeValuecCs ||_dS)N)rG)r r�r r r Ú_set_nodeValueÐsz$ProcessingInstruction._set_nodeValuecCs|jS)N)r )r r r r Ú _get_nodeNameÕsz#ProcessingInstruction._get_nodeNamecCs ||_dS)N)r )r r�r r r Ú _set_nodeName×sz#ProcessingInstruction._set_nodeNamercCs|jd||j|j|fƒdS)Nz %s%s)r~r rG)r r"r rþr!r r r rÛszProcessingInstruction.writexmlN)r rG)rrr)rorprqr r�rr´r‡r r r¶r‰r r rˆrr r r r rÅs  rc@sreZdZdZdd„Zdd „ZeZd d „Zd d „Ze eeƒZ Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„ZdS)Ú CharacterDataÚ_datarOr3r=r<cCs,d|_|_d|_|_d|_tj|ƒdS)Nr)rOr3r=r<rr r‡)r r r r r‡âs  zCharacterData.__init__cCs t|jƒS)N)r»rG)r r r r r¼èszCharacterData._get_lengthcCs|jS)N)r)r r r r Ú _get_dataìszCharacterData._get_datacCs ||_dS)N)r)r rGr r r Ú _set_dataîszCharacterData._set_datacCs6|j}t|ƒdkrd}nd}d|jj|dd…|fS)Né z...rzr)rGr»rãro)r rGZ dotdotdotr r r räós  zCharacterData.__repr__cCsT|dkrtjjdƒ‚|t|jƒkr.tjjdƒ‚|dkrBtjjdƒ‚|j|||…S)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negative)r/r0Ú IndexSizeErrr»rG)r ÚoffsetÚcountr r r Ú substringDataüs   zCharacterData.substringDatacCs|j||_dS)N)rG)r Úargr r r Ú appendDataszCharacterData.appendDatacCsZ|dkrtjjdƒ‚|t|jƒkr.tjjdƒ‚|rVd|jd|…||j|d…f|_dS)Nrzoffset cannot be negativez#offset cannot be beyond end of dataz%s%s%s)r/r0rr»rG)r rrr r r Ú insertDatas  zCharacterData.insertDatacCsl|dkrtjjdƒ‚|t|jƒkr.tjjdƒ‚|dkrBtjjdƒ‚|rh|jd|…|j||d…|_dS)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negative)r/r0rr»rG)r rrr r r Ú deleteDatas   zCharacterData.deleteDatacCsr|dkrtjjdƒ‚|t|jƒkr.tjjdƒ‚|dkrBtjjdƒ‚|rnd|jd|…||j||d…f|_dS)Nrzoffset cannot be negativez#offset cannot be beyond end of datazcount cannot be negativez%s%s%s)r/r0rr»rG)r rrrr r r Ú replaceDatas   zCharacterData.replaceDataN)rrOr3r=r<)rorprqr´r‡r¼ràrrr¶rGr‰rärrrrrr r r r rßs    rzLength of the string data.c@sHeZdZfZejZdZdZdd„Z ddd„Z dd „Z d d „Z d d „Z dS)r–z#textNcCs’|dks|t|jƒkr"tjjdƒ‚|jƒ}|j|d…|_|j|_|j}|jr~||jj kr~|dkrp|jj |ƒn|jj ||ƒ|jd|…|_|S)Nrzillegal offset value) r»rGr/r0rrãrOr<r3r$r5r-)r rZnewTextÚnextr r r Ú splitText0s zText.splitTextrcCst|d||j|fƒdS)Nz%s%s%s)rrG)r r"r rþr!r r r r?sz Text.writexmlcCsŒ|jg}|j}x6|dk rD|jtjtjfkr@|jd|jƒ|j}qPqW|j}x4|dk r€|jtjtjfkr||j|jƒ|j}qNPqNWdj |ƒS)Nrr) rGr=rr rFr‹r;r<rIÚjoin)r rLr×r r r Ú_get_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 rFr‹r4r<rG)r Zcontentr‚r×rr r r ÚreplaceWholeTextVs*     zText.replaceWholeTextcCsF|jjƒrdSt|ƒ}|dkr"dS|jj|ƒ}|dkr:dS|jƒSdS)NF)rGÚstripÚ_get_containing_elementrOr«ÚisElementContent)r rªr®r r r Ú!_get_isWhitespaceInElementContentrs  z&Text._get_isWhitespaceInElementContent)rrr)rorprqr´r rFrrˆrŠrrrr r$r r r r r–)s r–ZisWhitespaceInElementContentzKTrue iff this text node contains only whitespace and is in element content.Z wholeTextz.The text of all logically-adjacent text nodes.cCs.|j}x"|dk r(|jtjkr |S|j}qWdS)N)r3rr rJ)rAr@r r r r"…s    r"cCs.|j}x"|dk r(|jtjkr |S|j}qWdS)N)r3rr rŒ)rAr@r r r r�s    rc@s(eZdZejZdZdd„Zddd„ZdS) ÚCommentz#commentcCstj|ƒ||_dS)N)rr‡r)r rGr r r r‡šs zComment.__init__rcCs,d|jkrtdƒ‚|jd||j|fƒdS)Nz--z%'--' is not allowed in a comment nodez %s%s)rGr7r~)r r"r rþr!r r r ržs zComment.writexmlN)rrr) rorprqr rŽrrˆr‡rr r r r r%–sr%c@s$eZdZfZejZdZddd„ZdS)Ú CDATASectionz#cdata-sectionrcCs,|jjdƒdkrtdƒ‚|jd|jƒdS)Nz]]>rz$']]>' not allowed in a CDATA sectionz)rGÚfindr7r~)r r"r rþr!r r r rªszCDATASection.writexmlN)rrr) rorprqr´r r‹rrˆrr r r r r&¤sr&c@s|eZdZdZffdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)ÚReadOnlySequentialNamedNodeMapÚ_seqcCs ||_dS)N)r))r Úseqr r r r‡³sz'ReadOnlySequentialNamedNodeMap.__init__cCs t|jƒS)N)r»r))r r r r rà·sz&ReadOnlySequentialNamedNodeMap.__len__cCs t|jƒS)N)r»r))r r r r r¼ºsz*ReadOnlySequentialNamedNodeMap._get_lengthcCs"x|jD]}|j|kr|SqWdS)N)r)rˆ)r rƒr×r r r rÕ½s  z+ReadOnlySequentialNamedNodeMap.getNamedItemcCs,x&|jD]}|j|kr|j|kr|SqWdS)N)r)rrrw)r rrrwr×r r r rÖÂs z-ReadOnlySequentialNamedNodeMap.getNamedItemNScCs4t|tƒr|j|Ž}n |j|ƒ}|dkr0t|ƒ‚|S)N)rÂr,rÖrÕr])r Z name_or_tuplerAr r r rÐÇs    z*ReadOnlySequentialNamedNodeMap.__getitem__c Cs0|dkr dSy |j|Stk r*dSXdS)Nr)r)r¾)r r6r r r r¿Ðs  z#ReadOnlySequentialNamedNodeMap.itemcCstjjdƒ‚dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rƒr r r rØØsz.ReadOnlySequentialNamedNodeMap.removeNamedItemcCstjjdƒ‚dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rrrwr r r rÙÜsz0ReadOnlySequentialNamedNodeMap.removeNamedItemNScCstjjdƒ‚dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rAr r r rÑàsz+ReadOnlySequentialNamedNodeMap.setNamedItemcCstjjdƒ‚dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rAr r r rÚäsz-ReadOnlySequentialNamedNodeMap.setNamedItemNScCs|jgS)N)r))r r r r rÜèsz+ReadOnlySequentialNamedNodeMap.__getstate__cCs|d|_dS)Nr)r))r rÝr r r rÞësz+ReadOnlySequentialNamedNodeMap.__setstate__N)r))rorprqr´r‡ràr¼rÕrÖrÐr¿rØrÙrÑrÚrÜrÞr r r r r(°s  r(z&Number of entries in the NamedNodeMap.c@s,eZdZdZd Zdd„Zdd„Zdd „Zd S) Ú Identifiedz@Mix-in class that supports the publicId and systemId attributes.ÚpublicIdÚsystemIdcCs||_||_dS)N)r,r-)r r,r-r r r Ú_identified_mixin_init÷sz!Identified._identified_mixin_initcCs|jS)N)r,)r r r r Ú _get_publicIdûszIdentified._get_publicIdcCs|jS)N)r-)r r r r Ú _get_systemIdþszIdentified._get_systemIdN)r,r-)rorprqrßr´r.r/r0r r r r r+òs r+c@sHeZdZejZdZdZdZdZ dZ dd„Z dd„Z dd„Z d d d „ZdS) Ú DocumentTypeNcCs2tƒ|_tƒ|_|r&t|ƒ\}}||_|j|_dS)N)r(ÚentitiesÚ notationsrïrƒrˆ)r rñrsròr r r r‡ s  zDocumentType.__init__cCs|jS)N)ÚinternalSubset)r r r r Ú_get_internalSubsetsz DocumentType._get_internalSubsetcCsö|jdkrîtdƒ}|j|_|j|_tjjj}|rÜg|j_ g|j _ x>|j j D]2}t |j|j |j ƒ}|j j j|ƒ|j|||ƒqJWxZ|jj D]N}t|j|j |j |jƒ}|j|_|j|_|j|_|jj j|ƒ|j|||ƒqŠW|j|||ƒ|SdSdS)N)rOr1rƒrˆr/r0ÚUserDataHandlerÚ NODE_CLONEDr2r)r3ÚNotationr,r-rIrjÚEntityÚ notationNameÚactualEncodingrrU)r rPÚclonergr×ÚnotationÚeÚentityr r r rQs.  zDocumentType.cloneNodercCsŽ|jdƒ|j|jƒ|jr8|jd||j||jfƒn|jrR|jd||jfƒ|jdk r||jdƒ|j|jƒ|jdƒ|jd|ƒdS)Nz r r r r5UszEntity.appendChildcCstjjdƒ‚dS)Nz+cannot insert children below an entity node)r/r0r1)r r>r?r r r r-YszEntity.insertBeforecCstjjdƒ‚dS)Nz*cannot remove children from an entity node)r/r0r1)r rCr r r r4]szEntity.removeChildcCstjjdƒ‚dS)Nz)cannot replace children of an entity node)r/r0r1)r r>rCr r r rDaszEntity.replaceChild)rorprqrŠr Z ENTITY_NODErr‰r;rrUr‡rBrCrDr5r-r4rDr r r r r9=sr9c@seZdZejZdZdd„ZdS)r8NcCs||_|j||ƒdS)N)rˆr.)r rƒr,r-r r r r‡iszNotation.__init__)rorprqr r�rr‰r‡r r r r r8esr8c @sHeZdZddddddddgZdd „Zd d „Zd d „Zdd„Zdd„ZdS)ÚDOMImplementationÚcoreú1.0ú2.0Nr/úls-loadú3.0cCs|dkr d}|jƒ|f|jkS)Nr)ÚlowerÚ _features)r rTrUr r r rSyszDOMImplementation.hasFeaturec CsØ|r|jdk rtjjdƒ‚|jƒ}|dko8|dko8|dk }| rR|rRtjjdƒ‚|r¸t|ƒ\}}|dkr~|dkr~tjjdƒ‚|r”| r”tjjdƒ‚|j||ƒ}|r®|j |ƒ|j |ƒ|rÈ||_|_ ||_ ||_ |S)Nz(doctype object owned by another DOM treezElement with no namer/z$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces) r3r/r0ÚWrongDocumentErrÚ_create_documentZInvalidCharacterErrrïr£ÚcreateElementNSr5rOÚdoctyperR) r rrrñrPruZadd_root_elementrsròrr r r ÚcreateDocument~s4         z DOMImplementation.createDocumentcCst|ƒ}||_||_|S)N)r1r,r-)r rñr,r-rPr r r ÚcreateDocumentType«sz$DOMImplementation.createDocumentTypecCs|j|dƒr|SdSdS)N)rS)r rTr r r rZ³s zDOMImplementation.getInterfacecCstƒS)N)ÚDocument)r r r r rNºsz"DOMImplementation._create_document)rFrG)rFrH)rFN)r/rG)r/rH)r/N)rIrJ)rIN) rorprqrLrSrQrRrZrNr r r r rEns-rEc@s\eZdZdZdZdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z dS)Ú ElementInfoz÷Object 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. r€cCs ||_dS)N)r€)r rƒr r r r‡ÈszElementInfo.__init__cCstS)N)r°)r Úanamer r r r²ËszElementInfo.getAttributeTypecCstS)N)r°)r rrrwr r r r±ÎszElementInfo.getAttributeTypeNScCsdS)NFr )r r r r r#ÑszElementInfo.isElementContentcCsdS)zQReturns true iff this element is declared to have an EMPTY content model.Fr )r r r r ÚisEmptyÔszElementInfo.isEmptycCsdS)z7Returns true iff the named attribute is a DTD-style ID.Fr )r rUr r r r­ÙszElementInfo.isIdcCsdS)z|jtjkr|jjƒd|_nt|ƒr:|jjjƒd|j_dS)N)rr rÚ _id_cacheÚclearÚ_id_search_stackrxrO)rAr r r r:çs    r:c@sreZdZdMZejejejejfZ e ƒZ ej Z dZdZdZdZdZZdZdZdZdZdZdZdZd Zd d „Zd d „Zdd„Zdd„Zdd„Z dd„Z!dd„Z"dd„Z#dd„Z$dd„Z%dd„Z&d d!„Z'd"d#„Z(d$d%„Z)d&d'„Z*d(d)„Z+d*d+„Z,d,d-„Z-d.d/„Z.d0d1„Z/d2d3„Z0d4d5„Z1d6d7„Z2d8d9„Z3d:d;„Z4dd?„Z6d@dA„Z7dBdC„Z8dDdE„Z9dFdG„Z:dNdIdJ„Z;dKdL„Z|jj|ƒ|jtj kr^|j ƒr^tjjdƒ‚tj ||ƒS)Nz%s cannot be child of %sz two document elements disallowed) rr.r/r0r1r2r3r4r rJÚ_get_documentElementr5)r rAr r r r52s    zDocument.appendChildc CsVy|jj|ƒWntk r.tjjƒ‚YnXd|_|_d|_|j |krRd|_ |S)N) r$rEr7r/r0r8r<r=r3ÚdocumentElement)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|jjƒd|_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€|jdks t ‚n |j t jkr |jdksšt ‚||_||_q8W|jtjjj||ƒ|S)N)rRrQrr`rUr$rNrOrYÚAssertionErrorrIrr rrerArPr3rjr/r0r6r7)r rPr<r×Z childcloner r r rQYs&       zDocument.cloneNodecCstƒ}||_|S)N)r†rO)r rbr r r ÚcreateDocumentFragmentnszDocument.createDocumentFragmentcCst|ƒ}||_|S)N)rærO)r r€r>r r r Ú createElementsszDocument.createElementcCs(t|tƒstdƒ‚tƒ}||_||_|S)Nznode contents must be a string)rÂrÃrÒr–rGrO)r rGÚtr r r ÚcreateTextNodexs  zDocument.createTextNodecCs(t|tƒstdƒ‚tƒ}||_||_|S)Nznode contents must be a string)rÂrÃrÒr&rGrO)r rGr@r r r ÚcreateCDATASection€s  zDocument.createCDATASectioncCst|ƒ}||_|S)N)r%rO)r rGr@r r r Ú createCommentˆszDocument.createCommentcCst||ƒ}||_|S)N)rrO)r r rGÚpr r r ÚcreateProcessingInstruction�s z$Document.createProcessingInstructioncCst|ƒ}||_d|_|S)Nr)r�rOr�)r r—Úar r r ÚcreateAttribute’szDocument.createAttributecCs"t|ƒ\}}t|||ƒ}||_|S)N)rïrærO)r rrrñrsrwr>r r r rO˜s  zDocument.createElementNScCs*t|ƒ\}}t||||ƒ}||_d|_|S)Nr)rïr�rOr�)r rrrñrsrwror r r ÚcreateAttributeNSžs  zDocument.createAttributeNScCst||||ƒ}||_|S)N)r9rO)r rƒr,r-r:r>r r r Ú_create_entity¨szDocument._create_entitycCst|||ƒ}||_|S)N)r8rO)r rƒr,r-r×r r r Ú_create_notation­s zDocument._create_notationcCs”||jkr|j|S|jp|js$dS|j}|dkrB|jg}||_n|sJdSd}�x>|�rŽ|jƒ}|jdd„|jDƒƒ|j|ƒ}|�r@x¶|j j ƒD]¨}|j rÒ|j |j |j ƒrÐ||j|j<|j|krÈ|}n|jsÐPq’|j|jƒ�r ||j|j<|j|k�rþ|}n |j�s:Pq’|jr’||j|j<|j|k�r.|}q’|jdkr’Pq’WnB|j�r‚x8|j j ƒD]*}|j�rT||j|j<|j|k�rT|}�qTW|dk rRPqRW|S)NcSsg|]}|jtkr|‘qSr )rr9)Ú.0rMr r r ú Æsz+Document.getElementById..r()rWrZr©rYreÚpopÚextendr$r«rŠrÀrrr¬rwr�r¨r­rƒr§)r rÈÚstackÚresultrAr®rér r r ÚgetElementById²sZ               zDocument.getElementByIdcCst||tƒƒS)N)r�rk)r rƒr r r rúìszDocument.getElementsByTagNamecCst|||tƒƒS)N)r…rk)r rrrwr r r rûïszDocument.getElementsByTagNameNScCs|jj||ƒS)N)rRrS)r rTrUr r r rVószDocument.isSupportedcCs>|jtjkrtjjdƒ‚n|jtjkr2tjjdƒ‚t|||ƒS)Nzcannot import document nodesz!cannot import document type nodes)rr rr/r0ÚNotSupportedErrrArN)r rArPr r r Ú importNodeös    zDocument.importNodercCsN|dkr|jd|ƒn|jd||fƒx|jD]}|j||||ƒq2WdS)Nzz%%s)r~r$r)r r"r rþr!rrAr r r rýs   zDocument.writexmlcCsJ|j|k r tjjd||jfƒ‚|jtjtjfkr>tjjdƒ‚|t kr¶d|kr€|j ddƒ\}}|dkr´|tjj kr´tjj dƒ‚q¾|dkr¬|tjj kr¬|jtjkr¬tjj dƒ‚d}|}nd}d}|jtjkrê|j }|dk rî|j}|j|ƒnd}||_||_||_||_|jtjk�r||_n*||_|dk �rF|j|ƒ|�rF|j|ƒ|S)Nz?cannot rename nodes from other documents; expected %s, found %sz8renameNode() only applies to element and attribute nodesr˜r(r¢zillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rOr/r0rMrr rJrµr{rr™rr£r•r§rôrsr”rrrˆr€rƒrír)r r×rrrƒrsrwrZis_idr r r Ú renameNodesR         zDocument.renameNode)rZrPrYr$rW)rrrN)=rorprqr´r rJr�rŽrAr.rErRrrrˆr‰rŠr3r=r<r;rr`rUrbr^r\r©r‡r«rBr[r]rCr_rarcrDr5r4rdrHrQrgrhrjrkrlrnrprOrqrrrsrzrúrûrVr|rr}r r r r rSïsh    : rSrez#Top-level element of this document.c Csì|jj|ƒrtjjj}n tjjj}|jtj kr¬|j |j |j ƒ}x>|j jƒD]0}|j|j |j |jƒ|j|j |jƒ}|j|_qJW|r¨x$|jD]}t|||ƒ}|j|ƒqŠW�n"|jtjkrî|jƒ}|rêx$|jD]}t|||ƒ}|j|ƒqÌW�nà|jtjk�r |j|jƒ}�nÂ|jtjk�r*|j|jƒ}�n¤|jtjk�rL|j|j |jƒ}�n‚|jtj!k�rj|j"|jƒ}�nd|jtj#k�rš|j$|j |j ƒ}d|_|j|_�n4|jtj%k�rº|j|k �s¸t&‚tjjj}|j'j(|j)|j*|j+ƒ}||_|�rÎg|j,_-g|j._-xR|j.j-D]F} t/| j | j*| j+ƒ} || _|j.j-j0| ƒt1| dƒ�rþ| j2|| | ƒ�qþWx„|j,j-D]b} t3| j | j*| j+| j4ƒ} | j5| _5| j6| _6| j7| _7|| _|j,j-j0| ƒt1| dƒ�rR| j2|| | ƒ�qRWntjj8dt9|ƒƒ‚t1|dƒ�rè|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 rJrOrrrˆrŠrÀrór�rðrwršr$rNr5r+rgrFrjrGr‹rkr�rnr rŽrlrµrqrArfrRrRrƒr,r-r2r)r3r8rIrdrjr9r:r;rrUr{r2) rArPZnewOwnerDocumentrgr<rérorMr@r×r=r>r?r r r rNAs~                rNcCs,|jddƒ}t|ƒdkr|Sd|dfSdS)Nr˜r(ér)r™r»)rñZfieldsr r r rï“s  rïcCs,|||Ž}|jƒ\}}|j|ƒ|jƒ|S)N)ZgetEventZ expandNoderX)ÚfuncÚargsÚkwargsZeventsZtoktypeZrootNoder r r Ú_do_pulldom_parse›s    r‚cCsJ|dkr$| r$ddlm}|j|ƒSddlm}t|j|f||dœƒSdS)z3Parse a file into a DOM by filename or file object.Nr)Ú expatbuilder)Úpulldom)ÚparserÚbufsize)Úxml.domrƒÚparser„r‚)Úfiler…r†rƒr„r r r rˆ¢s     rˆcCsB|dkrddlm}|j|ƒSddlm}t|j|fd|iƒSdS)z&Parse a file into a DOM from a string.Nr)rƒ)r„r…)r‡rƒÚ parseStringr„r‚)Ústringr…rƒr„r r r rЬs     rŠcCsB|rsŒ v  y$ w )GU  ><( O*PR