3 \X=ã@s¦dZdZddlTddlmZmZddlmZddlmZmZddlm Z ddlm Z m Z dd l Z e j d d …d kr|ed d ƒ‚[ ydd lmZWnek r¬edd ƒ‚YnXeedƒsÂedd ƒ‚ddlmZmZmZejZejZy dd lZWnek �r dd„ZYnXdd lZejZ[[Gdd„dƒZGdd„dejƒZGdd„dej ejƒZ!dd„Z"e#dk�r¢dd l$Z%e"ƒZ&e&j'e%j(jj)ƒƒe&j*e%j(j+ƒƒe&j,dƒd S)z] SAX driver for the pyexpat C module. This driver works with pyexpat.__version__ == '2.22'. z0.20é)Ú*)Úfeature_validationÚfeature_namespaces)Úfeature_namespace_prefixes)Úfeature_external_gesÚfeature_external_pes)Úfeature_string_interning)Úproperty_xml_stringÚproperty_interning_dictNéÚjavazexpat not available in Java)Úexpatzexpat not supportedÚ ParserCreate)Ú xmlreaderÚsaxutilsÚhandlercCs|S)N©)Úorrú+/usr/lib64/python3.6/xml/sax/expatreader.pyÚ_mkproxy'src@s eZdZdS)Ú _ClosedParserN)Ú__name__Ú __module__Ú __qualname__rrrrr.src@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) Ú ExpatLocatorz¼Locator for use with the ExpatParser class. This uses a weak reference to the parser object to avoid creating a circular reference between the parser and the content handler. cCst|ƒ|_dS)N)rÚ_ref)ÚselfÚparserrrrÚ__init__9szExpatLocator.__init__cCs|j}|jdkrdS|jjS)N)rÚ_parserÚErrorColumnNumber)rrrrrÚgetColumnNumber<s zExpatLocator.getColumnNumbercCs|j}|jdkrdS|jjS)Né)rrÚErrorLineNumber)rrrrrÚ getLineNumberBs zExpatLocator.getLineNumbercCs|j}|dkrdS|jjƒS)N)rÚ_sourceÚ getPublicId)rrrrrr&HszExpatLocator.getPublicIdcCs|j}|dkrdS|jjƒS)N)rr%Ú getSystemId)rrrrrr'NszExpatLocator.getSystemIdN) rrrÚ__doc__rr!r$r&r'rrrrr3s rc@s eZdZdZdGdd„Zdd „Zd d „Zd d „Zdd„Zdd„Z dd„Z dd„Z dHdd„Z dd„Z dd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Z d@dA„Z!dBdC„Z"dDS)IÚ ExpatParserz$SAX driver for the pyexpat C module.rééécCsFtjj||ƒtjƒ|_d|_||_d|_d|_g|_ d|_ d|_ dS)Nr) rÚIncrementalParserrZ InputSourcer%rÚ _namespacesÚ_lex_handler_propÚ_parsingÚ _entity_stackÚ _external_gesÚ _interning)rZnamespaceHandlingÚbufsizerrrrZs zExpatParser.__init__c CsVtj|ƒ}||_y*|jƒ|jjt|ƒƒtjj ||ƒWn|j ƒ‚YnXdS)z3Parse an XML document from a URL or an InputSource.N) rÚprepare_input_sourcer%ÚresetÚ _cont_handlerZsetDocumentLocatorrrr-ÚparseÚ _close_source)rÚsourcerrrr8gs zExpatParser.parsecCs |jƒdk r|jj|jƒƒdS)N)r'rZSetBase)rr:rrrÚ prepareParserws zExpatParser.prepareParsercCs tjj||ƒ|jr|jƒdS)N)rr-ÚsetContentHandlerr0Ú_reset_cont_handler)rrrrrr<}szExpatParser.setContentHandlercCsP|tkr|jS|tkr |jdk S|tttfkr2dS|tkr@|jSt d|ƒ‚dS)NrzFeature '%s' not recognized) rr.rr3rrrrr2ÚSAXNotRecognizedException)rÚnamerrrÚ getFeature‚s zExpatParser.getFeaturecCs¦|jrtdƒ‚|tkr||_n„|tkr.||_nt|tkrT|rL|jdkrRi|_q¢d|_nN|tkrj|r¢tdƒ‚n8|t kr€|r¢tdƒ‚n"|t kr–|r¢tdƒ‚n t d|ƒ‚dS)Nz!Cannot set features while parsingz!expat does not support validationz/expat does not read external parameter entitiesz(expat does not report namespace prefixeszFeature '%s' not recognized) r0ÚSAXNotSupportedExceptionrr.rr2rr3rrrr>)rr?ÚstaterrrÚ setFeatureŽs2 zExpatParser.setFeaturecCsd|tjkr|jS|tkr|jS|tkrT|jrLt|jdƒrB|jjƒSt dƒ‚nt dƒ‚t d|ƒ‚dS)NÚGetInputContextz=This version of expat does not support getting the XML stringz.XML string cannot be returned when not parsingzProperty '%s' not recognized) rÚproperty_lexical_handlerr/r r3r rÚhasattrrDr>rA)rr?rrrÚ getProperty¬s   zExpatParser.getPropertycCsV|tjkr ||_|jrR|jƒn2|tkr0||_n"|tkrFtd|ƒ‚n t d|ƒ‚dS)NzProperty '%s' cannot be setzProperty '%s' not recognized) rrEr/r0Ú_reset_lex_handler_propr r3r rAr>)rr?ÚvaluerrrÚ setProperty¾s   zExpatParser.setPropertycCsz|js|jƒd|_|jjƒy|jj||ƒWnDtjk rt}z&ttj |j ƒ||ƒ}|j j |ƒWYdd}~XnXdS)Nr") r0r6r7Z startDocumentrZParser ÚerrorZSAXParseExceptionZ ErrorStringÚcodeZ _err_handlerZ fatalError)rÚdataÚisFinalÚeÚexcrrrÚfeedÎs zExpatParser.feedc CsB|j}z|jƒ}|dk r |jƒWd|jƒ}|dk r<|jƒXdS)N)r%ZgetCharacterStreamÚcloseZ getByteStream)rr:Úfilerrrr9ßs zExpatParser._close_sourcec Csˆ|js|jdkst|jtƒr dSz(|jddd�|jjƒd|_d|_Wdd|_|jdk rztƒ}|jj|_|jj |_ ||_|j ƒXdS)NÚr")rNr) r1rÚ isinstancerrQr7Z endDocumentr0r r#r9)rrrrrrRês      zExpatParser.closecCs|jj|j_|jj|j_dS)N)r7ÚprocessingInstructionrZProcessingInstructionHandlerÚ charactersZCharacterDataHandler)rrrrr=ÿs zExpatParser._reset_cont_handlercCs`|j}|j}|dkr4d|_d|_d|_d|_d|_n(|j|_|j|_|j |_|j |_|j |_dS)N) r/rZCommentHandlerZStartCdataSectionHandlerZEndCdataSectionHandlerZStartDoctypeDeclHandlerZEndDoctypeDeclHandlerZcommentZ startCDATAZendCDATAÚstart_doctype_declZendDTD)rZlexrrrrrHsz#ExpatParser._reset_lex_handler_propc Csú|jr>tj|jjƒd|jd�|_d|j_|j|j_ |j |j_ n,tj|jjƒ|jd�|_|j |j_ |j |j_ |jƒ|j|j_|j|j_|j|j_|j|j_d|_|jr®|jƒ|j|j_y|j|j_Wntk rÚYnX|jjtj ƒd|_!g|_"dS)Nú )Úinternr"r)#r.r rr%Z getEncodingr3rZnamespace_prefixesÚstart_element_nsZStartElementHandlerÚend_element_nsZEndElementHandlerÚ start_elementÚ end_elementr=Úunparsed_entity_declZUnparsedEntityDeclHandlerÚ notation_declZNotationDeclHandlerÚstart_namespace_declZStartNamespaceDeclHandlerÚend_namespace_declZEndNamespaceDeclHandlerZ_decl_handler_propr/rHÚexternal_entity_refZExternalEntityRefHandlerÚskipped_entity_handlerZSkippedEntityHandlerÚAttributeErrorZSetParamEntityParsingZ*XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONEr0r1)rrrrr6s6            zExpatParser.resetcCs|jdkrdS|jjS)N)rr )rrrrr!;s zExpatParser.getColumnNumbercCs|jdkrdS|jjS)Nr")rr#)rrrrr$@s zExpatParser.getLineNumbercCs |jjƒS)N)r%r&)rrrrr&EszExpatParser.getPublicIdcCs |jjƒS)N)r%r')rrrrr'HszExpatParser.getSystemIdcCs|jj|t|ƒƒdS)N)r7Z startElementÚAttributesImpl)rr?Úattrsrrrr]LszExpatParser.start_elementcCs|jj|ƒdS)N)r7Z endElement)rr?rrrr^OszExpatParser.end_elementc Csð|jƒ}t|ƒdkrd|f}n&t|ƒdkr<|d|df}nt|ƒ}i}i}xˆ|jƒD]|\}}|jƒ}t|ƒ} | dkr„|} d|f} n>| dkr²d|d|df} |d|df} n|d} t|ƒ} ||| <| || <qVW|jj|dt||ƒƒdS)Nr"érz%s:%sr*)ÚsplitÚlenÚtupleÚitemsr7ZstartElementNSÚAttributesNSImpl) rr?rgÚpairZnewattrsZqnamesZanamerIÚpartsZlengthZqnameZapairrrrr[Rs.      zExpatParser.start_element_nscCsV|jƒ}t|ƒdkrd|f}n&t|ƒdkr<|d|df}nt|ƒ}|jj|dƒdS)Nr"rhr)rirjrkr7Z endElementNS)rr?rnrrrr\ts   zExpatParser.end_element_nscCs|jj||ƒdS)N)r7rV)rÚtargetrMrrrÚprocessing_instruction€sz"ExpatParser.processing_instructioncCs|jj|ƒdS)N)r7rW)rrMrrrÚcharacter_data„szExpatParser.character_datacCs|jj||ƒdS)N)r7ZstartPrefixMapping)rÚprefixZurirrrra‡sz ExpatParser.start_namespace_declcCs|jj|ƒdS)N)r7ZendPrefixMapping)rrsrrrrbŠszExpatParser.end_namespace_declcCs|jj|||ƒdS)N)r/ZstartDTD)rr?ÚsysidÚpubidZhas_internal_subsetrrrrX�szExpatParser.start_doctype_declcCs|jj||||ƒdS)N)Ú _dtd_handlerZunparsedEntityDecl)rr?ÚbasertruZ notation_namerrrr_�sz ExpatParser.unparsed_entity_declcCs|jj|||ƒdS)N)rvZ notationDecl)rr?rwrtrurrrr`“szExpatParser.notation_declc Cs’|js dS|jj||ƒ}tj||jjƒp*dƒ}|jj|j |jfƒ|j j |ƒ|_ ||_yt j j ||ƒWn dS|jd\|_ |_|jd=dS)Nr"rTréÿÿÿÿrx)r2Z _ent_handlerZ resolveEntityrr5r%r'r1ÚappendrZExternalEntityParserCreaterr-r8)rÚcontextrwrtrur:rrrrc–s  zExpatParser.external_entity_refcCs|r d|}|jj|ƒdS)Nú%)r7Z skippedEntity)rr?Zis_perrrrd¬sz"ExpatParser.skipped_entity_handlerNiéìÿ)rr|)r)#rrrr(rr8r;r<r@rCrGrJrQr9rRr=rHr6r!r$r&r'r]r^r[r\rqrrrarbrXr_r`rcrdrrrrr)Ws@    '" r)cOs t||ŽS)N)r))ÚargsÚkwargsrrrÚ create_parser´srÚ__main__z:http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml)-r(ÚversionZxml.sax._exceptionsZxml.sax.handlerrrrrrrr r ÚsysÚplatformZSAXReaderNotAvailableZ xml.parsersr Ú ImportErrorrFZxml.saxrrrrfrmÚ_weakrefrÚweakrefÚproxyrZLocatorrr-r)rrZxml.sax.saxutilsZxmlÚpr<ZsaxZ XMLGeneratorZsetErrorHandlerZ ErrorHandlerr8rrrrÚsN      $_