
][\C9                 @   s.  d  Z  d Z d d l Td d l m Z m Z d d l m Z d d l m Z m Z d d l m	 Z	 d d l m
 Z
 m Z d d	 l Z e j d	 d
  d k r e d d	   n  [ y d d l m Z Wn! e k
 r e d d	   Yn# Xe e d  re d d	   n  d d l m Z m Z m Z e j Z e j Z y d d	 l Z Wn e k
 rjd d   Z Yn Xd d	 l Z e j Z [ [ Gd d   d e j  Z Gd d   d e j e j  Z  d d   Z! e" d k r*d d	 l# Z$ e!   Z% e% j& e$ j' j j(    e% j) e$ j' j*    e% j+ d  n  d	 S)z]
SAX driver for the pyexpat C module.  This driver works with
pyexpat.__version__ == '2.22'.
z0.20    )*)feature_validationfeature_namespaces)feature_namespace_prefixes)feature_external_gesfeature_external_pes)feature_string_interning)property_xml_stringproperty_interning_dictN   Zjavazexpat not available in Java)expatzexpat not supportedParserCreate)	xmlreadersaxutilshandlerc             C   s   |  S)N )or   r   )/usr/lib/python3.4/xml/sax/expatreader.py_mkproxy'   s    r   c               @   sR   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d 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.
    c             C   s   t  |  |  _ d  S)N)r   _ref)selfparserr   r   r   __init__6   s    zExpatLocator.__init__c             C   s&   |  j  } | j d  k r d  S| j j S)N)r   _parserErrorColumnNumber)r   r   r   r   r   getColumnNumber9   s    	zExpatLocator.getColumnNumberc             C   s&   |  j  } | j d  k r d S| j j S)N   )r   r   ErrorLineNumber)r   r   r   r   r   getLineNumber?   s    	zExpatLocator.getLineNumberc             C   s&   |  j  } | d  k r d  S| j j   S)N)r   _sourcegetPublicId)r   r   r   r   r   r!   E   s    	zExpatLocator.getPublicIdc             C   s&   |  j  } | d  k r d  S| j j   S)N)r   r    getSystemId)r   r   r   r   r   r"   K   s    	zExpatLocator.getSystemIdN)	__name__
__module____qualname____doc__r   r   r   r!   r"   r   r   r   r   r   0   s   r   c               @   s  e  Z d  Z d Z d dD d d  Z d d	   Z d
 d   Z d d   Z d d   Z d d   Z	 d d   Z
 d d   Z d d d  Z d d   Z d d   Z d d   Z d d   Z d  d!   Z d" d#   Z d$ d%   Z d& d'   Z d( d)   Z d* d+   Z d, d-   Z d. d/   Z d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z d8 d9   Z d: d;   Z d< d=   Z d> d?   Z  d@ dA   Z! dB S)EExpatParserz$SAX driver for the pyexpat C module.r            c             C   se   t  j j |  |  t  j   |  _ d  |  _ | |  _ d  |  _ d |  _ g  |  _	 d |  _
 d  |  _ d  S)Nr   r   )r   IncrementalParserr   ZInputSourcer    r   _namespaces_lex_handler_prop_parsing_entity_stack_external_ges
_interning)r   ZnamespaceHandlingbufsizer   r   r   r   W   s    						zExpatParser.__init__c             C   sO   t  j |  } | |  _ |  j   |  j j t |    t j j	 |  |  d S)z3Parse an XML document from a URL or an InputSource.N)
r   prepare_input_sourcer    reset_cont_handlerZsetDocumentLocatorr   r   r+   parse)r   sourcer   r   r   r6   d   s
    	
zExpatParser.parsec             C   s/   | j    d  k	 r+ |  j j | j     n  d  S)N)r"   r   ZSetBase)r   r7   r   r   r   prepareParserm   s    zExpatParser.prepareParserc             C   s-   t  j j |  |  |  j r) |  j   n  d  S)N)r   r+   setContentHandlerr.   _reset_cont_handler)r   r   r   r   r   r9   s   s    	zExpatParser.setContentHandlerc             C   sl   | t  k r |  j S| t k r, |  j d  k	 S| t t t f k rE d S| t k rX |  j St	 d |   d  S)Nr   zFeature '%s' not recognized)
r   r,   r   r1   r   r   r   r   r0   SAXNotRecognizedException)r   namer   r   r   
getFeaturex   s    	zExpatParser.getFeaturec             C   s  |  j  r t d   n  | t k r0 | |  _ n | t k rH | |  _ n | t k r | rx |  j d  k r i  |  _ q q d  |  _ n| | t k r | r t d   q nX | t	 k r | r t d   q n4 | t
 k r | r t d   q n t d |   d  S)Nz!Cannot set features while parsingz!expat does not support validationz/expat does not read external parameter entitiesz(expat does not report namespace prefixeszFeature '%s' not recognized)r.   SAXNotSupportedExceptionr   r,   r   r0   r   r1   r   r   r   r;   )r   r<   stater   r   r   
