o
    f.                     @   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\!
