o
    JAfo=                     @   s  	 d Z ddlT d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[zddlmZ W n eyR   eddw eeds]eddddlmZmZmZ ejZejZzddlZW n ey   dd ZY n
w ddlZejZ[[G dd dZG dd dejZG dd dejejZ dd Z!e"dkrddl#Z$e! Z%e%&e$j'j(  e%)e$j'*  e%+d dS dS )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   javazexpat not available in Java)expatzexpat not supportedParserCreate)	xmlreadersaxutilshandlerc                 C   s   | S N )or   r   */usr/lib/python3.10/xml/sax/expatreader.py_mkproxy'   s   r   c                   @   s   e Zd ZdS )_ClosedParserN)__name__
__module____qualname__r   r   r   r   r   .   s    r   c                   @   s6   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 ZdS )ExpatLocatorc                 C   s   t || _d S r   )r   _refselfparserr   r   r   __init__9      zExpatLocator.__init__c                 C   s   | j }|jd u r
d S |jjS r   )r   _parserErrorColumnNumberr   r   r   r   getColumnNumber<      
zExpatLocator.getColumnNumberc                 C   s   | j }|jd u r
dS |jjS N   )r   r"   ErrorLineNumberr   r   r   r   getLineNumberB   r%   zExpatLocator.getLineNumberc                 C      | j }|d u r	d S |j S r   )r   _sourcegetPublicIdr   r   r   r   r,   H      
zExpatLocator.getPublicIdc                 C   r*   r   )r   r+   getSystemIdr   r   r   r   r.   N   r-   zExpatLocator.getSystemIdN)r   r   r   r    r$   r)   r,   r.   r   r   r   r   r   3   s    r   c                   @   s
  e Zd Z	 dCddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dDd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d.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Z d@dA Z!dBS )EExpatParserr     c                 C   sF   t j| | t  | _d | _|| _d | _d| _g | _	d| _
d | _d S )NFr   )r   IncrementalParserr    ZInputSourcer+   r"   _namespaces_lex_handler_prop_parsing_entity_stack_external_ges
_interning)r   ZnamespaceHandlingbufsizer   r   r   r    Z   s   

zExpatParser.__init__c                 C   sP   	 t |}|| _z|   | jt|  tj	| | W d S    | 
   r   )r   prepare_input_sourcer+   reset_cont_handlerZsetDocumentLocatorr   r   r1   parse_close_sourcer   sourcer   r   r   r<   g   s   
zExpatParser.parsec                 C   s$   |  d ur| j|   d S d S r   )r.   r"   ZSetBaser>   r   r   r   prepareParserw   s   zExpatParser.prepareParserc                 C   s$   t j| | | jr|   d S d S r   )r   r1   setContentHandlerr4   _reset_cont_handler)r   r   r   r   r   rA   }   s   zExpatParser.setContentHandlerc                 C   sL   |t kr| jS |tkr| jd uS |tttfv rdS |tkr | jS t	d| )Nr   Feature '%s' not recognized)
r   r2   r   r7   r   r   r   r   r6   SAXNotRecognizedExceptionr   namer   r   r   
getFeature   s   
zExpatParser.getFeaturec                 C   s   | j rtd|tkr|| _d S |tkr|| _d S |tkr0|r+| jd u r)i | _d S d S d | _d S |tkr<|r:tdd S |t	krH|rFtdd S |t
krT|rRtdd S td| )Nz!Cannot set features while parsingz!expat does not support validationz/expat does not read external parameter entitiesz(expat does not report namespace prefixesrC   )r4   SAXNotSupportedExceptionr   r2   r   r6   r   r7   r   r   r   rD   )r   rF   stater   r   r   
setFeature   sB   




