File: //lib/python2.7/site-packages/bs4/builder/__init__.pyc
�
�Jp[c @ s� d d l m Z d d l Z d d l Z d d l m Z m Z m Z m Z d d d d g Z d Z
d Z d
Z d Z
d Z d
Z d e f d � � YZ e � Z d e f d � � YZ d e f d � � YZ d e f d � � YZ d � Z d e f d � � YZ d d l m Z e e � y d d l m Z e e � Wn e k
rKn Xy d d l m Z e e � Wn e k
r}n Xd S( i����( t defaultdictN( t CharsetMetaAttributeValuet ContentMetaAttributeValuet HTMLAwareEntitySubstitutiont
whitespace_ret HTMLTreeBuildert SAXTreeBuildert TreeBuildert TreeBuilderRegistryt fastt
permissivet strictt xmlt htmlt html5c B s# e Z d � Z d � Z d � Z RS( c C s t t � | _ g | _ d S( N( R t listt builders_for_featuret builders( t self( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt __init__ s c C sB x( | j D] } | j | j d | � q
W| j j d | � d S( s8 Register a treebuilder based on its advertised features.i N( t featuresR t insertR ( R t treebuilder_classt feature( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt register$ s c G s t | j � d k r d St | � d k r6 | j d St | � } | j � d } d } x� t | � d k r� | j � } | j j | g � } t | � d k r[ | d k r� | } t | � } q� | j t | � � } q[ q[ W| d k r� d Sx | D] } | | k r� | Sq� Wd S( Ni (
t lenR t NoneR t reverset popR t gett sett intersection( R R t
candidatest
candidate_setR t we_have_the_featuret candidate( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt lookup* s.
( t __name__t
__module__R R R$ ( ( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyR s c B s� e Z d Z d Z g Z g Z e Z e Z e � Z
d
Z i Z
d � Z d � Z d � Z d � Z d
d
d � Z d � Z d � Z d � Z RS( s2 Turn a document into a Beautiful Soup object tree.s [Unknown tree builder]c C s
d | _ d S( N( R t soup( R ( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyR f s c C s d S( N( ( R ( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt reseti s c C s | j d k r t S| | j k S( s� Might a tag with this name be an empty-element tag?
The final markup may or may not actually present this tag as
self-closing.
For instance: an HTMLBuilder does not consider a <p> tag to be
an empty-element tag (it's not in
HTMLBuilder.empty_element_tags). This means an empty <p> tag
will be presented as "<p></p>", not "<p />".
The default implementation has no opinion about which tags are
empty-element tags, so a tag will be presented as an
empty-element tag if and only if it has no contents.
"<foo></foo>" will become "<foo />", and "<foo>bar</foo>" will
be left alone.
N( t empty_element_tagsR t True( R t tag_name( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt can_be_empty_elementl s c C s
t � � d S( N( t NotImplementedError( R t markup( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt feed� s c C s | d d t f S( N( R t False( R R. t user_specified_encodingt document_declared_encoding( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt prepare_markup� s c C s | S( s� Wrap an HTML fragment to make it look like a document.
Different parsers do this differently. For instance, lxml
introduces an empty <head> tag, and html5lib
doesn't. Abstracting this away lets us write simple tests
which run HTML fragments through the parser and compare the
results against other HTML fragments.
This method should not be used outside of tests.
( ( R t fragment( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt test_fragment_to_document� s c C s t S( N( R0 ( R t tag( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt set_up_substitutions� s c C s� | s
| S| j r� | j j d g � } | j j | j � d � } xs | j � D]b } | | k st | rP | | k rP | | } t | t � r� t j | � } n | } | | | <qP qP Wn | S( sa Replaces class="foo bar" with class=["foo", "bar"]
Modifies its input in place.
t *N( t cdata_list_attributesR t lowerR t keyst
isinstancet
basestringR t split( R R+ t attrst universalt tag_specifict attrt valuet values( ( s8 /usr/lib/python2.7/site-packages/bs4/builder/__init__.pyt$ _replace_cdata_list_attribute_values� s
N( R% R&