aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mammoth/html_generation.py15
-rw-r--r--tests/html_generation_tests.py10
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("</{0}>".format(element.name))
+ if element.written:
+ self._fragments.append("</{0}>".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("<p><span>Hello!</span></p>", 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())
+