ó
­V]c           @   sa  d  Z  d g Z d d l Z d d l Z d d l m Z m Z m Z m Z d d l	 m
 Z
 m Z d d l Z d d l m Z m Z d d l	 m Z m Z m Z m Z y d d l m Z e Z Wn) e k
 rč Z d d	 l m Z e Z n Xd e f d
     YZ d e j f d     YZ d e  f d     YZ! d e j" f d     YZ# d e# f d     YZ$ d S(   t   MITt   HTML5TreeBuilderi˙˙˙˙N(   t
   PERMISSIVEt   HTMLt   HTML_5t   HTMLTreeBuilder(   t   NamespacedAttributet   nonwhitespace_re(   t
   namespacest   prefixes(   t   Commentt   Doctypet   NavigableStringt   Tag(   t   _base(   t   basec           B   sP   e  Z d  Z d Z e e e e g Z d d d  Z	 d   Z
 d   Z d   Z RS(   s   Use html5lib to build a tree.t   html5libc         c   s4   | |  _  | r t j d  n  | d  d  t f Vd  S(   Nsj   You provided a value for exclude_encoding, but the html5lib tree builder doesn't support exclude_encoding.(   t   user_specified_encodingt   warningst   warnt   Nonet   False(   t   selft   markupR   t   document_declared_encodingt   exclude_encodings(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   prepare_markup0   s    	c         C   sÝ   |  j  j d  k	 r" t j d  n  t j d |  j  } t   } t	 | t
  su t re |  j | d <qu |  j | d <n  | j | |  } t	 | t
  r˘ d  | _ n7 | j j j d } t	 | t  sĐ | j } n  | | _ d  S(   Ns   You provided a value for parse_only, but the html5lib tree builder doesn't support parse_only. The entire document will be parsed.t   treet   override_encodingt   encodingi    (   t   soupt
   parse_onlyR   R   R   R   t
   HTMLParsert   create_treebuildert   dictt
   isinstancet   unicodet   new_html5libR   t   parset   original_encodingt	   tokenizert   streamt   charEncodingt
   basestringt   name(   R   R   t   parsert   extra_kwargst   docR'   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   feed=   s    	c         C   s   t  | |  j  |  _ |  j S(   N(   t   TreeBuilderForHtml5libR   t   underlying_builder(   R   t   namespaceHTMLElements(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyR!   X   s    c         C   s   d | S(   s   See `TreeBuilder`.u)   <html><head></head><body>%s</body></html>(    (   R   t   fragment(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   test_fragment_to_document]   s    N(   t   __name__t
   __module__t   __doc__t   NAMER   R   R   t   featuresR   R   R0   R!   R5   (    (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyR   )   s   		R1   c           B   se   e  Z d
 d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z RS(   c         C   sN   | r | |  _  n" d d l m } | d d  |  _  t t |   j |  d  S(   Ni˙˙˙˙(   t   BeautifulSoupt    s   html.parser(   R   t   bs4R;   t   superR1   t   __init__(   R   R3   R   R;   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyR?   d   s
    c         C   s#   |  j  j   t |  j  |  j  d   S(   N(   R   t   resett   ElementR   (   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   documentClassl   s    c         C   sG   | d } | d } | d } t  j | | |  } |  j j |  d  S(   NR,   t   publicIdt   systemId(   R   t   for_name_and_idsR   t   object_was_parsed(   R   t   tokenR,   RC   RD   t   doctype(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   insertDoctypep   s
    


c         C   s(   |  j  j | |  } t | |  j  |  S(   N(   R   t   new_tagRA   (   R   R,   t	   namespacet   tag(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   elementClassx   s    c         C   s   t  t |  |  j  S(   N(   t   TextNodeR
   R   (   R   t   data(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   commentClass|   s    c         C   sD   d d l  m } | d d  |  _ d |  j _ t |  j |  j d   S(   Ni˙˙˙˙(   R;   R<   s   html.parsers   [document_fragment](   R=   R;   R   R,   RA   R   (   R   R;   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   fragmentClass   s    c         C   s   |  j  j | j  d  S(   N(   R   t   appendt   element(   R   t   node(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   appendChild   s    c         C   s   |  j  S(   N(   R   (   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   getDocument   s    c         C   s   t  j j |   j S(   N(   t   treebuilder_baset   TreeBuildert   getFragmentRS   (   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyRY      s    c            sZ   d d l  m   g   t j d   d      f d    | d  d j   S(   Ni˙˙˙˙(   R;   s8   ^(.*?)(?: PUBLIC "(.*?)"(?: "(.*?)")?| SYSTEM "(.*?)")?$i    c   	         s  t  |     r n  t  |  t  rę  j |   } | rĎ | j d  } | j d k rą | j d  pf d } | j d  p | j d  p d }  j d d | | | | f  qç  j d d | | f  q j d	 d | f  n t  |  t  r j d
 d | |  f  nst  |  t  rD j d d | |  f  nF|  j rjd t	 |  j |  j
 f } n	 |  j
 }  j d d | | f  |  j r_g  } x} |  j j   D]l \ } } t  | t  rĺd t	 | j | j
 f } n  t  | t  rd j |  } n  | j | | f  q­Wx? t |  D]. \ } }  j d d | d | | f  q*Wn  | d 7} x |  j D] }  | |  qsWd  S(   Ni   i   R<   i   i   s   |%s<!DOCTYPE %s "%s" "%s">t    s   |%s<!DOCTYPE %s>s   |%s<!DOCTYPE >s   |%s<!-- %s -->s   |%s"%s"s   %s %ss   |%s<%s>s
   |%s%s="%s"(   R#   R   t   matcht   groupt	   lastindexRR   R
   R   RK   R	   R,   t   attrst   itemsR   t   listt   joint   sortedt   children(	   RS   t   indentt   mR,   RC   RD   t
   attributest   valuet   child(   R;   t
   doctype_ret   rvt   serializeElement(    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyRk      sF    $				)
s   
(   R=   R;   t   ret   compileRa   (   R   RS   (    (   R;   Ri   Rj   Rk   s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   testSerializer   s    )N(   R6   R7   R   R?   RB   RI   RM   RP   RQ   RU   RV   RY   Rn   (    (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyR1   b   s   								t   AttrListc           B   sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C   s"   | |  _  t |  j  j  |  _ d  S(   N(   RS   R"   R^   (   R   RS   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyR?   Â   s    	c         C   s   t  |  j j    j   S(   N(   R`   R^   R_   t   __iter__(   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyRp   Ĺ   s    c         C   sy   |  j  j } | | d k sD |  j  j | k rh | | |  j  j k rh t | t  sh t j |  } qh n  | |  j  | <d  S(   Nt   *(   RS   t   cdata_list_attributesR,   R#   R`   R   t   findall(   R   R,   Rg   t	   list_attr(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   __setitem__Ç   s    c         C   s   t  |  j j    S(   N(   R`   R^   R_   (   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyR_   Ó   s    c         C   s   t  |  j j    S(   N(   R`   R^   t   keys(   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyRv   Ő   s    c         C   s   t  |  j  S(   N(   t   lenR^   (   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   __len__×   s    c         C   s   |  j  | S(   N(   R^   (   R   R,   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   __getitem__Ů   s    c         C   s   | t  |  j j    k S(   N(   R`   R^   Rv   (   R   R,   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   __contains__Ű   s    (
   R6   R7   R?   Rp   Ru   R_   Rv   Rx   Ry   Rz   (    (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyRo   Á   s   							RA   c           B   s   e  Z d    Z d   Z d   Z d   Z e e e  Z d d  Z	 d   Z
 d   Z d   Z d   Z d	   Z d
   Z e e  Z RS(   c         C   s5   t  j j |  | j  | |  _ | |  _ | |  _ d  S(   N(   RW   t   NodeR?   R,   RS   R   RK   (   R   RS   R   RK   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyR?   ŕ   s    		c         C   s˛  d  } } t | t  r& | } } nU t | t  r> | } n= | j j t k ri | j } } |  | _ n | j } |  | _ t | t  rŞ | j d  k	 rŞ | j j   n  | d  k	 r|  j j	 r|  j j	 d j t k r|  j j	 d } |  j
 j | |  } | j |  | |  j
 _ n t | t  rA|  j
 j |  } n  |  j j	 rb|  j j t  } n- |  j j d  k	 r|  j
 j   } n	 |  j } |  j
 j | d |  j d | d  S(   Ni˙˙˙˙t   parentt   most_recent_element(   R   R#   R+   R   RS   t	   __class__R   R|   t   extractt   contentsR   t
   new_stringt   replace_witht   _most_recent_elementt   _last_descendantR   t   next_elementRF   (   R   RT   t   string_childRh   t   old_elementt   new_elementR}   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyRU   ć   s8    
					c         C   s#   t  |  j t  r i  St |  j  S(   N(   R#   RS   R
   Ro   (   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   getAttributes  s    c         C   sÖ   | d  k	 rŇ t |  d k rŇ g  } xO t | j    D]; \ } } t | t  r7 t |   } | | =| | | <q7 q7 W|  j j j	 |  j
 |  x' | j   D] \ } } | |  j | <q W|  j j j |  j  n  d  S(   Ni    (   R   Rw   R`   R_   R#   t   tupleR   R   t   buildert$   _replace_cdata_list_attribute_valuesR,   RS   t   set_up_substitutions(   R   Rf   t   converted_attributesR,   Rg   t   new_name(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   setAttributes!  s    c         C   sH   t  |  j j |  |  j  } | r7 |  j | |  n |  j |  d  S(   N(   RN   R   R   t   insertBeforeRU   (   R   RO   R   t   text(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt
   insertText9  s    c         C   s°   |  j  j | j   } | j  j t k r |  j  j r |  j  j | d j t k r |  j  j | d } |  j j | | j   } | j |  n |  j  j | | j   |  | _	 d  S(   Ni   (
   RS   t   indexR~   R   R   R   R   R   t   insertR|   (   R   RT   t   refNodeR   t   old_nodet   new_str(    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyR   @  s    c         C   s   | j  j   d  S(   N(   RS   R   (   R   RT   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   removeChildL  s    c         C   su  |  j  } | j  } | j } | j t t  } t | j  d k r[ | j d } | j } n d } | j } | j } t |  d k r5| d }	 | d k	 r§ | |	 _ n	 | |	 _ | |	 _	 | d k	 rŃ |	 | _ n	 |	 | _ | d k	 rň |	 | _ n  | d j t t
  }
 | |
 _ | d k	 r)|
 | _ n  d |
 _ n  x' | D] } | | _ | j j |  q<Wg  | _ | | _ d S(   s1   Move all of this tag's children into another tag.i    i˙˙˙˙N(   RS   t   next_siblingR   R   Rw   R   R   R   t   previous_elementt   previous_siblingt   TrueR|   RR   (   R   t
   new_parentRS   t   new_parent_elementt   final_next_elementt   new_parents_last_descendantt   new_parents_last_childt(   new_parents_last_descendant_next_elementt	   to_appendt   first_childt   last_childs_last_descendantRh   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   reparentChildrenO  s>    					
						c         C   sa   |  j  j |  j j |  j  } t | |  j  |  j  } x$ |  j D] \ } } | | j | <q@ W| S(   N(   R   RJ   RS   R,   RK   RA   Rf   (   R   RL   RT   t   keyRg   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt	   cloneNode  s
    c         C   s
   |  j  j S(   N(   RS   R   (   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt
   hasContent  s    c         C   s4   |  j  d  k r  t d |  j f S|  j  |  j f Sd  S(   Nt   html(   RK   R   R   R,   (   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   getNameTuple  s    N(   R6   R7   R?   RU   R   R   t   propertyRf   R   R   R   R   R§   RŠ   RŞ   RŹ   t	   nameTuple(    (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyRA   ß   s   		6					B			RN   c           B   s   e  Z d    Z d   Z RS(   c         C   s)   t  j j |  d   | |  _ | |  _ d  S(   N(   RW   R{   R?   R   RS   R   (   R   RS   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyR?   ¤  s    	c         C   s
   t   d  S(   N(   t   NotImplementedError(   R   (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyRŠ   Š  s    (   R6   R7   R?   RŠ   (    (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyRN   Ł  s   	(%   t   __license__t   __all__R   Rl   t   bs4.builderR   R   R   R   t   bs4.elementR   R   R   t   html5lib.constantsR   R	   R
   R   R   R   t   html5lib.treebuildersR   RW   R   R%   t   ImportErrort   eR   R   R   RX   R1   t   objectRo   R{   RA   RN   (    (    (    s4   lib/python2.7/site-packages/bs4/builder/_html5lib.pyt   <module>   s&   	""

9_Ä