a
    åzeß/  ã                   @   s¦   d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ dd„ Z	i fdd„Z
i fd	d
„Zi fdd„Zdd„ ZG dd„ dejƒZG dd„ dejƒZddd„ZdS )é    Né   )Úhandler)Ú	xmlreaderc                 C   s"   |  ¡ D ]\}}|  ||¡} q| S ©N)ÚitemsÚreplace)ÚsÚdÚkeyÚvalue© r   ú&/usr/lib/python3.9/xml/sax/saxutils.pyÚ__dict_replace   s    r   c                 C   s6   |   dd¡} |   dd¡} |   dd¡} |r2t| |ƒ} | S )Nú&ú&amp;ú>ú&gt;ú<ú&lt;©r   r   ©ÚdataZentitiesr   r   r   Úescape   s    	
r   c                 C   s2   |   dd¡} |   dd¡} |r&t| |ƒ} |   dd¡S )Nr   r   r   r   r   r   r   r   r   r   r   Úunescape"   s
    
r   c                 C   sV   i |¥ddddœ¥}t | |ƒ} d| v rJd| v r@d|  dd¡ } qRd	|  } nd|  } | S )
Nz&#10;z&#13;z&#9;)Ú
úú	ú"ú'z"%s"z&quot;z'%s')r   r   r   r   r   r   Ú	quoteattr0   s    

r   c                    sÂ   ˆ d u rdd l }|jS tˆ tjƒr&ˆ S tˆ tjtjfƒr<ˆ S tˆ tjƒrlG ‡ fdd„dƒ}|ƒ }dd„ |_	nBt 
¡ }dd„ |_ˆ j|_zˆ j|_ˆ j|_W n ty¬   Y n0 tj||ddd	d
S )Nr   c                       s   e Zd Z” jZ‡ fdd„ZdS )z _gettextwriter.<locals>._wrapperc                    s
   t ˆ |ƒS r   )Úgetattr©ÚselfÚname©Úoutr   r   Ú__getattr__Z   s    z,_gettextwriter.<locals>._wrapper.__getattr__N)Ú__name__Ú
__module__Ú__qualname__Ú	__class__r&   r   r$   r   r   Ú_wrapperX   s   r+   c                   S   s   d S r   r   r   r   r   r   Ú<lambda>]   ó    z _gettextwriter.<locals>.<lambda>c                   S   s   dS )NTr   r   r   r   r   r,   b   r-   Úxmlcharrefreplacer   T)ÚencodingÚerrorsÚnewlineÚwrite_through)ÚsysÚstdoutÚ
isinstanceÚioÚ
TextIOBaseÚcodecsÚStreamWriterÚStreamReaderWriterÚ	RawIOBaseÚcloseÚBufferedIOBaseÚwritableÚwriteÚseekableÚtellÚAttributeErrorÚTextIOWrapper)r%   r/   r3   r+   Úbufferr   r$   r   Ú_gettextwriterG   s0    
ýrE   c                   @   s€   e Zd Zd 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S )"ÚXMLGeneratorNú
iso-8859-1Fc                 C   sV   t j | ¡ t||ƒ}|j| _|j| _i g| _| jd | _	g | _
|| _|| _d| _d S )NéÿÿÿÿF)r   ÚContentHandlerÚ__init__rE   r?   Ú_writeÚflushÚ_flushÚ_ns_contextsÚ_current_contextÚ_undeclared_ns_mapsÚ	_encodingÚ_short_empty_elementsÚ_pending_start_element)r"   r%   r/   Zshort_empty_elementsr   r   r   rJ   r   s    
zXMLGenerator.__init__c                 C   sJ   |d rBd|d kr d|d  S | j |d  }|rB|d |d  S |d S )Nr   z$http://www.w3.org/XML/1998/namespacezxml:r   ú:)rO   )r"   r#   Úprefixr   r   r   Ú_qname~   s    zXMLGenerator._qnamec                 C   s   | j r|  d¡ d| _ d S )Nr   F©rS   rK   )r"   Ú
endElementr   r   r   Ú_finish_pending_start_element   s    
z*XMLGenerator._finish_pending_start_elementc                 C   s   |   d| j ¡ d S )Nz$<?xml version="1.0" encoding="%s"?>
)rK   rQ   ©r"   r   r   r   ÚstartDocument–   s    ÿzXMLGenerator.startDocumentc                 C   s   |   ¡  d S r   )rM   rZ   r   r   r   ÚendDocumentš   s    zXMLGenerator.endDocumentc                 C   s0   | j  | j ¡ ¡ || j|< | j ||f¡ d S r   )rN   ÚappendrO   ÚcopyrP   ©r"   rU   Úurir   r   r   ÚstartPrefixMapping   s    
zXMLGenerator.startPrefixMappingc                 C   s   | j d | _| j d= d S )NrH   )rN   rO   ©r"   rU   r   r   r   ÚendPrefixMapping¢   s    zXMLGenerator.endPrefixMappingc                 C   sZ   |   ¡  |  d| ¡ | ¡ D ]\}}|  d|t|ƒf ¡ q| jrLd| _n
|  d¡ d S )Nr   ú %s=%sTr   )rY   rK   r   r   rR   rS   )r"   r#   Úattrsr   r   r   r   ÚstartElement¦   s    zXMLGenerator.startElementc                 C   s*   | j r|  d¡ d| _ n|  d| ¡ d S ©Nz/>Fz</%s>rW   r!   r   r   r   rX   °   s    
zXMLGenerator.endElementc                 C   s¢   |   ¡  |  d|  |¡ ¡ | jD ].\}}|rB|  d||f ¡ q"|  d| ¡ q"g | _| ¡ D ]$\}}|  d|  |¡t|ƒf ¡ q`| jr”d| _n
|  d¡ d S )Nr   z xmlns:%s="%s"z xmlns="%s"rd   Tr   )rY   rK   rV   rP   r   r   rR   rS   )r"   r#   Úqnamere   rU   r`   r   r   r   r   ÚstartElementNS·   s    zXMLGenerator.startElementNSc                 C   s0   | j r|  d¡ d| _ n|  d|  |¡ ¡ d S rg   )rS   rK   rV   ©r"   r#   rh   r   r   r   ÚendElementNSÉ   s    
zXMLGenerator.endElementNSc                 C   s4   |r0|   ¡  t|tƒs"t|| jƒ}|  t|ƒ¡ d S r   )rY   r5   ÚstrrQ   rK   r   ©r"   Zcontentr   r   r   Ú
charactersÐ   s
    
