]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetTabular.cpp
Fix the guiName of external insets.
[lyx.git] / src / insets / InsetTabular.cpp
index 4686862826697d1a2d0c471f80eb8b19b524f378..132a3ee656e6f04c6eb5b0406fa8aeff9deecce2 100644 (file)
@@ -1339,7 +1339,13 @@ int Tabular::textVOffset(idx_type cell) const
 Tabular::idx_type Tabular::getFirstCellInRow(row_type row) const
 {
        col_type c = 0;
-       while (cell_info[row][c].multirow == CELL_PART_OF_MULTIROW)
+       idx_type const numcells = numberOfCellsInRow(row);
+       // we check against numcells to make sure we do not crash if all the
+       // cells are multirow (bug #7535), but in that case our return value
+       // is really invalid, i.e., it is NOT the first cell in the row. but
+       // i do not know what to do here. (rgh)
+       while (c < numcells - 1
+              && cell_info[row][c].multirow == CELL_PART_OF_MULTIROW)
                ++c;
        return cell_info[row][c].cellno;
 }
@@ -1348,6 +1354,9 @@ Tabular::idx_type Tabular::getFirstCellInRow(row_type row) const
 Tabular::idx_type Tabular::getLastCellInRow(row_type row) const
 {
        col_type c = ncols() - 1;
+       // of course we check against 0 so we don't crash. but we have the same
+       // problem as in the previous routine: if all the cells are part of a
+       // multirow or part of a multi column, then our return value is invalid.
        while (c > 0
               && (cell_info[row][c].multirow == CELL_PART_OF_MULTIROW
                   || cell_info[row][c].multicolumn == CELL_PART_OF_MULTICOLUMN))
@@ -2867,7 +2876,7 @@ docstring Tabular::xhtmlRow(XHTMLStream & xs, row_type row,
 
        xs << html::StartTag("tr");
        for (col_type c = 0; c < ncols(); ++c) {
-               if (isPartOfMultiColumn(row, c))
+               if (isPartOfMultiColumn(row, c) || isPartOfMultiRow(row, c))
                        continue;
 
                stringstream attr;
@@ -2899,6 +2908,8 @@ docstring Tabular::xhtmlRow(XHTMLStream & xs, row_type row,
 
                if (isMultiColumn(cell))
                        attr << " colspan='" << columnSpan(cell) << "'";
+               else if (isMultiRow(cell))
+                       attr << " rowspan='" << rowSpan(cell) << "'";
 
                xs << html::StartTag(celltag, attr.str()) << html::CR();
                ret += cellInset(cell)->xhtml(xs, runparams);