#include "InsetMathColor.h"
#include "InsetMathComment.h"
#include "InsetMathDelim.h"
+#include "InsetMathEnsureMath.h"
#include "InsetMathEnv.h"
#include "InsetMathFrac.h"
#include "InsetMathKern.h"
} else {
// simple $...$ stuff
putback();
- cell->push_back(MathAtom(new InsetMathHull(hullSimple)));
- parse2(cell->back(), FLAG_SIMPLE, InsetMath::MATH_MODE, false);
+ if (mode == InsetMath::UNDECIDED_MODE) {
+ cell->push_back(MathAtom(new InsetMathHull(hullSimple)));
+ parse2(cell->back(), FLAG_SIMPLE, InsetMath::MATH_MODE, false);
+ } else {
+ // Don't create nested math hulls (bug #5392)
+ cell->push_back(MathAtom(new InsetMathEnsureMath));
+ parse(cell->back().nucleus()->cell(0), FLAG_SIMPLE, InsetMath::MATH_MODE);
+ }
}
}
else if (t.cat() == catOther) {
char_type c = t.character();
- if (c < 0x80 || mode_ & Parse::VERBATIM
+ if (isAsciiOrMathAlpha(c)
+ || mode_ & Parse::VERBATIM
|| !(mode_ & Parse::USETEXT)
- || mode == InsetMath::TEXT_MODE
- || Encodings::isMathAlpha(c)) {
+ || mode == InsetMath::TEXT_MODE) {
cell->push_back(MathAtom(new InsetMathChar(c)));
} else {
MathAtom at = createInsetMath("text");
at.nucleus()->cell(0).push_back(MathAtom(new InsetMathChar(c)));
while (nextToken().cat() == catOther
- && nextToken().character() >= 0x80
- && !Encodings::isMathAlpha(nextToken().character())) {
+ && !isAsciiOrMathAlpha(nextToken().character())) {
c = getToken().character();
at.nucleus()->cell(0).push_back(MathAtom(new InsetMathChar(c)));
}
}
else if (t.cs() == "cfrac") {
- // Here allowed formats are \cfrac[pos]{num}{denom}
- MathData ar;
- parse(ar, FLAG_OPTION, mode);
- if (ar.size()) {
- cell->push_back(MathAtom(new InsetMathFrac(InsetMathFrac::CFRAC, 3)));
- cell->back().nucleus()->cell(2) = ar;
- } else {
- cell->push_back(MathAtom(new InsetMathFrac(InsetMathFrac::CFRAC)));
- }
+ // allowed formats are \cfrac[pos]{num}{denom}
+ docstring const arg = getArg('[', ']');
+ //lyxerr << "got so far: '" << arg << "'" << endl;
+ if (arg == "l")
+ cell->push_back(MathAtom(new InsetMathFrac(InsetMathFrac::CFRACLEFT)));
+ else if (arg == "r")
+ cell->push_back(MathAtom(new InsetMathFrac(InsetMathFrac::CFRACRIGHT)));
+ else if (arg.empty() || arg == "c")
+ cell->push_back(MathAtom(new InsetMathFrac(InsetMathFrac::CFRAC)));
+ else {
+ error("found invalid optional argument");
+ break;
+ }
parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
parse(cell->back().nucleus()->cell(1), FLAG_ITEM, mode);
}