î
]á[\ñ-  ã               @   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
 Gd
 d „  d e j j ƒ Z Gd d „  d ƒ Z Gd d „  d ƒ Z Gd d „  d e ƒ Z d Z d 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   s¤   d d l  m } | |  _ d  d  g |  _ |  j |  _ g  |  _ |  j j |  _ y |  j j |  _ Wn t	 k
 rs Yn Xi d | 6g |  _
 |  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.4/xml/dom/pulldom.pyÚ__init__   s    		zPullDOM.__init__c             C   s   |  j  d } |  j  d =| S)Nr   r   r   )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   sg   t  |  d ƒ s g  |  _ n  |  j j | p- d | f ƒ |  j j |  j j ƒ  ƒ | pY 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  j ƒ  |  _ d  S)N)r   r   r   )r   r%   r   r   r   ÚendPrefixMapping0   s    zPullDOM.endPrefixMappingc             C   s;  d } t  |  d d  ƒ } | d  k	 rZ x' | D] \ } } | | j | | f <q+ Wg  |  _ n  | \ } }	 | rÛ | d  k r¥ |  j | }
 |
 rœ |
 d |	 } q¥ |	 } n  |  j rÆ |  j j | | ƒ } q|  j | | ƒ } n0 |  j rù |  j j |	 ƒ } n |  j d  |	 ƒ } xó | j ƒ  D]å \ } } | \ } } | | k r€| d k rQ| } n
 d | } |  j j	 | | ƒ } | j
 | ƒ nt | rÕ|  j | }
 |
 rª|
 d | } n | } |  j j	 | | ƒ } | j
 | ƒ n |  j j | ƒ } | j | ƒ | | _ qWt | f d  g |  j d <|  j d |  _ |  j | ƒ d  S)Nzhttp://www.w3.org/2000/xmlns/r!   ú:r"   zxmlns:r   )ÚgetattrZ_attrsr!   r   ÚdocumentZcreateElementNSÚbuildDocumentÚcreateElementÚitemsZcreateAttributeNSZsetAttributeNodeNSÚcreateAttributeÚsetAttributeNodeÚvaluer   r   r   )r   ÚnameÚtagNameÚattrsZ	xmlns_uriZxmlns_attrsÚanamer1   r&   Z	localnamer%   ÚnodeZa_uriZa_localnameZqnameÚattrr   r   r   ÚstartElementNS3   sP    				
zPullDOM.startElementNSc             C   s3   t  |  j ƒ  f d  g |  j d <|  j d |  _ d  S)Nr   )r   r   r   )r   r2   r3   r   r   r   ÚendElementNSl   s    zPullDOM.endElementNSc             C   s¯   |  j  r |  j  j | ƒ } n |  j d  | ƒ } xB | j ƒ  D]4 \ } } |  j  j | ƒ } | | _ | j | ƒ q= Wt | f d  g |  j d <|  j d |  _ |  j	 | ƒ d  S)Nr   )
r+   r-   r,   r.   r/   r1   r0   r   r   r   )r   r2   r4   r6   r5   r1   r7   r   r   r   ÚstartElementp   s    		zPullDOM.startElementc             C   s3   t  |  j ƒ  f d  g |  j d <|  j d |  _ d  S)Nr   )r   r   r   )r   r2   r   r   r   Ú
endElement   s    zPullDOM.endElementc             C   sm   |  j  rG |  j  j | ƒ } t | f d  g |  j d <|  j d |  _ n" t | f d  g } |  j j | ƒ d  S)Nr   )r+   ÚcreateCommentr   r   r   r   )r   Úsr6   Úeventr   r   r   Úcommentƒ   s    	zPullDOM.commentc             C   ss   |  j  rJ |  j  j | | ƒ } t | f d  g |  j d <|  j d |  _ n% t | | f d  g } |  j j | ƒ d  S)Nr   )r+   ÚcreateProcessingInstructionr   r   r   r   )r   ÚtargetÚdatar6   r>   r   r   r   ÚprocessingInstructionŒ   s    	zPullDOM.processingInstructionc             C   s?   |  j  j | ƒ } t | f d  g |  j d <|  j d |  _ d  S)Nr   )r+   ÚcreateTextNoder   r   )r   Úcharsr6   r   r   r   ÚignorableWhitespace•   s    zPullDOM.ignorableWhitespacec             C   s?   |  j  j | ƒ } t | f d  g |  j d <|  j d |  _ d  S)Nr   )r+   rD   r	   r   )r   rE   r6   r   r   r   Ú
charactersš   s    zPullDOM.charactersc             C   s7   |  j  d  k r3 d d  l } | j j j j |  _  n  d  S)Nr   )r   Zxml.dom.minidomZdomZminidomZDocumentÚimplementation)r   r   r   r   r   ÚstartDocumentŸ   s    zPullDOM.startDocumentc       	      C   s8  |  j  j | | d  ƒ } | |  _ t | f d  g |  j d <|  j d |  _ |  j | ƒ xÎ |  j D]Ã } | d d t k r¶ | d \ } } } |  j j | | ƒ } t | f | d <nX | d d t	 k r÷ |  j j
 | d d ƒ } t	 | f | d <n t d | d d ƒ ‚ | |  j d <| |  _ qa Wd  |  _ | j S)Nr   r   zUnknown pending event )r   ZcreateDocumentr+   r   r   r   r   r   r@   r   r<   ÚAssertionErrorZ
