]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/MathParser.cpp
Get rid of Inset::setPosCache
[lyx.git] / src / mathed / MathParser.cpp
index 4b0e5386c602caa4eaf7e44b699dbda44d82044a..ffb828361cd24d48e404ec9594dba35c14e45f72 100644 (file)
@@ -930,7 +930,8 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
 
                else if (t.cat() == catParameter) {
                        Token const & n = getToken();
-                       cell->push_back(MathAtom(new MathMacroArgument(n.character()-'0')));
+                       if (n.character())
+                               cell->push_back(MathAtom(new MathMacroArgument(n.character()-'0')));
                }
 
                else if (t.cat() == catActive)
@@ -1362,36 +1363,41 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        }
                }
 
-               else if (t.cs() == "multicolumn") {
-                       // extract column count and insert dummy cells
+               else if (t.cs() == "multicolumn" && grid.handlesMulticolumn()) {
+                       // if the columns are specified numerically,
+                       // extract column count and insert dummy cells,
+                       // otherwise parse it as an user macro
                        MathData count;
                        parse(count, FLAG_ITEM, mode);
-                       int cols = 1;
-                       if (!extractNumber(count, cols)) {
-                               success_ = false;
-                               error("can't extract number of multicolumn cells");
-                       }
-                       // resize the table if necessary
-                       size_t first = grid.index(cellrow, cellcol);
-                       for (int i = 1; i < cols; ++i) {
-                               if (addCol(grid, cellcol)) {
-                                       size_t const idx = grid.index(cellrow, cellcol);
-                                       grid.cellinfo(idx).multi_ =
-                                               InsetMathGrid::CELL_PART_OF_MULTICOLUMN;
+                       int cols;
+                       if (extractNumber(count, cols)) {
+                               // resize the table if necessary
+                               size_t first = grid.index(cellrow, cellcol);
+                               for (int i = 1; i < cols; ++i) {
+                                       if (addCol(grid, cellcol)) {
+                                               size_t const idx = grid.index(cellrow, cellcol);
+                                               grid.cellinfo(idx).multi_ =
+                                                       InsetMathGrid::CELL_PART_OF_MULTICOLUMN;
+                                       }
                                }
-                       }
 
-                       // the first cell is the real thing, not a dummy
-                       cell = &grid.cell(first);
-                       grid.cellinfo(first).multi_ = InsetMathGrid::CELL_BEGIN_OF_MULTICOLUMN;
+                               // the first cell is the real thing, not a dummy
+                               cell = &grid.cell(first);
+                               grid.cellinfo(first).multi_ =
+                                       InsetMathGrid::CELL_BEGIN_OF_MULTICOLUMN;
 
-                       // read special alignment
-                       MathData align;
-                       parse(align, FLAG_ITEM, mode);
-                       grid.cellinfo(first).align_ = asString(align);
+                               // read special alignment
+                               MathData align;
+                               parse(align, FLAG_ITEM, mode);
+                               grid.cellinfo(first).align_ = asString(align);
 
-                       // parse the remaining contents into the "real" cell
-                       parse(*cell, FLAG_ITEM, mode);
+                               // parse the remaining contents into the "real" cell
+                               parse(*cell, FLAG_ITEM, mode);
+                       } else {
+                               MathAtom at = MathAtom(new MathMacro(buf, t.cs()));
+                               cell->push_back(at);
+                               cell->push_back(MathAtom(new InsetMathBrace(count)));
+                       }
                }
 
                else if (t.cs() == "limits" || t.cs() == "nolimits") {