@@ -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-
726724def _is_int (value ):
727725 if value is None :
728726 return False
0 commit comments