From 3f954497eba0ae33e17adfd127068dedf2bfa462 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 14 Dec 2013 14:57:24 +0000 Subject: Don't write elements --- mammoth/html_generation.py | 15 +++++++++++++-- tests/html_generation_tests.py | 10 ++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/mammoth/html_generation.py b/mammoth/html_generation.py index cf76500..b771b00 100644 --- a/mammoth/html_generation.py +++ b/mammoth/html_generation.py @@ -7,20 +7,30 @@ class HtmlGenerator(object): self._fragments = [] def text(self, text): + self._write_all() self._fragments.append(_escape_html(text)) def start(self, name): self._stack.append(_Element(name)) - self._fragments.append("<{0}>".format(name)) def end(self): element = self._stack.pop() - self._fragments.append("".format(element.name)) + if element.written: + self._fragments.append("".format(element.name)) def end_all(self): while self._stack: self.end() + def _write_all(self): + for element in self._stack: + if not element.written: + element.written = True + self._write_element(element) + + def _write_element(self, element): + self._fragments.append("<{0}>".format(element.name)) + def html_string(self): return "".join(self._fragments) @@ -28,6 +38,7 @@ class HtmlGenerator(object): class _Element(object): def __init__(self, name): self.name = name + self.written = False def _escape_html(text): diff --git a/tests/html_generation_tests.py b/tests/html_generation_tests.py index 395af30..757ff62 100644 --- a/tests/html_generation_tests.py +++ b/tests/html_generation_tests.py @@ -24,3 +24,13 @@ def all_elements_are_closed_by_end_all(): generator.text("Hello!") generator.end_all() assert_equal("

Hello!

", generator.html_string()) + + +@istest +def elements_with_no_text_are_not_generator(): + generator = HtmlGenerator() + generator.start("p") + generator.start("span") + generator.end_all() + assert_equal("", generator.html_string()) + -- cgit v1.2.3