setFeature   s2    	zExpatParser.setFeaturec             C   s   | t  j k r |  j S| t k r) |  j S| t k r{ |  j rl t |  j d  r] |  j j   St	 d   q{ t
 d   n  t	 d |   d  S)NGetInputContextz=This version of expat does not support getting the XML stringz.XML string cannot be returned when not parsingzProperty '%s' not recognized)r   property_lexical_handlerr-   r
   r1   r	   r   hasattrrA   r;   r>   )r   r<   r   r   r   getProperty   s    	zExpatParser.getPropertyc             C   s|   | t  j k r1 | |  _ |  j rx |  j   qx nG | t k rI | |  _ n/ | t k rh t d |   n t	 d |   d  S)NzProperty '%s' cannot be setzProperty '%s' not recognized)
r   rB   r-   r.   _reset_lex_handler_propr
   r1   r	   r>   r;   )r   r<   valuer   r   r   setProperty   s    		zExpatParser.setPropertyc             C   s   |  j  s, |  j   d |  _  |  j j   n  y |  j j | |  WnV t j k
 r } z3 t t j	 | j
  | |   } |  j j |  WYd  d  } ~ Xn Xd  S)Nr   )r.   r4   r5   ZstartDocumentr   ZParser   errorZSAXParseExceptionZErrorStringcodeZ_err_handlerZ
fatalError)r   dataisFinaleexcr   r   r   feed   s    	
	zExpatParser.feedc             C   sk   |  j  r d  S|  j d d d |  j j   d |  _ d  |  _ |  j j   } | d  k	 rg | j   n  d  S)N rK   r   r   )	r/   rN   r5   ZendDocumentr.   r   r    ZgetByteStreamclose)r   Zbsr   r   r   rP      s    			zExpatParser.closec             C   s(   |  j  j |  j _ |  j  j |  j _ d  S)N)r5   processingInstructionr   ZProcessingInstructionHandler
charactersZCharacterDataHandler)r   r   r   r   r:      s    zExpatParser._reset_cont_handlerc             C   s   |  j  } |  j } | d  k rN d  | _ d  | _ d  | _ d  | _ d  | _ n< | j | _ | j | _ | j	 | _ |  j
 | _ | j | _ d  S)N)r-   r   ZCommentHandlerZStartCdataSectionHandlerZEndCdataSectionHandlerZStartDoctypeDeclHandlerZEndDoctypeDeclHandlerZcommentZ
startCDATAZendCDATAstart_doctype_declZendDTD)r   Zlexr   r   r   r   rE      s    						z#ExpatParser._reset_lex_handler_propc             C   sd  |  j  r] t j |  j j   d d |  j |  _ d |  j _ |  j |  j _	 |  j
 |  j _ nB t j |  j j   d |  j |  _ |  j |  j _	 |  j |  j _ |  j   |  j |  j _ |  j |  j _ |  j |  j _ |  j |  j _ d  |  _ |  j r|  j   n  |  j |  j _ y |  j |  j _ Wn t k
 r:Yn X|  j j t j   d |  _! g  |  _" d  S)N internr   r   )#r,   r   r   r    ZgetEncodingr1   r   Znamespace_prefixesstart_element_nsZStartElementHandlerend_element_nsZEndElementHandlerstart_elementend_elementr:   unparsed_entity_declZUnparsedEntityDeclHandlernotation_declZNotationDeclHandlerstart_namespace_declZStartNamespaceDeclHandlerend_namespace_declZEndNamespaceDeclHandlerZ_decl_handler_propr-   rE   external_entity_refZExternalEntityRefHandlerskipped_entity_handlerZSkippedEntityHandlerAttributeErrorZSetParamEntityParsingZ*XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONEr.   r/   )r   r   r   r   r4      s6    	
			
	zExpatParser.resetc             C   s   |  j  d  k r d  S|  j  j S)N)r   r   )r   r   r   r   r     s    zExpatParser.getColumnNumberc             C   s   |  j  d  k r d S|  j  j S)Nr   )r   r   )r   r   r   r   r   #  s    zExpatParser.getLineNumberc             C   s   |  j  j   S)N)r    r!   )r   r   r   r   r!   (  s    zExpatParser.getPublicIdc             C   s   |  j  j   S)N)r    r"   )r   r   r   r   r"   +  s    zExpatParser.getSystemIdc             C   s   |  j  j | t |   d  S)N)r5   ZstartElementAttributesImpl)r   r<   attrsr   r   r   rX   /  s    zExpatParser.start_elementc             C   s   |  j  j |  d  S)N)r5   Z
