U e5d)ã@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 ú'/usr/lib64/python3.8/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Ú childNodesr r r r Ú hasChildNodesCszNode.hasChildNodescCs|jSr%©r'r r r r Ú_get_childNodesFszNode._get_childNodescCs|jr|jdSdS©Nrr)r r r r Ú_get_firstChildIszNode._get_firstChildcCs|jr|jdSdS©Néÿÿÿÿr)r r r r Ú_get_lastChildMszNode._get_lastChildcCs |j|jkr,t|jƒD]}| ||¡q|S|j|jkrTtj dt |ƒt |ƒf¡‚|j dk rj|j   |¡|dkr~|  |¡nˆz|j  |¡}Wntk r¬tj ¡‚YnX|jtkrÀt|ƒ|j ||¡||_||_|rú|j|d}||_||_nd|_||_ |S)Nú%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Úcr=Únoder r r r4Qs8  ÿ    zNode.insertBeforecCs�|j|jkr*t|jƒD]}| |¡q|S|j|jkrTtj dt |ƒt |ƒf¡‚n|jt krft |ƒ|j dk r||j   |¡t||ƒd|_|S©Nr0)rr2r3r'r<r5r6r7r8r9r@rAr:r;Ú _append_childrC)r rHrGr r r r<qs   ÿ    zNode.appendChildcCs|j|jkr(|j}| |¡| ||¡S|j|jkrPtj dt |ƒt |ƒf¡‚||kr\dS|j dk rr|j  |¡z|j   |¡}Wnt k r tj ¡‚YnX||j |<||_ d|_ |jtksÌ|jtkrÔt|ƒ|j|_|j|_d|_d|_|jrþ||j_|j�r||j_|SrI)rr2rCr;r4r5r6r7r8r9r:r'r=r>r?r@rArD)r rEÚoldChildrFr=r r r Ú replaceChild‚s@    ÿ    ÿzNode.replaceChildcCs€z|j |¡Wntk r.tj ¡‚YnX|jdk rD|j|j_|jdk rX|j|j_d|_|_|jt krvt |ƒd|_ |Sr%) r'Úremover>r6r7r?rCrDrr@rAr:©r rKr r r r;¢s      zNode.removeChildcCsÒg}|jD]´}|jtjkr |jsJ|r0|j|d_|jr@|j|j_| ¡q¾|r”|dj|jkr”|d}|j|j|_|j|_|jrŠ||j_| ¡q¾| |¡q | |¡|jtj kr |  ¡q ||jdd…<dSr-) r'rr Ú TEXT_NODEÚdatarCrDÚunlinkÚappendÚ ELEMENT_NODEÚ normalize)r ÚLÚchildrHr r r rT²s*          zNode.normalizecCst|||jp|ƒSr%)Ú _clone_nodeÚ ownerDocument)r Údeepr r r Ú cloneNodeÍszNode.cloneNodecCs|jj ||¡Sr%)rXÚimplementationÚ hasFeature©r ÚfeatureÚversionr r r Ú isSupportedÐszNode.isSupportedcCsdSr%r r r r r Ú_get_localNameÓszNode._get_localNamecCs||kSr%r ©r Úotherr r r Ú isSameNodeÙszNode.isSameNodecCs| |d¡r|SdSdSr%)r`©r r^r r r Ú getInterfaceÜs zNode.getInterfacec Cs0z|j|dWSttfk r*YdSXdSr+)Ú _user_dataÚAttributeErrorÚKeyError©r Úkeyr r r Ú getUserDataæszNode.getUserDatacCsnd}z |j}Wntk r,i}||_YnX||krB||d}|dkr^d}|dk rj||=n ||f||<|Sr+)rgrh)r rkrPÚhandlerÚoldÚdr r r Ú setUserDataìs    zNode.setUserDatacCsDt|dƒr@t|j ¡ƒD]&\}\}}|dk r| |||||¡qdS)Nrg)ÚhasattrÚlistrgÚitemsZhandle)r Ú operationÚsrcZdstrkrPrmr r r Ú_call_user_data_handlerþs zNode._call_user_data_handlercCs>d|_|_|jr.|jD] }| ¡qtƒ|_d|_d|_dSr%)r:rXr'rQÚNodeListrDrC)r rVr r r rQs   z Node.unlinkcCs|Sr%r r r r r Ú __enter__szNode.__enter__cCs | ¡dSr%)rQ)r ZetZevÚtbr r r Ú__exit__sz Node.__exit__)N)rrN)!Ú__name__Ú __module__Ú __qualname__Ú namespaceURIr:rXrCrDrÚprefixrrrr(r*r,r/r4r<rLr;rTrZr`rardrfrlrprvrQrxrzr 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}||_||_| |¡||_dSr-)r'rDrCrRr:)r rHr'Zlastr r r rJs rJcCs$|dk r |jtjkrdS|j}qdS©NTF)rr rr:©rHr r r Ú _in_document&s  r†cCs6|r2| dd¡ dd¡ dd¡ dd¡}| |¡d S) zWrites datachars to writer.ú&z&úz>N)ÚreplaceÚwrite)r$rPr r r Ú _write_data.sÿÿr�cCsD|jD]8}|jtjkr2|dks(|j|kr2| |¡t|||ƒq|S©Nr)r'rr rSÚtagNamerRÚ_get_elements_by_tagName_helper)ÚparentÚnameÚrcrHr r r r�5s  ÿÿ r�cCsX|jD]L}|jtjkr|dks(|j|krD|dks:|j|krD| |¡t||||ƒq|SrŽ)r'rr rSrƒr~rRÚ"_get_elements_by_tagName_ns_helper)r‘ZnsURIrƒr“rHr r r r”=s  ÿÿ r”c@sJeZdZejZdZdZdZdZ ej ej ej ej ejejejfZdd„ZdS)ÚDocumentFragmentz#document-fragmentNcCs tƒ|_dSr%)rwr'r r r r Ú__init__TszDocumentFragment.__init__)r{r|r}r r2rÚnodeNameÚ nodeValueÚ attributesr:rSrOÚCDATA_SECTION_NODEÚENTITY_REFERENCE_NODEÚPROCESSING_INSTRUCTION_NODEÚ COMMENT_NODEÚ NOTATION_NODEr5r–r r r r r•Fsúr•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Ú_valuer~Ú_prefixr'Ú _localNamerXÚ ownerElementNFcCs2d|_||_||_||_tƒ|_|j tƒ¡dSr%)r¤r r~r¢rwr'rRÚText)r ÚqNamer~rƒrr r r r–bs z Attr.__init__cCs4z|jWStk r.|j dd¡dYSXdS©Nú:r1r.)r£rhr—Úsplitr r r r raoszAttr._get_localNamecCs|jSr%)Ú specifiedr r r r Ú_get_specifieduszAttr._get_specifiedcCs|jSr%)r r r r r Ú _get_namexszAttr._get_namecCs||_|jdk rt|jƒdSr%)r r¤rA©r Úvaluer r r Ú _set_name{s zAttr._set_namecCs|jSr%)r¡r r r r Ú _get_value‚szAttr._get_valuecCs6||_||jd_|jdk r&t|jƒ||jd_dSr+)r¡r'rPr¤rAr­r r r Ú _set_value…s    zAttr._set_valuecCs|jSr%)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) r~rr6r7Ú NamespaceErrr¢rƒr¤rAr’)r rZnsuriZnewNamer r r Ú _set_prefix‘s ÿ zAttr._set_prefixcCsv|j}|dk rR|j|j=|j|j|jf=|jrRd|_|jd8_|jj d8_ |j D] }|  ¡qX|j dd…=dS)NFr1) r¤Ú_attrsr—Ú_attrsNSr~rƒÚ_is_idÚ_magic_id_nodesrXÚ_magic_id_countr'rQ)r ÚelemrVr r r rQ¢s   z Attr.unlinkcCsf|jr dS|j}|j}|dks&|dkr*dS| |¡}|dkr@dS|jrV| |j|j¡S| |j¡SdSr„) r¸rXr¤Ú_get_elem_infor~ÚisIdNSrƒÚisIdr—©r r�r»Úinfor r r Ú _get_isId³s zAttr._get_isIdcCs\|j}|j}|dks|dkr tS| |¡}|dkr6tS|jrL| |j|j¡S| |j¡SdSr%) rXr¤Ú_no_typer¼r~ÚgetAttributeTypeNSrƒÚgetAttributeTyper—r¿r r r Ú_get_schemaTypeÃs zAttr._get_schemaType) r{r|r}Ú __slots__r ÚATTRIBUTE_NODErr™rªr¸rOr›r5rr–rar«r¬r¯Úpropertyr—r’r°r±r˜r®r²rµrrQrÁ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ò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||_||_||_dSr%rË)r ÚattrsZattrsNSr¤r r r r–ászNamedNodeMap.__init__cCs t|jƒSr%)Úlenr¶r r r r Ú _get_lengthæszNamedNodeMap._get_lengthcCs4z|t|j ¡ƒ|WStk r.YdSXdSr%)rrr¶ÚkeysÚ IndexError©r r=r r r ÚitemészNamedNodeMap.itemcCs*g}|j ¡D]}| |j|jf¡q|Sr%)r¶ÚvaluesrRr—r®©r rUrHr r r rsïszNamedNodeMap.itemscCs0g}|j ¡D]}| |j|jf|jf¡q|Sr%)r¶rÔrRr~rƒr®rÕr r r ÚitemsNSõszNamedNodeMap.itemsNScCs"t|tƒr||jkS||jkSdSr%)Ú isinstanceÚstrr¶r·rjr r r Ú __contains__ûs  zNamedNodeMap.__contains__cCs |j ¡Sr%)r¶rÐr r r r rÐszNamedNodeMap.keyscCs |j ¡Sr%)r·rÐr r r r ÚkeysNSszNamedNodeMap.keysNScCs |j ¡Sr%)r¶rÔr r r r rÔszNamedNodeMap.valuesNcCs|j ||¡Sr%©r¶Úget)r r’r®r r r rÜ szNamedNodeMap.getcCs:|jt|ddƒkrdSt|ƒt|ƒkt|ƒt|ƒkSdS)Nr¶r)r¶ÚgetattrÚidrbr r r Ú_cmpszNamedNodeMap._cmpcCs| |¡dkSr+©rßrbr r r Ú__eq__szNamedNodeMap.__eq__cCs| |¡dkSr+ràrbr r r Ú__ge__szNamedNodeMap.__ge__cCs| |¡dkSr+ràrbr r r Ú__gt__szNamedNodeMap.__gt__cCs| |¡dkSr+ràrbr r r Ú__le__szNamedNodeMap.__le__cCs| |¡dkSr+ràrbr r r Ú__lt__!szNamedNodeMap.__lt__cCs"t|tƒr|j|S|j|SdSr%)r×r3r·r¶)r Úattname_or_tupler r r Ú __getitem__$s  zNamedNodeMap.__getitem__cCsvt|tƒrRz|j|}Wn0tk rHt|ƒ}|jj|_| |¡YnX||_n t|tƒsdt dƒ‚|}| |¡dS)Nz%value must be a string or Attr object) r×rØr¶rirŸrÌrXÚ setNamedItemr®Ú TypeError)r Úattnamer®rHr r r Ú __setitem__+s   zNamedNodeMap.__setitem__cCs(z |j|WStk r"YdSXdSr%)r¶ri©r r’r r r Ú getNamedItem:s zNamedNodeMap.getNamedItemcCs,z|j||fWStk r&YdSXdSr%)r·ri©r r~rƒr r r ÚgetNamedItemNS@szNamedNodeMap.getNamedItemNScCsX| |¡}|dk rJt|jƒ|j|j=|j|j|jf=t|dƒrFd|_ |St j   ¡‚dS©Nr¤) rírArÌr¶r—r·r~rƒrqr¤r6r7r?©r r’Únr r r ÚremoveNamedItemFs    zNamedNodeMap.removeNamedItemcCsZ| ||¡}|dk rLt|jƒ|j|j|jf=|j|j=t|dƒrHd|_ |St j   ¡‚dSrð) rïrArÌr·r~rƒr¶r—rqr¤r6r7r?©r r~rƒròr r r ÚremoveNamedItemNSRs    zNamedNodeMap.removeNamedItemNScCstt|tƒs&tj dt|ƒt|ƒf¡‚|j |j¡}|r@|  ¡||j|j<||j |j |j f<|j |_t|jƒ|SrI)r×rŸr6r7r8r9r¶rÜr’rQr·r~rƒrÌr¤rA)r rHrnr r r rè^s ÿ  zNamedNodeMap.setNamedItemcCs | |¡Sr%)rè©r rHr r r ÚsetNamedItemNSkszNamedNodeMap.setNamedItemNScCs||}t|jƒ| ¡dSr%)rAr¤rQ)r rærHr r r Ú __delitem__ns zNamedNodeMap.__delitem__cCs|j|j|jfSr%rËr r r r Ú __getstate__sszNamedNodeMap.__getstate__cCs|\|_|_|_dSr%rË©r Ústater r r Ú __setstate__vszNamedNodeMap.__setstate__)N)!r{r|r}Ú__doc__rÆr–rÏrÓrsrÖ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@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚTypeInfo©Ú namespacer’cCs||_||_dSr%r)r rr’r r r r–‚szTypeInfo.__init__cCs2|jrd|jj|j|jfSd|jj|jfSdS)Nz<%s %r (from %r)>z<%s %r>)rÚ __class__r{r’r r r r Ú__repr__†s  ÿzTypeInfo.__repr__cCs|jSr%)r’r r r r r¬�szTypeInfo._get_namecCs|jSr%)rr r r r Ú_get_namespace�szTypeInfo._get_namespaceN)r{r|r}rÆr–rr¬rr 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) rXr:r�r—rr~r£r'r¶r·rCrDNrcCsBd|_||_|_||_||_tƒ|_d|_|_d|_ d|_ dSr%) r:r�r—rr~rwr'rCrDr¶r·)r r�r~rrƒr r r r–¦s  zElement.__init__cCs|jdkri|_i|_dSr%)r¶r·r r r r Ú_ensure_attributesºs zElement._ensure_attributescCs4z|jWStk r.|j dd¡dYSXdSr§)r£rhr�r©r r r r ra¿szElement._get_localNamecCs|jSr%©r�r r r r Ú _get_tagNameÅszElement._get_tagNamecCs@|jdk r&t|j ¡ƒD] }| ¡qd|_d|_t |¡dSr%)r¶rrrÔrQr·r )r Úattrr r r rQÈs   zElement.unlinkcCs8|jdkrdSz|j|jWStk r2YdSXdSr)r¶r®ri)r rêr r r Ú getAttributeÐs  zElement.getAttributecCs<|jdkrdSz|j||fjWStk r6YdSXdSr)r·r®rirîr r r ÚgetAttributeNSØs  zElement.getAttributeNScCsV| |¡}|dkr4t|ƒ}||_|j|_| |¡n||jkrR||_|jrRt|ƒdSr%)ÚgetAttributeNoderŸr®rXÚsetAttributeNoder¾rA)r rêr®r r r r Ú setAttributeàs   zElement.setAttributecCs€t|ƒ\}}| ||¡}|dkrHt||||ƒ}||_|j|_| |¡n4||jkrf||_|jrft|ƒ|j|kr|||_||_ dSr%) Ú_nssplitÚgetAttributeNodeNSrŸr®rXr r¾rArr—)r r~Ú qualifiedNamer®rÚ localnamer r r r ÚsetAttributeNSìs     zElement.setAttributeNScCs|jdkrdS|j |¡Sr%rÛ)r Úattrnamer r r r ýs zElement.getAttributeNodecCs|jdkrdS|j ||f¡Sr%)r·rÜrîr r r rs 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¤r6r7ZInuseAttributeErrrr¶rÜr’ÚremoveAttributeNoder·r~rƒÚ_set_attribute_node)r r Zold1Zold2r r r r s    zElement.setAttributeNodecCsP|jdkrtj ¡‚z|j|}Wntk r@tj ¡‚YnX| |¡dSr%)r·r6r7r?r¶rir)r r’r r r r ÚremoveAttributes  zElement.removeAttributecCsT|jdkrtj ¡‚z|j||f}Wntk rDtj ¡‚YnX| |¡dSr%)r·r6r7r?rir)r r~rƒr r r r ÚremoveAttributeNS%s  zElement.removeAttributeNScCs^|dkrtj ¡‚z|j|jWntk r@tj ¡‚YnXt|ƒ| ¡|j|_|Sr%) r6r7r?r¶r’rirArQrXrör r r r.s zElement.removeAttributeNodecCs|jdkrdS||jkS©NF©r¶rìr r r Ú hasAttribute>s zElement.hasAttributecCs|jdkrdS||f|jkSr)r·rîr r r ÚhasAttributeNSCs zElement.hasAttributeNScCst||tƒƒSr%©r�rwrìr r r ÚgetElementsByTagNameHszElement.getElementsByTagNamecCst|||tƒƒSr%©r”rwrîr r r ÚgetElementsByTagNameNSKs ÿzElement.getElementsByTagNameNScCsd|jt|ƒfS)Nz)r�rÞr r r r rOszElement.__repr__rcCsü| |d|j¡| ¡}| ¡D],}| d|¡t|||jƒ| d¡q$|jrê| d¡t|jƒdkr |jdjt j t j fkr |jd  |ddd¡n4| |¡|jD]}|  |||||¡q°| |¡| d|j|f¡n| d |¡dS) Nrˆz %s="r‰rŠr1rrz%sz/>%s) rŒr�Ú_get_attributesrÐr�r®r'rÎrr rOršr)r r$r"Ú addindentr#rÍZa_namerHr r r rRs*    ÿÿ   zElement.writexmlcCs| ¡t|j|j|ƒSr%)rrÊr¶r·r r r r r!mszElement._get_attributescCs|jr dSdSdSr„rr r r r Ú hasAttributesqszElement.hasAttributescCs| |¡}| |¡dSr%)r ÚsetIdAttributeNode)r r’ÚidAttrr r r ÚsetIdAttributeys zElement.setIdAttributecCs| ||¡}| |¡dSr%)rr$)r r~rƒr%r r r ÚsetIdAttributeNS}s zElement.setIdAttributeNScCsj|dks| |j¡stj ¡‚t|ƒdk r4tj ¡‚|jsfd|_|jd7_|j j d7_ t |ƒdS)NTr1) rdr¤r6r7r?Ú_get_containing_entrefÚNoModificationAllowedErrr¸r¹rXrºrA)r r%r r r r$�s   zElement.setIdAttributeNode)rrr).r{r|r}rÆr rSrr˜rÂrÉr¹rœr�rOršr›r5rr–rrarrQr r rrr rr ZsetAttributeNodeNSrrrZremoveAttributeNodeNSrrrr rrr!r#r&r'r$r r r r r•sTûÿ     rr™z*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.cCs8t|ƒ| ¡||j|j<||j|j|jf<||_dSr%)rArr¶r’r·r~rƒr¤)Úelementr r r r r’s  rc@sfeZdZdZdZdZeƒZdZdZ dd„Z dd„Z dd „Z d d „Z d d „Zdd„Zdd„Zdd„ZdS)Ú Childlessz�Mixin that makes childless-ness easy to implement and avoids the complexity of the Node methods that deal with children. r NcCsdSr%r r r r r r,¨szChildless._get_firstChildcCsdSr%r r r r r r/«szChildless._get_lastChildcCstj |jd¡‚dS)Nz nodes cannot have children©r6r7r8r—rör r r r<®sÿzChildless.appendChildcCsdSrr r r r r r(²szChildless.hasChildNodescCstj |jd¡‚dS©Nz nodes do not have childrenr,©r rErFr r r r4µsÿzChildless.insertBeforecCstj |jd¡‚dSr-)r6r7r?r—rNr r r r;¹sÿzChildless.removeChildcCsdSr%r r r r r rT½szChildless.normalizecCstj |jd¡‚dSr-r,©r rErKr r r rLÁsÿzChildless.replaceChild)r{r|r}rýrÆr™Z EmptyNodeListr'r€r‚r,r/r<r(r4r;rTrLr r r r r+�sr+c@s\eZdZejZdZdd„Zdd„Zdd„Z e ee ƒZ dd „Z d d „Z e e e ƒZdd d„ZdS)ÚProcessingInstruction©ÚtargetrPcCs||_||_dSr%r1)r r2rPr r r r–ÊszProcessingInstruction.__init__cCs|jSr%©rPr r r r Ú_get_nodeValueÏsz$ProcessingInstruction._get_nodeValuecCs ||_dSr%r3r­r r r Ú_set_nodeValueÑsz$ProcessingInstruction._set_nodeValuecCs|jSr%©r2r r r r Ú _get_nodeNameÖsz#ProcessingInstruction._get_nodeNamecCs ||_dSr%r6r­r r r Ú _set_nodeNameØsz#ProcessingInstruction._set_nodeNamercCs| d||j|j|f¡dS)Nz %s%s)rŒr2rP©r r$r"r"r#r r r rÜszProcessingInstruction.writexmlN)rrr)r{r|r}r rœrrÆr–r4r5rÈr˜r7r8r—rr r r r r0Æs  r0c@sreZdZdZdd„Zdd„ZeZdd„Zdd „Ze eeƒZ Z d d „Z d d „Z dd„Zdd„Zdd„Zdd„ZdS)Ú CharacterData)Ú_datarXr:rDrCcCs,d|_|_d|_|_d|_t |¡dSr)rXr:rDrCr;r r–r r r r r–ãs  zCharacterData.__init__cCs t|jƒSr%)rÎrPr r r r rÏészCharacterData._get_lengthcCs|jSr%©r;r r r r Ú _get_dataíszCharacterData._get_datacCs ||_dSr%r<©r rPr r r Ú _set_dataïszCharacterData._set_datacCs6|j}t|ƒdkrd}nd}d|jj|dd…|fS)Né z...rzr)rPrÎrr{)r rPZ dotdotdotr r r rôs  ÿzCharacterData.__repr__cCsT|dkrtj d¡‚|t|jƒkr.tj d¡‚|dkrBtj d¡‚|j|||…S©Nrúoffset cannot be negativeú#offset cannot be beyond end of dataúcount cannot be negative©r6r7Ú IndexSizeErrrÎrP©r ÚoffsetÚcountr r r Ú substringDataýs   zCharacterData.substringDatacCs|j||_dSr%r3)r Úargr r r Ú appendDataszCharacterData.appendDatacCsZ|dkrtj d¡‚|t|jƒkr.tj d¡‚|rVd|jd|…||j|d…f|_dS)NrrBrCú%s%s%srE)r rHrKr r r Ú insertData s    ÿzCharacterData.insertDatacCsl|dkrtj d¡‚|t|jƒkr.tj d¡‚|dkrBtj d¡‚|rh|jd|…|j||d…|_dSrArErGr r r Ú deleteDatas   zCharacterData.deleteDatacCsr|dkrtj d¡‚|t|jƒkr.tj d¡‚|dkrBtj d¡‚|rnd|jd|…||j||d…f|_dS)NrrBrCrDrMrE)r rHrIrKr r r Ú replaceDatas    ÿzCharacterData.replaceDataN)r{r|r}rÆr–rÏrþr=r?rÈrPr˜rrJrLrNrOrPr r r r r:às    r:zLength 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ÎrPr6r7rFrrXrCr:r'r<r4)r rHZnewTextÚnextr r r Ú splitText1s zText.splitTextrcCst|d||j|fƒdS)NrM)r�rPr9r r r r@sz Text.writexmlcCs„|jg}|j}|dk rB|jtjtjfkrB| d|j¡|j}qqBq|j}|dk rz|jtjtjfkrz| |j¡|j}qHqzqHd  |¡S)Nrr) rPrDrr rOršrBrCrRÚjoin)r rUròr r r Ú_get_wholeTextEs zText._get_wholeTextcCsž|j}|j}|dk r@|jtjtjfkr@|j}| |¡|}q q@q |j}|sT| |¡|dk rˆ|jtjtjfkrˆ|j}| |¡|}qTqˆqT|r–||_|SdSdSr%) r:rDrr rOršr;rCrP)r Zcontentr‘ròrQr r r ÚreplaceWholeTextWs*   zText.replaceWholeTextcCsF|j ¡rdSt|ƒ}|dkr"dS|j |¡}|dkr:dS| ¡SdSr)rPÚstripÚ_get_containing_elementrXr¼ÚisElementContent)r r»rÀr r r Ú!_get_isWhitespaceInElementContentss  z&Text._get_isWhitespaceInElementContent)rrr)r{r|r}rÆr rOrr—r™rRrrTrUrYr 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}|dk r&|jtjkr|S|j}qdSr%)r:rr rS©rHrGr r r rW†s  rWcCs*|j}|dk r&|jtjkr|S|j}qdSr%)r:rr r›rZr r r r(Žs  r(c@s(eZdZejZdZdd„Zddd„ZdS) ÚCommentz#commentcCst |¡||_dSr%)r:r–r;r>r r r r–›s zComment.__init__rcCs,d|jkrtdƒ‚| d||j|f¡dS)Nz--z%'--' is not allowed in a comment nodez %s%s)rPr>rŒr9r r r rŸs zComment.writexmlN)rrr) r{r|r}r 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)rPÚfindr>rŒr9r r r r«szCDATASection.writexmlN)rrr) r{r|r}rÆ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 ||_dSr%r_)r Úseqr r r r–´sz'ReadOnlySequentialNamedNodeMap.__init__cCs t|jƒSr%©rÎr`r r r r rþ¸sz&ReadOnlySequentialNamedNodeMap.__len__cCs t|jƒSr%rbr r r r rÏ»sz*ReadOnlySequentialNamedNodeMap._get_lengthcCs"|jD]}|j|kr|SqdSr%)r`r—rñr r r rí¾s  z+ReadOnlySequentialNamedNodeMap.getNamedItemcCs,|jD] }|j|kr|j|kr|SqdSr%)r`r~rƒrôr r r rïÃs z-ReadOnlySequentialNamedNodeMap.getNamedItemNScCs4t|tƒr|j|Ž}n | |¡}|dkr0t|ƒ‚|Sr%)r×r3rïríri)r Z name_or_tuplerHr r r rçÈs    z*ReadOnlySequentialNamedNodeMap.__getitem__cCs4|dkr dSz |j|WStk r.YdSXdSr+)r`rÑrÒr r r rÓÑs  z#ReadOnlySequentialNamedNodeMap.itemcCstj d¡‚dS©Nz"NamedNodeMap instance is read-only©r6r7r)rìr r r róÙsÿz.ReadOnlySequentialNamedNodeMap.removeNamedItemcCstj d¡‚dSrcrdrîr r r rõÝsÿz0ReadOnlySequentialNamedNodeMap.removeNamedItemNScCstj d¡‚dSrcrdrör r r rèásÿz+ReadOnlySequentialNamedNodeMap.setNamedItemcCstj d¡‚dSrcrdrör r r r÷åsÿz-ReadOnlySequentialNamedNodeMap.setNamedItemNScCs|jgSr%r_r r r r rùész+ReadOnlySequentialNamedNodeMap.__getstate__cCs|d|_dSr+r_rúr r r rüìsz+ReadOnlySequentialNamedNodeMap.__setstate__N)r )r{r|r}rÆ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||_||_dSr%rf)r rgrhr r r Ú_identified_mixin_initøsz!Identified._identified_mixin_initcCs|jSr%)rgr r r r Ú _get_publicIdüszIdentified._get_publicIdcCs|jSr%)rhr r r r Ú _get_systemIdÿszIdentified._get_systemIdN)r{r|r}rýrÆrirjrkr r r r reós rec@sHeZdZejZdZdZdZdZ dZ dd„Z dd„Z dd„Z d d d „ZdS) Ú DocumentTypeNcCs2tƒ|_tƒ|_|r&t|ƒ\}}||_|j|_dSr%)r^ÚentitiesÚ notationsrr’r—)r rrrr r r r– s  zDocumentType.__init__cCs|jSr%)ÚinternalSubsetr r r r Ú_get_internalSubsetsz DocumentType._get_internalSubsetcCsî|jdkrætdƒ}|j|_|j|_tjjj}|rÔg|j_ g|j _ |j j D]2}t |j|j |j ƒ}|j j  |¡| |||¡qH|jj D]N}t|j|j |j |jƒ}|j|_|j|_|j|_|jj  |¡| |||¡q„| |||¡|SdSdSr%)rXrlr’r—r6r7ÚUserDataHandlerÚ NODE_CLONEDrmr`rnÚNotationrgrhrRrvÚEntityÚ notationNameÚactualEncodingrr_)r rYÚclonertròÚnotationÚeÚentityr r r rZs0    ÿzDocumentType.cloneNodercCsŽ| d¡| |j¡|jr8| d||j||jf¡n|jrR| d||jf¡|jdk r|| d¡| |j¡| d¡| d|¡dS)Nz srtc@seZdZejZdZdd„ZdS)rsNcCs||_| ||¡dSr%)r—ri)r r’rgrhr r r r–jszNotation.__init__)r{r|r}r ržrr˜r–r r r r rsfsrsc@sHeZdZddddddddgZd d „Zd d „Zd d„Zdd„Zdd„ZdS)ÚDOMImplementation)Úcoreú1.0)r…ú2.0)r…N)r6r†)r6r‡)r6N)úls-loadz3.0)rˆNcCs|dkr d}| ¡|f|jkSr)ÚlowerÚ _featuresr]r r r r\zszDOMImplementation.hasFeaturec CsÔ|r|jdk rtj d¡‚| ¡}|dko8|dko8|dk }|sP|rPtj d¡‚|r´t|ƒ\}}|dkr||dkr|tj d¡‚|r�|s�tj d¡‚| ||¡}|rª|  |¡|  |¡|rÄ||_|_ ||_ ||_ |S)Nz(doctype object owned by another DOM treezElement with no namer6z$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces) r:r6r7ÚWrongDocumentErrÚ_create_documentZInvalidCharacterErrrr´ÚcreateElementNSr<rXÚdoctyper[) r r~rrŽr�Zadd_root_elementrrr*r r r ÚcreateDocuments>ÿÿþ  ÿ ÿ    z DOMImplementation.createDocumentcCst|ƒ}||_||_|Sr%)rlrgrh)r rrgrhrŽr r r ÚcreateDocumentType¬sz$DOMImplementation.createDocumentTypecCs| |d¡r|SdSdSr%)r\rer r r rf´s zDOMImplementation.getInterfacecCstƒSr%)ÚDocumentr r r r rŒ»sz"DOMImplementation._create_documentN) r{r|r}rŠr\r�r�rfrŒr r r r r„osù -r„c@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. rcCs ||_dSr%rrìr r r r–ÉszElementInfo.__init__cCstSr%©r©r Zanamer r r rÄÌszElementInfo.getAttributeTypecCstSr%r“rîr r r rÃÏszElementInfo.getAttributeTypeNScCsdSrr r r r r rXÒ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”r r r r¾ÚszElementInfo.isIdcCsdS)z|jtjkr|j ¡d|_nt|ƒr:|jj ¡d|j_dSr%)rr rÚ _id_cacheÚclearÚ_id_search_stackr†rXr…r r r rAès    rAc@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)Nr0z two document elements disallowed) rr5r6r7r8r9r:r;r rSÚ_get_documentElementr<rör r r r<3s ÿ   ÿÿzDocument.appendChildcCsVz|j |¡Wntk r.tj ¡‚YnXd|_|_d|_|j |krRd|_ |Sr%) r'rMr>r6r7r?rCrDr:ÚdocumentElementrNr r r r;Cs  zDocument.removeChildcCs$|jD]}|jtjkr|SqdSr%)r'rr rSrör r r r£Os  zDocument._get_documentElementcCs(|jdk r|j ¡d|_t |¡dSr%)rŽrQr r r r r rQTs  zDocument.unlinkcCs’|sdS|j ddd¡}|j|_|j|_|j|_|jD]B}t|||ƒ}|j |¡|jt j kr`n|jt j krr||_ ||_ q6| tjjj||¡|Sr%)r[r�rrŸr_r'rWrRrr rr|rŽr:rvr6r7rqrr)r rYrwròZ childcloner r r rZZs&      ÿzDocument.cloneNodecCstƒ}||_|Sr%)r•rX)r ror r r ÚcreateDocumentFragmentoszDocument.createDocumentFragmentcCst|ƒ}||_|Sr%)rrX)r r�ryr r r Ú createElementtszDocument.createElementcCs(t|tƒstdƒ‚tƒ}||_||_|S©Nznode contents must be a string)r×rØrér¥rPrX)r rPÚtr r r ÚcreateTextNodeys  zDocument.createTextNodecCs(t|tƒstdƒ‚tƒ}||_||_|Sr§)r×rØrér\rPrX©r rPrGr r r ÚcreateCDATASection�s  zDocument.createCDATASectioncCst|ƒ}||_|Sr%)r[rXrªr r r Ú createComment‰szDocument.createCommentcCst||ƒ}||_|Sr%)r0rX)r r2rPÚpr r r ÚcreateProcessingInstructionŽs z$Document.createProcessingInstructioncCst|ƒ}||_d|_|Sr)rŸrXr®)r r¦Úar r r ÚcreateAttribute“szDocument.createAttributecCs"t|ƒ\}}t|||ƒ}||_|Sr%)rrrX)r r~rrrƒryr r r r�™s  zDocument.createElementNScCs*t|ƒ\}}t||||ƒ}||_d|_|Sr)rrŸrXr®)r r~rrrƒr¯r r r ÚcreateAttributeNSŸs  zDocument.createAttributeNScCst||||ƒ}||_|Sr%)rtrX)r r’rgrhruryr r r Ú_create_entity©szDocument._create_entitycCst|||ƒ}||_|Sr%)rsrX)r r’rgrhròr r r Ú_create_notation®s zDocument._create_notationcCs’||jkr|j|S|js$|js$dS|j}|dkrB|jg}||_n|sJdSd}|�rŽ| ¡}| dd„|jDƒ¡| |¡}|�rB|j   ¡D]²}|j rÐ|  |j |j ¡rÎ||j|j<|j|krÂ|}n |jsÎ�q€qŒ| |j¡�r ||j|j<|j|krú|}n|j�s>�q€qŒ|jrŒ||j|j<|j|k�r.|}qŒ|jdkrŒ�q€qŒn>|j�r€|j   ¡D]*}|j�rT||j|j<|j|k�rT|}�qT|dk rN�qŽqN|S)NcSsg|]}|jtkr|‘qSr )rr@)Ú.0rVr r r Ú Çs ÿz+Document.getElementById..r1)r–r™rºr˜r¤ÚpopÚextendr'r¼r™rÔr~r½rƒr®r¹r¾r’r¸)r rÞÚstackÚresultrHrÀr r r r ÚgetElementById³sZ              zDocument.getElementByIdcCst||tƒƒSr%rrìr r r ríszDocument.getElementsByTagNamecCst|||tƒƒSr%rrîr r r r ðs ÿzDocument.getElementsByTagNameNScCs|j ||¡Sr%)r[r\r]r r r r`ôszDocument.isSupportedcCs>|jtjkrtj d¡‚n|jtjkr2tj d¡‚t|||ƒS)Nzcannot import document nodesz!cannot import document type nodes)rr rr6r7ÚNotSupportedErrr|rW)r rHrYr r r Ú importNode÷s    zDocument.importNodercCsJ|dkr| d|¡n| d||f¡|jD]}| ||||¡q0dS)Nzz%%s)rŒr'r)r r$r"r"r#rrHr 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}||_||_||_||_|jtjk�r||_n*||_|dk �rF| |¡|�rF| |¡|S)Nz?cannot rename nodes from other documents; expected %s, found %sz8renameNode() only applies to element and attribute nodesr¨r1r³zillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rXr6r7r‹rr rSrÇr»rr©rr´r¤r¸rrr£r~r—r�r’r r$)r ròr~r’rrƒr*Zis_idr r r Ú renameNode sb ÿÿÿ ÿÿ ÿ þÿ     zDocument.renameNode)rrrN)=r{r|r}rÆr rSrœr�r|r5r„r[rrr—r˜r™r:rDrCrvrrŸr_r¡r�r›rºr–r¼r~ršrœr€ržr r¢r‚r<r;r£rQrZr¥r¦r©r«r¬r®r°r�r±r²r³rºrr r`r¼rr½r r r r r‘ðsjÿ   : r‘r¤z#Top-level element of this document.c CsÆ|j |¡rtjjj}n tjjj}|jtj kr¤|  |j |j ¡}|j  ¡D]0}| |j |j |j¡| |j |j¡}|j|_qH|r |jD]}t|||ƒ}| |¡q„�n|jtjkrâ| ¡}|rÞ|jD]}t|||ƒ}| |¡qÂ�nÆ|jtjkrþ| |j¡}�nª|jtjk�r| |j¡}�nŒ|jtjk�r>| |j |j¡}�nj|jtj!k�r\| "|j¡}�nL|jtj#k�rŒ| $|j |j ¡}d|_|j|_�n|jtj%k�r”tjjj}|j& '|j(|j)|j*¡}||_|�r¨g|j+_,g|j-_,|j-j,D]F} t.| j | j)| j*ƒ} || _|j-j, /| ¡t0| dƒ�rÞ|  1|| | ¡�qÞ|j+j,D]b} t2| j | j)| j*| j3ƒ} | j4| _4| j5| _5| j6| _6|| _|j+j, /| ¡t0| dƒ�r.|  1|| | ¡�q.ntj 7dt8|ƒ¡‚t0|dƒ�rÂ| 1|||¡|S)zo Clone a node and give it the new owner document. Called by Node.cloneNode and Document.importNode TrvzCannot clone node %s)9rXrdr6r7rqrrZ NODE_IMPORTEDrr rSr�r~r—r™rÔrr®rrƒrªr'rWr<r2r¥rOr©rPršr«rœr®r2r�r¬rÇr±r|r[r�r’rgrhrmr`rnrsrRrqrvrtrurvrr_r»r9) rHrYZnewOwnerDocumentrtrwr r¯rVrGròrxryrzr r r rWBsŠ    ÿ       ÿÿ  ÿ   ÿ  rWcCs,| dd¡}t|ƒdkr|Sd|dfSdS)Nr¨r1ér)r©rÎ)rZfieldsr r r r”s  rcCs,|||Ž}| ¡\}}| |¡| ¡|Sr%)ZgetEventZ expandNoder—)ÚfuncÚargsÚkwargsZeventsZtoktypeZrootNoder r r Ú_do_pulldom_parseœs    rÂcCsH|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ÄÚparserÆrÂ)ÚfilerÇrÈrÄrÆr r r rÊ£s     ÿrÊcCsB|dkrddlm}| |¡Sddlm}t|j|fd|iƒSdS)z&Parse a file into a DOM from a string.NrrÃrÅrÇ)rÉrÄÚ parseStringrÆrÂ)ÚstringrÇrÄrÆr r r rÌ­s    ÿrÌcCs@|r:t|tƒrt |¡}|D]\}}tj ||¡sdSqtjSr%)r×rØrZ_parse_feature_stringr‘r[r\)ZfeaturesÚfÚvr r r ÚgetDOMImplementation·s   rÐ)NN)N)N)7rýrrÉr6rrrrZxml.dom.minicompatZxml.dom.xmlbuilderrrr7r rSr›r@Z defpropertyrJr†r�r�r”r•rŸÚobjectrÊZ AttributeListrÿrÂrrr+r0r:r¥rWr(r[r\r^rerlrtrsr„r’rAr‘rWrrÂrÊrÌrÐr r r r Úsœÿv  y$ÿ xÿÿ )GUÿÿ  >ÿ<( O*PÿR