summaryrefslogtreecommitdiff
path: root/src/beautifulsoup/builder/lxml_builder.py
diff options
context:
space:
mode:
authorLeonard Richardson <leonard.richardson@canonical.com>2009-04-10 15:20:58 -0400
committerLeonard Richardson <leonard.richardson@canonical.com>2009-04-10 15:20:58 -0400
commit522c72ef59e2b544a30a6bfbc3001dc1e84fed45 (patch)
tree32f1d105d930207d2dd9b822e4051e2cb8f987d6 /src/beautifulsoup/builder/lxml_builder.py
parent07874f2172a7402306582ba9c5f5ceb92f0f5f44 (diff)
Added a simple compatibility test suite for tree builders.
Diffstat (limited to 'src/beautifulsoup/builder/lxml_builder.py')
-rw-r--r--src/beautifulsoup/builder/lxml_builder.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/beautifulsoup/builder/lxml_builder.py b/src/beautifulsoup/builder/lxml_builder.py
new file mode 100644
index 0000000..2963a02
--- /dev/null
+++ b/src/beautifulsoup/builder/lxml_builder.py
@@ -0,0 +1,35 @@
+from lxml import etree
+from beautifulsoup.element import Comment
+from beautifulsoup.builder import TreeBuilder
+
+class LXMLTreeBuilder(TreeBuilder):
+
+ def __init__(self, parser_class=etree.HTMLParser, self_closing_tags=[]):
+ self.parser = parser_class(target=self)
+ self.self_closing_tags = self_closing_tags
+ self.soup = None
+
+ def isSelfClosingTag(self, name):
+ return name in self.self_closing_tags
+
+ def feed(self, markup):
+ self.parser.feed(markup)
+ self.parser.close()
+
+ def close(self):
+ pass
+
+ def start(self, name, attrs):
+ self.soup.handle_starttag(name, attrs)
+
+ def end(self, name):
+ self.soup.handle_endtag(name)
+
+ def data(self, content):
+ self.soup.handle_data(content)
+
+ def comment(self, content):
+ "Handle comments as Comment objects."
+ self.soup.endData()
+ self.soup.handle_data(content)
+ self.soup.endData(Comment)