diff options
| -rw-r--r-- | mammoth/html_generation.py | 19 | ||||
| -rw-r--r-- | tests/html_generation_tests.py | 10 |
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("<", 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()) |
