]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/MathParser.cpp
Fix display and export of some latex macros
[lyx.git] / src / mathed / MathParser.cpp
index 0f10aa5ed75c7104c38d94e18e72b7c8dee8d8bd..1e615d248b38731575fd73b95b4aa490a592dd10 100644 (file)
@@ -74,9 +74,10 @@ following hack as starting point to write some macros:
 #include "Encoding.h"
 #include "Lexer.h"
 
-#include "support/debug.h"
 #include "support/convert.h"
+#include "support/debug.h"
 #include "support/docstream.h"
+#include "support/unique_ptr.h"
 
 #include <sstream>
 
@@ -229,6 +230,8 @@ bool addCol(InsetMathGrid & grid, InsetMathGrid::col_type & cellcol)
  * \endverbatim
  * will result in a grid with 3 rows (+ the dummy row that is always present),
  * because the last '\\' opens a new row.
+ * Do never delete a row that contains a multicolumn, even if all cells empty,
+ * since the multicolumn information would get lost otherwise.
  * Note that this is only needed for inner-hull grid types, such as array
  * or aligned, but not for outer-hull grid types, such as eqnarray or align.
  */
@@ -236,7 +239,9 @@ void delEmptyLastRow(InsetMathGrid & grid)
 {
        InsetMathGrid::row_type const row = grid.nrows() - 1;
        for (InsetMathGrid::col_type col = 0; col < grid.ncols(); ++col) {
-               if (!grid.cell(grid.index(row, col)).empty())
+               InsetMathGrid::idx_type const idx = grid.index(row, col);
+               if (!grid.cell(idx).empty() ||
+                   grid.cellinfo(idx).multi_ != InsetMathGrid::CELL_NORMAL)
                        return;
        }
        // Copy the row information of the empty row (which would contain the
@@ -1385,12 +1390,10 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                error("can't extract number of multicolumn cells");
                        }
                        // resize the table if necessary
-                       size_t first = 0;
-                       for (int i = 0; i < cols; ++i) {
+                       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);
-                                       if (i == 0)
-                                               first = idx;
                                        grid.cellinfo(idx).multi_ =
                                                InsetMathGrid::CELL_PART_OF_MULTICOLUMN;
                                }
@@ -1401,7 +1404,9 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        grid.cellinfo(first).multi_ = InsetMathGrid::CELL_BEGIN_OF_MULTICOLUMN;
 
                        // read special alignment
-                       grid.cellinfo(first).align_ = parse_verbatim_item();
+                       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);
@@ -1938,23 +1943,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_ptr<InsetMathXYArrow> p(new 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") {