o
    éT•jÝ.  ã                   @   sŒ   d dl Zd dlZdZdZdZdZdZdZdZ	d	Z
G d
d„ dejjƒZG dd„ dƒZG dd„ dƒZG dd„ deƒZdZddd„Zddd„ZdS )é    NÚSTART_ELEMENTÚEND_ELEMENTÚCOMMENTÚSTART_DOCUMENTÚEND_DOCUMENTÚPROCESSING_INSTRUCTIONÚIGNORABLE_WHITESPACEÚ
CHARACTERSc                   @   sž   e Zd Zd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S )%ÚPullDOMNc                 C   sx   ddl m} || _d d g| _| j| _g | _| jj| _z| jj| _W n	 t	y*   Y nw |dig| _
| j
d | _g | _d S )Nr   )ÚXML_NAMESPACEÚxmléÿÿÿÿ)Úxml.domr   ÚdocumentFactoryÚ
firstEventÚ	lastEventÚelementStackÚappendÚpushÚpopÚAttributeErrorÚ_ns_contextsÚ_current_contextÚpending_events)Úselfr   r   © r   ú&/usr/lib/python3.10/xml/dom/pulldom.pyÚ__init__   s   

þ
zPullDOM.__init__c                 C   s   | j d }| j d= |S ©Nr   )r   )r   Úresultr   r   r   r   !   s   
zPullDOM.popc                 C   s
   || _ d S ©N)Ú_locator)r   Úlocatorr   r   r   ÚsetDocumentLocator&   s   
zPullDOM.setDocumentLocatorc                 C   sH   t | dƒsg | _| j |pd|f¡ | j | j ¡ ¡ |pd | j|< d S )NÚ_xmlns_attrsÚxmlns)Úhasattrr$   r   r   r   Úcopy)r   ÚprefixÚurir   r   r   ÚstartPrefixMapping)   s
   
zPullDOM.startPrefixMappingc                 C   s   | j  ¡ | _d S r    )r   r   r   )r   r(   r   r   r   ÚendPrefixMapping0   s   zPullDOM.endPrefixMappingc                 C   sŠ  d}t | dd ƒ}|d ur|D ]\}}||j||f< qg | _|\}}	|rI|d u r7| j| }
|
r5|
d |	 }n|	}| jrB| j ||¡}n|  ||¡}n| jrS| j |	¡}n|  d |	¡}| ¡ D ]Q\}}|\}}||kr�|dkrp|}nd| }| j 	||¡}| 
|¡ n*|r | j| }
|
r‘|
d | }n|}| j 	||¡}| 
|¡ n| j |¡}| |¡ ||_q]t|fd g| jd< | jd | _|  |¡ d S )Nzhttp://www.w3.org/2000/xmlns/r$   ú:r%   zxmlns:é   )ÚgetattrÚ_attrsr$   r   ÚdocumentÚcreateElementNSÚbuildDocumentÚcreateElementÚitemsÚcreateAttributeNSÚsetAttributeNodeNSÚcreateAttributeÚsetAttributeNodeÚvaluer   r   r   )r   ÚnameÚtagNameÚattrsÚ	xmlns_uriÚxmlns_attrsÚanamer9   r)   Ú	localnamer(   ÚnodeÚa_uriÚa_localnameÚqnameÚattrr   r   r   ÚstartElementNS3   sP   


