diff --git a/linuxdoc/rstFlatTable.py b/linuxdoc/rstFlatTable.py index b05bc4e..2ed745c 100755 --- a/linuxdoc/rstFlatTable.py +++ b/linuxdoc/rstFlatTable.py @@ -327,15 +327,33 @@ def parseCellItem(self, cellItem): cspan = rspan = 0 if not len(cellItem): # pylint: disable=len-as-condition return cspan, rspan, [] - for elem in cellItem[0]: - if isinstance(elem, colSpan): - cspan = elem.get("span") - elem.parent.remove(elem) - continue - if isinstance(elem, rowSpan): - rspan = elem.get("span") - elem.parent.remove(elem) + for elem in cellItem[0][:]: + if isinstance(elem, colSpan) or isinstance(elem, rowSpan): + if isinstance(elem, colSpan): + cspan = elem.get("span") + if isinstance(elem, rowSpan): + rspan = elem.get("span") + + # Trim leading whitespace in the following element + parent = elem.parent + if parent.index(elem) == 0 and len(parent) > 1: + sibling = parent[1] + if isinstance(sibling, nodes.Text): + new_text = sibling.lstrip() + if len(new_text) != 0: + parent.replace(sibling, nodes.Text(new_text)) + else: + parent.remove(sibling) + + # Finally remove target element from parent + parent.remove(elem) + + # And if the parent paragraph is now empty, remove it + if len(parent) == 0: + parent.replace_self([]) + continue + return cspan, rspan, cellItem[:]