zExpatParser.setFeaturec                 C   s^   |t jkr| jS |tkr| jS |tkr)| jr%t| jdr!| j S t	dt
dt	d| )NGetInputContextz=This version of expat does not support getting the XML stringz.XML string cannot be returned when not parsingProperty '%s' not recognized)r   property_lexical_handlerr3   r
   r7   r	   r"   hasattrrK   rD   rH   rE   r   r   r   getProperty   s   

zExpatParser.getPropertyc                 C   sX   |t jkr|| _| jr|   d S d S |tkr|| _d S |tkr&td| t	d| )NzProperty '%s' cannot be setrL   )
r   rM   r3   r4   _reset_lex_handler_propr
   r7   r	   rH   rD   )r   rF   valuer   r   r   setProperty   s   

zExpatParser.setPropertyFc              
   C   s|   | j s|   d| _ | j  z
| j|| W d S  tjy= } ztt	|j
|| }| j| W Y d }~d S d }~ww )NT)r4   r:   r;   ZstartDocumentr"   ZParser   errorZSAXParseExceptionZErrorStringcodeZ_err_handlerZ
fatalError)r   dataisFinaleexcr   r   r   feed   s   
zExpatParser.feedc                 C   s^   | j }z| }|d ur|  W | }|d ur|  d S d S | }|d ur.|  w w r   )r+   ZgetCharacterStreamcloseZgetByteStream)r   r?   filer   r   r   r=      s   
zExpatParser._close_sourcec                 C   s   | j s| jd u st| jtrd S z1| jddd | j  d| _d | _W d| _| jd ur<t }| jj|_| jj	|_	|| _| 
  d S d| _| jd urZt }| jj|_| jj	|_	|| _| 
  w )N    T)rV   F)r5   r"   
isinstancer   rY   r;   ZendDocumentr4   r#   r(   r=   r   r   r   r   rZ      s.   








zExpatParser.closec                 C   s   | j j| j_| j j| j_d S r   )r;   processingInstructionr"   ZProcessingInstructionHandler
charactersZCharacterDataHandlerr   r   r   r   rB      s   zExpatParser._reset_cont_handlerc                 C   sb   | j }| j}|d u rd |_d |_d |_d |_d |_d S |j|_|j|_|j	|_| j
|_|j|_d S r   )r3   r"   ZCommentHandlerZStartCdataSectionHandlerZEndCdataSectionHandlerZStartDoctypeDeclHandlerZEndDoctypeDeclHandlerZcommentZ
startCDATAZendCDATAstart_doctype_declZendDTD)r   Zlexr   r   r   r   rP     s   
z#ExpatParser._reset_lex_handler_propc                 C   s   | j rtj| j d| jd| _d| j_| j| j_	| j
| j_ntj| j | jd| _| j| j_	| j| j_|   | j| j_| j| j_| j| j_| j| j_d | _| jrW|   | j| j_z| j| j_W n	 tyl   Y nw | jtj  d| _!g | _"d S )N )internr'   F)#r2   r   r   r+   ZgetEncodingr7   r"   Znamespace_prefixesstart_element_nsZStartElementHandlerend_element_nsZEndElementHandlerstart_elementend_elementrB   unparsed_entity_declZUnparsedEntityDeclHandlernotation_declZNotationDeclHandlerstart_namespace_declZStartNamespaceDeclHandlerend_namespace_declZEndNamespaceDeclHandlerZ_decl_handler_propr3   rP   external_entity_refZExternalEntityRefHandlerskipped_entity_handlerZSkippedEntityHandlerAttributeErrorZSetParamEntityParsingZ*XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONEr4   r5   r`   r   r   r   r:     s>   








zExpatParser.resetc                 C   s   | j d u rd S | j jS r   )r"   r#   r`   r   r   r   r$   ;     
zExpatParser.getColumnNumberc                 C   s   | j d u rdS | j jS r&   )r"   r(   r`   r   r   r   r)   @  ro   zExpatParser.getLineNumberc                 C   
   | j  S r   )r+   r,   r`   r   r   r   r,   E     
zExpatParser.getPublicIdc                 C   rp   r   )r+   r.   r`   r   r   r   r.   H  rq   zExpatParser.getSystemIdc                 C   s   | j |t| d S r   )r;   ZstartElementAttributesImpl)r   rF   attrsr   r   r   rf   L     zExpatParser.start_elementc                 C      | j | d S r   )r;   Z
endElementrE   r   r   r   rg   O     zExpatParser.end_elementc                 C   s   |  }t|dkrd |f}nt|dkr|d |d f}nt|}i }i }| D ]>\}}|  }t|}	|	dkrA|}
d |f}n|	dkrXd|d |d f }
|d |d f}n|d }
t|}|||< |
||< q*| j|d t|| d S )Nr'      r   z%s:%s   )splitlentupleitemsr;   ZstartElementNSAttributesNSImpl)r   rF   rs   pairZnewattrsZqnamesZanamerQ   partslengthZqnameZapairr   r   r   rd   R  s0   