zPullDOM.startElementNSc                 C   ó&   t |  ¡ fd g| jd< | jd | _d S ©Nr-   ©r   r   r   )r   r:   r;   r   r   r   ÚendElementNSl   ó   zPullDOM.endElementNSc                 C   sz   | j r
| j  |¡}n|  d |¡}| ¡ D ]\}}| j  |¡}||_| |¡ qt|fd g| jd< | jd | _|  	|¡ d S rH   )
r0   r3   r2   r4   r7   r9   r8   r   r   r   )r   r:   r<   rA   r?   r9   rE   r   r   r   ÚstartElementp   s   zPullDOM.startElementc                 C   rG   rH   rI   )r   r:   r   r   r   Ú
endElement   rK   zPullDOM.endElementc                 C   sP   | j r| j  |¡}t|fd g| jd< | jd | _d S t|fd g}| j |¡ d S rH   )r0   ÚcreateCommentr   r   r   r   )r   ÚsrA   Úeventr   r   r   Úcommentƒ   s   zPullDOM.commentc                 C   sT   | j r| j  ||¡}t|fd g| jd< | jd | _d S t||fd g}| j |¡ d S rH   )r0   ÚcreateProcessingInstructionr   r   r   r   )r   ÚtargetÚdatarA   rP   r   r   r   ÚprocessingInstructionŒ   s   zPullDOM.processingInstructionc                 C   ó.   | j  |¡}t|fd g| jd< | jd | _d S rH   )r0   ÚcreateTextNoder   r   ©r   ÚcharsrA   r   r   r   ÚignorableWhitespace•   ó   zPullDOM.ignorableWhitespacec                 C   rV   rH   )r0   rW   r	   r   rX   r   r   r   Ú
charactersš   r[   zPullDOM.charactersc                 C   s(   | j d u rdd l}|jjjj| _ d S d S )Nr   )r   Úxml.dom.minidomÚdomÚminidomÚDocumentÚimplementation)r   r   r   r   r   ÚstartDocumentŸ   s   
þzPullDOM.startDocumentc           	      C   sä   | j  ||d ¡}|| _t|fd g| jd< | jd | _|  |¡ | jD ]I}|d d tkrA|d \}}}| j ||¡}t|f|d< n"|d d t	krZ| j 
|d d ¡}t	|f|d< n	td|d d ƒ‚|| jd< || _q"d | _|jS )Nr-   r   zUnknown pending event )r   ÚcreateDocumentr0   r   r   r   r   r   rR   r   rN   ÚAssertionErrorÚ
firstChild)	r   r)   ÚtagnamerA   ÚeÚ_rS   rT   Únr   r   r   r2   ¤   s$   


zPullDOM.buildDocumentc                 C   s    t | jfd g| jd< |  ¡  d S rH   )r   r0   r   r   ©r   r   r   r   ÚendDocument¼   s   zPullDOM.endDocumentc                 C   s
   d| _ dS )z.clear(): Explicitly release parsing structuresN)r0   rj   r   r   r   ÚclearÀ   s   
zPullDOM.clearr    )Ú__name__Ú
__module__Ú__qualname__r!   r0   r   r   r#   r*   r+   rF   rJ   rL   rM   rQ   rU   rZ   r\   rb   r2   rk   rl   r   r   r   r   r
      s(    
9		r
   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚErrorHandlerc                 C   s   t |ƒ d S r    )Úprint©r   Ú	exceptionr   r   r   ÚwarningÅ   s   zErrorHandler.warningc                 C   ó   |‚r    r   rr   r   r   r   ÚerrorÇ   ó   zErrorHandler.errorc                 C   ru   r    r   rr   r   r   r   Ú
fatalErrorÉ   rw   zErrorHandler.fatalErrorN)rm   rn   ro   rt   rv   rx   r   r   r   r   rp   Ä   s    rp   c                   @   s\   e Z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 )ÚDOMEventStreamc                 C   s2   || _ || _|| _t| jdƒs| j| _|  ¡  d S )NÚfeed)ÚstreamÚparserÚbufsizer&   Ú_slurpÚgetEventÚreset)r   r{   r|   r}   r   r   r   r   Í   s   zDOMEventStream.__init__c                 C   s.   t ƒ | _| j tjjjd¡ | j | j¡ d S rH   )	r
   Úpulldomr|   Ú
