X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathParser.cpp;h=83fc9c7da602bfddc31d615bbf9ca92270220a3d;hb=5fdc577badb1cb133d6a0dc7d831bb1f82576adb;hp=4b0e5386c602caa4eaf7e44b699dbda44d82044a;hpb=4065f596ada672c58787a0f9faa2278621545ab9;p=lyx.git diff --git a/src/mathed/MathParser.cpp b/src/mathed/MathParser.cpp index 4b0e5386c6..83fc9c7da6 100644 --- a/src/mathed/MathParser.cpp +++ b/src/mathed/MathParser.cpp @@ -929,8 +929,13 @@ 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'))); + Token const & n = nextToken(); + char_type c = n.character(); + if (c && '0' < c && c <= '9') { + cell->push_back(MathAtom(new MathMacroArgument(c - '0'))); + getToken(); + } else + cell->push_back(MathAtom(new InsetMathHash())); } else if (t.cat() == catActive) @@ -1362,36 +1367,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") { @@ -1757,7 +1767,7 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags, } } - else if (t.cs() == "kern") { + else if (t.cs() == "kern" || t.cs() == "mkern") { // FIXME: A hack... docstring s; int num_tokens = 0;