diff options
| author | Michael Williamson <mike@zwobble.org> | 2020-09-09 11:21:47 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2020-09-09 11:21:47 +0100 |
| commit | 32231b57c13c6c7c72d7ab9606cf939b03e38849 (patch) | |
| tree | 1824666b4a11aa890ba353535fb113a036857e56 | |
| parent | 144515de86dba289edf68ec9acd6fa005fc2a4ed (diff) | |
Handle underline elements where w:val is "none"
| -rw-r--r-- | NEWS | 4 | ||||
| -rw-r--r-- | mammoth/docx/body_xml.py | 4 | ||||
| -rw-r--r-- | tests/docx/body_xml_tests.py | 22 |
3 files changed, 28 insertions, 2 deletions
@@ -1,3 +1,7 @@ +# 1.4.12 + +* Handle underline elements where w:val is "none". + # 1.4.11 * Read font size for runs. diff --git a/mammoth/docx/body_xml.py b/mammoth/docx/body_xml.py index f0aab84..dcc704b 100644 --- a/mammoth/docx/body_xml.py +++ b/mammoth/docx/body_xml.py @@ -89,7 +89,7 @@ def _create_reader(numbering, content_types, relationships, styles, docx_file, f is_bold = read_boolean_element(properties.find_child("w:b")) is_italic = read_boolean_element(properties.find_child("w:i")) - is_underline = read_boolean_element(properties.find_child("w:u")) + is_underline = read_underline_element(properties.find_child("w:u")) is_strikethrough = read_boolean_element(properties.find_child("w:strike")) is_small_caps = read_boolean_element(properties.find_child("w:smallCaps")) @@ -123,6 +123,8 @@ def _create_reader(numbering, content_types, relationships, styles, docx_file, f def read_boolean_element(element): return element and element.attributes.get("w:val") not in ["false", "0"] + def read_underline_element(element): + return element and element.attributes.get("w:val") not in ["false", "0", "none"] def paragraph(element): properties = element.find_child_or_null("w:pPr") diff --git a/tests/docx/body_xml_tests.py b/tests/docx/body_xml_tests.py index c9863bf..746259c 100644 --- a/tests/docx/body_xml_tests.py +++ b/tests/docx/body_xml_tests.py @@ -252,11 +252,31 @@ class RunTests(object): assert_equal(False, run.is_underline) @istest - def run_is_underlined_if_underline_element_is_present(self): + def run_is_underlined_if_underline_element_is_present_without_val_attribute(self): run = self._read_run_with_properties([xml_element("w:u")]) assert_equal(True, run.is_underline) @istest + def run_is_not_underlined_if_underline_element_is_present_and_val_is_false(self): + run = self._read_run_with_properties([xml_element("w:u", {"w:val": "false"})]) + assert_equal(False, run.is_underline) + + @istest + def run_is_not_underlined_if_underline_element_is_present_and_val_is_0(self): + run = self._read_run_with_properties([xml_element("w:u", {"w:val": "0"})]) + assert_equal(False, run.is_underline) + + @istest + def run_is_not_underlined_if_underline_element_is_present_and_val_is_none(self): + run = self._read_run_with_properties([xml_element("w:u", {"w:val": "none"})]) + assert_equal(False, run.is_underline) + + @istest + def run_is_underlined_if_underline_element_is_present_and_val_is_not_none_or_falsy(self): + run = self._read_run_with_properties([xml_element("w:u", {"w:val": "single"})]) + 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) |
