Skip to content

Commit cc1ad1d

Browse files
committed
Replace _vmerge with TableCellUnmerged
1 parent e2f3982 commit cc1ad1d

2 files changed

Lines changed: 26 additions & 19 deletions

File tree

mammoth/documents.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ class TableCell(HasChildren):
8585
colspan = cobble.field()
8686
rowspan = cobble.field()
8787

88+
@cobble.data
89+
class TableCellUnmerged:
90+
children = cobble.field()
91+
colspan = cobble.field()
92+
rowspan = cobble.field()
93+
vmerge = cobble.field()
94+
8895
@cobble.data
8996
class Break(Element):
9097
break_type = cobble.field()
@@ -194,6 +201,8 @@ def table_cell(children, colspan=None, rowspan=None):
194201
rowspan = 1
195202
return TableCell(children=children, colspan=colspan, rowspan=rowspan)
196203

204+
def table_cell_unmerged(children, colspan, rowspan, vmerge):
205+
return TableCellUnmerged(children=children, colspan=colspan, rowspan=rowspan, vmerge=vmerge)
197206

198207
def numbering_level(level_index, is_ordered):
199208
return _NumberingLevel(str(level_index), bool(is_ordered))

mammoth/docx/body_xml.py

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -370,12 +370,11 @@ def table_cell(element):
370370
colspan = int(gridspan)
371371

372372
return _read_xml_elements(element.children) \
373-
.map(lambda children: _add_attrs(
374-
documents.table_cell(
375-
children=children,
376-
colspan=colspan
377-
),
378-
_vmerge=read_vmerge(properties),
373+
.map(lambda children: documents.table_cell_unmerged(
374+
children=children,
375+
colspan=colspan,
376+
rowspan=1,
377+
vmerge=read_vmerge(properties),
379378
))
380379

381380
def read_vmerge(properties):
@@ -398,7 +397,7 @@ def calculate_row_spans(rows):
398397
)])
399398

400399
unexpected_non_cells = any(
401-
not isinstance(cell, documents.TableCell)
400+
not isinstance(cell, documents.TableCellUnmerged)
402401
for row in rows
403402
for cell in row.children
404403
)
@@ -411,17 +410,23 @@ def calculate_row_spans(rows):
411410
for row in rows:
412411
cell_index = 0
413412
for cell in row.children:
414-
if cell._vmerge and cell_index in columns:
413+
if cell.vmerge and cell_index in columns:
415414
columns[cell_index].rowspan += 1
416415
else:
417416
columns[cell_index] = cell
418-
cell._vmerge = False
417+
cell.vmerge = False
419418
cell_index += cell.colspan
420419

421420
for row in rows:
422-
row.children = lists.filter(lambda cell: not cell._vmerge, row.children)
423-
for cell in row.children:
424-
del cell._vmerge
421+
row.children = [
422+
documents.table_cell(
423+
children=cell.children,
424+
colspan=cell.colspan,
425+
rowspan=cell.rowspan,
426+
)
427+
for cell in row.children
428+
if not cell.vmerge
429+
]
425430

426431
return _success(rows)
427432

@@ -716,13 +721,6 @@ def _concat(*values):
716721
return result
717722

718723

719-
def _add_attrs(obj, **kwargs):
720-
for key, value in kwargs.items():
721-
setattr(obj, key, value)
722-
723-
return obj
724-
725-
726724
def _is_int(value):
727725
if value is None:
728726
return False

0 commit comments

Comments
 (0)