U
    ›‰`Ý.  ã                   @   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   sz   ddl m} || _d d g| _| j| _g | _| jj| _z| jj| _W n t	k
rV   Y nX |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   ú%/usr/lib/python3.8/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 k	r:|D ]\}}||j||f< qg | _|\}}	|r’|d k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 |¡}| |¡ ||_qºt|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 k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|\}}||k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 k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\!
