diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-06-17 15:49:04 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-06-17 15:49:04 +0100 |
| commit | 3bfa77d64e69d20609c8321a067bfa2651a7eabc (patch) | |
| tree | 4cab2b0ff450665c3b164a27292b18583c339059 | |
| parent | 6478f5c20b86534c471793041f4e5b46f0cd6484 (diff) | |
Add support for strikethrough
| -rw-r--r-- | mammoth/conversion.py | 2 | ||||
| -rw-r--r-- | mammoth/documents.py | 6 | ||||
| -rw-r--r-- | mammoth/docx/document_xml.py | 2 | ||||
| -rw-r--r-- | tests/conversion_tests.py | 8 | ||||
| -rw-r--r-- | tests/docx/document_xml_tests.py | 10 | ||||
| -rw-r--r-- | tests/mammoth_tests.py | 7 | ||||
| -rwxr-xr-x | tests/test-data/strikethrough.docx | bin | 0 -> 12652 bytes |
7 files changed, 32 insertions, 3 deletions
diff --git a/mammoth/conversion.py b/mammoth/conversion.py index fc35efe..c4631e1 100644 --- a/mammoth/conversion.py +++ b/mammoth/conversion.py @@ -99,6 +99,8 @@ class DocumentConverter(object): run_generator.start("sub") if run.is_underline: self._convert_underline(run_generator) + if run.is_strikethrough: + run_generator.start("s") self._convert_elements_to_html(run.children, run_generator) run_generator.end_all() html_generator.append(run_generator) diff --git a/mammoth/documents.py b/mammoth/documents.py index 0e96c05..f2678ca 100644 --- a/mammoth/documents.py +++ b/mammoth/documents.py @@ -5,7 +5,7 @@ Document = dodge.data_class("Document", ["children", "notes"]) Paragraph = dodge.data_class("Paragraph", ["children", "style_id", "style_name", "numbering"]) Run = dodge.data_class("Run", [ "children", "style_id", "style_name", "is_bold", "is_italic", - "is_underline", "vertical_alignment", + "is_underline", "is_strikethrough", "vertical_alignment", ]) Text = dodge.data_class("Text", ["value"]) Hyperlink = dodge.data_class("Hyperlink", ["href", "anchor", "children"]) @@ -33,12 +33,12 @@ def document(children, notes=None): def paragraph(children, style_id=None, style_name=None, numbering=None): return Paragraph(children, style_id, style_name, numbering) -def run(children, style_id=None, style_name=None, is_bold=None, is_italic=None, is_underline=None, vertical_alignment=None): +def run(children, style_id=None, style_name=None, is_bold=None, is_italic=None, is_underline=None, is_strikethrough=None, vertical_alignment=None): if vertical_alignment is None: vertical_alignment = VerticalAlignment.baseline return Run( children, style_id, style_name, bool(is_bold), bool(is_italic), - bool(is_underline), vertical_alignment, + bool(is_underline), bool(is_strikethrough), vertical_alignment, ) class VerticalAlignment(object): diff --git a/mammoth/docx/document_xml.py b/mammoth/docx/document_xml.py index 84e2790..3147ed4 100644 --- a/mammoth/docx/document_xml.py +++ b/mammoth/docx/document_xml.py @@ -80,6 +80,7 @@ def _create_reader(numbering, content_types, relationships, styles, note_element is_bold = properties.find_child("w:b") is_italic = properties.find_child("w:i") is_underline = properties.find_child("w:u") + is_strikethrough = properties.find_child("w:strike") return _read_xml_elements(element.children) \ .map(lambda children: documents.run( @@ -89,6 +90,7 @@ def _create_reader(numbering, content_types, relationships, styles, note_element is_bold=is_bold, is_italic=is_italic, is_underline=is_underline, + is_strikethrough=is_strikethrough, vertical_alignment=vertical_alignment, )) diff --git a/tests/conversion_tests.py b/tests/conversion_tests.py index 19df77f..1563131 100644 --- a/tests/conversion_tests.py +++ b/tests/conversion_tests.py @@ -200,6 +200,14 @@ def style_mapping_for_underline_runs_does_not_close_parent_elements(): ] ) assert_equal("<strong><em>Hello</em></strong>", result.value) + + +@istest +def strikethrough_runs_are_wrapped_in_s_elements_by_default(): + result = convert_document_element_to_html( + documents.run(children=[documents.text("Hello")], is_strikethrough=True), + ) + assert_equal("<s>Hello</s>", result.value) @istest diff --git a/tests/docx/document_xml_tests.py b/tests/docx/document_xml_tests.py index f0fa5ab..bc6fcfb 100644 --- a/tests/docx/document_xml_tests.py +++ b/tests/docx/document_xml_tests.py @@ -142,6 +142,16 @@ class ReadXmlElementTests(object): def run_is_underlined_if_underline_element_is_present(self): run = self._read_run_with_properties([xml_element("w:u")]) assert_equal(True, run.is_underline) + + @istest + def run_is_not_struckthrough_if_strikethrough_element_is_not_present(self): + run = self._read_run_with_properties([]) + assert_equal(False, run.is_strikethrough) + + @istest + def run_is_struckthrough_if_strikethrough_element_is_present(self): + run = self._read_run_with_properties([xml_element("w:strike")]) + assert_equal(True, run.is_strikethrough) @istest def run_has_baseline_vertical_alignment_if_vertical_alignment_element_is_not_present(self): diff --git a/tests/mammoth_tests.py b/tests/mammoth_tests.py index e7e7e64..84cb6ea 100644 --- a/tests/mammoth_tests.py +++ b/tests/mammoth_tests.py @@ -131,6 +131,13 @@ def underline_can_be_configured_with_style_mapping(): @istest +def strikethrough_is_converted_to_s_element_by_default(): + with open(test_path("strikethrough.docx"), "rb") as fileobj: + result = mammoth.convert_to_html(fileobj=fileobj) + assert_equal("<p><s>Today's Special: Salmon</s> Sold out</p>", result.value) + + +@istest def transform_document_is_applied_to_document_before_conversion(): def transform_document(document): document.children[0].style_id = "Heading1" diff --git a/tests/test-data/strikethrough.docx b/tests/test-data/strikethrough.docx Binary files differnew file mode 100755 index 0000000..0d2b713 --- /dev/null +++ b/tests/test-data/strikethrough.docx |
