grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a êõ^”;ã@sdZdZdZddlZddlZejddkrXe e¡dZeefZ e  d¡dZ dd „Z n eZ d d „Z dd l Tdd lmZmZdd lmZmZmZmZmZmZmZmZmZmZz ddlZWn&eyÞede ¡dƒ‚Yn0Gdd„dej ƒZ Gdd„dej!ƒZ"dd„Z#dS)aí A SAX2 driver for libxml2, on top of it's XmlReader API USAGE # put this file (drv_libxml2.py) in PYTHONPATH import xml.sax reader = xml.sax.make_parser(["drv_libxml2"]) # ...and the rest is standard python sax. CAVEATS - Lexical handlers are supported, except for start/endEntity (waiting for XmlReader.ResolveEntity) and start/endDTD - Error callbacks are not exactly synchronous, they tend to be invoked before the corresponding content callback, because the underlying reader interface parses data by chunks of 512 bytes TODO - search for TODO - some ErrorHandler events (warning) - some ContentHandler events (setDocumentLocator, skippedEntity) - EntityResolver (using libxml2.?) - DTDHandler (if/when libxml2 exposes such node types) - DeclHandler (if/when libxml2 exposes such node types) - property_xml_string? - feature_string_interning? - Incremental parser - additional performance tuning: - one might cache callbacks to avoid some name lookups - one might implement a smarter way to pass attributes to startElement (some kind of lazy evaluation?) - there might be room for improvement in start/endPrefixMapping - other? u Stéphane Bidoul z0.3éNéÚutf8écCs|dur |St|ƒdSdS)Nr)Ú_decoder©Ús©rú1/usr/lib64/python3.9/site-packages/drv_libxml2.pyÚ_d1sr cCs|S©Nrrrrr r 9s)Ú*)Ú xmlreaderÚsaxutils) Úfeature_namespacesÚfeature_namespace_prefixesÚfeature_string_interningÚfeature_validationÚfeature_external_gesÚfeature_external_pesÚproperty_lexical_handlerÚproperty_declaration_handlerÚproperty_dom_nodeÚproperty_xml_stringz+libxml2 not available: import error was: %sc@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚLocatorz4SAX Locator adapter for libxml2.xmlTextReaderLocatorcCs ||_dSr )Ú_Locator__locator)ÚselfÚlocatorrrr Ú__init__SszLocator.__init__cCsdS)z6Return the column number where the current event ends.éÿÿÿÿr©rrrr ÚgetColumnNumberVszLocator.getColumnNumbercCs |j ¡S)z4Return the line number where the current event ends.)rZ LineNumberrrrr Ú getLineNumberZszLocator.getLineNumbercCsdS)z3Return the public identifier for the current event.Nrrrrr Ú getPublicId^szLocator.getPublicIdcCs |j ¡S)z3Return the system identifier for the current event.)rZBaseURIrrrr Ú getSystemIdbszLocator.getSystemIdN) Ú__name__Ú __module__Ú __qualname__Ú__doc__rr r!r"r#rrrr rPs rc@s\eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dS)Ú LibXml2ReadercCs@tj |¡d|_d|_d|_d|_d|_d|_d|_ d|_ dS)Nrr) r Ú XMLReaderrÚ_LibXml2Reader__nsÚ_LibXml2Reader__nspfxÚ_LibXml2Reader__validateÚ_LibXml2Reader__extparamsÚ_LibXml2Reader__parsingÚ_LibXml2Reader__lex_handlerÚ_LibXml2Reader__decl_handlerÚ_LibXml2Reader__errorsrrrr rhs zLibXml2Reader.__init__cCs0|jdurg|_|j |t|dt|ƒƒf¡dSr )r1ÚappendZSAXParseExceptionr)rÚargÚmsgÚseverityrrrr Ú _errorHandlerws ÿÿzLibXml2Reader._errorHandlercCsh|jD]V\}}|tjtjfvr,|j |¡q|rP||jddurP|j |¡q|j |¡qd|_dS)Nrr)r1Úlibxml2Z PARSER_SEVERITY_VALIDITY_WARNINGZPARSER_SEVERITY_WARNINGÚ _err_handlerZwarningÚ fatalErrorÚerror)rZfatalr5Ú exceptionrrr Ú _reportErrors~sÿzLibXml2Reader._reportErrorscCs>d|_�z(t|tƒr t |¡}n&t |¡}t | ¡¡}|  |  ¡¡}|  |j d¡|j r–| tjd¡| tjd¡| tjd¡| tj|j¡n| tjd¡|jr¸t ii¡}n t i¡}g}|j ¡| ¡}|dkrö|jdurô| d¡nR|dk�r|jdu�r | d¡�q n,|jdu�r4| d¡n|j tdƒ¡�q |  ¡}|dk�r|j�r’t!| "¡ƒt!| #¡ƒf} t!| $¡ƒ} i|_%} i|_&} g} | '¡�rt!| $¡ƒt!| (¡ƒ¡qÐ|dk�rÎ|j8du�r |j8 ?t!| (¡ƒ¡qÐ|dk�rÚqÐ|dk�ræqÐ|dk�ròqÐ|dk�rþqÐtd|ƒ‚qÐ|dk�r |j @¡| A¡Wd|_nd|_0dS)Nrrz"Read failed (no details available)Zxmlnséééré éééééé éé zUnexpected node type %d)Br.Ú isinstanceÚ StringTypesr7ZnewTextReaderFilenamerZprepare_input_sourceZ inputBufferZ getByteStreamZ newTextReaderr#ZSetErrorHandlerr6r-Z SetParserPropZPARSER_LOADDTDZPARSER_DEFAULTATTRSZPARSER_SUBST_ENTITIESZPARSER_VALIDATEr,r*r ZAttributesNSImplZAttributesImplZ _cont_handlerZ startDocumentZReadr1r<r8r9Z SAXExceptionZNodeTyper Z NamespaceUriZ LocalNameÚNameZ_attrsZ_qnamesZMoveToNextAttributeZValueÚ startswithÚlenr2ZstartPrefixMappingr+Z MoveToElementZstartElementNSZIsEmptyElementZ endElementNSZendPrefixMappingZ startElementZ endElementÚpopZ charactersZignorableWhitespacer/Z startCDATAZendCDATAZ startEntityZ ResolveEntityZ endEntityZprocessingInstructionZcommentZ endDocumentZClose)rÚsourceÚreaderÚinputZattributesNSImplZattributesImplÚprefixesÚrZnodeTypeZeltNameZeltQNameÚattrsZqnamesZ newPrefixesZqnameÚvalueZ newPrefixZattNameÚprefixrrr Úparse�s            ÿ   ÿ        ÿ  ÿ ÿ      ÿ   þ               ÿ         zLibXml2Reader.parsecCs tdƒ‚dS)NzDTDHandler not supported©ÚSAXNotSupportedException)rZhandlerrrr Ú setDTDHandler8szLibXml2Reader.setDTDHandlercCs tdƒ‚dS)NzEntityResolver not supportedrX)rZresolverrrr ÚsetEntityResolver<szLibXml2Reader.setEntityResolvercCsT|tkr|jS|tkr|jS|tkr*|jS|tkr6dS|tkrD|jSt d|ƒ‚dS)NrúFeature '%s' not recognized) rr*rr+rr,rrr-ÚSAXNotRecognizedException©rÚnamerrr Ú getFeature@sÿzLibXml2Reader.getFeaturecCs€|jrtd|ƒ‚|tkr"||_nZ|tkr2||_nJ|tkrB||_n:|tkr`|dkr|td|ƒ‚n|t krp||_ n t d|ƒ‚dS)Nz#Cannot set feature %s while parsingrzFeature '%s' not supportedr\) r.rYrr*rr+rr,rrr-r])rr_Ústaterrr Ú setFeatureOs(ÿÿÿzLibXml2Reader.setFeaturecCs,|tkr|jS|tkr|jStd|ƒ‚dS)NúProperty '%s' not recognized)rr/rr0r]r^rrr Ú getPropertydsÿzLibXml2Reader.getPropertycCs<|tkr||_n(|tkr,td|ƒ‚||_n td|ƒ‚dS)NzProperty '%s' not supportedrc)rr/rrYr0r])rr_rUrrr Ú setPropertymsÿÿzLibXml2Reader.setPropertyN) r$r%r&rr6r<rWrZr[r`rbrdrerrrr r(fs, r(cCstƒSr )r(rrrr Ú create_parserysrf)$r'Ú __author__Ú __version__ÚsysÚcodecsÚ version_infoÚunicode_escape_decodeÚstrZunicoderJÚlookuprr Zxml.sax._exceptionsZxml.saxr rZxml.sax.handlerrrrrrrrrrrr7Ú ImportErrorZSAXReaderNotAvailableÚexc_inforr)r(rfrrrr Ús2# 0    ÿ