#include "math_factory.h"
#include "math_kerninset.h"
#include "math_macro.h"
+#include "math_macroarg.h"
#include "math_macrotemplate.h"
#include "math_parboxinset.h"
#include "math_parinset.h"
#include "ref_inset.h"
#include "lyxlex.h"
-#include "support/std_sstream.h"
#include "debug.h"
+#include <sstream>
+#ifndef CXX_GLOBAL_CSTD
+using std::atoi;
+#endif
+using std::endl;
+using std::fill;
+
+using std::string;
+using std::ios;
using std::istream;
using std::istringstream;
using std::ostream;
-using std::ios;
-using std::endl;
-using std::fill;
using std::vector;
-using std::atoi;
//#define FILEDEBUG
};
-void catInit()
-{
- fill(theCatcode, theCatcode + 256, catOther);
- fill(theCatcode + 'a', theCatcode + 'z' + 1, catLetter);
- fill(theCatcode + 'A', theCatcode + 'Z' + 1, catLetter);
-
- theCatcode[int('\\')] = catEscape;
- theCatcode[int('{')] = catBegin;
- theCatcode[int('}')] = catEnd;
- theCatcode[int('$')] = catMath;
- theCatcode[int('&')] = catAlign;
- theCatcode[int('\n')] = catNewline;
- theCatcode[int('#')] = catParameter;
- theCatcode[int('^')] = catSuper;
- theCatcode[int('_')] = catSub;
- theCatcode[int(0x7f)] = catIgnore;
- theCatcode[int(' ')] = catSpace;
- theCatcode[int('\t')] = catSpace;
- theCatcode[int('\r')] = catNewline;
- theCatcode[int('~')] = catActive;
- theCatcode[int('%')] = catComment;
-}
-
-
-
//
// Helper class for parsing
//
class Parser {
-
public:
///
typedef MathInset::mode_type mode_type;
void Parser::tokenize(string const & buffer)
{
- static bool init_done = false;
-
- if (!init_done) {
- catInit();
- init_done = true;
- }
-
istringstream is(buffer.c_str(), ios::in | ios::binary);
char c;
if (flags & FLAG_BRACE_LAST)
return;
error("found '}' unexpectedly");
- //lyx::Assert(0);
+ //BOOST_ASSERT(false);
//add(cell, '}', LM_TC_TEX);
}
//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);
+ parse(p->cell(p->idxOfScript(up)), FLAG_ITEM, mode);
if (limits) {
p->limits(limits);
limits = 0;
return;
}
+ else if (t.cs() == "color") {
+ MathAtom at = createMathInset(t.cs());
+ parse(at.nucleus()->cell(0), FLAG_ITEM, MathInset::TEXT_MODE);
+ parse(at.nucleus()->cell(1), flags, mode);
+ cell->push_back(at);
+ return;
+ }
+
else if (t.cs() == "substack") {
cell->push_back(createMathInset(t.cs()));
parse2(cell->back(), FLAG_ITEM, mode, false);
// Disabled
else if (1 && t.cs() == "ar") {
- MathXYArrowInset * p = new MathXYArrowInset;
+ auto_ptr<MathXYArrowInset> p(new MathXYArrowInset);
// try to read target
parse(p->cell(0), FLAG_OTPTION, mode);
// try to read label
//lyxerr << "read label: " << p->cell(1) << endl;
}
- cell->push_back(MathAtom(p));
+ cell->push_back(MathAtom(p.release()));
//lyxerr << "read cell: " << cell << endl;
}
#endif
istringstream is(str.c_str());
Parser(is).parse1(grid, 0, MathInset::MATH_MODE, false);
}
+
+
+void initParser()
+{
+ fill(theCatcode, theCatcode + 256, catOther);
+ fill(theCatcode + 'a', theCatcode + 'z' + 1, catLetter);
+ fill(theCatcode + 'A', theCatcode + 'Z' + 1, catLetter);
+
+ theCatcode[int('\\')] = catEscape;
+ theCatcode[int('{')] = catBegin;
+ theCatcode[int('}')] = catEnd;
+ theCatcode[int('$')] = catMath;
+ theCatcode[int('&')] = catAlign;
+ theCatcode[int('\n')] = catNewline;
+ theCatcode[int('#')] = catParameter;
+ theCatcode[int('^')] = catSuper;
+ theCatcode[int('_')] = catSub;
+ theCatcode[int(0x7f)] = catIgnore;
+ theCatcode[int(' ')] = catSpace;
+ theCatcode[int('\t')] = catSpace;
+ theCatcode[int('\r')] = catNewline;
+ theCatcode[int('~')] = catActive;
+ theCatcode[int('%')] = catComment;
+}