aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2014-07-18 15:21:47 +0100
committerMichael Williamson <mike@zwobble.org>2014-07-18 15:21:47 +0100
commit89e0fe2ffb65babcb0a09d384c4dcb3d1c411a2d (patch)
treefdc3096e291144381e5c0c4d71e45624ccc7b0ad
parent0b4abd3026ac77d8b7ea4f9adde759ca90abc2f6 (diff)
Add support for optional underline conversion
-rw-r--r--mammoth/__init__.py4
-rw-r--r--mammoth/conversion.py9
-rw-r--r--mammoth/underline.py5
-rw-r--r--tests/conversion_tests.py18
4 files changed, 31 insertions, 5 deletions
diff --git a/mammoth/__init__.py b/mammoth/__init__.py
index 889cdd5..e70e8ca 100644
--- a/mammoth/__init__.py
+++ b/mammoth/__init__.py
@@ -1,6 +1,6 @@
-from . import docx, conversion, options, documents, images
+from . import docx, conversion, options, documents, images, underline
-__all__ = ["convert_to_html", "extract_raw_text", "images"]
+__all__ = ["convert_to_html", "extract_raw_text", "images", "underline"]
def convert_to_html(fileobj, transform_document=None, **kwargs):
diff --git a/mammoth/conversion.py b/mammoth/conversion.py
index a9fba51..6f9b7fc 100644
--- a/mammoth/conversion.py
+++ b/mammoth/conversion.py
@@ -4,18 +4,18 @@ from . import documents, results, html_paths, images
from .html_generation import HtmlGenerator, satisfy_html_path
-def convert_document_element_to_html(element, style_map=None, convert_image=None):
+def convert_document_element_to_html(element, style_map=None, convert_image=None, convert_underline=None):
if style_map is None:
style_map = []
html_generator = HtmlGenerator()
- converter = DocumentConverter(style_map, convert_image=convert_image)
+ converter = DocumentConverter(style_map, convert_image=convert_image, convert_underline=convert_underline)
converter.convert_element_to_html(element, html_generator,)
html_generator.end_all()
return results.Result(html_generator.html_string(), converter.messages)
class DocumentConverter(object):
- def __init__(self, style_map, convert_image):
+ def __init__(self, style_map, convert_image, convert_underline):
self.messages = []
self._style_map = style_map
self._converters = {
@@ -30,6 +30,7 @@ class DocumentConverter(object):
documents.TableCell: self._convert_table_cell,
documents.Image: convert_image or images.inline(self._convert_image),
}
+ self._convert_underline = convert_underline
def convert_element_to_html(self, element, html_generator):
@@ -55,6 +56,8 @@ class DocumentConverter(object):
run_generator.start("strong")
if run.is_italic:
run_generator.start("em")
+ if run.is_underline and self._convert_underline is not None:
+ self._convert_underline(run_generator)
self._convert_elements_to_html(run.children, run_generator)
run_generator.end_all()
html_generator.append(run_generator)
diff --git a/mammoth/underline.py b/mammoth/underline.py
new file mode 100644
index 0000000..bb7d270
--- /dev/null
+++ b/mammoth/underline.py
@@ -0,0 +1,5 @@
+def element(name):
+ def convert_underline(html_generator):
+ html_generator.start(name)
+
+ return convert_underline
diff --git a/tests/conversion_tests.py b/tests/conversion_tests.py
index 9cb8757..977e509 100644
--- a/tests/conversion_tests.py
+++ b/tests/conversion_tests.py
@@ -2,6 +2,7 @@ import io
from nose.tools import istest, assert_equal
+import mammoth
from mammoth import documents, style_reader, results
from mammoth.conversion import convert_document_element_to_html
from mammoth.docx.xmlparser import parse_xml
@@ -146,6 +147,23 @@ def italic_runs_are_wrapped_in_emphasis_tags():
@istest
+def underline_runs_are_ignored_by_default():
+ result = convert_document_element_to_html(
+ documents.run(children=[documents.text("Hello")], is_underline=True),
+ )
+ assert_equal("Hello", result.value)
+
+
+@istest
+def underline_runs_can_be_wrapped_in_tags():
+ result = convert_document_element_to_html(
+ documents.run(children=[documents.text("Hello")], is_underline=True),
+ convert_underline=mammoth.underline.element("u")
+ )
+ assert_equal("<u>Hello</u>", result.value)
+
+
+@istest
def runs_are_converted_by_satisfying_matching_paths():
result = convert_document_element_to_html(
documents.run(style_id="TipsRun", children=[documents.Text("Tip")]),