mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-10 20:04:46 +00:00
parser tweaks
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2950 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
49295aa9be
commit
9665dd5ff0
@ -129,7 +129,6 @@ inline CatCode catcode(unsigned char c)
|
||||
|
||||
|
||||
enum {
|
||||
FLAG_BRACE = 1 << 0, // an opening brace needed
|
||||
FLAG_BRACE_LAST = 1 << 1, // last closing brace ends the parsing process
|
||||
FLAG_RIGHT = 1 << 2, // next \\right ends the parsing process
|
||||
FLAG_END = 1 << 3, // next \\end ends the parsing process
|
||||
@ -538,7 +537,7 @@ string Parser::parse_macro()
|
||||
}
|
||||
|
||||
if (getToken().cat() != catBegin) {
|
||||
lyxerr << "'{' expected\n";
|
||||
lyxerr << "'{' in \\newcommand expected (1)\n";
|
||||
return name;
|
||||
}
|
||||
|
||||
@ -551,10 +550,15 @@ string Parser::parse_macro()
|
||||
|
||||
string arg = getArg('[', ']');
|
||||
int narg = arg.empty() ? 0 : atoi(arg.c_str());
|
||||
MathArray ar;
|
||||
parse_into(ar, FLAG_BRACE | FLAG_BRACE_LAST);
|
||||
MathMacroTable::create(name, narg, ar);
|
||||
|
||||
if (getToken().cat() != catBegin) {
|
||||
lyxerr << "'{' in \\newcommand expected (2)\n";
|
||||
return name;
|
||||
}
|
||||
|
||||
MathArray ar;
|
||||
parse_into(ar, FLAG_BRACE_LAST);
|
||||
MathMacroTable::create(name, narg, ar);
|
||||
return name;
|
||||
}
|
||||
|
||||
@ -694,17 +698,6 @@ void Parser::parse_into(MathArray & array, unsigned flags, MathTextCodes code)
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & FLAG_BRACE) {
|
||||
if (t.cat() != catBegin) {
|
||||
error("Expected {. Maybe you forgot to enclose an argument in {}");
|
||||
panic = true;
|
||||
break;
|
||||
} else {
|
||||
flags &= ~FLAG_BRACE;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & FLAG_BLOCK) {
|
||||
if (t.cat() == catAlign || t.cs() == "\\")
|
||||
return;
|
||||
@ -733,7 +726,7 @@ void Parser::parse_into(MathArray & array, unsigned flags, MathTextCodes code)
|
||||
|
||||
else if (t.cat() == catBegin) {
|
||||
array.push_back(MathAtom(new MathBraceInset));
|
||||
parse_into(array.back()->cell(0), FLAG_BRACE_LAST, LM_TC_MIN);
|
||||
parse_into(array.back()->cell(0), FLAG_BRACE_LAST);
|
||||
}
|
||||
|
||||
else if (t.cat() == catEnd) {
|
||||
@ -883,41 +876,15 @@ void Parser::parse_into(MathArray & array, unsigned flags, MathTextCodes code)
|
||||
}
|
||||
|
||||
else if (t.cs() == "label") {
|
||||
//MathArray ar;
|
||||
//parse_into(ar, FLAG_ITEM);
|
||||
//ostringstream os;
|
||||
//ar.write(os, true);
|
||||
//curr_label_ = os.str();
|
||||
// was:
|
||||
curr_label_ = getArg('{', '}');
|
||||
}
|
||||
|
||||
else if (t.cs() == "choose" || t.cs() == "over" || t.cs() == "atop") {
|
||||
MathAtom p = createMathInset(t.cs());
|
||||
// search backward for position of last '{' if any
|
||||
int pos;
|
||||
for (pos = array.size() - 1; pos >= 0; --pos)
|
||||
if (array.at(pos)->getChar() == '{')
|
||||
break;
|
||||
if (pos >= 0) {
|
||||
// found it -> use the part after '{' as "numerator"
|
||||
p->cell(0) = MathArray(array, pos + 1, array.size());
|
||||
parse_into(p->cell(1), FLAG_BRACE_LAST);
|
||||
// delete denominator and the '{'
|
||||
array.erase(pos, array.size());
|
||||
} else if (flags & FLAG_RIGHT) {
|
||||
// we are inside a \left ... \right block
|
||||
//lyxerr << "found '" << t.cs() << "' enclosed by \\left .. \\right\n";
|
||||
p->cell(0).swap(array);
|
||||
parse_into(p->cell(1), FLAG_RIGHT);
|
||||
// handle the right delimiter properly
|
||||
putback();
|
||||
} else {
|
||||
// not found -> use everything as "numerator"
|
||||
p->cell(0).swap(array);
|
||||
parse_into(p->cell(1), FLAG_BLOCK);
|
||||
}
|
||||
array.push_back(MathAtom(p));
|
||||
array.swap(p->cell(0));
|
||||
parse_into(p->cell(1), flags, code);
|
||||
array.push_back(p);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user