o
    ^hS?                     @   s  d Z 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yS   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]
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   javazexpat not available in Java)expatzexpat not supportedParserCreate)	xmlreadersaxutilshandlerc                 C   s   | S N )or   r   %  /home/conda/feedstock_root/build_artifacts/python-split_1761171407825/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol/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                   @   s8   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 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   __doc__r    r$   r)   r,   r.   r   r   r   r   r   3   s    r   c                   @   s  e Zd ZdZdFddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd ZdGd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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Z d?d@ Z!dAdB Z"dCdD Z#dES )HExpatParserz$SAX driver for the pyexpat C module.r     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   sN   t |}|| _z|   | jt|  tj	| | W dS    | 
   )z3Parse an XML document from a URL or an InputSource.N)r   prepare_input_sourcer+   reset_cont_handlerZsetDocumentLocatorr   r   r2   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   r2   setContentHandlerr5   _reset_cont_handler)r   r   r   r   r   rB   }   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   r3   r   r8   r   r   r   r   r7   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 prefixesrD   )r5   SAXNotSupportedExceptionr   r3   r   r7   r   r8   r   r   r   rE   )r   rG   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_handlerr4   r
   r8   r	   r"   hasattrrL   rE   rI   rF   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 setrM   )
r   rN   r4   r5   _reset_lex_handler_propr
   r8   r	   rI   rE   )r   rG   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)r5   r;   r<   ZstartDocumentr"   Parser   errorSAXParseExceptionErrorStringcode_err_handler
fatalError)r   dataisFinaleexcr   r   r   feed   s   
zExpatParser.feedc              
   C   s   | j d u rd S | j  }zEz| j d | j dd W n# tjy? } ztt|j|| }| j	
| W Y d }~nd }~ww W | j | d S W | j | d S | j | w )NF    )r"   ZGetReparseDeferralEnabledZSetReparseDeferralEnabledrT   r   rU   rV   rW   rX   rY   rZ   )r   Zwas_enabledr]   r^   r   r   r   flush   s   

zExpatParser.flushc                 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 )Nr`   T)r\   F)r6   r"   
isinstancer   r_   r<   ZendDocumentr5   r#   r(   r>   r   r   r   r   rb      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   rC     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   )r4   r"   ZCommentHandlerZStartCdataSectionHandlerZEndCdataSectionHandlerZStartDoctypeDeclHandlerZEndDoctypeDeclHandlerZcommentZ
startCDATAZendCDATAstart_doctype_declZendDTD)r   Zlexr   r   r   r   rQ     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)#r3   r   r   r+   ZgetEncodingr8   r"   Znamespace_prefixesstart_element_nsZStartElementHandlerend_element_nsZEndElementHandlerstart_elementend_elementrC   unparsed_entity_declZUnparsedEntityDeclHandlernotation_declZNotationDeclHandlerstart_namespace_declZStartNamespaceDeclHandlerend_namespace_declZEndNamespaceDeclHandlerZ_decl_handler_propr4   rQ   external_entity_refZExternalEntityRefHandlerskipped_entity_handlerZSkippedEntityHandlerAttributeErrorZSetParamEntityParsingZ*XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONEr5   r6   rg   r   r   r   r;   "  s>   








zExpatParser.resetc                 C   s   | j d u rd S | j jS r   )r"   r#   rg   r   r   r   r$   I     
zExpatParser.getColumnNumberc                 C   s   | j d u rdS | j jS r&   )r"   r(   rg   r   r   r   r)   N  rv   zExpatParser.getLineNumberc                 C   
   | j  S r   )r+   r,   rg   r   r   r   r,   S     
zExpatParser.getPublicIdc                 C   rw   r   )r+   r.   rg   r   r   r   r.   V  rx   zExpatParser.getSystemIdc                 C   s   | j |t| d S r   )r<   ZstartElementAttributesImpl)r   rG   attrsr   r   r   rm   Z     zExpatParser.start_elementc                 C      | j | d S r   )r<   Z
endElementrF   r   r   r   rn   ]     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   rG   rz   pairZnewattrsZqnamesZanamerR   partslengthZqnameZapairr   r   r   rk   `  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'   r~   r   )r   r   r   r<   ZendElementNS)r   rG   r   r   r   r   rl     s   
zExpatParser.end_element_nsc                 C      | j || d S r   )r<   re   )r   targetr[   r   r   r   processing_instruction     z"ExpatParser.processing_instructionc                 C   r|   r   )r<   rf   )r   r[   r   r   r   character_data  r}   zExpatParser.character_datac                 C   r   r   )r<   ZstartPrefixMapping)r   prefixZurir   r   r   rq     r   z ExpatParser.start_namespace_declc                 C   r|   r   )r<   ZendPrefixMapping)r   r   r   r   r   rr     r}   zExpatParser.end_namespace_declc                 C   s   | j ||| d S r   )r4   ZstartDTD)r   rG   sysidpubidZhas_internal_subsetr   r   r   rh        zExpatParser.start_doctype_declc                 C   s   | j |||| d S r   )_dtd_handlerZunparsedEntityDecl)r   rG   baser   r   Znotation_namer   r   r   ro     r{   z ExpatParser.unparsed_entity_declc                 C   s   | j ||| d S r   )r   ZnotationDecl)r   rG   r   r   r   r   r   r   rp     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   )r7   Z_ent_handlerZresolveEntityr   r:   r+   r.   r6   appendr"   ZExternalEntityParserCreater   r2   r=   )r   contextr   r   r   r@   r   r   r   rs     s"   
zExpatParser.external_entity_refc                 C   s   |rd| }| j | d S )N%)r<   ZskippedEntity)r   rG   Zis_per   r   r   rt     s   z"ExpatParser.skipped_entity_handlerN)r   r1   )F)$r   r   r   r/   r    r=   rA   rB   rH   rK   rP   rS   r_   ra   r>   rb   rC   rQ   r;   r$   r)   r,   r.   rm   rn   rk   rl   r   r   rq   rr   rh   ro   rp   rs   rt   r   r   r   r   r0   W   sD    

'"r0   c                  O   s   t | i |S r   )r0   )argskwargsr   r   r   create_parser  r!   r   __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   ImportErrorrO   Zxml.saxr   r   r   ry   r   _weakrefr   weakrefproxyr   ZLocatorr   r2   r0   r   r   Zxml.sax.saxutilsZxmlprB   ZsaxZXMLGeneratorZsetErrorHandlerZErrorHandlerr=   r   r   r   r   <module>   sV    



$  m