diff options
| author | Michael Williamson <mike@zwobble.org> | 2014-07-18 15:21:47 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2014-07-18 15:21:47 +0100 |
| commit | 89e0fe2ffb65babcb0a09d384c4dcb3d1c411a2d (patch) | |
| tree | fdc3096e291144381e5c0c4d71e45624ccc7b0ad | |
| parent | 0b4abd3026ac77d8b7ea4f9adde759ca90abc2f6 (diff) | |
Add support for optional underline conversion
| -rw-r--r-- | mammoth/__init__.py | 4 | ||||
| -rw-r--r-- | mammoth/conversion.py | 9 | ||||
| -rw-r--r-- | mammoth/underline.py | 5 | ||||
| -rw-r--r-- | tests/conversion_tests.py | 18 |
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")]), |
