+ec;@sAdZdZddlTddlmZmZddlmZddlmZmZddlm Z ddlm Z m Z dd l Z e j d d d kred d n[ ydd lmZWn!ek redd Yn#Xeed r edd nddlmZmZmZejZejZydd lZWnek rjddZYnXdd lZejZ[[GdddZGdddejZGdddej ejZ!ddZ"e#dkr=dd l$Z%e"Z&e&j'e%j(jj)e&j*e%j(j+e&j,dnd S)z] SAX driver for the pyexpat C module. This driver works with pyexpat.__version__ == '2.22'. z0.20)*)feature_validationfeature_namespaces)feature_namespace_prefixes)feature_external_gesfeature_external_pes)feature_string_interning)property_xml_stringproperty_interning_dictNjavazexpat not available in Java)expatzexpat not supported ParserCreate) xmlreadersaxutilshandlercCs|S)N)orr8/opt/alt/python34/lib64/python3.4/xml/sax/expatreader.py_mkproxy'src@seZdZdS) _ClosedParserN)__name__ __module__ __qualname__rrrrr.s rc@sReZdZdZddZddZddZdd Zd d Zd S) ExpatLocatorzLocator 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)selfparserrrr__init__9szExpatLocator.__init__cCs&|j}|jdkrdS|jjS)N)r_parserErrorColumnNumber)rrrrrgetColumnNumber<s zExpatLocator.getColumnNumbercCs&|j}|jdkrdS|jjS)N)rrErrorLineNumber)rrrrr getLineNumberBs zExpatLocator.getLineNumbercCs&|j}|dkrdS|jjS)N)r_source getPublicId)rrrrrr&Hs  zExpatLocator.getPublicIdcCs&|j}|dkrdS|jjS)N)rr% getSystemId)rrrrrr'Ns  zExpatLocator.getSystemIdN) rrr__doc__rr!r$r&r'rrrrr3s     rc@seZdZdZddDddZdd Zd d Zd d ZddZddZ ddZ ddZ dddZ ddZ ddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zd<d=Zd>d?Z d@dAZ!dBS)E ExpatParserz$SAX driver for the pyexpat C module.rcCsetjj||tj|_d|_||_d|_d|_g|_ d|_ d|_ dS)Nrr") rIncrementalParserrZ InputSourcer%r _namespaces_lex_handler_prop_parsing _entity_stack _external_ges _interning)rZnamespaceHandlingbufsizerrrrZs      zExpatParser.__init__cCsOtj|}||_|j|jjt|tjj ||dS)z3Parse an XML document from a URL or an InputSource.N) rprepare_input_sourcer%reset _cont_handlerZsetDocumentLocatorrrr-parse)rsourcerrrr8gs   zExpatParser.parsecCs/|jdk r+|jj|jndS)N)r'rZSetBase)rr9rrr prepareParserpszExpatParser.prepareParsercCs-tjj|||jr)|jndS)N)rr-setContentHandlerr0_reset_cont_handler)rrrrrr;vs zExpatParser.setContentHandlercCsl|tkr|jS|tkr,|jdk S|tttfkrEdS|tkrX|jSt d|dS)NrzFeature '%s' not recognized) rr.rr3rrrrr2SAXNotRecognizedException)rnamerrr getFeature{s      zExpatParser.getFeaturecCs|jrtdn|tkr0||_n|tkrH||_n|tkr|rx|jdkri|_qqd|_n||tkr|rtdqnX|t kr|rtdqn4|t kr|rtdqnt 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) r0SAXNotSupportedExceptionrr.rr2rr3rrrr=)rr>staterrr setFeatures2          zExpatParser.setFeaturecCs|tjkr|jS|tkr)|jS|tkr{|jrlt|jdr]|jjSt dq{t dnt d|dS)NGetInputContextz=This version of expat does not support getting the XML stringz.XML string cannot be returned when not parsingzProperty '%s' not recognized) rproperty_lexical_handlerr/r r3r rhasattrrCr=r@)rr>rrr getPropertys      zExpatParser.getPropertycCs||tjkr1||_|jrx|jqxnG|tkrI||_n/|tkrhtd|nt d|dS)NzProperty '%s' cannot be setzProperty '%s' not recognized) rrDr/r0_reset_lex_handler_propr r3r r@r=)rr>valuerrr setPropertys      zExpatParser.setPropertycCs|js,|jd|_|jjny|jj||WnVtjk r}z3ttj |j ||}|j j |WYdd}~XnXdS)Nr") r0r6r7Z startDocumentrZParser errorZSAXParseExceptionZ ErrorStringcodeZ _err_handlerZ fatalError)rdataisFinaleexcrrrfeeds   zExpatParser.feedc Cs|js*|jdks*t|jtr.dSz6|jddd|jjd|_d|_Wdd|_|jdk rt}|jj|_|jj |_ ||_n|j j }|dk r|j nXdS)NrMr"r) r1r isinstancerrPr7Z endDocumentr0r r#r%Z getByteStreamclose)rrZbsrrrrSs"       zExpatParser.closecCs(|jj|j_|jj|j_dS)N)r7processingInstructionrZProcessingInstructionHandler charactersZCharacterDataHandler)rrrrr<szExpatParser._reset_cont_handlercCs|j}|j}|dkrNd|_d|_d|_d|_d|_n<|j|_|j|_|j |_|j |_|j |_dS)N) r/rZCommentHandlerZStartCdataSectionHandlerZEndCdataSectionHandlerZStartDoctypeDeclHandlerZEndDoctypeDeclHandlerZcommentZ startCDATAZendCDATAstart_doctype_declZendDTD)rZlexrrrrrGs            z#ExpatParser._reset_lex_handler_propc Csd|jr]tj|jjdd|j|_d|j_|j|j_ |j |j_ nBtj|jjd|j|_|j |j_ |j |j_ |j|j|j_|j|j_|j|j_|j|j_d|_|jr|jn|j|j_y|j|j_Wntk r:YnX|jjtj d|_!g|_"dS)N internr"r)#r.r rr%Z getEncodingr3rZnamespace_prefixesstart_element_nsZStartElementHandlerend_element_nsZEndElementHandler start_element end_elementr<unparsed_entity_declZUnparsedEntityDeclHandler notation_declZNotationDeclHandlerstart_namespace_declZStartNamespaceDeclHandlerend_namespace_declZEndNamespaceDeclHandlerZ_decl_handler_propr/rGexternal_entity_refZExternalEntityRefHandlerskipped_entity_handlerZSkippedEntityHandlerAttributeErrorZSetParamEntityParsingZ*XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONEr0r1)rrrrr6s6          zExpatParser.resetcCs|jdkrdS|jjS)N)rr )rrrrr!+szExpatParser.getColumnNumbercCs|jdkrdS|jjS)Nr")rr#)rrrrr$0szExpatParser.getLineNumbercCs |jjS)N)r%r&)rrrrr&5szExpatParser.getPublicIdcCs |jjS)N)r%r')rrrrr'8szExpatParser.getSystemIdcCs|jj|t|dS)N)r7Z startElementAttributesImpl)rr>attrsrrrr[<szExpatParser.start_elementcCs|jj|dS)N)r7Z endElement)rr>rrrr\?szExpatParser.end_elementc CsL|j}t|dkr-d|f}n5t|dkrV|d|df}n t|}i}i}x|jD]\}}|j}t|} | dkr|} d|f} nQ| dkrd|d|df} |d|df} n|d} t|} ||| <| || repairZnewattrsZqnamesZanamerHpartsZlengthZqnameZapairrrrrYBs.         zExpatParser.start_element_nscCsy|j}t|dkr-d|f}n5t|dkrV|d|df}n t|}|jj|ddS)Nr"rfr)rgrhrir7Z endElementNS)rr>rlrrrrZds  zExpatParser.end_element_nscCs|jj||dS)N)r7rT)rtargetrLrrrprocessing_instructionpsz"ExpatParser.processing_instructioncCs|jj|dS)N)r7rU)rrLrrrcharacter_datatszExpatParser.character_datacCs|jj||dS)N)r7ZstartPrefixMapping)rprefixZurirrrr_wsz ExpatParser.start_namespace_declcCs|jj|dS)N)r7ZendPrefixMapping)rrqrrrr`zszExpatParser.end_namespace_declcCs|jj|||dS)N)r/ZstartDTD)rr>sysidpubidZhas_internal_subsetrrrrV}szExpatParser.start_doctype_declcCs|jj||||dS)N) _dtd_handlerZunparsedEntityDecl)rr>baserrrsZ notation_namerrrr]sz ExpatParser.unparsed_entity_declcCs|jj|||dS)N)rtZ notationDecl)rr>rurrrsrrrr^szExpatParser.notation_declc Cs|js dS|jj||}tj||jjp=d}|jj|j |jf|j j ||_ ||_yt j j ||Wn dSYnX|jd\|_ |_|jd=dS)Nr"rQrrv)r2Z _ent_handlerZ resolveEntityrr5r%r'r1appendrZExternalEntityParserCreaterr-r8)rcontextrurrrsr9rrrras       zExpatParser.external_entity_refcCs'|rd|}n|jj|dS)N%)r7Z skippedEntity)rr>Zis_perrrrbs z"ExpatParser.skipped_entity_handlerNii)"rrrr(rr8r:r;r?rBrFrIrPrSr<rGr6r!r$r&r'r[r\rYrZrorpr_r`rVr]r^rarbrrrrr)Ws>          '       "        r)cOs t||S)N)r))argskwargsrrr create_parsersr|__main__z:http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml)-r(versionZxml.sax._exceptionsZxml.sax.handlerrrrrrrr r sysplatformZSAXReaderNotAvailableZ xml.parsersr ImportErrorrEZxml.saxrrrrdrk_weakrefrweakrefproxyrZLocatorrr-r)r|rZxml.sax.saxutilsZxmlpr;ZsaxZ XMLGeneratorZsetErrorHandlerZ ErrorHandlerr8rrrrsL        $N