zXMLGenerator.charactersc                 C   s0   |r,|   ¡  t|tƒs"t|| jƒ}|  |¡ d S r   )rY   r5   rl   rQ   rK   rm   r   r   r   ÚignorableWhitespace×   s
    
z XMLGenerator.ignorableWhitespacec                 C   s   |   ¡  |  d||f ¡ d S )Nz	<?%s %s?>)rY   rK   ©r"   Útargetr   r   r   r   ÚprocessingInstructionÞ   s    z"XMLGenerator.processingInstruction)NrG   F)F)r'   r(   r)   rJ   rV   rY   r[   r\   ra   rc   rf   rX   ri   rk   rn   ro   rr   r   r   r   r   rF   p   s   


rF   c                   @   sî   e Z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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S );ÚXMLFilterBaseNc                 C   s   t j | ¡ || _d S r   )r   Ú	XMLReaderrJ   Ú_parent©r"   Úparentr   r   r   rJ   ë   s    zXMLFilterBase.__init__c                 C   s   | j  |¡ d S r   )Ú_err_handlerÚerror©r"   Ú	exceptionr   r   r   ry   ñ   s    zXMLFilterBase.errorc                 C   s   | j  |¡ d S r   )rx   Ú
fatalErrorrz   r   r   r   r|   ô   s    zXMLFilterBase.fatalErrorc                 C   s   | j  |¡ d S r   )rx   Úwarningrz   r   r   r   r}   ÷   s    zXMLFilterBase.warningc                 C   s   | j  |¡ d S r   )Ú_cont_handlerÚsetDocumentLocator)r"   Zlocatorr   r   r   r   ü   s    z XMLFilterBase.setDocumentLocatorc                 C   s   | j  ¡  d S r   )r~   r[   rZ   r   r   r   r[   ÿ   s    zXMLFilterBase.startDocumentc                 C   s   | j  ¡  d S r   )r~   r\   rZ   r   r   r   r\     s    zXMLFilterBase.endDocumentc                 C   s   | j  ||¡ d S r   )r~   ra   r_   r   r   r   ra     s    z XMLFilterBase.startPrefixMappingc                 C   s   | j  |¡ d S r   )r~   rc   rb   r   r   r   rc     s    zXMLFilterBase.endPrefixMappingc                 C   s   | j  ||¡ d S r   )r~   rf   )r"   r#   re   r   r   r   rf     s    zXMLFilterBase.startElementc                 C   s   | j  |¡ d S r   )r~   rX   r!   r   r   r   rX     s    zXMLFilterBase.endElementc                 C   s   | j  |||¡ d S r   )r~   ri   )r"   r#   rh   re   r   r   r   ri     s    zXMLFilterBase.startElementNSc                 C   s   | j  ||¡ d S r   )r~   rk   rj   r   r   r   rk     s    zXMLFilterBase.endElementNSc                 C   s   | j  |¡ d S r   )r~   rn   rm   r   r   r   rn     s    zXMLFilterBase.charactersc                 C   s   | j  |¡ d S r   )r~   ro   )r"   Úcharsr   r   r   ro     s    z!XMLFilterBase.ignorableWhitespacec                 C   s   | j  ||¡ d S r   )r~   rr   rp   r   r   r   rr     s    z#XMLFilterBase.processingInstructionc                 C   s   | j  |¡ d S r   )r~   ÚskippedEntityr!   r   r   r   r      s    zXMLFilterBase.skippedEntityc                 C   s   | j  |||¡ d S r   )Ú_dtd_handlerÚnotationDecl)r"   r#   ÚpublicIdÚsystemIdr   r   r   rƒ   %  s    zXMLFilterBase.notationDeclc                 C   s   | j  ||||¡ d S r   )r‚   ÚunparsedEntityDecl)r"   r#   r„   r…   Zndatar   r   r   r†   (  s    z XMLFilterBase.unparsedEntityDeclc                 C   s   | j  ||¡S r   )Z_ent_handlerÚresolveEntity)r"   r„   r…   r   r   r   r‡   -  s    zXMLFilterBase.resolveEntityc                 C   s@   | j  | ¡ | j  | ¡ | j  | ¡ | j  | ¡ | j  |¡ d S r   )ru   ZsetContentHandlerZsetErrorHandlerZsetEntityResolverZsetDTDHandlerÚparse)r"   Úsourcer   r   r   rˆ   2  s
    zXMLFilterBase.parsec                 C   s   | j  |¡ d S r   )ru   Ú	setLocale)r"   Úlocaler   r   r   rŠ   9  s    zXMLFilterBase.setLocalec                 C   s   | j  |¡S r   )ru   Ú
