From 522c72ef59e2b544a30a6bfbc3001dc1e84fed45 Mon Sep 17 00:00:00 2001 From: Leonard Richardson Date: Fri, 10 Apr 2009 15:20:58 -0400 Subject: Added a simple compatibility test suite for tree builders. --- src/beautifulsoup/builder/lxml_builder.py | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/beautifulsoup/builder/lxml_builder.py (limited to 'src/beautifulsoup/builder/lxml_builder.py') 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) -- cgit v1.2.3