firstChild)	r   r&   Ztagnamer6   ÚeÚ_rA   rB   Únr   r   r   r,   ¤   s$    		zPullDOM.buildDocumentc             C   s*   t  |  j f d  g |  j d <|  j ƒ  d  S)Nr   )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+   )r   r   r   r   ÚclearÀ   s    zPullDOM.clear)Ú__name__Ú
__module__Ú__qualname__r   r+   r   r   r    r'   r(   r8   r9   r:   r;   r?   rC   rF   rG   rI   r,   rN   rO   r   r   r   r   r
      s&   9		r
   c               @   s4   e  Z d  Z d d „  Z d d „  Z d d „  Z d S)ÚErrorHandlerc             C   s   t  | ƒ d  S)N)Úprint)r   Ú	exceptionr   r   r   ÚwarningÅ   s    zErrorHandler.warningc             C   s
   | ‚ d  S)Nr   )r   rU   r   r   r   ÚerrorÇ   s    zErrorHandler.errorc             C   s
   | ‚ d  S)Nr   )r   rU   r   r   r   Ú
fatalErrorÉ   s    zErrorHandler.fatalErrorN)rP   rQ   rR   rV   rW   rX   r   r   r   r   rS   Ä   s   rS   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   sJ   | |  _  | |  _ | |  _ t |  j d ƒ s< |  j |  _ n  |  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 j t j j j d ƒ |  j j |  j ƒ d  S)Nr   )	r
   Úpulldomr\   Z
setFeaturer   ÚsaxZhandlerZfeature_namespacesZsetContentHandler)r   r   r   r   r`   Õ   s    zDOMEventStream.resetc             C   s    |  j  ƒ  } | r | St ‚ d  S)N)r_   Ú
IndexError)r   ÚposÚrcr   r   r   Ú__getitem__Û   s    zDOMEventStream.__getitem__c             C   s    |  j  ƒ  } | r | St ‚ d  S)N)r_   ÚStopIteration)r   re   r   r   r   Ú__next__á   s    zDOMEventStream.__next__c             C   s   |  S)Nr   )r   r   r   r   Ú__iter__ç   s    zDOMEventStream.__iter__c             C   s    |  j  ƒ  } | g } x„ | r› | \ } } | | k r: d  S| t k rZ | d j | ƒ n  | t k rv | j | ƒ n | t k rŒ | d =n  |  j  ƒ  } q Wd  S)Nr   r   r   )r_   r   ÚappendChildr   r   )r   r6   r>   ÚparentsÚtokenZcur_noder   r   r   Ú
expandNodeê   s    		
zDOMEventStream.expandNodec             C   s®   |  j  j d s% |  j  j |  j  _ n  xP |  j  j d sw |  j j |  j ƒ } | sd |  j j ƒ  d  S|  j j | ƒ q( W|  j  j d d } |  j  j d d |  j  j d <| S)Nr   r   )	ra   r   r   r[   Úreadr]   r\   ÚcloserZ   )r   Úbufre   r   r   r   r_   ù   s    zDOMEventStream.getEventc             C   s)   |  j  j |  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_   )r   r   r   r   r^     s    zDOMEventStream._slurpc             C   s6   |  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   )ra   r   )r   re   r   r   r   rr     s    zDOMEventStream._emitc             C   s)   |  j  j ƒ  |  `  d |  _ d |  _ d S)z+clear(): Explicitly release parsing objectsN)ra   rO   r\   r[   )r   r   r   r   rO     s    	zDOMEventStream.clearN)rP   rQ   rR   r   r`   rf   rh   ri   rm   r_   r^   rr   rO   r   r   r   r   rY   Ì   s   
rY   c               @   sL   e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 d
 „  Z d S)ÚSAX2DOMc             C   sA   t  j |  | | | ƒ |  j d } |  j d } | j | ƒ d  S)Nr   é   r   éþÿÿÿ)r
   r8   r   rj   )r   r2   r3   r4   ÚcurNodeÚ
parentNoder   r   r   r8   #  s    zSAX2DOM.startElementNSc             C   s>   t  j |  | | ƒ |  j d } |  j d } | j | ƒ d  S)Nr   rt   r   ru   )r
   r:   r   rj   )r   r2   r4   rv   rw   r   r   r   r:   )  s    zSAX2DOM.startElementc             C   sB   t  j |  | | ƒ |  j d d } |  j d } | j | ƒ d  S)Nr   r   r   )r
   rC   r   r   rj   )r   rA   rB   r6   rw   r   r   r   rC   /  s    zSAX2DOM.processingInstructionc             C   s?   t  j |  | ƒ |  j d d } |  j d } | j | ƒ d  S)Nr   r   r   )r
   rF   r   r   rj   )r   rE   r6   rw   r   r   r   rF   5  s    zSAX2DOM.ignorableWhitespacec             C   s?   t  j |  | ƒ |  j d d } |  j d } | j | ƒ d  S)Nr   r   r   )r
   rG   r   r   rj   )r   rE   r6   rw   r   r   r   rG   ;  s    zSAX2DOM.charactersN)rP   rQ   rR   r8   r:   rC   rF   rG   r   r   r   r   rs   !  s
   rs   rt   é   é   c             C   sd   | d  k r t  } n  t |  t ƒ r6 t |  d ƒ } n |  } | sT t j j ƒ  } n  t | | | ƒ S)NÚrb)Údefault_bufsizeÚ
isinstanceÚstrÚopenr   rb   Úmake_parserrY   )Zstream_or_stringr\   r]   r[   r   r   r   rq   D  s    	rq   c             C   sP   d d l  m } t |  ƒ } | |  ƒ } | s@ t j j ƒ  } n  t | | | ƒ S)Nr   )ÚStringIO)Úior€   Úlenr   rb   r   rY   )Ústringr\   r€   r]   rp   r   r   r   ÚparseStringO  s    r„   i @  iì?  )Zxml.saxr   Zxml.sax.handlerr   r   r   r   r   r   r   r	   rb   ZContentHandlerr
   rS   rY   rs   r{   rq   r„   r   r   r   r   Ú<module>   s    ·U!