getFeaturer!   r   r   r   rŒ   <  s    zXMLFilterBase.getFeaturec                 C   s   | j  ||¡ d S r   )ru   Ú
setFeature)r"   r#   Ústater   r   r   r   ?  s    zXMLFilterBase.setFeaturec                 C   s   | j  |¡S r   )ru   ÚgetPropertyr!   r   r   r   r   B  s    zXMLFilterBase.getPropertyc                 C   s   | j  ||¡ d S r   )ru   ÚsetProperty)r"   r#   r   r   r   r   r   E  s    zXMLFilterBase.setPropertyc                 C   s   | j S r   ©ru   rZ   r   r   r   Ú	getParentJ  s    zXMLFilterBase.getParentc                 C   s
   || _ d S r   r‘   rv   r   r   r   Ú	setParentM  s    zXMLFilterBase.setParent)N)r'   r(   r)   rJ   ry   r|   r}   r   r[   r\   ra   rc   rf   rX   ri   rk   rn   ro   rr   r   rƒ   r†   r‡   rˆ   rŠ   rŒ   r   r   r   r’   r“   r   r   r   r   rs   ã   s8   
rs   Ú c                 C   s$  t | tjƒrt | ¡} t | tƒr,t | ¡} n^t| dƒrŠ| }t ¡ } t | d¡tƒr^|  	|¡ n
|  
|¡ t|dƒrŠt |jtƒrŠ|  |j¡ |  ¡ d u r |  ¡ d u r |  ¡ }tj tj |¡¡}tj ||¡}tj |¡rò|  |¡ t|dƒ}n$|  tj ||¡¡ tj |  ¡ ¡}|  
|¡ | S )NÚreadr   r#   Úrb)r5   ÚosÚPathLikeÚfspathrl   r   ZInputSourceÚhasattrr•   ZsetCharacterStreamZsetByteStreamr#   ZsetSystemIdZgetCharacterStreamZgetByteStreamZgetSystemIdÚpathÚdirnameÚnormpathÚjoinÚisfileÚopenÚurllibrˆ   ÚurljoinZrequestÚurlopen)r‰   ÚbaseÚfZsysidZbaseheadZsysidfilenamer   r   r   Úprepare_input_sourceR  s.    





r¦   )r”   )r—   Úurllib.parser¡   Zurllib.requestr6   r8   r”   r   r   r   r   r   r   rE   rI   rF   rt   rs   r¦   r   r   r   r   Ú<module>   s   )so