o † h<ã@s dZdZdZddlZddlZejddkr,e e¡dZeefZ e  d¡dZ dd „Z neZ d d „Z dd l Tdd lmZmZdd lmZmZmZmZmZmZmZmZmZmZzddlZWneymede ¡dƒ‚wGdd„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|ƒdS)Nr)Ú_decoder©Ús©rú-/usr/lib/python3/dist-packages/drv_libxml2.pyÚ_d1s r 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__Ss zLocator.__init__cCódS)z6Return the column number where the current event ends.éÿÿÿÿr©rrrr ÚgetColumnNumberVózLocator.getColumnNumbercCó |j ¡S)z4Return the line number where the current event ends.)rÚ LineNumberr rrr Ú getLineNumberZó zLocator.getLineNumbercCr)z3Return the public identifier for the current event.Nrr rrr Ú getPublicId^r"zLocator.getPublicIdcCr#)z3Return the system identifier for the current event.)rÚBaseURIr rrr Ú getSystemIdbr&zLocator.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__errorsr rrr rhs  zLibXml2Reader.__init__cCs0|jdurg|_|j |t|dt|ƒƒf¡dSr )r7ÚappendÚSAXParseExceptionr)rÚargÚmsgÚseverityrrrr Ú _errorHandlerws ÿ ÿzLibXml2Reader._errorHandlercCsh|jD]+\}}|tjtjfvr|j |¡q|r(||jddur(|j |¡q|j |¡qd|_dS)Nrr)r7Úlibxml2Ú PARSER_SEVERITY_VALIDITY_WARNINGÚPARSER_SEVERITY_WARNINGÚ _err_handlerÚwarningÚ fatalErrorÚerror)rÚfatalr<Ú exceptionrrr Ú _reportErrors~sÿ zLibXml2Reader._reportErrorscCsVd|_z¢t|tƒrt |¡}nt |¡}| ¡}|dur!| ¡}t  |¡}|  |  ¡¡}|  |j d¡|jrU| tjd¡| tjd¡| tjd¡| tj|j¡n| tjd¡|jrft ii¡}nt i¡}g}|j ¡ | ¡}|dkr†|jdur…| d¡n%|dkr–|jdur”| d¡ný|jdur¡| d¡n|j t dƒ¡nè| !¡} | dkr|jrRt"| #¡ƒt"| $¡ƒf} t"| %¡ƒ} i|_&} i|_'} g}| (¡r%t"| %¡ƒ}t"| )¡ƒ}| *d¡r t+|ƒdkrú|dd…}nd}| ,|¡|j -||¡|j.s qÖt"| #¡ƒt"| $¡ƒf}|| |<|| |<| (¡sÛ| /¡|j 0| | |¡| 1¡rK|j 2| | ¡|D] }|j 3|¡q?nG| ,|¡n@t"| %¡ƒ} i|_&} | (¡rut"| %¡ƒ}t"| )¡ƒ| |<| (¡sb| /¡|j 4| |¡| 1¡r‹|j 5| ¡n| dkrÅ|jrº|j 2t"| #¡ƒt"| $¡ƒft"| %¡ƒ¡| 6¡D] }|j 3|¡q¯nØ|j 5t"| %¡ƒ¡nÍ| dkrÕ|j 7t"| )¡ƒ¡n½| d krå|j 8t"| )¡ƒ¡n­| d krõ|j 7t"| )¡ƒ¡n| d kr|j9dur|j9 :¡|j 7t"| )¡ƒ¡|j9dur|j9 ;¡nw| dkr4|j9dur/| t"| %¡ƒ¡nI| d kr^|j ?t"| %¡ƒt"| )¡ƒ¡n4| dkrt|j9durs|j9 @t"| )¡ƒ¡n| dkrzn| dkr€n| dkr†n | dkrŒnt d| ƒ‚qs|dkr|j A¡| B¡Wd|_dSd|_w)Nrrz"Read failed (no details available)Úxmlnséééré éééééé éé zUnexpected node type %d)Cr4Ú isinstanceÚ StringTypesr>ÚnewTextReaderFilenamerÚprepare_input_sourceÚgetCharacterStreamÚ getByteStreamÚ inputBufferÚ newTextReaderr)ÚSetErrorHandlerr=r3Ú SetParserPropÚPARSER_LOADDTDÚPARSER_DEFAULTATTRSÚPARSER_SUBST_ENTITIESÚPARSER_VALIDATEr2r0r ÚAttributesNSImplÚAttributesImplÚ _cont_handlerÚ startDocumentÚReadr7rGrArCÚ SAXExceptionÚNodeTyper Ú NamespaceUriÚ LocalNameÚNameÚ_attrsÚ_qnamesÚMoveToNextAttributeÚValueÚ startswithÚlenr8ÚstartPrefixMappingr1Ú MoveToElementÚstartElementNSÚIsEmptyElementÚ endElementNSÚendPrefixMappingÚ startElementÚ endElementÚpopÚ charactersÚignorableWhitespacer5Ú startCDATAÚendCDATAÚ startEntityÚ ResolveEntityÚ endEntityÚprocessingInstructionÚcommentÚ endDocumentÚClose)rÚsourceÚreaderÚstreamÚinputÚattributesNSImplÚattributesImplÚprefixesÚrÚnodeTypeÚeltNameÚeltQNameÚattrsÚqnamesÚ newPrefixesÚqnameÚvalueÚ newPrefixÚattNameÚprefixrrr Úparses"        €    ÿ   ÿ         ÿ  ÿðÿ ÿ     þÿ  €  þ ÿ        €     € ÿ  €     ÷  zLibXml2Reader.parsecCótdƒ‚)NzDTDHandler not supported©ÚSAXNotSupportedException)rÚhandlerrrr Ú setDTDHandler;ózLibXml2Reader.setDTDHandlercCr›)NzEntityResolver not supportedrœ)rÚresolverrrr ÚsetEntityResolver?r zLibXml2Reader.setEntityResolvercCsP|tkr|jS|tkr|jS|tkr|jS|tkrdS|tkr"|jSt d|ƒ‚)NrúFeature '%s' not recognized) rr0rr1rr2rrr3ÚSAXNotRecognizedException©rÚnamerrr Ú getFeatureCsÿzLibXml2Reader.getFeaturecCs†|jr td|ƒ‚|tkr||_dS|tkr||_dS|tkr$||_dS|tkr4|dkr2td|ƒ‚dS|t kr=||_ dSt d|ƒ‚)Nz#Cannot set feature %s while parsingrzFeature '%s' not supportedr£) r4rrr0rr1rr2rrr3r¤)rr¦Ústaterrr Ú setFeatureRs*ÿ   ÿþ ÿzLibXml2Reader.setFeaturecCs(|tkr|jS|tkr|jStd|ƒ‚)NúProperty '%s' not recognized)rr5rr6r¤r¥rrr Ú getPropertygsÿzLibXml2Reader.getPropertycCs2|tkr ||_dS|tkrtd|ƒ‚td|ƒ‚)NzProperty '%s' not supportedrª)rr5rrr6r¤)rr¦r–rrr Ú setPropertyps ÿÿzLibXml2Reader.setPropertyN) r*r+r,rr=rGršrŸr¢r§r©r«r¬rrrr r.fs/ r.cCstƒSr )r.rrrr Ú create_parser|sr­)$r-Ú __author__Ú __version__ÚsysÚcodecsÚ version_infoÚunicode_escape_decodeÚstrÚunicoderVÚlookuprr Úxml.sax._exceptionsÚxml.saxr rÚxml.sax.handlerrrrrrrrrrrr>Ú ImportErrorÚSAXReaderNotAvailableÚexc_inforr/r.r­rrrr Ús6# 0   ÿÿ