aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-06-17 15:54:29 +0100
committerMichael Williamson <mike@zwobble.org>2015-06-17 15:54:29 +0100
commitcd2a10d64f6f2a1a42c1a3f0c144a3a521083cd8 (patch)
treea251f341d5181ef347636e4d5ab3657782d8367b
parent3bfa77d64e69d20609c8321a067bfa2651a7eabc (diff)
Allow strikethrough to be configured in style mapping
-rw-r--r--mammoth/conversion.py15
-rw-r--r--mammoth/document_matchers.py4
-rw-r--r--mammoth/style_reader/document_matcher_reader.py6
-rw-r--r--tests/conversion_tests.py11
-rw-r--r--tests/mammoth_tests.py7
-rw-r--r--tests/style_reader_tests.py7
6 files changed, 46 insertions, 4 deletions
diff --git a/mammoth/conversion.py b/mammoth/conversion.py
index c4631e1..71edaf4 100644
--- a/mammoth/conversion.py
+++ b/mammoth/conversion.py
@@ -100,7 +100,7 @@ class DocumentConverter(object):
if run.is_underline:
self._convert_underline(run_generator)
if run.is_strikethrough:
- run_generator.start("s")
+ self._convert_strikethrough(run_generator)
self._convert_elements_to_html(run.children, run_generator)
run_generator.end_all()
html_generator.append(run_generator)
@@ -111,6 +111,15 @@ class DocumentConverter(object):
if style is not None:
append_html_path(run_generator, style.html_path)
+
+ def _convert_strikethrough(self, run_generator):
+ style = self._find_style(None, "strikethrough")
+ if style is None:
+ run_generator.start("s")
+ else:
+ append_html_path(run_generator, style.html_path)
+
+
def _convert_text(self, text, html_generator):
html_generator.text(text.value)
@@ -238,8 +247,8 @@ class DocumentConverter(object):
def _document_matcher_matches(matcher, element, element_type):
- if matcher.element_type == "underline":
- return element_type == "underline"
+ if matcher.element_type in ["underline", "strikethrough"]:
+ return matcher.element_type == element_type
else:
return (
matcher.element_type == element_type and (
diff --git a/mammoth/document_matchers.py b/mammoth/document_matchers.py
index 07d5be2..9f05a8e 100644
--- a/mammoth/document_matchers.py
+++ b/mammoth/document_matchers.py
@@ -19,3 +19,7 @@ RunMatcher.element_type = "run"
class underline(object):
element_type = "underline"
+
+
+class strikethrough(object):
+ element_type = "strikethrough"
diff --git a/mammoth/style_reader/document_matcher_reader.py b/mammoth/style_reader/document_matcher_reader.py
index 56c4626..04a26c0 100644
--- a/mammoth/style_reader/document_matcher_reader.py
+++ b/mammoth/style_reader/document_matcher_reader.py
@@ -16,6 +16,8 @@ def read_document_matcher_node(root_node):
return _read_run_node(element_node)
elif element_node.expr_name == "underline":
return document_matchers.underline
+ elif element_node.expr_name == "strikethrough":
+ return document_matchers.strikethrough
def _read_paragraph_node(paragraph_node):
@@ -55,10 +57,12 @@ def _read_list_node(list_node):
return None
grammar_text = r"""
-document_matcher = paragraph / run / underline
+document_matcher = paragraph / run / underline / strikethrough
underline = "u"
+strikethrough = "strike"
+
paragraph = "p" style_id? style_name_specifier? list?
run = "r" style_id? style_name_specifier?
diff --git a/tests/conversion_tests.py b/tests/conversion_tests.py
index 1563131..23e61d4 100644
--- a/tests/conversion_tests.py
+++ b/tests/conversion_tests.py
@@ -211,6 +211,17 @@ def strikethrough_runs_are_wrapped_in_s_elements_by_default():
@istest
+def strikethrough_runs_can_be_configured_with_style_mapping():
+ result = convert_document_element_to_html(
+ documents.run(children=[documents.text("Hello")], is_strikethrough=True),
+ style_map=[
+ style_reader.read_style("strike => del")
+ ]
+ )
+ assert_equal("<del>Hello</del>", result.value)
+
+
+@istest
def superscript_runs_are_wrapped_in_sup_tags():
result = convert_document_element_to_html(
documents.run(
diff --git a/tests/mammoth_tests.py b/tests/mammoth_tests.py
index 84cb6ea..9f37db0 100644
--- a/tests/mammoth_tests.py
+++ b/tests/mammoth_tests.py
@@ -138,6 +138,13 @@ def strikethrough_is_converted_to_s_element_by_default():
@istest
+def strikethrough_conversion_can_be_configured_with_style_mapping():
+ with open(test_path("strikethrough.docx"), "rb") as fileobj:
+ result = mammoth.convert_to_html(fileobj=fileobj, style_map="strike => del")
+ assert_equal("<p><del>Today's Special: Salmon</del> 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/style_reader_tests.py b/tests/style_reader_tests.py
index 501629a..52d66fd 100644
--- a/tests/style_reader_tests.py
+++ b/tests/style_reader_tests.py
@@ -141,6 +141,13 @@ class ReadDocumentMatcherTests(object):
read_document_matcher("u")
)
+ @istest
+ def reads_strikethrough(self):
+ assert_equal(
+ document_matchers.strikethrough,
+ read_document_matcher("strike")
+ )
+
@istest
def document_matcher_is_mapped_to_html_path_using_fat_arrow():