
W-                 @   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 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   </afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/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   sd   t  |  d  s g  |  _ |  j j | p* d | f  |  j j |  j j    | pV 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   s5  d } t  |  d d   } | d  k	 rW x' | D] \ } } | | j | | f <q+ Wg  |  _ | \ } }	 | r | d  k r |  j | }
 |
 r |
 d |	 } n |	 } |  j r |  j j | |  } q|  j | |  } n0 |  j r |  j j |	  } n |  j d  |	  } x | j   D] \ } } | \ } } | | k rz| d k rK| } 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   s4   |  j  d  k r0 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   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   sG   | |  _  | |  _ | |  _ t |  j d  s9 |  j |  _ |  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   sax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   rf   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 rW | d j |  | t k rs | j |  n | t k r | d =|  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  _ xP |  j  j d st |  j j |  j  } | sa |  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   bufrf   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   rf   r   r   r   rs     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`   rg   ri   rj   rn   r_   r^   rs   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   rk   )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   ru   r   rv   )r
   r:   r   rk   )r   r2   r4   rw   rx   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   rk   )r   rA   rB   r6   rx   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   rk   )r   rE   r6   rx   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   rk   )r   rE   r6   rx   r   r   r   rG   ;  s    zSAX2DOM.charactersN)rP   rQ   rR   r8   r:   rC   rF   rG   r   r   r   r   rt   !  s
   rt   ru         c             C   s^   | d  k r t  } t |  t  r3 t |  d  } n |  } | sN t j j   } t | | |  S)Nrb)default_bufsize
isinstancestropenr   rb   make_parserrY   )Zstream_or_stringr\   r]   r[   r   r   r   rr   D  s    rr   c             C   sM   d d l  m } t |   } | |   } | s= t j j   } t | | |  S)Nr   )StringIO)ior   lenr   rb   r   rY   )stringr\   r   r]   rq   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   rt   r|   rr   r   r   r   r   r   <module>   s    U!