]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/MathParser.cpp
Improve the list of equations
[lyx.git] / src / mathed / MathParser.cpp
index d3263175205ea46cb95a1877c1a63d2fafe3de7d..83fc9c7da602bfddc31d615bbf9ca92270220a3d 100644 (file)
@@ -401,8 +401,6 @@ public:
        bool parse1(InsetMathGrid & grid, unsigned flags, mode_type mode,
                bool numbered);
        ///
-       MathData parse(unsigned flags, mode_type mode);
-       ///
        int lineno() const { return lineno_; }
        ///
        void putback();
@@ -435,8 +433,6 @@ private:
        ///
        void push_back(Token const & t);
        ///
-       void pop_back();
-       ///
        Token const & prevToken() const;
        ///
        Token const & nextToken() const;
@@ -501,12 +497,6 @@ void Parser::push_back(Token const & t)
 }
 
 
-void Parser::pop_back()
-{
-       tokens_.pop_back();
-}
-
-
 Token const & Parser::prevToken() const
 {
        static const Token dummy;
@@ -786,14 +776,6 @@ docstring Parser::parse_verbatim_item()
 }
 
 
-MathData Parser::parse(unsigned flags, mode_type mode)
-{
-       MathData ar(buffer_);
-       parse(ar, flags, mode);
-       return ar;
-}
-
-
 bool Parser::parse(MathData & array, unsigned flags, mode_type mode)
 {
        InsetMathGrid grid(buffer_, 1, 1);
@@ -947,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)
@@ -1380,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") {
@@ -1775,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;
@@ -1943,23 +1935,6 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        cell->push_back(createInsetMath(t.cs(), buf));
                        parse2(cell->back(), FLAG_ITEM, mode, false);
                }
-
-               // Disabled
-               else if (1 && t.cs() == "ar") {
-                       auto p = make_unique<InsetMathXYArrow>();
-                       // try to read target
-                       parse(p->cell(0), FLAG_OTPTION, mode);
-                       // try to read label
-                       if (nextToken().cat() == catSuper || nextToken().cat() == catSub) {
-                               p->up_ = nextToken().cat() == catSuper;
-                               getToken();
-                               parse(p->cell(1), FLAG_ITEM, mode);
-                               //lyxerr << "read label: " << p->cell(1) << endl;
-                       }
-
-                       cell->push_back(MathAtom(p.release()));
-                       //lyxerr << "read cell: " << cell << endl;
-               }
 #endif
 
                else if (t.cs() == "lyxmathsym") {