a
    If.                     @   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	yT   Y n0 |dig| _
| j
d | _g | _d S )Nr   )XML_NAMESPACExml)Zxml.domr   documentFactory
firstEvent	lastEventelementStackappendpushpopAttributeError_ns_contexts_current_contextpending_events)selfr   r    r    lib/python3.9/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   Z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 | _|\}}	|r|d u rn| j| }
|
rj|
d |	 }n|	}| jr| j||}q| ||}n | jr| j|	}n| d |	}| D ]\}}|\}}||kr|dkr|}nd| }| j	||}|
| nX|rF| j| }
|
r(|
d | }n|}| j	||}|
| n| j|}|| ||_qt|fd g| jd< | jd | _| | d S )Nzhttp://www.w3.org/2000/xmlns/r"   :r#   zxmlns:   )getattrZ_attrsr"   r   documentZcreateElementNSbuildDocumentcreateElementitemsZcreateAttributeNSZsetAttributeNodeNScreateAttributesetAttributeNodevaluer   r   r   )r   nametagNameattrsZ	xmlns_uriZxmlns_attrsanamer3   r'   Z	localnamer&   nodeZa_uriZa_localnameZqnameattrr   r   r   startElementNS3   sP    



zPullDOM.startElementNSc                 C   s&   t |  fd g| jd< | jd | _d S Nr+   r   r   r   )r   r4   r5   r   r   r   endElementNSl   s    zPullDOM.endElementNSc                 C   sz   | j r| j |}n| d |}| D ]$\}}| j |}||_|| q(t|fd g| jd< | jd | _| 	| d S r;   )
r-   r/   r.   r0   r1   r3   r2   r   r   r   )r   r4   r6   r8   r7   r3   r9   r   r   r   startElementp   s    zPullDOM.startElementc                 C   s&   t |  fd g| jd< | jd | _d S r;   r<   )r   r4   r   r   r   
endElement   s    zPullDOM.endElementc                 C   sN   | j r2| j |}t|fd g| jd< | jd | _nt|fd g}| j| d S r;   )r-   createCommentr   r   r   r   )r   sr8   eventr   r   r   comment   s    zPullDOM.commentc                 C   sR   | j r4| j ||}t|fd g| jd< | jd | _nt||fd g}| j| d S r;   )r-   createProcessingInstructionr   r   r   r   )r   targetdatar8   rB   r   r   r   processingInstruction   s    zPullDOM.processingInstructionc                 C   s.   | j |}t|fd g| jd< | jd | _d S r;   )r-   createTextNoder   r   r   charsr8   r   r   r   ignorableWhitespace   s    zPullDOM.ignorableWhitespacec                 C   s.   | j |}t|fd g| jd< | jd | _d S r;   )r-   rH   r	   r   rI   r   r   r   
characters   s    zPullDOM.charactersc                 C   s$   | j d u r dd l}|jjjj| _ d S )Nr   )r   Zxml.dom.minidomZdomZminidomZ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 ]}|d d tkr|d \}}}| j||}t|f|d< nD|d d t	kr| j
|d d }t	|f|d< ntd|d d || jd< || _qDd | _|jS )Nr+   r   zUnknown pending event )r   ZcreateDocumentr-   r   r   r   r   r   rD   r   r@   AssertionErrorZ
firstChild)	r   r'   Ztagnamer8   e_rE   rF   nr   r   r   r.      s$    


zPullDOM.buildDocumentc                 C   s    t | jfd g| jd< |   d S r;   )r   r-   r   r   r   r   r   r   endDocument   s    zPullDOM.endDocumentc                 C   s
   d| _ dS )z.clear(): Explicitly release parsing structuresN)r-   rS   r   r   r   clear   s    zPullDOM.clear)N)__name__