setFeaturer   ÚsaxÚhandlerÚfeature_namespacesÚsetContentHandlerrj   r   r   r   r€   Õ   s   zDOMEventStream.resetc                 C   s,   dd l }|jdtdd� |  ¡ }|r|S t‚)Nr   z[DOMEventStream's __getitem__ method ignores 'pos' parameter. Use iterator protocol instead.é   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr   Ú
IndexError)r   Úposr‰   Úrcr   r   r   Ú__getitem__Û   s   üzDOMEventStream.__getitem__c                 C   s   |   ¡ }|r|S t‚r    )r   ÚStopIteration©r   rŽ   r   r   r   Ú__next__è   s   zDOMEventStream.__next__c                 C   s   | S r    r   rj   r   r   r   Ú__iter__î   rw   zDOMEventStream.__iter__c                 C   sr   |   ¡ }|g}|r7|\}}||u rd S |tkr|d  |¡ |tkr(| |¡ n|tkr/|d= |   ¡ }|s	d S d S r   )r   r   ÚappendChildr   r   )r   rA   rP   ÚparentsÚtokenÚcur_noder   r   r   Ú
expandNodeñ   s   özDOMEventStream.expandNodec                 C   sˆ   | j jd s| j j| j _| j jd s.| j | j¡}|s"| j ¡  d S | j |¡ | j jd r| j jd d }| j jd d | j jd< |S )Nr-   r   )	r�   r   r   r{   Úreadr}   r|   Úcloserz   )r   ÚbufrŽ   r   r   r   r      s   
ûzDOMEventStream.getEventc                 C   s   | j  | j¡ | j| _|  ¡ S )zå Fallback replacement for getEvent() using the
            standard SAX2 interface, which means we slurp the
            SAX events into memory (no performance gain, but
            we are compatible to all SAX parsers).
        )r|   Úparser{   Ú_emitr   rj   r   r   r   r~     s   zDOMEventStream._slurpc                 C   s,   | j jd d }| j jd d | j jd< |S )zn Fallback replacement for getEvent() that emits
            the events that _slurp() read previously.
        r-   r   )r�   r   r‘   r   r   r   r�     s   zDOMEventStream._emitc                 C   s   | j  ¡  | ` d| _d| _dS )z+clear(): Explicitly release parsing objectsN)r�   rl   r|   r{   rj   r   r   r   rl   !  s   

zDOMEventStream.clearN)rm   rn   ro   r   r€   r�   r’   r“   r˜   r   r~   r�   rl   r   r   r   r   ry   Ì   s    
ry   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚSAX2DOMc                 C   s2   t  | |||¡ | jd }| jd }| |¡ d S ©Nr   éþÿÿÿ)r
   rF   r   r”   )r   r:   r;   r<   ÚcurNodeÚ
parentNoder   r   r   rF   *  s   

zSAX2DOM.startElementNSc                 C   s0   t  | ||¡ | jd }| jd }| |¡ d S rŸ   )r
   rL   r   r”   )r   r:   r<   r¡   r¢   r   r   r   rL   0  s   

zSAX2DOM.startElementc                 C   s4   t  | ||¡ | jd d }| jd }| |¡ d S ©Nr   r-   r   )r
   rU   r   r   r”   )r   rS   rT   rA   r¢   r   r   r   rU   6  s   
zSAX2DOM.processingInstructionc                 C   ó2   t  | |¡ | jd d }| jd }| |¡ d S r£   )r
   rZ   r   r   r”   ©r   rY   rA   r¢   r   r   r   rZ   <  ó   
zSAX2DOM.ignorableWhitespacec                 C   r¤   r£   )r
   r\   r   r   r”   r¥   r   r   r   r\   B  r¦   zSAX2DOM.charactersN)rm   rn   ro   rF   rL   rU   rZ   r\   r   r   r   r   rž   (  s    rž   iì?  c                 C   s@   |d u rt }t| tƒrt| dƒ}n| }|stj ¡ }t|||ƒS )NÚrb)Údefault_bufsizeÚ
isinstanceÚstrÚopenr   rƒ   Úmake_parserry   )Ústream_or_stringr|   r}   r{   r   r   r   rœ   K  s   

rœ   c                 C   s6   ddl m} t| ƒ}|| ƒ}|stj ¡ }t|||ƒS )Nr   )ÚStringIO)Úior®   Úlenr   rƒ   r¬   ry   )Ústringr|   r®   r}   r›   r   r   r   ÚparseStringV  s   
r²   )NNr    )Úxml.saxr   Úxml.sax.handlerr   r   r   r   r   r   r   r	   rƒ   ÚContentHandlerr
   rp   ry   rž   r¨   rœ   r²   r   r   r   r   Ú<module>   s$     8\!