endElement)r   r<   r   r   r   rY   2  s    zExpatParser.end_elementc             C   sL  | j    } t |  d k r- d  | f } n5 t |  d k rV | d | d f } n t |  } i  } i  } x | j   D] \ } } | j    } t |  }	 |	 d k r | }
 d  | f } nQ |	 d k r d | d | d f }
 | d | d f } n | d }
 t |  } | | | <|
 | | <q{ W|  j j | d  t | |   d  S)Nr      r   z%s:%sr(   )splitlentupleitemsr5   ZstartElementNSAttributesNSImpl)r   r<   rb   pairZnewattrsZqnamesZanamerF   partsZlengthZqnameZapairr   r   r   rV   5  s.    

zExpatParser.start_element_nsc             C   sy   | j    } t |  d k r- d  | f } n5 t |  d k rV | d | d f } n t |  } |  j j | d   d  S)Nr   rc   r   )rd   re   rf   r5   ZendElementNS)r   r<   ri   r   r   r   rW   W  s    zExpatParser.end_element_nsc             C   s   |  j  j | |  d  S)N)r5   rQ   )r   targetrJ   r   r   r   processing_instructionc  s    z"ExpatParser.processing_instructionc             C   s   |  j  j |  d  S)N)r5   rR   )r   rJ   r   r   r   character_datag  s    zExpatParser.character_datac             C   s   |  j  j | |  d  S)N)r5   ZstartPrefixMapping)r   prefixZurir   r   r   r\   j  s    z ExpatParser.start_namespace_declc             C   s   |  j  j |  d  S)N)r5   ZendPrefixMapping)r   rn   r   r   r   r]   m  s    zExpatParser.end_namespace_declc             C   s   |  j  j | | |  d  S)N)r-   ZstartDTD)r   r<   sysidpubidZhas_internal_subsetr   r   r   rS   p  s    zExpatParser.start_doctype_declc             C   s   |  j  j | | | |  d  S)N)_dtd_handlerZunparsedEntityDecl)r   r<   basero   rp   Znotation_namer   r   r   rZ   s  s    z ExpatParser.unparsed_entity_declc             C   s   |  j  j | | |  d  S)N)rq   ZnotationDecl)r   r<   rr   ro   rp   r   r   r   r[   v  s    zExpatParser.notation_declc          	   C   s   |  j  s d S|  j j | |  } t j | |  j j   p= d  } |  j j |  j	 |  j f  |  j	 j
 |  |  _	 | |  _ y t j j |  |  Wn d SYn X|  j d \ |  _	 |  _ |  j d =d S)Nr   rO   r   rs   )r0   Z_ent_handlerZresolveEntityr   r3   r    r"   r/   appendr   ZExternalEntityParserCreater   r+   r6   )r   contextrr   ro   rp   r7   r   r   r   r^   y  s     					
zExpatParser.external_entity_refc             C   s'   | r d | } n  |  j  j |  d  S)N%)r5   ZskippedEntity)r   r<   Zis_per   r   r   r_     s    z"ExpatParser.skipped_entity_handlerNi   i  )"r#   r$   r%   r&   r   r6   r8   r9   r=   r@   rD   rG   rN   rP   r:   rE   r4   r   r   r!   r"   rX   rY   rV   rW   rl   rm   r\   r]   rS   rZ   r[   r^   r_   r   r   r   r   r'   T   s>   	'"r'   c              O   s   t  |  |   S)N)r'   )argskwargsr   r   r   create_parser  s    ry   __main__z:http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml),r&   versionZxml.sax._exceptionsZxml.sax.handlerr   r   r   r   r   r   r	   r
   sysplatformZSAXReaderNotAvailableZxml.parsersr   ImportErrorrC   Zxml.saxr   r   r   ra   rh   _weakrefr   weakrefproxyZLocatorr   r+   r'   ry   r#   Zxml.sax.saxutilsZxmlpr9   ZsaxZXMLGeneratorZsetErrorHandlerZErrorHandlerr6   r   r   r   r   <module>   sJ   
			$ D	