#include "InsetMathArray.h"
#include "InsetMathBig.h"
#include "InsetMathBrace.h"
+#include "InsetMathCancelto.h"
#include "InsetMathChar.h"
#include "InsetMathColor.h"
#include "InsetMathComment.h"
///
char_type character() const { return char_; }
///
- docstring asString() const { return cs_.size() ? cs_ : docstring(1, char_); }
+ docstring asString() const { return !cs_.empty() ? cs_ : docstring(1, char_); }
///
- docstring asInput() const { return cs_.size() ? '\\' + cs_ : docstring(1, char_); }
+ docstring asInput() const { return !cs_.empty() ? '\\' + cs_ : docstring(1, char_); }
private:
///
ostream & operator<<(ostream & os, Token const & t)
{
- if (t.cs().size()) {
+ if (!t.cs().empty()) {
docstring const & cs = t.cs();
// FIXME: For some strange reason, the stream operator instanciate
// a new Token before outputting the contents of t.cs().
{
if (!good()) {
error("The input stream is not well...");
- putback();
return 0;
}
return tokens_[pos_++].character();
docstring Parser::getArg(char_type left, char_type right)
{
+ docstring result;
skipSpaces();
- docstring result;
+ if (!good())
+ return result;
+
char_type c = getChar();
if (c != left)
bool up = (t.cat() == catSuper);
// we need no new script inset if the last thing was a scriptinset,
// which has that script already not the same script already
- if (!cell->size())
+ if (cell->empty())
cell->push_back(MathAtom(new InsetMathScript(buf, up)));
else if (cell->back()->asScriptInset() &&
!cell->back()->asScriptInset()->has(up))
Token const & t = getToken();
if (t.cat() == catNewline)
break;
- s += t.asString();
+ s += t.asInput();
}
cell->push_back(MathAtom(new InsetMathComment(buf, s)));
skipSpaces();
//
else if (t.cs() == "lyxlock") {
- if (cell->size())
+ if (!cell->empty())
cell->back().nucleus()->lock(true);
}
else if (t.cs() == "sqrt") {
MathData ar;
parse(ar, FLAG_OPTION, mode);
- if (ar.size()) {
+ if (!ar.empty()) {
cell->push_back(MathAtom(new InsetMathRoot(buf)));
cell->back().nucleus()->cell(0) = ar;
parse(cell->back().nucleus()->cell(1), FLAG_ITEM, mode);
}
}
+ else if (t.cs() == "cancelto") {
+ MathData ar;
+ parse(ar, FLAG_ITEM, mode);
+ cell->push_back(MathAtom(new InsetMathCancelto(buf)));
+ cell->back().nucleus()->cell(1) = ar;
+ parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
+ }
+
else if (t.cs() == "unit") {
// Allowed formats \unit[val]{unit}
MathData ar;
parse(ar, FLAG_OPTION, mode);
- if (ar.size()) {
+ if (!ar.empty()) {
cell->push_back(MathAtom(new InsetMathFrac(buf, InsetMathFrac::UNIT)));
cell->back().nucleus()->cell(0) = ar;
parse(cell->back().nucleus()->cell(1), FLAG_ITEM, mode);
// Here allowed formats are \unitfrac[val]{num}{denom}
MathData ar;
parse(ar, FLAG_OPTION, mode);
- if (ar.size()) {
+ if (!ar.empty()) {
cell->push_back(MathAtom(new InsetMathFrac(buf, InsetMathFrac::UNITFRAC, 3)));
cell->back().nucleus()->cell(2) = ar;
} else {
error("'}' expected in \\" + t.cs());
return success_;
}
+ bool termination;
docstring rem;
do {
- cmd = Encodings::fromLaTeXCommand(cmd, rem);
+ cmd = Encodings::fromLaTeXCommand(cmd,
+ Encodings::MATH_CMD | Encodings::TEXT_CMD,
+ termination, rem);
for (size_t i = 0; i < cmd.size(); ++i)
cell->push_back(MathAtom(new InsetMathChar(cmd[i])));
- if (rem.size()) {
+ if (!rem.empty()) {
char_type c = rem[0];
cell->push_back(MathAtom(new InsetMathChar(c)));
cmd = rem.substr(1);
rem.clear();
} else
cmd.clear();
- } while (cmd.size());
+ } while (!cmd.empty());
}
- else if (t.cs().size()) {
+ else if (!t.cs().empty()) {
bool const no_mhchem =
(t.cs() == "ce" || t.cs() == "cf")
- && buf && buf->params().use_mhchem ==
+ && buf && buf->params().use_package("mhchem") ==
BufferParams::package_off;
bool const is_user_macro = no_mhchem ||
}
}
bool is_combining;
- char_type c =
- Encodings::fromLaTeXCommand(cmd, is_combining);
+ bool termination;
+ char_type c = Encodings::fromLaTeXCommand(cmd,
+ Encodings::MATH_CMD | Encodings::TEXT_CMD,
+ is_combining, termination);
if (is_combining) {
if (cat == catLetter)
cmd += '{';
++num_tokens;
if (cat == catLetter)
cmd += '}';
- c = Encodings::fromLaTeXCommand(cmd, is_combining);
+ c = Encodings::fromLaTeXCommand(cmd,
+ Encodings::MATH_CMD | Encodings::TEXT_CMD,
+ is_combining, termination);
}
if (c) {
+ if (termination) {
+ if (nextToken().cat() == catBegin) {
+ getToken();
+ if (nextToken().cat() == catEnd) {
+ getToken();
+ num_tokens += 2;
+ } else
+ putback();
+ } else {
+ while (nextToken().cat() == catSpace) {
+ getToken();
+ ++num_tokens;
+ }
+ }
+ }
is_unicode_symbol = true;
cell->push_back(MathAtom(new InsetMathChar(c)));
} else {
// this fails on \bigg[...\bigg]
//MathData opt;
//parse(opt, FLAG_OPTION, InsetMath::VERBATIM_MODE);
- //if (opt.size()) {
+ //if (!opt.empty()) {
// start = 1;
// at.nucleus()->cell(0) = opt;
//}