
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>

\[c           @   s  d  Z  d g Z d d l m Z y d d l m Z Wn) e k
 r^ Z d e f d     YZ n Xd d l Z d d l Z e j	 d  \ Z
 Z Z e
 d k o e d	 k o e d k Z e
 d k o e d k Z e
 d k o e d
 k Z d d l m Z m Z m Z m Z m Z d d l m Z m Z d d l m Z m Z m Z d Z d e f d     YZ d e f d     YZ e
 d k re d	 k re rd d l  Z  e  j! d  Z" e" e _" e  j! d e  j#  Z$ e$ e _$ d d l% m& Z& m' Z' d   Z( d   Z) e( e _( e) e _) e* Z n  d S(   sC   Use the HTMLParser library to parse HTML files that aren't too bad.t   HTMLParserTreeBuilderi(   t
   HTMLParser(   t   HTMLParseErrorR   c           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR      s   Ni   i   i   (   t   CDatat   Commentt   Declarationt   Doctypet   ProcessingInstruction(   t   EntitySubstitutiont   UnicodeDammit(   t   HTMLt   HTMLTreeBuildert   STRICTs   html.parsert   BeautifulSoupHTMLParserc           B   sz   e  Z d    Z d   Z d   Z e d  Z e d  Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z RS(   c         O   s    t  j |  | |  g  |  _ d  S(   N(   R   t   __init__t   already_closed_empty_element(   t   selft   argst   kwargs(    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR   9   s    	c         C   s   t  j |  d S(   si  In Python 3, HTMLParser subclasses must implement error(), although this
        requirement doesn't appear to be documented.

        In Python 2, HTMLParser implements error() as raising an exception.

        In any event, this method is called only on very strange markup and our best strategy
        is to pretend it didn't happen and keep going.
        N(   t   warningst   warn(   R   t   msg(    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   errorE   s    	c         C   s)   |  j  | | d t } |  j |  d  S(   Nt   handle_empty_element(   t   handle_starttagt   Falset   handle_endtag(   R   t   namet   attrst   tag(    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   handle_startendtagP   s    c   	      C   s   i  } x9 | D]1 \ } } | d  k r. d } n  | | | <d } q W|  j j | d  d  |  } | r | j r | r |  j | d t |  j j |  n  d  S(   Nt    s   ""t   check_already_closed(   t   Nonet   soupR   t   is_empty_elementR   R   R   t   append(	   R   R   R   R   t	   attr_dictt   keyt   valuet	   attrvalueR   (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR   [   s    	


c         C   s<   | r( | |  j  k r( |  j  j |  n |  j j |  d  S(   N(   R   t   removeR$   R   (   R   R   R"   (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR   w   s    c         C   s   |  j  j |  d  S(   N(   R$   t   handle_data(   R   t   data(    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR,      s    c         C   s"  | j  d  r* t | j d  d  } n6 | j  d  rT t | j d  d  } n t |  } d  } | d k  r x[ |  j j d f D]D } | s q n  y t | g  j |  } Wq t k
 r } q Xq Wn  | sy t	 |  } Wqt
 t f k
 r} qXn  | pd } |  j |  d  S(   Nt   xi   t   Xi   s   windows-1252u   �(   t
   startswitht   intt   lstripR#   R$   t   original_encodingt	   bytearrayt   decodet   UnicodeDecodeErrort   unichrt
   ValueErrort   OverflowErrorR,   (   R   R   t	   real_nameR-   t   encodingt   e(    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   handle_charref   s*    c         C   sB   t  j j |  } | d  k	 r' | } n
 d | } |  j |  d  S(   Ns   &%s(   R
   t   HTML_ENTITY_TO_CHARACTERt   getR#   R,   (   R   R   t	   characterR-   (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   handle_entityref   s
    	
c         C   s1   |  j  j   |  j  j |  |  j  j t  d  S(   N(   R$   t   endDataR,   R   (   R   R-   (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   handle_comment   s    c         C   sh   |  j  j   | j d  r/ | t d  } n | d k rD d } n  |  j  j |  |  j  j t  d  S(   Ns   DOCTYPE t   DOCTYPER!   (   R$   RB   R0   t   lenR,   R   (   R   R-   (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   handle_decl   s    	c         C   se   | j    j d  r. t } | t d  } n t } |  j j   |  j j |  |  j j |  d  S(   Ns   CDATA[(   t   upperR0   R   RE   R   R$   RB   R,   (   R   R-   t   cls(    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   unknown_decl   s    c         C   s1   |  j  j   |  j  j |  |  j  j t  d  S(   N(   R$   RB   R,   R	   (   R   R-   (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt	   handle_pi   s    (   R   R   R   R   R    t   TrueR   R   R,   R=   RA   RC   RF   RI   RJ   (    (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR   7   s   					!			
	
c           B   sM   e  Z e Z e Z e Z e e e	 g Z
 d    Z d d d d  Z d   Z RS(   c         O   s@   t  r t r t | d <n  t r- t | d <n  | | f |  _ d  S(   Nt   strictt   convert_charrefs(   t   CONSTRUCTOR_TAKES_STRICTt    CONSTRUCTOR_STRICT_IS_DEPRECATEDR   t"   CONSTRUCTOR_TAKES_CONVERT_CHARREFSt   parser_args(   R   R   R   (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR      s
    c         c   sl   t  | t  r$ | d d t f Vd S| | g } t | | d t d | } | j | j | j | j	 f Vd S(   s   
        :return: A 4-tuple (markup, original encoding, encoding
        declared within markup, whether any characters had to be
        replaced with REPLACEMENT CHARACTER).
        Nt   is_htmlt   exclude_encodings(
   t
   isinstancet   unicodeR#   R   R   RK   t   markupR3   t   declared_html_encodingt   contains_replacement_characters(   R   RV   t   user_specified_encodingt   document_declared_encodingRS   t   try_encodingst   dammit(    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   prepare_markup   s    	c         C   s   |  j  \ } } t | |   } |  j | _ y | j |  | j   Wn, t k
 rs } t j t d   |  n Xg  | _	 d  S(   Ns*  Python's built-in HTMLParser cannot parse the given document. This is not a bug in Beautiful Soup. The best solution is to install an external parser (lxml or html5lib), and use Beautiful Soup with that parser. See http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser for help.(
   RQ   R   R$   t   feedt   closeR   R   R   t   RuntimeWarningR   (   R   RV   R   R   t   parserR<   (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR^      s    	

N(   R   R   R   t   is_xmlRK   t	   picklablet
   HTMLPARSERt   NAMER   R   t   featuresR   R#   R]   R^   (    (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR       s   	sQ   \s*((?<=[\'"\s])[^\s/>][^\s/=>]*)(\s*=+\s*(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?s  
  <[a-zA-Z][-.a-zA-Z0-9:_]*          # tag name
  (?:\s+                             # whitespace before attribute name
    (?:[a-zA-Z_][-.:a-zA-Z0-9_]*     # attribute name
      (?:\s*=\s*                     # value indicator
        (?:'[^']*'                   # LITA-enclosed value
          |\"[^\"]*\"                # LIT-enclosed value
          |[^'\">\s]+                # bare value
         )
       )?
     )
   )*
  \s*                                # trailing whitespace
(   t   tagfindt   attrfindc         C   s  d  |  _ |  j |  } | d k  r( | S|  j } | | | !|  _ g  } t j | | d  } | so t d   | j   } | | d | !j   |  _	 } x| | k  r|  j
 r t j | |  } n t j | |  } | s Pn  | j d d d  \ }	 }
 } |
 sd  } nX | d  d k o.| d k n sW| d  d k oR| d k n rg| d d !} n  | r|  j |  } n  | j |	 j   | f  | j   } q W| | | !j   } | d k rv|  j   \ } } d |  j k r | |  j j d  } t |  j  |  j j d  } n | t |  j  } |  j
 r^|  j d | | | !d  f  n  |  j | | | ! | S| j d
  r|  j | |  n/ |  j | |  | |  j k r|  j |  n  | S(   Ni    i   s#   unexpected call to parse_starttag()i   i   s   'it   "t   >s   />s   
s    junk characters in start tag: %ri   (   Rj   s   />(   R#   t   __starttag_textt   check_for_whole_start_tagt   rawdataRg   t   matcht   AssertionErrort   endt   lowert   lasttagRL   Rh   t   attrfind_tolerantt   groupt   unescapeR&   t   stript   getpost   countRE   t   rfindR   R,   t   endswithR    R   t   CDATA_CONTENT_ELEMENTSt   set_cdata_mode(   R   t   it   endposRm   R   Rn   t   kR   t   mt   attrnamet   restR*   Rp   t   linenot   offset(    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   parse_starttag  s\    				$$		c         C   s2   | j    |  _ t j d |  j t j  |  _ d  S(   Ns   </\s*%s\s*>(   Rq   t
   cdata_elemt   ret   compilet   It   interesting(   R   t   elem(    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR|   T  s    (+   t   __doc__t   __all__R   R   t   ImportErrorR<   t	   Exceptiont   sysR   t   version_infot   majort   minort   releaseRN   RO   RP   t   bs4.elementR   R   R   R   R	   t
   bs4.dammitR
   R   t   bs4.builderR   R   R   Rd   R   R    R   R   Rs   t   VERBOSEt   locatestarttagendt   html.parserRg   Rh   R   R|   RK   (    (    (    s;   /usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyt   <module>   s@   		$(2				7			