aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mammoth/conversion.py6
-rw-r--r--mammoth/html_generation.py9
-rw-r--r--mammoth/writers/__init__.py4
-rw-r--r--tests/html_generation_tests.py46
4 files changed, 36 insertions, 29 deletions
diff --git a/mammoth/conversion.py b/mammoth/conversion.py
index 61ce17b..3c217e0 100644
--- a/mammoth/conversion.py
+++ b/mammoth/conversion.py
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
import base64
import random
-from . import documents, results, html_paths, images
+from . import documents, results, html_paths, images, writers
from .html_generation import HtmlGenerator, satisfy_html_path
@@ -20,8 +20,8 @@ def convert_document_element_to_html(element,
if id_prefix is None:
id_prefix = str(random.randint(0, 1000000000000000))
-
- html_generator = HtmlGenerator()
+
+ html_generator = HtmlGenerator(writers.writer)
converter = DocumentConverter(style_map,
convert_image=convert_image,
convert_underline=convert_underline,
diff --git a/mammoth/html_generation.py b/mammoth/html_generation.py
index 6dd0b33..a0c35b7 100644
--- a/mammoth/html_generation.py
+++ b/mammoth/html_generation.py
@@ -1,12 +1,11 @@
from __future__ import unicode_literals
-from .writers.html import HtmlWriter
-
class HtmlGenerator(object):
- def __init__(self):
+ def __init__(self, create_writer):
self._stack = []
- self._writer = HtmlWriter()
+ self._create_writer = create_writer
+ self._writer = create_writer()
def text(self, text):
if text:
@@ -50,7 +49,7 @@ class HtmlGenerator(object):
return self._writer.as_string()
def child(self):
- return HtmlGenerator()
+ return HtmlGenerator(self._create_writer)
class _Element(object):
diff --git a/mammoth/writers/__init__.py b/mammoth/writers/__init__.py
index 8b13789..04a64d7 100644
--- a/mammoth/writers/__init__.py
+++ b/mammoth/writers/__init__.py
@@ -1 +1,5 @@
+from .html import HtmlWriter
+
+def writer():
+ return HtmlWriter()
diff --git a/tests/html_generation_tests.py b/tests/html_generation_tests.py
index e715bdf..ccb0e7e 100644
--- a/tests/html_generation_tests.py
+++ b/tests/html_generation_tests.py
@@ -1,32 +1,32 @@
from nose.tools import istest, assert_equal
from mammoth.html_generation import HtmlGenerator, satisfy_html_path
-from mammoth import html_paths
+from mammoth import html_paths, writers
@istest
def generates_empty_string_when_newly_created():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
assert_equal("", generator.as_string())
@istest
def html_escapes_text():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.text("<")
assert_equal("&lt;", generator.as_string())
@istest
def self_closing_tag_is_self_closing():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.self_closing("br")
assert_equal("<br />", generator.as_string())
@istest
def all_elements_are_closed_by_end_all():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("p")
generator.start("span")
generator.text("Hello!")
@@ -36,7 +36,7 @@ def all_elements_are_closed_by_end_all():
@istest
def elements_with_no_text_are_not_generator():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("p")
generator.start("span")
generator.end_all()
@@ -45,7 +45,7 @@ def elements_with_no_text_are_not_generator():
@istest
def elements_with_empty_string_text_are_not_generator():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("p")
generator.start("span")
generator.text("")
@@ -55,21 +55,21 @@ def elements_with_empty_string_text_are_not_generator():
@istest
def self_closing_tag_can_have_attributes():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.self_closing("br", {"data-blah": "42"})
assert_equal('<br data-blah="42" />', generator.as_string())
@istest
def attribute_values_are_escaped():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.self_closing("br", {"data-blah": "<"})
assert_equal('<br data-blah="&lt;" />', generator.as_string())
@istest
def opening_tag_can_have_attributes():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("p", {"data-blah": "42"})
generator.text("Hello!")
generator.end()
@@ -78,17 +78,17 @@ def opening_tag_can_have_attributes():
@istest
def appending_another_html_generator_does_nothing_if_empty():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("p")
- generator.append(HtmlGenerator())
+ generator.append(_create_html_generator())
assert_equal('', generator.as_string())
@istest
def appending_another_html_generator_writes_out_elements_if_other_generator_is_not_empty():
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("p")
- other = HtmlGenerator()
+ other = _create_html_generator()
other.text("Hello!")
generator.append(other)
assert_equal('<p>Hello!', generator.as_string())
@@ -98,7 +98,7 @@ def appending_another_html_generator_writes_out_elements_if_other_generator_is_n
class SatisfyPathTests(object):
@istest
def plain_elements_are_generated_to_satisfy_plain_path_elements(self):
- generator = HtmlGenerator()
+ generator = _create_html_generator()
path = html_paths.path([html_paths.element(["p"])])
satisfy_html_path(generator, path)
generator.text("Hello!")
@@ -107,7 +107,7 @@ class SatisfyPathTests(object):
@istest
def only_missing_elements_are_generated_to_satisfy_plain_path_elements(self):
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("blockquote")
generator.text("Hello")
path = html_paths.path([html_paths.element(["blockquote"]), html_paths.element(["p"])])
@@ -118,7 +118,7 @@ class SatisfyPathTests(object):
@istest
def mismatched_elements_are_closed_to_satisfy_plain_path_elements(self):
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("blockquote")
generator.start("span")
generator.text("Hello")
@@ -130,7 +130,7 @@ class SatisfyPathTests(object):
@istest
def fresh_element_matches_nothing(self):
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("blockquote")
generator.start("p")
generator.text("Hello")
@@ -142,7 +142,7 @@ class SatisfyPathTests(object):
@istest
def attributes_are_generated_when_satisfying_elements(self):
- generator = HtmlGenerator()
+ generator = _create_html_generator()
path = html_paths.path([html_paths.element(["p"], class_names=["tip"])])
satisfy_html_path(generator, path)
generator.text("Hello")
@@ -151,7 +151,7 @@ class SatisfyPathTests(object):
@istest
def elements_do_not_match_if_class_names_do_not_match(self):
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("p", {"class": "help"})
generator.text("Help")
path = html_paths.path([html_paths.element(["p"], class_names=["tip"])])
@@ -162,10 +162,14 @@ class SatisfyPathTests(object):
@istest
def class_names_match_if_they_are_the_same(self):
- generator = HtmlGenerator()
+ generator = _create_html_generator()
generator.start("p", {"class": "tip"})
generator.text("Help")
path = html_paths.path([html_paths.element(["p"], class_names=["tip"])])
satisfy_html_path(generator, path)
generator.text("Tip")
assert_equal('<p class="tip">HelpTip', generator.as_string())
+
+
+def _create_html_generator():
+ return HtmlGenerator(writers.writer)