B  š¤'^Œªã@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/python37/lib64/python3.7/xml/dom/minidom.pyÚ__bool__+sz Node.__bool__cCs| dd|¡S)NÚ)Ú toprettyxml)r Úencodingr r r Útoxml.sz Node.toxmlú Ú cCsx|dkrt ¡}ntjt ¡|ddd}|jtjkrH| |d|||¡n| |d||¡|dkrh| ¡S|  ¡ ¡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_lastChildcCs|j|jkr0xt|jƒD]}| ||¡qW|S|j|jkrXtj dt |ƒt |ƒf¡‚|j dk rn|j   |¡|dkr‚|  |¡nˆy|j  |¡}Wntk r°tj ¡‚YnX|jtkrÄt|ƒ|j ||¡||_||_|rþ|j|d}||_||_nd|_||_ |S)Nz%s cannot be child of %sé)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]}| |¡qW|S|j|jkrXtj dt |ƒt |ƒf¡‚n|jt krjt |ƒ|j dk r€|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.appendChildcCs|j|jkr(|j}| |¡| ||¡S|j|jkrPtj dt |ƒt |ƒf¡‚||kr\dS|j dk rr|j  |¡y|j   |¡}Wnt k r tj ¡‚YnX||j |<||_ d|_ |jtksÌ|jtkrÔt|ƒ|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 Ú replaceChild‚s<         zNode.replaceChildcCs€y|j |¡Wntk r.tj ¡‚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_| ¡qÀ|r–|dj|jkr–|d}|j|j|_|j|_|jrŒ||j_| ¡qÀ| |¡q | |¡|jtj kr |  ¡q W||jdd…<dS)Nr() 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|jj ||¡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| |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.getUserDatacCsnd}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|j ¡ƒD]&\}\}}|dk r| |||||¡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] }| ¡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 | ¡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}||_||_| |¡||_dS)Nr()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| dd¡ dd¡ dd¡ dd¡}| |¡d S) zWrites datachars to writer.ú&z&úz>N)ÚreplaceÚwrite)r"rGr r r Ú _write_data.srcCsHxB|jD]8}|jtjkr4|dks*|j|kr4| |¡t|||ƒqW|S)Nr)r$rr rJÚtagNamerIÚ_get_elements_by_tagName_helper)ÚparentÚnameÚrcrAr r r r5s    rcCs\xV|jD]L}|jtjkr|dks*|j|krF|dks<|j|krF| |¡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¼eZdZdZejZdZdZdZ ej ej fZ e ddfdd„Zdd„Zdd „Zd d „Zd d „ZeeeƒZZdd„Zdd„ZeeeƒZZdd„Zdd„ZeeeƒZdd„Zdd„Zdd„ZdS)ÚAttr)Ú_nameÚ_valuerrÚ_prefixr$Ú _localNamerOÚ ownerElementNFcCs2d|_||_||_||_tƒ|_|j tƒ¡dS)N)r•r‘rrr“rkr$rIÚText)r ÚqNamerrrwrsr r r r‡bs z Attr.__init__cCs.y|jStk r(|j dd¡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 rr r r Ú _set_value…s    zAttr._set_valuecCs|jS)N)r“)r r r r Ú _get_prefixŽszAttr._get_prefixcCsd|j}|dkr&|r&|tkr&tj d¡‚||_|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] }|  ¡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| |¡}|dkr@dS|jrV| |j|j¡S| |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| |¡}|dkr6tS|jrL| |j|j¡S| |j¡SdS)N) rOr•Ú_no_typer«rrÚgetAttributeTypeNSrwÚgetAttributeTyperˆ)r rurªr®r r r Ú_get_schemaTypeÃs zAttr._get_schemaType) rorprqÚ __slots__r ÚATTRIBUTE_NODErrŠršr§rFrŒr.rr‡rWr›rœržÚpropertyrˆrƒrŸr r‰rr¡r¤rsrHr¯r³r r r r rXs,   rr­z True if this attribute is an ID.z'Namespace-local name of this attribute.Ú schemaTypezSchema type for this attribute.c@sòeZdZdZdZdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z d:dd„ZeZdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„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. )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_lengthcCs0y|t|j ¡ƒ|Stk r*dSXdS)N)rer¥ÚkeysÚ IndexError)r r6r r r ÚitemészNamedNodeMap.itemcCs.g}x$|j ¡D]}| |j|jf¡qW|S)N)r¥ÚvaluesrIrˆr)r rLrAr r r rfïszNamedNodeMap.itemscCs4g}x*|j ¡D]}| |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 |j ¡S)N)r¥r½)r r r r r½szNamedNodeMap.keyscCs |j ¡S)N)r¦r½)r r r r ÚkeysNSszNamedNodeMap.keysNScCs |j ¡S)N)r¥rÀ)r r r r rÀszNamedNodeMap.valuesNcCs|j ||¡S)N)r¥Úget)r rƒrr r r rÆ szNamedNodeMap.getcCs:|jt|ddƒkrdSt|ƒt|ƒkt|ƒt|ƒkSdS)Nr¥r)r¥ÚgetattrÚid)r rXr r r Ú_cmpszNamedNodeMap._cmpcCs| |¡dkS)Nr)rÉ)r rXr r r Ú__eq__szNamedNodeMap.__eq__cCs| |¡dkS)Nr)rÉ)r rXr r r Ú__ge__szNamedNodeMap.__ge__cCs| |¡dkS)Nr)rÉ)r rXr r r Ú__gt__szNamedNodeMap.__gt__cCs| |¡dkS)Nr)rÉ)r rXr r r Ú__le__szNamedNodeMap.__le__cCs| |¡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__cCsvt|tƒrRy|j|}Wn0tk rHt|ƒ}|jj|_| |¡YnX||_n t|tƒsdt dƒ‚|}| |¡dS)Nz%value must be a string or Attr object) rÂrÃr¥r]rr¹rOÚ setNamedItemrÚ TypeError)r ÚattnamerrAr r r Ú __setitem__+s   zNamedNodeMap.__setitem__cCs$y |j|Stk rdSXdS)N)r¥r])r rƒr r r Ú getNamedItem:s zNamedNodeMap.getNamedItemcCs(y|j||fStk r"dSXdS)N)r¦r])r rrrwr r r ÚgetNamedItemNS@szNamedNodeMap.getNamedItemNScCsX| |¡}|dk rJt|jƒ|j|j=|j|j|jf=t|dƒrFd|_ |St j   ¡‚dS)Nr•) rÕr:r¹r¥rˆr¦rrrwrdr•r/r0r8)r rƒÚnr r r ÚremoveNamedItemFs    zNamedNodeMap.removeNamedItemcCsZ| ||¡}|dk rLt|jƒ|j|j|jf=|j|j=t|dƒrHd|_ |St j   ¡‚dS)Nr•) rÖr:r¹r¦rrrwr¥rˆrdr•r/r0r8)r rrrwr×r r r ÚremoveNamedItemNSRs    zNamedNodeMap.removeNamedItemNScCstt|tƒs&tj dt|ƒt|ƒf¡‚|j |j¡}|r@|  ¡||j|j<||j |j |j f<|j |_t|jƒ|S)Nz%s cannot be child of %s)rÂrr/r0r1r2r¥rÆrƒrHr¦rrrwr¹r•r:)r rArar r r rÑ^s   zNamedNodeMap.setNamedItemcCs | |¡S)N)rÑ)r rAr r r ÚsetNamedItemNSkszNamedNodeMap.setNamedItemNScCs||}t|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__)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¸Úlengthz$Number of nodes in the NamedNodeMap.c@s0eZdZdZdd„Zdd„Zdd„Zdd „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_namespaceszTypeInfo._get_namespaceN)rorprqr´r‡rårœrær r r r râs râc@s eZdZdZejZdZeZ dZ ejej ej ej ejejfZeddfdd„Zdd„Zdd „Zd d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZeZdd„Zdd„Z d d!„Z!e!Z"d"d#„Z#d$d%„Z$d&d'„Z%d(d)„Z&d*d+„Z'd9d-d.„Z(d/d0„Z)d1d2„Z*d3d4„Z+d5d6„Z,d7d8„Z-dS):ÚElement) rOr3r€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_attributescCs.y|jStk r(|j dd¡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|j ¡ƒD] }| ¡qWd|_d|_t |¡dS)N)r¥rerÀrHr¦r )r Úattrr r r rHÈs   zElement.unlinkcCs4|jdkrdSy |j|jStk r.dSXdS)Nr)r¥rr])r rÓr r r Ú getAttributeÐs   zElement.getAttributecCs8|jdkrdSy|j||fjStk r2dSXdS)Nr)r¦rr])r rrrwr r r ÚgetAttributeNSØs  zElement.getAttributeNScCsV| |¡}|dkr4t|ƒ}||_|j|_| |¡n||jkrR||_|jrRt|ƒdS)N)ÚgetAttributeNoderrrOÚsetAttributeNoder­r:)r rÓrrêr r r Ú setAttributeàs   zElement.setAttributecCs€t|ƒ\}}| ||¡}|dkrHt||||ƒ}||_|j|_| |¡n4||jkrf||_|jrft|ƒ|j|kr|||_||_ dS)N) Ú_nssplitÚgetAttributeNodeNSrrrOrîr­r:rsrˆ)r rrÚ qualifiedNamerrsÚ localnamerêr r r ÚsetAttributeNSìs     zElement.setAttributeNScCs|jdkrdS|j |¡S)N)r¥rÆ)r Zattrnamer r r ríýs zElement.getAttributeNodecCs|jdkrdS|j ||f¡S)N)r¦rÆ)r rrrwr r r rñs zElement.getAttributeNodeNScCsš|jd|fkrtj d¡‚| ¡|j |jd¡}|dk rD| |¡|j  |j |j fd¡}|dk rt||k rt| |¡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.setAttributeNodecCsP|jdkrtj ¡‚y|j|}Wntk r@tj ¡‚YnX| |¡dS)N)r¦r/r0r8r¥r]rõ)r rƒrêr r r ÚremoveAttributes  zElement.removeAttributecCsT|jdkrtj ¡‚y|j||f}Wntk rDtj ¡‚YnX| |¡dS)N)r¦r/r0r8r]rõ)r rrrwrêr r r ÚremoveAttributeNS%s  zElement.removeAttributeNScCs^|dkrtj ¡‚y|j|jWntk r@tj ¡‚YnXt|ƒ| ¡|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)rrk)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| |d|j¡| ¡}t| ¡ƒ}x4|D],}| d|¡t|||jƒ| d¡q.W|jrô| d¡t|jƒdkr¦|jdj t j kr¦|jd  |ddd¡n8| |¡x"|jD]}|  |||||¡q¸W| |¡| d|j|f¡n| d |¡dS) Nrzz %s="r{r|r*rrz%sz/>%s) r~r€Ú_get_attributesÚsortedr½rrr$r»rr rFr) r r"r Ú addindentr!rºZa_namesZa_namerAr r r rQs$      zElement.writexmlcCs| ¡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| |¡}| |¡dS)N)ríÚsetIdAttributeNode)r rƒÚidAttrr r r ÚsetIdAttributexs zElement.setIdAttributecCs| ||¡}| |¡dS)N)rñr)r rrrwrr r r ÚsetIdAttributeNS|s zElement.setIdAttributeNScCsj|dks| |j¡stj ¡‚t|ƒdk r4tj ¡‚|jsfd|_|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)rrr).rorprqr´r rJrr‰r°r·r¨rrŽrFr‹rŒr.rr‡rèrWrérHrërìrïrôrírñrîZsetAttributeNodeNSr÷rørõZremoveAttributeNodeNSrùrúrûrürårrýrrrrr r r r rç•sP      rçrŠz*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.cCs8t|ƒ| ¡||j|j<||j|j|jf<||_dS)N)r:rèr¥rƒr¦rrrwr•)Úelementrêr r r rö‘s  röc@sfeZdZdZdZdZeƒZdZdZ dd„Z dd„Z dd „Z d d „Z d d „Zdd„Zdd„Zdd„ZdS)Ú ChildlesszMixin that makes childless-ness easy to implement and avoids the complexity of the Node methods that deal with children. r NcCsdS)Nr )r r r r r'§szChildless._get_firstChildcCsdS)Nr )r r r r r)ªszChildless._get_lastChildcCstj |jd¡‚dS)Nz nodes cannot have children)r/r0r1rˆ)r rAr r r r5­szChildless.appendChildcCsdS)NFr )r r r r r%±szChildless.hasChildNodescCstj |jd¡‚dS)Nz nodes do not have children)r/r0r1rˆ)r r>r?r r r r-´szChildless.insertBeforecCstj |jd¡‚dS)Nz nodes do not have children)r/r0r8rˆ)r rCr r r r4¸szChildless.removeChildcCsdS)Nr )r r r r rK¼szChildless.normalizecCstj |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 dd „Z d d „Z e e e ƒZdd d„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 rr 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 rr r r Ú _set_nodeName×sz#ProcessingInstruction._set_nodeNamercCs| d||j|j|f¡dS)Nz %s%s)r~r rG)r r"r rÿr!r r r rÛszProcessingInstruction.writexmlN)rrr)rorprqr rrr´r‡r r r¶r‰r rrˆrr r r r r Ås  r c@sreZdZdZdd„Zdd„ZeZdd„Zdd „Ze eeƒZ Z d d „Z d d „Z dd„Zdd„Zdd„Zdd„ZdS)Ú CharacterData)Ú_datarOr3r=r<cCs,d|_|_d|_|_d|_t |¡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|dkrtj d¡‚|t|jƒkr.tj d¡‚|dkrBtj d¡‚|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|dkrtj d¡‚|t|jƒkr.tj d¡‚|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|dkrtj d¡‚|t|jƒkr.tj d¡‚|dkrBtj d¡‚|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|dkrtj d¡‚|t|jƒkr.tj d¡‚|dkrBtj d¡‚|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)rorprqr´r‡r¼ràrrr¶rGr‰rårrrrrr r r r rßs    rzLength of the string data.c@sHeZdZdZejZdZdZdd„Z ddd„Z d d „Z d d „Z d d„Z dS)r–r z#textNcCs’|dks|t|jƒkr"tj d¡‚| ¡}|j|d…|_|j|_|j}|jr~||jj kr~|dkrp|j  |¡n|j  ||¡|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@| d|j¡|j}qPqW|j}x4|dk r€|jtjtjfkr|| |j¡|j}qNPqNWd  |¡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}| |¡|}qPqW|j}|sX| |¡x6|dk rŽ|jtjtjfkrŠ|j}| |¡|}qZPqZW|rž||_|SdSdS)N) r3r=rr rFr‹r4r<rG)r Zcontentr‚r×rr r r ÚreplaceWholeTextVs*     zText.replaceWholeTextcCsF|j ¡rdSt|ƒ}|dkr"dS|j |¡}|dkr:dS| ¡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Šrrr r!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 rs    rc@s(eZdZejZdZdd„Zddd„ZdS) ÚCommentz#commentcCst |¡||_dS)N)rr‡r)r rGr r r r‡šs zComment.__init__rcCs,d|jkrtdƒ‚| d||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$eZdZdZejZdZddd„ZdS)Ú CDATASectionr z#cdata-sectionrcCs,|j d¡dkrtdƒ‚| d|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@szeZdZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)ÚReadOnlySequentialNamedNodeMap)Ú_seqr cCs ||_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 | |¡}|dkr0t|ƒ‚|S)N)rÂr,rÖrÕr])r Z name_or_tuplerAr r r rÐÇs    z*ReadOnlySequentialNamedNodeMap.__getitem__cCs0|dkr dSy |j|Stk r*dSXdS)Nr)r*r¾)r r6r r r r¿Ðs  z#ReadOnlySequentialNamedNodeMap.itemcCstj d¡‚dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rƒr r r rØØsz.ReadOnlySequentialNamedNodeMap.removeNamedItemcCstj d¡‚dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rrrwr r r rÙÜsz0ReadOnlySequentialNamedNodeMap.removeNamedItemNScCstj d¡‚dS)Nz"NamedNodeMap instance is read-only)r/r0r)r rAr r r rÑàsz+ReadOnlySequentialNamedNodeMap.setNamedItemcCstj d¡‚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,eZdZdZdZdd„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)rorprqrßr´r/r0r1r 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  |¡| |||¡qJWxZ|jj D]N}t|j|j |j |jƒ}|j|_|j|_|j|_|jj  |¡| |||¡qŠW| |||¡|SdSdS)N)rOr2rƒrˆr/r0ÚUserDataHandlerÚ NODE_CLONEDr3r*r4ÚNotationr-r.rIrjÚEntityÚ notationNameÚactualEncodingrrU)r rPÚclonergr×ÚnotationÚeÚentityr r r rQs.  zDocumentType.cloneNodercCsŽ| d¡| |j¡|jr8| d||j||jf¡n|jrR| d||jf¡|jdk r|| d¡| |j¡| d¡| d|¡dS)Nz r r r r‡FszEntity.__init__cCs|jS)N)r<)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_versioncCstj d¡‚dS)Nz(cannot append children to an entity node)r/r0r1)r r>r r r r5UszEntity.appendChildcCstj d¡‚dS)Nz+cannot insert children below an entity node)r/r0r1)r r>r?r r r r-YszEntity.insertBeforecCstj d¡‚dS)Nz*cannot remove children from an entity node)r/r0r1)r rCr r r r4]szEntity.removeChildcCstj d¡‚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‡rCrDrEr5r-r4rDr r r r r:=sr:c@seZdZejZdZdd„ZdS)r9NcCs||_| ||¡dS)N)rˆr/)r rƒr-r.r r r r‡iszNotation.__init__)rorprqr rrr‰r‡r r r r r9esr9c@sHeZdZddddddddgZd d „Zd d „Zd d„Zdd„Zdd„ZdS)ÚDOMImplementation)Úcorez1.0)rGz2.0)rGN)r/z1.0)r/z2.0)r/N)zls-loadz3.0)zls-loadNcCs|dkr d}| ¡|f|jkS)Nr)ÚlowerÚ _features)r rTrUr r r rSyszDOMImplementation.hasFeaturec CsÔ|r|jdk rtj d¡‚| ¡}|dko8|dko8|dk }|sP|rPtj d¡‚|r´t|ƒ\}}|dkr||dkr|tj d¡‚|r|stj d¡‚| ||¡}|rª|  |¡|  |¡|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òrMruZadd_root_elementrsrórr r r ÚcreateDocument~s4        z DOMImplementation.createDocumentcCst|ƒ}||_||_|S)N)r2r-r.)r ròr-r.rMr r r ÚcreateDocumentType«sz$DOMImplementation.createDocumentTypecCs| |d¡r|SdSdS)N)rS)r rTr r r rZ³s zDOMImplementation.getInterfacecCstƒS)N)ÚDocument)r r r r rKºsz"DOMImplementation._create_documentN) rorprqrIrSrNrOrZrKr r r r rFns-rFc@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 rRr r r r­ÙszElementInfo.isIdcCsdS)z|jtjkr|j ¡d|_nt|ƒr:|jj ¡d|j_dS)N)rr rÚ _id_cacheÚclearÚ_id_search_stackrxrO)rAr r r r:çs    r:c@sreZdZdZejejejejfZ e ƒZ ej Z dZdZdZdZdZZdZdZdZdZdZdZdZdZdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z!dd„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/„Z0d0d1„Z1d2d3„Z2d4d5„Z3d6d7„Z4d8d9„Z5d:d;„Z6dd?„Z8d@dA„Z9dBdC„Z:dIdEdF„Z;dGdH„Z|j |¡|jtj kr^|  ¡r^tj d¡‚t  ||¡S)Nz%s cannot be child of %sz two document elements disallowed) rr.r/r0r1r2r3r4r rJÚ_get_documentElementr5)r rAr r r r52s    zDocument.appendChildcCsVy|j |¡Wntk r.tj ¡‚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 raNs  zDocument._get_documentElementcCs(|jdk r|j ¡d|_t |¡dS)N)rMrHr )r r r r rHSs  zDocument.unlinkcCsÂ|sdS|j ddd¡}|j|_|j|_|j|_xx|jD]n}t|||ƒ}|j |¡sXt ‚|j  |¡|j t j kr€|jdks t ‚n |j t jkr |jdksšt ‚||_||_q8W| tjjj||¡|S)N)rRrNrr]rUr$rNrOrYÚAssertionErrorrIrr rrbrBrMr3rjr/r0r7r8)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)r rO)r r rGÚpr r r ÚcreateProcessingInstructions z$Document.createProcessingInstructioncCst|ƒ}||_d|_|S)Nr)rrOr)r r—Úar r r ÚcreateAttribute’szDocument.createAttributecCs"t|ƒ\}}t|||ƒ}||_|S)N)rðrçrO)r rrròrsrwr?r r r rL˜s  zDocument.createElementNScCs*t|ƒ\}}t||||ƒ}||_d|_|S)Nr)rðrrOr)r rrròrsrwrlr r r ÚcreateAttributeNSžs  zDocument.createAttributeNScCst||||ƒ}||_|S)N)r:rO)r rƒr-r.r;r?r r r Ú_create_entity¨szDocument._create_entitycCst|||ƒ}||_|S)N)r9rO)r rƒr-r.r×r r r Ú_create_notation­s zDocument._create_notationcCs’||jkr|j|S|js$|js$dS|j}|dkrB|jg}||_n|sJdSd}x<|rŒ| ¡}| dd„|jDƒ¡| |¡}|r>xø|j   ¡D]¦}|j rÒ|  |j |j ¡rÐ||j|j<|j|krÈ|}n|jsÐPq’| |j¡r||j|j<|j|krü|}n |js8Pq’|jr’||j|j<|j|kr,|}q’|jdkr’Pq’WnB|jr€x8|j   ¡D]*}|jrR||j|j<|j|krR|}qRW|dk rRPqRW|S)NcSsg|]}|jtkr|‘qSr )rr9)Ú.0rMr r r ú Æsz+Document.getElementById..r*)rTrWr©rVrbÚpopÚextendr$r«rŠrÀrrr¬rwrr¨r­rƒr§)r rÈÚstackÚresultrAr®rêr r r ÚgetElementById²sZ               zDocument.getElementByIdcCst||tƒƒS)N)rrk)r rƒr r r rûìszDocument.getElementsByTagNamecCst|||tƒƒS)N)r…rk)r rrrwr r r rüïszDocument.getElementsByTagNameNScCs|j ||¡S)N)rRrS)r rTrUr r r rVószDocument.isSupportedcCs>|jtjkrtj d¡‚n|jtjkr2tj d¡‚t|||ƒS)Nzcannot import document nodesz!cannot import document type nodes)rr rr/r0ÚNotSupportedErrrBrN)r rArPr r r Ú importNodeös    zDocument.importNodercCsN|dkr| d|¡n| d||f¡x|jD]}| ||||¡q2WdS)Nzz%%s)r~r$r)r r"r rÿr!rrAr r r rýs   zDocument.writexmlcCsJ|j|k r tj d||jf¡‚|jtjtjfkr>tj d¡‚|t kr¶d|kr€|  dd¡\}}|dkr´|tjj kr´tj  d¡‚q¾|dkr¬|tjj kr¬|jtjkr¬tj  d¡‚d}|}nd}d}|jtjkrê|j }|dk rî|j}| |¡nd}||_||_||_||_|jtjkr||_n*||_|dk rF| |¡|rF| |¡|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/r0rJrr rJrµrxrr™rr£r•r§rõrsr”rrrˆr€rƒrîr)r r×rrrƒrsrwrZis_idr r r Ú renameNodesR         zDocument.renameNode)rrrN)=rorprqr´r rJrrŽrBr.rFrRrrrˆr‰rŠr3r=r<r<rr]rUr_r[rYr©r‡r«rCrXrZrDr\r^r`rEr5r4rarHrQrdrergrhrirkrmrLrnrorprwrûrürVryrrzr r r r rPïsf    : rPrbz#Top-level element of this document.c Csì|j |¡rtjjj}n tjjj}|jtj kr¬|  |j |j ¡}x>|j  ¡D]0}| |j |j |j¡| |j |j¡}|j|_qJW|r¨x$|jD]}t|||ƒ}| |¡qŠWn"|jtjkrî| ¡}|rêx$|jD]}t|||ƒ}| |¡qÌWnà|jtjkr | |j¡}nÂ|jtjkr*| |j¡}n¤|jtjkrL| |j |j¡}n‚|jtj!krj| "|j¡}nd|jtj#krš| $|j |j ¡}d|_|j|_n4|jtj%krº|j|k s¸t&‚tjjj}|j' (|j)|j*|j+¡}||_|rÎg|j,_-g|j._-xR|j.j-D]F} t/| j | j*| j+ƒ} || _|j.j- 0| ¡t1| dƒrþ|  2|| | ¡qþWx„|j,j-D]b} t3| j | j*| j+| j4ƒ} | j5| _5| j6| _6| j7| _7|| _|j,j- 0| ¡t1| dƒrR|  2|| | ¡qRWntj 8dt9|ƒ¡‚t1|dƒrè| 2|||¡|S)zo Clone a node and give it the new owner document. Called by Node.cloneNode and Document.importNode TrjzCannot clone node %s):rOrYr/r0r7r8Z NODE_IMPORTEDrr rJrLrrrˆrŠrÀrôrrñrwršr$rNr5r+rdrFrgrGr‹rhrrkr rŽrirµrnrBrcrRrOrƒr-r.r3r*r4r9rIrdrjr:r;r<rrUrxr2) rArPZnewOwnerDocumentrgr=rêrlrMr@r×r>r?r@r r r rNAs~                rNcCs,| dd¡}t|ƒdkr|Sd|dfSdS)Nr˜r*ér)r™r»)ròZfieldsr r r rð“s  rðcCs,|||Ž}| ¡\}}| |¡| ¡|S)N)ZgetEventZ expandNoderU)ÚfuncÚargsÚkwargsZeventsZtoktypeZrootNoder r r Ú_do_pulldom_parse›s    rcCsH|dkr"|s"ddlm}| |¡Sddlm}t|j|f||dœƒSdS)z3Parse a file into a DOM by filename or file object.Nr)Ú expatbuilder)Úpulldom)ÚparserÚbufsize)Úxml.domr€Úparserr)Úfiler‚rƒr€rr r r r…¢s      r…cCsB|dkrddlm}| |¡Sddlm}t|j|fd|iƒSdS)z&Parse a file into a DOM from a string.Nr)r€)rr‚)r„r€Ú parseStringrr)Ústringr‚r€rr r r r‡¬s     r‡cCsB|rsŒ v  y$ w )GU  ><( O*PR