aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-12-14 14:55:07 +0000
committerMichael Williamson <mike@zwobble.org>2013-12-14 14:55:07 +0000
commitee4f5998d6ee0ec390dd1d126619d89ec16ac0dd (patch)
tree92894482542885eeec013e85cf7e0d67e68739e6
parent77366b64e5a04da3cd501e57b43692b3f19f14c0 (diff)
Add starting and ending tags
-rw-r--r--mammoth/html_generation.py19
-rw-r--r--tests/html_generation_tests.py10
2 files changed, 28 insertions, 1 deletions
diff --git a/mammoth/html_generation.py b/mammoth/html_generation.py
index eb68266..cf76500 100644
--- a/mammoth/html_generation.py
+++ b/mammoth/html_generation.py
@@ -3,15 +3,32 @@ import cgi
class HtmlGenerator(object):
def __init__(self):
+ self._stack = []
self._fragments = []
def text(self, text):
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))
+
+ def end_all(self):
+ while self._stack:
+ self.end()
def html_string(self):
return "".join(self._fragments)
+class _Element(object):
+ def __init__(self, name):
+ self.name = name
+
+
def _escape_html(text):
return cgi.escape(text, quote=True)
diff --git a/tests/html_generation_tests.py b/tests/html_generation_tests.py
index 68034d9..395af30 100644
--- a/tests/html_generation_tests.py
+++ b/tests/html_generation_tests.py
@@ -14,3 +14,13 @@ def html_escapes_text():
generator = HtmlGenerator()
generator.text("<")
assert_equal("&lt;", generator.html_string())
+
+
+@istest
+def all_elements_are_closed_by_end_all():
+ generator = HtmlGenerator()
+ generator.start("p")
+ generator.start("span")
+ generator.text("Hello!")
+ generator.end_all()
+ assert_equal("<p><span>Hello!</span></p>", generator.html_string())