X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_parser.C;h=ea289cc82c7a59b4666d47952409c6dd73219218;hb=cd3d0bc0b26f4d92fdfbfaac4adefebcf51f11ff;hp=fb00252908f933449fd83d77c58921ddf1a31bd0;hpb=74078920a3feb5ec4f9a36ef642870bec10b5d75;p=lyx.git diff --git a/src/mathed/math_parser.C b/src/mathed/math_parser.C index fb00252908..ea289cc82c 100644 --- a/src/mathed/math_parser.C +++ b/src/mathed/math_parser.C @@ -22,9 +22,9 @@ following hack as starting point to write some macros: ... \[\begin{array}{ccc} - 1 & 2\b & 3^2\\ - 4 & 5\e & 6\\ - 7 & 8 & 9 +1 +& + \end{array}\] */ @@ -32,9 +32,6 @@ following hack as starting point to write some macros: #include -#ifdef __GNUG__ -#pragma implementation -#endif #include "math_parser.h" #include "math_inset.h" @@ -59,6 +56,7 @@ following hack as starting point to write some macros: #include "math_sqrtinset.h" #include "math_stringinset.h" #include "math_support.h" +#include "math_tabularinset.h" #include "math_xyarrowinset.h" //#include "insets/insetref.h" @@ -531,6 +529,7 @@ bool Parser::parse(MathAtom & at) string Parser::parse_verbatim_option() { + skipSpaces(); string res; if (nextToken().character() == '[') { Token t = getToken(); @@ -548,6 +547,7 @@ string Parser::parse_verbatim_option() string Parser::parse_verbatim_item() { + skipSpaces(); string res; if (nextToken().cat() == catBegin) { Token t = getToken(); @@ -580,15 +580,15 @@ void Parser::parse(MathArray & array, unsigned flags, mode_type mode) } -void Parser::parse2(MathAtom & at, unsigned flags, mode_type mode, - bool numbered) +void Parser::parse2(MathAtom & at, const unsigned flags, const mode_type mode, + const bool numbered) { parse1(*(at.nucleus()->asGridInset()), flags, mode, numbered); } void Parser::parse1(MathGridInset & grid, unsigned flags, - mode_type mode, bool numbered) + const mode_type mode, const bool numbered) { int limits = 0; MathGridInset::row_type cellrow = 0; @@ -611,8 +611,7 @@ void Parser::parse1(MathGridInset & grid, unsigned flags, #endif if (flags & FLAG_ITEM) { - if (t.cat() == catSpace) - continue; + skipSpaces(); flags &= ~FLAG_ITEM; if (t.cat() == catBegin) { @@ -749,9 +748,10 @@ void Parser::parse1(MathGridInset & grid, unsigned flags, MathScriptInset * p = cell->back().nucleus()->asScriptInset(); // special handling of {}-bases // is this always correct? - if (p->nuc().size() == 1 && p->nuc().back()->asNestInset() && - p->nuc().back()->extraBraces()) - p->nuc() = p->nuc().back()->asNestInset()->cell(0); + // It appears that this is wrong (Dekel) + //if (p->nuc().size() == 1 && p->nuc().back()->asNestInset() && + // p->nuc().back()->extraBraces()) + // p->nuc() = p->nuc().back()->asNestInset()->cell(0); parse(p->cell(up), FLAG_ITEM, mode); if (limits) { p->limits(limits); @@ -965,16 +965,19 @@ void Parser::parse1(MathGridInset & grid, unsigned flags, parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode); } - else if (t.cs() == "ref") { - cell->push_back(MathAtom(new RefInset)); + else if (t.cs() == "ref" || t.cs() == "prettyref" || + t.cs() == "pageref" || t.cs() == "vpageref" || t.cs() == "vref") { + cell->push_back(MathAtom(new RefInset(t.cs()))); parse(cell->back().nucleus()->cell(1), FLAG_OPTION, mode); parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode); } else if (t.cs() == "left") { + skipSpaces(); string l = getToken().asString(); MathArray ar; parse(ar, FLAG_RIGHT, mode); + skipSpaces(); string r = getToken().asString(); cell->push_back(MathAtom(new MathDelimInset(l, r, ar))); } @@ -997,6 +1000,13 @@ void Parser::parse1(MathGridInset & grid, unsigned flags, parse2(cell->back(), FLAG_END, mode, false); } + else if (name == "tabular") { + string const valign = parse_verbatim_option() + 'c'; + string const halign = parse_verbatim_item(); + cell->push_back(MathAtom(new MathTabularInset(name, valign[0], halign))); + parse2(cell->back(), FLAG_END, MathInset::TEXT_MODE, false); + } + else if (name == "split" || name == "cases" || name == "gathered" || name == "aligned") { cell->push_back(createMathInset(name)); @@ -1068,10 +1078,10 @@ void Parser::parse1(MathGridInset & grid, unsigned flags, } else { - // lyxerr << "unknow math inset begin '" << name << "'\n"; + //lyxerr << "unknow math inset begin '" << name << "'\n"; // create generic environment inset cell->push_back(MathAtom(new MathEnvInset(name))); - parse(cell->back().nucleus()->cell(0), FLAG_END, mode); + parse2(cell->back(), FLAG_END, mode, false); } } @@ -1124,8 +1134,9 @@ void Parser::parse1(MathGridInset & grid, unsigned flags, else if (t.cs() == "framebox") { cell->push_back(createMathInset(t.cs())); - parse(cell->back().nucleus()->cell(0), FLAG_OPTION, mode); - parse(cell->back().nucleus()->cell(1), FLAG_ITEM, mode); + parse(cell->back().nucleus()->cell(0), FLAG_OPTION, MathInset::TEXT_MODE); + parse(cell->back().nucleus()->cell(1), FLAG_OPTION, MathInset::TEXT_MODE); + parse(cell->back().nucleus()->cell(2), FLAG_ITEM, MathInset::TEXT_MODE); } #if 0