Skip to content

Commit bd2cf5a

Browse files
committed
Ignore deleted table row
1 parent 80e9fd0 commit bd2cf5a

3 files changed

Lines changed: 46 additions & 0 deletions

File tree

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
elements, such as table cells. Previously, the wrapping elements would have
88
been ignored.
99

10+
* Ignore deleted table rows.
11+
1012
# 1.9.1
1113

1214
* Ignore AlternateContent elements when there is no Fallback element.

mammoth/docx/body_xml.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,12 @@ def read_table_style(properties):
351351

352352
def table_row(element):
353353
properties = element.find_child_or_null("w:trPr")
354+
355+
# See 17.13.5.12 del (Deleted Table Row) of ECMA-376 4th edition Part 1
356+
is_deleted = bool(properties.find_child("w:del"))
357+
if is_deleted:
358+
return _empty_result
359+
354360
is_header = bool(properties.find_child("w:tblHeader"))
355361
return _read_xml_elements(element.children) \
356362
.map(lambda children: documents.table_row(

tests/docx/body_xml_tests.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,6 +1079,44 @@ def test_no_vertical_cell_merging_if_merged_cells_do_not_line_up(self):
10791079
assert_equal(expected_result, result)
10801080

10811081

1082+
def test_when_row_is_marked_as_deleted_in_row_properties_then_row_is_ignored(self):
1083+
element = xml_element("w:tbl", {}, [
1084+
xml_element("w:tr", {}, [
1085+
xml_element("w:tc", {}, [
1086+
xml_element("w:p", {}, [
1087+
_run_element_with_text("Row 1"),
1088+
]),
1089+
]),
1090+
]),
1091+
1092+
xml_element("w:tr", {}, [
1093+
xml_element("w:trPr", {}, [
1094+
xml_element("w:del")
1095+
]),
1096+
xml_element("w:tc", {}, [
1097+
xml_element("w:p", {}, [
1098+
_run_element_with_text("Row 2"),
1099+
]),
1100+
]),
1101+
]),
1102+
])
1103+
1104+
result = _read_and_get_document_xml_element(element)
1105+
1106+
expected_result = documents.table([
1107+
documents.table_row([
1108+
documents.table_cell([
1109+
documents.paragraph([
1110+
documents.run([
1111+
documents.text("Row 1"),
1112+
]),
1113+
]),
1114+
]),
1115+
]),
1116+
])
1117+
assert_equal(expected_result, result)
1118+
1119+
10821120
def test_warning_if_non_row_in_table(self):
10831121
element = xml_element("w:tbl", {}, [xml_element("w:p")])
10841122
result = _read_document_xml_element(element)

0 commit comments

Comments
 (0)