summaryrefslogtreecommitdiff
path: root/bs4/builder/__init__.py
diff options
context:
space:
mode:
authorLeonard Richardson <leonard.richardson@canonical.com>2012-04-26 10:08:45 -0400
committerLeonard Richardson <leonard.richardson@canonical.com>2012-04-26 10:08:45 -0400
commite82a52cacd936b66d9f6290136278af00ea1428c (patch)
treebf118c8d2bbc701c8143eb8c584cfa2c8c3d4116 /bs4/builder/__init__.py
parent3ff7bde5d320fbec4c16e7f245c345e8455ca887 (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__.py20
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."""