B × ‰àœ©Úã@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#dkr¢dd l$Z%e"ƒZ&e& 'e%j(j )¡¡e& *e%j( +¡¡e& ,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ú8/opt/alt/python37/lib64/python3.7/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|j ¡S)N)rÚ_sourceÚ getPublicId)rrrrrr&HszExpatLocator.getPublicIdcCs|j}|dkrdS|j ¡S)N)rr%Ú getSystemId)rrrrrr'NszExpatLocator.getSystemIdN) rrrÚ__doc__rr!r$r&r'rrrrr3s rc@s eZdZdZdCdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dDdd„Z dd„Z dd„Zdd„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"dBS)EÚ ExpatParserz$SAX driver for the pyexpat C module.réìÿcCsFtj ||¡t ¡|_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__cCsVt |¡}||_y*| ¡|j t|ƒ¡tj  ||¡Wn|  ¡‚YnXdS)z3Parse an XML document from a URL or an InputSource.N) rÚprepare_input_sourcer%ÚresetÚ _cont_handlerZsetDocumentLocatorrrr+ÚparseÚ _close_source)rÚsourcerrrr6gs zExpatParser.parsecCs | ¡dk r|j | ¡¡dS)N)r'rZSetBase)rr8rrrÚ prepareParserws zExpatParser.prepareParsercCs tj ||¡|jr| ¡dS)N)rr+ÚsetContentHandlerr.Ú_reset_cont_handler)rrrrrr:}szExpatParser.setContentHandlercCsP|tkr|jS|tkr |jdk S|tttfkr2dS|tkr@|jSt d|ƒ‚dS)NrzFeature '%s' not recognized) rr,rr1rrrrr0Ú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) r.ÚSAXNotSupportedExceptionrr,rr0rr1rrrr<)rr=ÚstaterrrÚ setFeatureŽs2 zExpatParser.setFeaturecCsd|tjkr|jS|tkr|jS|tkrT|jrLt|jdƒrB|j ¡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 r1r rÚhasattrrBr<r?)rr=rrrÚ getProperty¬s   zExpatParser.getPropertycCsV|tjkr ||_|jrR| ¡n2|tkr0||_n"|tkrFtd|ƒ‚n t d|ƒ‚dS)NzProperty '%s' cannot be setzProperty '%s' not recognized) rrCr-r.Ú_reset_lex_handler_propr r1r r?r<)rr=ÚvaluerrrÚ setProperty¾s   zExpatParser.setPropertyc Csz|js| ¡d|_|j ¡y|j ||¡WnDtjk rt}z$tt  |j ¡||ƒ}|j   |¡Wdd}~XYnXdS)Nr") r.r4r5Z startDocumentrZParser ÚerrorZSAXParseExceptionZ ErrorStringÚcodeZ _err_handlerZ fatalError)rÚdataÚisFinalÚeÚexcrrrÚfeedÎs zExpatParser.feedcCsB|j}z| ¡}|dk r | ¡Wd| ¡}|dk r<| ¡XdS)N)r%ZgetCharacterStreamÚcloseZ getByteStream)rr8Úfilerrrr7ßs zExpatParser._close_sourcecCsˆ|js|jdkst|jtƒr dSz(|jddd|j ¡d|_d|_Wdd|_|jdk rztƒ}|jj|_|jj |_ ||_|  ¡XdS)NÚr")rLr) r/rÚ isinstancerrOr5Z endDocumentr.r r#r7)rrrrrrPês      zExpatParser.closecCs|jj|j_|jj|j_dS)N)r5ÚprocessingInstructionrZProcessingInstructionHandlerÚ charactersZCharacterDataHandler)rrrrr;ÿs zExpatParser._reset_cont_handlercCs`|j}|j}|dkr4d|_d|_d|_d|_d|_n(|j|_|j|_|j |_|j |_|j |_dS)N) r-rZCommentHandlerZStartCdataSectionHandlerZEndCdataSectionHandlerZStartDoctypeDeclHandlerZEndDoctypeDeclHandlerÚcommentZ startCDATAZendCDATAÚstart_doctype_declZendDTD)rZlexrrrrrFsz#ExpatParser._reset_lex_handler_propcCsú|jr>tj|j ¡d|jd|_d|j_|j|j_ |j |j_ n,tj|j ¡|jd|_|j |j_ |j |j_ | ¡|j|j_|j|j_|j|j_|j|j_d|_|jr®| ¡|j|j_y|j|j_Wntk rÚYnX|j tj ¡d|_!g|_"dS)Nú )Úinternr"r)#r,r rr%Z getEncodingr1rZnamespace_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-rFÚexternal_entity_refZExternalEntityRefHandlerÚskipped_entity_handlerZSkippedEntityHandlerÚAttributeErrorZSetParamEntityParsingZ*XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONEr.r/)rrrrr4s6            zExpatParser.resetcCs|jdkrdS|jjS)N)rr )rrrrr!;s zExpatParser.getColumnNumbercCs|jdkrdS|jjS)Nr")rr#)rrrrr$@s zExpatParser.getLineNumbercCs |j ¡S)N)r%r&)rrrrr&EszExpatParser.getPublicIdcCs |j ¡S)N)r%r')rrrrr'HszExpatParser.getSystemIdcCs|j |t|ƒ¡dS)N)r5Z startElementÚAttributesImpl)rr=Úattrsrrrr\LszExpatParser.start_elementcCs|j |¡dS)N)r5Z endElement)rr=rrrr]OszExpatParser.end_elementc Csð| ¡}t|ƒdkrd|f}n&t|ƒdkr<|d|df}nt|ƒ}i}i}xˆ| ¡D]|\}}| ¡}t|ƒ} | dkr„|} d|f} n>| dkr²d|d|df} |d|df} n|d} t|ƒ} ||| <| || <qVW|j |dt||ƒ¡dS)Nr"érz%s:%sé)ÚsplitÚlenÚtupleÚitemsr5ZstartElementNSÚAttributesNSImpl) rr=rfÚpairZnewattrsZqnamesZanamerGÚpartsÚlengthZqnameZapairrrrrZRs.      zExpatParser.start_element_nscCsV| ¡}t|ƒdkrd|f}n&t|ƒdkr<|d|df}nt|ƒ}|j |d¡dS)Nr"rgr)rirjrkr5Z endElementNS)rr=rnrrrr[ts   zExpatParser.end_element_nscCs|j ||¡dS)N)r5rT)rÚtargetrKrrrÚprocessing_instruction€sz"ExpatParser.processing_instructioncCs|j |¡dS)N)r5rU)rrKrrrÚcharacter_data„szExpatParser.character_datacCs|j ||¡dS)N)r5ZstartPrefixMapping)rÚprefixZurirrrr`‡sz ExpatParser.start_namespace_declcCs|j |¡dS)N)r5ZendPrefixMapping)rrtrrrraŠszExpatParser.end_namespace_declcCs|j |||¡dS)N)r-ZstartDTD)rr=ÚsysidÚpubidZhas_internal_subsetrrrrWszExpatParser.start_doctype_declcCs|j ||||¡dS)N)Ú _dtd_handlerZunparsedEntityDecl)rr=ÚbaserurvZ notation_namerrrr^sz ExpatParser.unparsed_entity_declcCs|j |||¡dS)N)rwZ notationDecl)rr=rxrurvrrrr_“szExpatParser.notation_declcCs’|js dS|j ||¡}t ||j ¡p*d¡}|j |j |jf¡|j   |¡|_ ||_yt j   ||¡Wn dS|jd\|_ |_|jd=dS)Nr"rRréÿÿÿÿ)r0Z _ent_handlerZ resolveEntityrr3r%r'r/ÚappendrZExternalEntityParserCreaterr+r6)rÚcontextrxrurvr8rrrrb–s  zExpatParser.external_entity_refcCs|r d|}|j |¡dS)Nú%)r5Z skippedEntity)rr=Zis_perrrrc¬sz"ExpatParser.skipped_entity_handlerN)rr*)r)#rrrr(rr6r9r:r>rArErHrOr7rPr;rFr4r!r$r&r'r\r]rZr[rrrsr`rarWr^r_rbrcrrrrr)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 Ú ImportErrorrDZxml.saxrrrrermÚ_weakrefrÚweakrefÚproxyrZLocatorrr+r)rrZxml.sax.saxutilsZxmlÚpr:ZsaxZ XMLGeneratorZsetErrorHandlerZ ErrorHandlerr6rrrrÚsN      $_