Lc @sdZddklZlZlZddklZlZlZddkl Z ddk l Z l Z ddk lZddkTeiZeiZeiZeiiZeiiZeiiZeiiZeiZh eiedd 6eied d 6eied d 6eiedd6eiedd6eiedd6eiedd6eiedd6eiedd6ZdefdYZdZdZ dfdYZ!eeefZ"d efd!YZ#d"efd#YZ$d$e$fd%YZ%d&e$fd'YZ&d(Z'd)e'Z(d*e!fd+YZ)d,fd-YZ*d.e*e!fd/YZ+d0e*e)fd1YZ,d2e-fd3YZ.d4e!fd5YZ/e0d6Z1e0d7Z2e0d8Z3e0d9Z4d:Z5d;S(<sFacility to use the Expat parser to load a minidom instance from a string or file. This avoids all the overhead of SAX and pulldom to gain performance. i(t xmlbuildertminidomtNode(tEMPTY_NAMESPACEt EMPTY_PREFIXtXMLNS_NAMESPACE(texpat(t _append_childt_set_attribute_node(t NodeFilter(t*tcdatatCDATAt enumerationtENUMtentitytENTITYtentitiestENTITIEStidtIDtidreftIDREFtidrefstIDREFStnmtokentNMTOKENtnmtokenstNMTOKENSt ElementInfocBsbeZd Zd dZdZdZdZdZdZ d Z d Z d Z RS(t _attr_infot_modelttagNamecCs||_g|_||_dS(N(R RR(tselfR tmodel((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt__init__As  cCs|i|i|ifS(N(RRR (R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt __getstate__FscCs|\|_|_|_dS(N(RRR (R!tstate((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt __setstate__IscCs`xV|iD]K}|d|jo4|d}|ddjo tdSt|dSq q WtiS(Niiit(R(Rt _typeinfo_mapRt_no_type(R!tanametinfott((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pytgetAttributeTypeLs   cCstiS(N(RR)(R!t namespaceURIt localName((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pytgetAttributeTypeNSVscCs<|io*|id}|tiitiifjStSdS(Ni(RRR"t XML_CTYPE_ANYtXML_CTYPE_MIXEDtFalse(R!ttype((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pytisElementContentYs    cCs*|io|idtiijStSdS(Ni(RRR"tXML_CTYPE_EMPTYR3(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pytisEmptyas cCs8x1|iD]&}|d|jo|ddjSq WtS(NiiR(RR3(R!R*R+((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pytisIdgs  cCs|i||fS(N(R8(R!teuritenametauriR*((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pytisIdNSms(s _attr_infos_modelstagNameN( t__name__t __module__t __slots__tNoneR#R$R&R-R0R5R7R8R<(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR>s       cCs|i||S(N(t_intern_setdefault(tbuilderts((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt_internqscCsd|jpt|id}|i}t|djoP|\}}}|||}d||f}|||}|||}n&|\}}t}|||}}||||||fS(Nt is%s:%s(tAssertionErrortsplitRAtlenR(RBtnametpartstinternturit localnametprefixtqname((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt_parse_ns_namets  t ExpatBuildercBs eZdZddZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZRS(sPDocument builder that uses Expat to build a ParsedXML.DOM document instance.cCs{|djoti}n||_|iidj ot|ii|_nd|_t|_d|_ |i dS(N( R@RtOptionst_optionstfiltertFilterVisibilityControllert_filterRt_finish_start_elementt_parsertreset(R!toptions((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR#s     cCs tiS(sCreate a new parser object.(Rt ParserCreate(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt createParserscCsj|ipY|i|_|iii|_t|i_t|i_t|i_|i |in|iS(s7Return the parser object, creating a new one if needed.( RXR\RKt setdefaultRAtTruet buffer_texttordered_attributestspecified_attributestinstall(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt getParsers    cCs@titdd|_|i|_|ii|_t|_dS(s6Free all data structures used during DOM construction.N( ttheDOMImplementationtcreateDocumentRR@tdocumenttcurNodet _elem_infoR3t_cdata(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRYs  cCs|i|_|i|_|i|_|i|_|ii o|i |_ n|i |_ |iio|i|_n|iio(|i|_|i|_|i|_n |i|_|i|_|i|_|i|_|i|_ dS(s>Install the callbacks needed to build the DOM into the parser.N(!tstart_doctype_decl_handlertStartDoctypeDeclHandlertfirst_element_handlertStartElementHandlertend_element_handlertEndElementHandlert pi_handlertProcessingInstructionHandlerRSRtentity_decl_handlertEntityDeclHandlertnotation_decl_handlertNotationDeclHandlertcommentstcomment_handlertCommentHandlertcdata_sectionststart_cdata_section_handlertStartCdataSectionHandlertend_cdata_section_handlertEndCdataSectionHandlertcharacter_data_handler_cdatatCharacterDataHandlertcharacter_data_handlertexternal_entity_ref_handlertExternalEntityRefHandlertxml_decl_handlertXmlDeclHandlertelement_decl_handlertElementDeclHandlertattlist_decl_handlertAttlistDeclHandler(R!tparser((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRbs$              cCs|i}t}ypxY|id}|pPn|i|d|o|iio|i|nt}q|idtWntj onX|i}|i d|_ |S(sIParse a document from a file object, returning the document node.iiiti@N( RcR^treadtParseRftdocumentElementt _setup_subsetR3t ParseEscapeRYR@RX(R!tfileRt first_buffertbuffertdoc((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt parseFiles$     cCsc|i}y!|i|t|i|Wntj onX|i}|id|_|S(s<Parse a document from a string, returning the document node.N( RcRR^RRRfRYR@RX(R!tstringRR((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt parseStrings    cCsF|iio5t}|i||i}||ii_ndS(s/Load the internal subset if there might be one.N(RftdoctypetInternalSubsetExtractorRt getSubsettinternalSubset(R!Rt extractortsubset((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRs     cCs|iii|||}|i|_|iii|||i_|ioT|ii|t jo;d|i_|iid=d}d|i _ d|i _ n|oT|dj og|i_g|i_nd|i _d|i _|i|i _ndS(Ni(RftimplementationtcreateDocumentTypet ownerDocumentt childNodestappendRRVt acceptNodet FILTER_REJECTR@RXRsRuRt_seqt notationsRxRqtend_doctype_decl_handlertEndDoctypeDeclHandler(R!t doctypeNametsystemIdtpublicIdthas_internal_subsetR((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRjs$   #       cCsT|iio|i|i_n|i|i_|ip|ip t |_ ndS(N( RSRvRwRXRxRpRqRhRVRt_finish_end_element(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRs  cCs`|ii||}t|i||io-|ii|tjo|ii|ndS(N(RftcreateProcessingInstructionRRgRVRRt removeChild(R!ttargettdatatnode((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRp s#cCs|ii}|ioS|io*|ditjo|di|dS|ii|}t |_n|oK|dit jo7|d}|i |}|i }||d<|dt__doc__R@R#R\RcRYRbRRRRjRRpR~RRrRtRwRzR|RRlRRWRnRRRRR(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRQs:                       RUcBseZdZdZdZdZdZh eie i 6ei e i 6ei e i6eie i6eie i6eie i6eie i6eie i6eie i6eie i6eie i6eie i 6Z!RS(soWrapper around a DOMBuilderFilter which implements the checks to make the whatToShow filter attribute work.RTcCs ||_dS(N(RT(R!RT((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR#scCs{|i|i}|ii|@oR|ii|}|tjo tn|tjotdt |n|St SdS(Ns)startContainer() returned illegal value: ( t_nodetype_maskRRTt whatToShowRtFILTER_INTERRUPTRt_ALLOWED_FILTER_RETURNSt ValueErrortreprR(R!Rtmasktval((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRs   cCs|i|i}|ii|@o|ii|}|tjo tn|tjo0|i}x|i D]}|i |qkWt S|t jot dt|n|StSdS(Ns%acceptNode() returned illegal value: (RRRTRRRRRRRt appendChildRRRRR(R!RRRtparentR((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRs       (sfilter("R=R>RR?R#RRR t SHOW_ELEMENTRt ELEMENT_NODEtSHOW_ATTRIBUTEtATTRIBUTE_NODEt SHOW_TEXTRtSHOW_CDATA_SECTIONRtSHOW_ENTITY_REFERENCEtENTITY_REFERENCE_NODEt SHOW_ENTITYt ENTITY_NODEtSHOW_PROCESSING_INSTRUCTIONtPROCESSING_INSTRUCTION_NODEt SHOW_COMMENTt COMMENT_NODEt SHOW_DOCUMENTt DOCUMENT_NODEtSHOW_DOCUMENT_TYPEtDOCUMENT_TYPE_NODEtSHOW_DOCUMENT_FRAGMENTtDOCUMENT_FRAGMENT_NODEt SHOW_NOTATIONt NOTATION_NODER(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRUs$             t FilterCrutchcBseZdZdZRS(t_buildert_levelt _old_startt_old_endcCsOd|_||_|i}|i|_|i|_|i|_|i|_dS(Ni( RRRXRmRRoRRRn(R!RBR((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR# s      (s_builders_levels _old_starts_old_end(R=R>R?R#(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR sRcBs)eZdZdZdZdZRS(cCs>ti|||i}xdD]}t||dq WdS(NRqRxRR{R}R(sProcessingInstructionHandlersCommentHandlersCharacterDataHandlersStartCdataSectionHandlersEndCdataSectionHandlersExternalEntityRefHandler(RR#RXtsetattrR@(R!RBRRI((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR#s cGs|id|_dS(Ni(R(R!targs((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR$scGs\|idjo8|ii}|ii||i|_|i|_n|id|_dS(Nii(RRRXRbRRmRRo(R!RR((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRn's   ((R=R>R?R#RRn(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRs RcBs eZdZdZdZRS(cGsD|ii}|i||ii|j o|id|_ndS(Ni(RRgRR(R!RR((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR4s  cGsb|idjo1|i|ii_|i|ii_d|_n|id|_|i|dS(Nii(RRRRXRmRRoR@(R!R((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRn:s  ((R=R>R?RRn(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR1s s8http://xml.python.org/entities/fragment-builder/internals %%s ]> &fragment-builder-internal;tFragmentBuildercBsPeZdZddZdZdZdZdZdZ dZ RS( sBuilder which constructs document fragments given XML source text and a context node. The context node is expected to provide information about the namespace declarations which are in scope at the start of the fragment. cCsO|itjo||_||_n|i|_||_ti||dS(N(RRtoriginalDocumentRRRQR#(R!RRZ((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR#bs     cCsti|d|_dS(N(RQRYR@tfragment(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRYks cCs|i|iS(sRParse a document fragment from a file object, returning the fragment node.(RR(R!R((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRosc Cs||_|i}|ii}d}|oY|ip |i}|iod|i|if}q|iod|i}qnd}|i}t |||f}y|i |dWn|i nX|i }|i |S(sMParse a document fragment from a string, returning the fragment node.RsPUBLIC "%s" "%s"s SYSTEM "%s"i( t_sourceRcR RRt_getDeclarationsRRt _getNSattrst_FRAGMENT_BUILDER_TEMPLATERRYR ( R!RRRtidentRtnsattrsRfR ((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRts,         cCs|iii}d}|ouxt|iiD]z}|ii|}|o|d}nd||if}|iod||i|i f}q/d||i f}q/Wxt|i iD]}|i i|}|o|d}nd||if}|iod||i|i f}n8|i od||i f}nd ||i i f}|i od ||i f}n|d }qWn|S( sRe-create the internal subset from the DocumentType node. This is only needed if we don't already have the internalSubset as a string. Rs s%ss%s SYSTEM "%s">s %s(RRRRRtlengthtitemtnodeNameRRRt firstChildRR(R!RRCRtnotationR((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR s:    cCsdS(NR((R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRscCs|tjo|i}|i}|ii|}|i|_|ii|_|i|_z|i|i dWd||_||_d|_ XdSt i |||||SdS(Nii( t$_FRAGMENT_BUILDER_INTERNAL_SYSTEM_IDRfRgRXtExternalEntityParserCreateR tcreateDocumentFragmentR RR R@RQR(R!RRRRt old_documentt old_cur_nodeR((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRs        N( R=R>RR@R#RYRRR RR(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR Ys    $ t NamespacescBsDeZdZdZdZdZdZdZdZRS(s7Mix-in class for builders; adds support for namespaces.cCs g|_dS(N(t_ns_ordered_prefixes(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt_initNamespacesscCstidd}t|_|S(s'Create a new namespace-handling parser.tnamespace_separatorRE(RR[R^tnamespace_prefixes(R!R((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR\s cCs1ti|||iio|i|_ndS(s.Insert the namespace-handlers onto the parser.N(RQRbRStnamespace_declarationststart_namespace_decl_handlertStartNamespaceDeclHandler(R!R((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRbs cCs|ii||fdS(s/Push this namespace declaration on our storage.N(RR(R!RNRL((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR#scCsd|jot||\}}}}nt}|}d}t}ti||||}|i|_t|i |||_ |i ox|i D]\}}|o)ti t |d|t |d}nti dt dt}|idi} || d<| d<|i} || d<| d<|i| dRRR\RbR#RRn(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRs     :tExpatBuilderNScBseZdZdZRS(s*Document builder that supports namespaces.cCsti||idS(N(RQRYR(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRY5s (R=R>RRY(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR*2stFragmentBuilderNScBs eZdZdZdZRS(s*Fragment builder that supports namespaces.cCsti||idS(N(R RYR(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRY=s cCsd}|i}g}x|ot|dox|iiD]v\}}||joq?n|i||od|}nd}|od|||f}q?d||f}q?Wn|i}qW|S(sNReturn string of namespace attributes from this element and ancestors.Rt_ns_prefix_urisxmlns:R%s%s %s='%s's %s='%s'(RthasattrR,titemsRR(R!tattrsRRRNRLtdeclname((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRAs&    (R=R>RRYR(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR+:s RcBseZdZRS(sEException raised to short-circuit parsing in InternalSubsetExtractor.(R=R>R(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyR_sRcBsSeZdZdZdZdZdZdZdZ dZ dZ RS( sBXML processor which can rip out the internal document type subset.cCs|iS(s'Return the internal subset as a string.(R(R!((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRhscCs.yti||Wntj onXdS(N(RQRR(R!R((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRlscCs.yti||Wntj onXdS(N(RQRR(R!R((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRrscCs|i|_|i|_dS(N(RjRkRRm(R!R((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRbxs cCsH|o4|i}g|_|ii|_|i|_n tdS(N(RcRRtDefaultHandlerRRR(R!RIRRRR((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRj|s   cCs@di|iiddidd}||_tdS(NRs s s (tjoinRtreplaceR(R!RC((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRs* cCs tdS(N(R(R!RIR/((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRsN( R=R>RR@RRRRRbRjRR(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRcs     cCst|o t}n t}t|to4t|d}z|i|}Wd|iXn|i|}|S(s{Parse a document, returning the resulting Document node. 'file' may be either a file name or an open file object. trbN(R*RQt isinstancet StringTypestopenRtclose(Rt namespacesRBtfptresult((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pytparses  cCs*|o t}n t}|i|S(sOParse a document from a string, returning the resulting Document node. (R*RQR(RR9RB((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyRs  cCsz|ot|}n t|}t|to4t|d}z|i|}Wd|iXn|i|}|S(sParse a fragment of a document, given the context from which it was originally extracted. context should be the parent of the node(s) which are in the fragment. 'file' may be either a file name or an open file object. R4N(R+R R5R6R7RR8(RRR9RBR:R;((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt parseFragments cCs0|ot|}n t|}|i|S(sParse a fragment of a document from a string, given the context from which it was originally extracted. context should be the parent of the node(s) which are in the fragment. (R+R R(RRR9RB((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pytparseFragmentStrings cCs#|io t|St|SdS(s,Create a builder based on an Options object.N(R9R*RQ(RZ((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyt makeBuilders  N(6Rtxml.domRRRRRRt xml.parsersRtxml.dom.minidomRRtxml.dom.NodeFilterR txml.dom.minicompatRRRtDOMBuilderFilterRRRRtgetDOMImplementationRdtTypeInfoR@R(tobjectRRDRPRQRRURRRRRR RR*R+t ExceptionRRR^R<RR=R>R?(((s,/usr/lib64/python2.6/xml/dom/expatbuilder.pyts`         3  I:  ud%,