__module____qualname__r    r-   r   r   r!   r(   r)   r:   r=   r>   r?   rC   rG   rK   rL   rN   r.   rT   rU   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   Z	exceptionr   r   r   warning   s    zErrorHandler.warningc                 C   s   |d S r   r   r[   r   r   r   error   s    zErrorHandler.errorc                 C   s   |d S r   r   r[   r   r   r   
fatalError   s    zErrorHandler.fatalErrorN)rV   rW   rX   r\   r]   r^   r   r   r   r   rY      s   rY   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   ra   rb   rc   r   r   r   r      s    zDOMEventStream.__init__c                 C   s.   t  | _| jtjjjd | j| j d S r;   )	r
   pulldomrb   Z
setFeaturer   saxZhandlerZfeature_namespacesZsetContentHandlerrS   r   r   r   rf      s    zDOMEventStream.resetc                 C   s0   dd l }|jdtdd |  }|r(|S td S )Nr   z[DOMEventStream's __getitem__ method ignores 'pos' parameter. Use iterator protocol instead.   )
stacklevel)warningswarnDeprecationWarningre   
IndexError)r   posrk   rcr   r   r   __getitem__   s    zDOMEventStream.__getitem__c                 C   s   |   }|r|S td S r   )re   StopIterationr   rp   r   r   r   __next__   s    zDOMEventStream.__next__c                 C   s   | S r   r   rS   r   r   r   __iter__   s    zDOMEventStream.__iter__c                 C   sl   |   }|g}|rh|\}}||u r&d S |tkr<|d | |tkrP|| n|tkr^|d= |   }qd S r   )re   r   appendChildr   r   )r   r8   rB   parentstokenZcur_noder   r   r   
expandNode   s    zDOMEventStream.expandNodec                 C   s~   | j jd s| j j| j _| j jd sR| j| j}|sD| j  d S | j| q| j jd d }| j jd d | j jd< |S )Nr+   r   )	rg   r   r   ra   readrc   rb   closer`   )r   bufrp   r   r   r   re      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).
        )rb   parsera   _emitre   rS   r   r   r   rd     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   )rg   r   rs   r   r   r   r~     s    zDOMEventStream._emitc                 C   s   | j   | ` d| _d| _dS )z+clear(): Explicitly release parsing objectsN)rg   rU   rb   ra   rS   r   r   r   rU   !  s    
zDOMEventStream.clearN)rV   rW   rX   r   rf   rq   rt   ru   ry   re   rd   r~   rU   r   r   r   r   r_      s   
r_   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
   r:   r   rv   )r   r4   r5   r6   curNode
parentNoder   r   r   r:   *  s    

zSAX2DOM.startElementNSc                 C   s0   t | || | jd }| jd }|| d S r   )r
   r>   r   rv   )r   r4   r6   r   r   r   r   r   r>   0  s    

zSAX2DOM.startElementc                 C   s4   t | || | jd d }| jd }|| d S Nr   r+   r   )r
   rG   r   r   rv   )r   rE   rF   r8   r   r   r   r   rG   6  s    
zSAX2DOM.processingInstructionc                 C   s2   t | | | jd d }| jd }|| d S r   )r
   rK   r   r   rv   r   rJ   r8   r   r   r   r   rK   <  s    
zSAX2DOM.ignorableWhitespacec                 C   s2   t | | | jd d }| jd }|| d S r   )r
   rL   r   r   rv   r   r   r   r   rL   B  s    
zSAX2DOM.charactersN)rV   rW   rX   r:   r>   rG   rK   rL   r   r   r   r   r   (  s
   r   i?  c                 C   s@   |d u rt }t| tr"t| d}n| }|s4tj }t|||S )Nrb)default_bufsize
isinstancestropenr   rh   make_parserr_   )Zstream_or_stringrb   rc   ra   r   r   r   r}   K  s    

r}   c                 C   s6   ddl m} t| }|| }|s*tj }t|||S )Nr   )StringIO)ior   lenr   rh   r   r_   )stringrb   r   rc   r|   r   r   r   parseStringV  s    
r   )NN)N)Zxml.saxr   Zxml.sax.handlerr   r   r   r   r   r   r   r	   rh   ZContentHandlerr
   rY   r_   r   r   r}   r   r   r   r   r   <module>   s"    8\!
