o °69d”;ã@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._reportErrorscCsBd|_z˜t|tƒrt |¡}nt |¡}t | ¡¡}|  |  ¡¡}|  |j d¡|j rK| tjd¡| tjd¡| tjd¡| tj|j¡n| tjd¡|jr\t ii¡}nt i¡}g}|j ¡ | ¡}|dkr||jdur{| d¡n%|dkrŒ|jdurŠ| d¡ný|jdur—| d¡n|j tdƒ¡nè|  ¡}|dkrƒ|jrHt!| "¡ƒt!| #¡ƒf} t!| $¡ƒ} i|_%} i|_&} g} | '¡rt!| $¡ƒ}t!| (¡ƒ}| )d¡rt*|ƒdkrð|dd…}nd}|  +|¡|j ,||¡|j-sqÌt!| "¡ƒt!| #¡ƒf}|| |<|| |<| '¡sÑ| .¡|j /| | |¡| 0¡rA|j 1| | ¡| D] }|j 2|¡q5nG| +| ¡n@t!| $¡ƒ} i|_%} | '¡rkt!| $¡ƒ}t!| (¡ƒ| |<| '¡sX| .¡|j 3| |¡| 0¡r|j 4| ¡n|dkr»|jr°|j 1t!| "¡ƒt!| #¡ƒft!| $¡ƒ¡| 5¡D] }|j 2|¡q¥nØ|j 4t!| $¡ƒ¡nÍ|dkrË|j 6t!| (¡ƒ¡n½|d krÛ|j 7t!| (¡ƒ¡n­|d krë|j 6t!| (¡ƒ¡n|d kr|j8durû|j8 9¡|j 6t!| (¡ƒ¡|j8dur|j8 :¡nw|dkr*|j8dur%| ;t!| $¡ƒ¡| <¡n^|d kr?|j8dur>| =t!| $¡ƒ¡nI|d krT|j >t!| $¡ƒt!| (¡ƒ¡n4|dkrj|j8duri|j8 ?t!| (¡ƒ¡n|dkrpn|dkrvn|dkr|n |dkr‚ntd|ƒ‚qi|dkr“|j @¡| A¡Wd|_dSd|_w)Nrrz"Read failed (no details available)Úxmlnséééré éééééé éé zUnexpected node type %d)Br4Ú isinstanceÚ StringTypesr>ÚnewTextReaderFilenamerÚprepare_input_sourceÚ inputBufferÚ getByteStreamÚ 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Ú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 Ú setDTDHandler8ó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 Ú getFeature@sÿ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¡) r4r›rr0rr1rr2rrr3r¢)rr¤Ústaterrr Ú setFeatureOs*ÿ   ÿþ ÿzLibXml2Reader.setFeaturecCs(|tkr|jS|tkr|jStd|ƒ‚)NúProperty '%s' not recognized)rr5rr6r¢r£rrr Ú getPropertydsÿzLibXml2Reader.getPropertycCs2|tkr ||_dS|tkrtd|ƒ‚td|ƒ‚)NzProperty '%s' not supportedr¨)rr5rr›r6r¢)rr¤r”rrr Ú setPropertyms ÿÿzLibXml2Reader.setPropertyN) r*r+r,rr=rGr˜rr r¥r§r©rªrrrr r.fs, r.cCstƒSr )r.rrrr Ú create_parserysr«)$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   ÿÿ