ó
ţ|/\c           @@  s˝   d  Z  d d l m Z d d l m Z d d l m Z d d l m Z m	 Z	 d d l m
 Z
 m Z d e j f d     YZ d	   Z d
 e f d     YZ d e f d     YZ d   Z d S(   sI  
SAX-based adapter to copy trees from/to the Python standard library.

Use the `ElementTreeContentHandler` class to build an ElementTree from
SAX events.

Use the `ElementTreeProducer` class or the `saxify()` function to fire
the SAX events of an ElementTree against a SAX ContentHandler.

See http://codespeak.net/lxml/sax.html
i    (   t   absolute_import(   t   ContentHandler(   t   etree(   t   ElementTreet
   SubElement(   t   Commentt   ProcessingInstructiont   SaxErrorc           B@  s   e  Z d  Z RS(   s   General SAX error.
    (   t   __name__t
   __module__t   __doc__(    (    (    s'   lib/python2.7/site-packages/lxml/sax.pyR      s   c         C@  s8   |  d d k r* t  |  d j d d   Sd  |  f Sd  S(   Ni    t   {i   t   }(   t   tuplet   splitt   None(   t   tag(    (    s'   lib/python2.7/site-packages/lxml/sax.pyt	   _getNsTag   s    t   ElementTreeContentHandlerc           B@  s°   e  Z d  Z d d  Z d   Z e e d e j Z d   Z d   Z	 d   Z
 d   Z d   Z d	   Z d d
  Z d   Z d   Z d d  Z d   Z d   Z e Z RS(   s/   Build an lxml ElementTree from SAX events.
    c         C@  sr   t  j |   d  |  _ g  |  _ g  |  _ d  |  _ i d  g d  6|  _ i  |  _ | d  k re t	 j
 } n  | |  _ d  S(   N(   R   t   __init__R   t   _roott   _root_siblingst   _element_stackt   _default_nst   _ns_mappingt   _new_mappingsR   t   Elementt   _makeelement(   t   selft   makeelement(    (    s'   lib/python2.7/site-packages/lxml/sax.pyR   &   s    					c         C@  s   t  |  j  S(   s=   Contains the generated ElementTree after parsing is finished.(   R   R   (   R   (    (    s'   lib/python2.7/site-packages/lxml/sax.pyt
   _get_etree2   s    t   docc         C@  s   d  S(   N(    (   R   t   locator(    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   setDocumentLocator8   s    c         C@  s   d  S(   N(    (   R   (    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   startDocument;   s    c         C@  s   d  S(   N(    (   R   (    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   endDocument>   s    c         C@  se   | |  j  | <y |  j | j |  Wn! t k
 rH | g |  j | <n X| d  k ra | |  _ n  d  S(   N(   R   R   t   appendt   KeyErrorR   R   (   R   t   prefixt   uri(    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   startPrefixMappingA   s    c         C@  s7   |  j  | } | j   | d  k r3 | d |  _ n  d  S(   Ni˙˙˙˙(   R   t   popR   R   (   R   R&   t   ns_uri_list(    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   endPrefixMappingJ   s    
c         C@  sH   | \ } } | r d | } n% |  j  r> d |  j  | f } n | } | S(   Ns   {%s}%s(   R   (   R   t   ns_name_tuplet   ns_urit
   local_namet   el_tag(    (    s'   lib/python2.7/site-packages/lxml/sax.pyt	   _buildTagP   s    	c         C@  sM  |  j  |  } | r i  } y | j   } Wn t k
 rJ | j   } n XxH | D]7 \ } } | d ru d | }	 n
 | d }	 | | |	 <qR Wn d  } |  j }
 |  j d  k r|  j | | |  j  } |  _ |  j	 r	t
 | d  r	x! |  j	 D] } | j |  qď Wn  |  j	 2n t |
 d | | |  j  } |
 j |  |  j j   d  S(   Ni    s   {%s}%si   t   addpreviousi˙˙˙˙(   R0   t	   iteritemst   AttributeErrort   itemsR   R   R   R   R   R   t   hasattrR1   R   R$   t   clear(   R   t   ns_namet   qnamet
   attributest   el_namet   attrst   iter_attributest
   name_tuplet   valuet	   attr_namet   element_stackt   elementt   sibling(    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   startElementNSZ   s0    

	
c         C@  sI   t  | |  } |  j d  k r1 |  j j |  n |  j d j |  d  S(   Ni˙˙˙˙(   R   R   R   R   R$   R   (   R   t   targett   datat   pi(    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   processingInstruction{   s    c         C@  sD   |  j  j   } |  j |  } | | j k r@ t d |   n  d  S(   Ns   Unexpected element closed: (   R   R)   R0   R   R   (   R   R7   R8   RA   R/   (    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   endElementNS   s    c         C@  s]   | r@ t  g  | j   D] \ } } d  | f | f ^ q  } n  |  j d  | f | |  d  S(   N(   t   dictR4   R   RC   (   R   t   nameR9   t   kt   v(    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   startElement   s    7c         C@  s   |  j  d  | f |  d  S(   N(   RH   R   (   R   RJ   (    (    s'   lib/python2.7/site-packages/lxml/sax.pyt
   endElement   s    c         C@  s_   |  j  d } y$ | d } | j p& d | | _ Wn' t k
 rZ | j pM d | | _ n Xd  S(   Ni˙˙˙˙t    (   R   t   tailt
   IndexErrort   text(   R   RE   t   last_element(    (    s'   lib/python2.7/site-packages/lxml/sax.pyt
   characters   s    
N(   R   R	   R
   R   R   R   t   propertyR   R!   R"   R#   R(   R+   R0   RC   RG   RH   RM   RN   RT   t   ignorableWhitespace(    (    (    s'   lib/python2.7/site-packages/lxml/sax.pyR   #   s"   								
!				
t   ElementTreeProducerc           B@  s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s5   Produces SAX events for an element and children.
    c         C@  sk   y | j    } Wn t k
 r) | } n X| |  _ | |  _ d d l m } | |  _ | i  i   |  _ d  S(   Ni    (   t   AttributesNSImpl(   t   getrootR3   t   _elementt   _content_handlert   xml.sax.xmlreaderRX   t   _attr_classt   _empty_attributes(   R   t   element_or_treet   content_handlerRA   t
   attr_class(    (    s'   lib/python2.7/site-packages/lxml/sax.pyR   ˘   s    
			c         C@  s  |  j  j   |  j } t | d  r  g  } | j   } x5 t | d d   t k rn | j |  | j   } q: Wx. | d  d  d  D] } |  j	 | i   q Wn  |  j	 | i   t | d  r	| j
   } x; t | d d   t k r|  j	 | i   | j
   } qÎ Wn  |  j  j   d  S(   Nt   getpreviousR   i˙˙˙˙t   getnext(   R[   R"   RZ   R5   Rb   t   getattrR   R   R$   t   _recursive_saxifyRc   R#   (   R   RA   t   siblingsRB   (    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   saxify­   s"    	c      	   C@  s~  |  j  } | j } | t k s* | t k rr | t k rO | j | j | j  n  | j } | rn | j |  n  d  S| j	 } g  } | | k rŘ xH | j
   D]7 \ } }	 | j |  |	 k r | j | |	 f  q q Wn  | j
   }
 |
 rei  } i  } xW |
 D]O \ } } t |  } | | | <|  j | d | d | d d  d t | | <qý W|  j | |  } n	 |  j } t |  \ }	 } |  j |	 | | | j d t } x$ | D] \ } } | j | |  q¨W| j |	 | f | |  | j } | r | j |  n  x | D] } |  j | |  qW| j |	 | f |  x! | D] \ } } | j |  q>W| j } | rz| j |  n  d  S(   Ni    i   t   preferred_prefixt   is_attribute(   R[   R   R   R   RG   RD   RR   RP   RT   t   nsmapR4   t   getR$   R   t   _build_qnameR   t   TrueR]   R^   R&   t   FalseR(   RC   Re   RH   R+   (   R   RA   t   parent_nsmapR`   R   RP   t   element_nsmapt   new_prefixesR&   R-   t   attribst   attr_valuest   attr_qnamest   attr_ns_nameR>   t   attr_ns_tuplet   sax_attributesR.   R8   R'   RR   t   child(    (    s'   lib/python2.7/site-packages/lxml/sax.pyRe   Ä   s\    				
			c   
      C@  sÂ   | d  k r | S| r5 | j |  | k r5 | } nq g  | j   D]* \ } } | d  k	 rB | | k rB | ^ qB }	 t |	  d k r |	 d n |	 r  t |	  n d  } | d  k rś | S| d | S(   Ni   i    t   :(   R   Rk   R4   t   lent   min(
   R   R-   R.   Rj   Rh   Ri   R&   t   pfxR'   t
   candidates(    (    s'   lib/python2.7/site-packages/lxml/sax.pyRl   ú   s    	$(   R   R	   R
   R   Rg   Re   Rl   (    (    (    s'   lib/python2.7/site-packages/lxml/sax.pyRW      s
   			6c         C@  s   t  |  |  j   S(   sl   One-shot helper to generate SAX events from an XML tree and fire
    them against a SAX ContentHandler.
    (   RW   Rg   (   R_   R`   (    (    s'   lib/python2.7/site-packages/lxml/sax.pyRg     s    N(   R
   t
   __future__R    t   xml.sax.handlerR   t   lxmlR   t
   lxml.etreeR   R   R   R   t	   LxmlErrorR   R   R   t   objectRW   Rg   (    (    (    s'   lib/python2.7/site-packages/lxml/sax.pyt   <module>   s   	|s