diff options
author | Leonard Richardson <leonard.richardson@canonical.com> | 2012-04-26 10:08:45 -0400 |
---|---|---|
committer | Leonard Richardson <leonard.richardson@canonical.com> | 2012-04-26 10:08:45 -0400 |
commit | e82a52cacd936b66d9f6290136278af00ea1428c (patch) | |
tree | bf118c8d2bbc701c8143eb8c584cfa2c8c3d4116 /bs4/builder/__init__.py | |
parent | 3ff7bde5d320fbec4c16e7f245c345e8455ca887 (diff) |
The test suite now passes when lxml is not installed, whether or not html5lib is installed. [bug=987004]
Diffstat (limited to 'bs4/builder/__init__.py')
-rw-r--r-- | bs4/builder/__init__.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/bs4/builder/__init__.py b/bs4/builder/__init__.py index 9f4f59e..4c22b86 100644 --- a/bs4/builder/__init__.py +++ b/bs4/builder/__init__.py @@ -1,8 +1,10 @@ from collections import defaultdict +import itertools import sys from bs4.element import ( CharsetMetaAttributeValue, ContentMetaAttributeValue, + whitespace_re ) __all__ = [ @@ -140,6 +142,24 @@ class TreeBuilder(object): def set_up_substitutions(self, tag): return False + def _replace_cdata_list_attribute_values(self, tag_name, attrs): + """Replaces class="foo bar" with class=["foo", "bar"] + + Modifies its input in place. + """ + if self.cdata_list_attributes: + universal = self.cdata_list_attributes.get('*', []) + tag_specific = self.cdata_list_attributes.get( + tag_name.lower(), []) + for cdata_list_attr in itertools.chain(universal, tag_specific): + if cdata_list_attr in dict(attrs): + # Basically, we have a "class" attribute whose + # value is a whitespace-separated list of CSS + # classes. Split it into a list. + value = attrs[cdata_list_attr] + values = whitespace_re.split(value) + attrs[cdata_list_attr] = values + return attrs class SAXTreeBuilder(TreeBuilder): """A Beautiful Soup treebuilder that listens for SAX events.""" |