zExpatParser.start_element_nsc                 C   sV   |  }t|dkrd |f}nt|dkr|d |d f}nt|}| j|d  d S )Nr'   rw   r   )ry   rz   r{   r;   ZendElementNS)r   rF   r~   r   r   r   re   t  s   
zExpatParser.end_element_nsc                 C      | j || d S r   )r;   r^   )r   targetrU   r   r   r   processing_instruction     z"ExpatParser.processing_instructionc                 C   ru   r   )r;   r_   )r   rU   r   r   r   character_data  rv   zExpatParser.character_datac                 C   r   r   )r;   ZstartPrefixMapping)r   prefixZurir   r   r   rj     r   z ExpatParser.start_namespace_declc                 C   ru   r   )r;   ZendPrefixMapping)r   r   r   r   r   rk     rv   zExpatParser.end_namespace_declc                 C   s   | j ||| d S r   )r3   ZstartDTD)r   rF   sysidpubidZhas_internal_subsetr   r   r   ra        zExpatParser.start_doctype_declc                 C   s   | j |||| d S r   )_dtd_handlerZunparsedEntityDecl)r   rF   baser   r   Znotation_namer   r   r   rh     rt   z ExpatParser.unparsed_entity_declc                 C   s   | j ||| d S r   )r   ZnotationDecl)r   rF   r   r   r   r   r   r   ri     r   zExpatParser.notation_declc                 C   s   | j sdS | j||}t|| j pd}| j| j	| jf | j	
|| _	|| _z	tj| | W n   Y dS | jd \| _	| _| jd= dS )Nr'    r   )r6   Z_ent_handlerZresolveEntityr   r9   r+   r.   r5   appendr"   ZExternalEntityParserCreater   r1   r<   )r   contextr   r   r   r?   r   r   r   rl     s"   
zExpatParser.external_entity_refc                 C   s   |rd| }| j | d S )N%)r;   ZskippedEntity)r   rF   Zis_per   r   r   rm     s   z"ExpatParser.skipped_entity_handlerN)r   r0   )F)"r   r   r   r    r<   r@   rA   rG   rJ   rO   rR   rY   r=   rZ   rB   rP   r:   r$   r)   r,   r.   rf   rg   rd   re   r   r   rj   rk   ra   rh   ri   rl   rm   r   r   r   r   r/   W   sB    

'"r/   c                  O   s   t | i |S r   )r/   )argskwargsr   r   r   create_parser  r!   r   __main__z:http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml),versionZxml.sax._exceptionsZxml.sax.handlerr   r   r   r   r   r   r	   r
   sysplatformZSAXReaderNotAvailableZxml.parsersr   ImportErrorrN   Zxml.saxr   r   r   rr   r}   _weakrefr   weakrefproxyr   ZLocatorr   r1   r/   r   r   Zxml.sax.saxutilsZxmlprA   ZsaxZXMLGeneratorZsetErrorHandlerZErrorHandlerr<   r   r   r   r   <module>   sV    



$  _