X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmathed%2FMathExtern.cpp;h=e911f0babf24bc71897915e824440da90a4de811;hb=999831043e6da50b3095a2dfec7000d4209e586c;hp=da43bd4e3508043ee7bc6a70801efc90598d470b;hpb=bc7704a78e32e67253847fdd3d163005fa615209;p=lyx.git diff --git a/src/mathed/MathExtern.cpp b/src/mathed/MathExtern.cpp index da43bd4e35..e911f0babf 100644 --- a/src/mathed/MathExtern.cpp +++ b/src/mathed/MathExtern.cpp @@ -115,7 +115,7 @@ bool extractScript(MathData & ar, // try to extract an "argument" to some function. // returns position behind the argument MathData::iterator extractArgument(MathData & ar, - MathData::iterator pos, MathData::iterator last, + MathData::iterator pos, MathData::iterator last, ExternalMath kind, bool function = false) { // nothing to get here @@ -211,7 +211,7 @@ void extractMatrices(MathData & ar) continue; if (!arr.front()->asGridInset()) continue; - ar[i] = MathAtom(new InsetMathMatrix(*(arr.front()->asGridInset()), + ar[i] = MathAtom(new InsetMathMatrix(*(arr.front()->asGridInset()), inset->left_, inset->right_)); } @@ -602,7 +602,7 @@ void extractFunctions(MathData & ar, ExternalMath kind) auto p = make_unique(buf, name); // jt points to the "argument". Get hold of this. - MathData::iterator st = + MathData::iterator st = extractArgument(p->cell(0), jt, ar.end(), kind, true); // replace the function name by a real function inset @@ -896,8 +896,8 @@ void extractDiff(MathData & ar) int mult = 1; if (extractNumber(script->up(), mult)) { //lyxerr << "mult: " << mult << endl; - if (mult > 1000) { - lyxerr << "Cannot differentiate more than 1000 times !" << endl; + if (mult < 0 || mult > 1000) { + lyxerr << "Cannot differentiate less than 0 or more than 1000 times !" << endl; continue; } for (int i = 0; i < mult; ++i) @@ -1391,9 +1391,9 @@ namespace { return res; } -} +} // namespace -} // anon namespace +} // namespace void write(MathData const & dat, WriteStream & wi) { @@ -1421,11 +1421,46 @@ void write(MathData const & dat, WriteStream & wi) void writeString(docstring const & s, WriteStream & os) { - if (!os.latex() || os.lockedMode()) { + if (!os.latex()) { os << (os.asciiOnly() ? escape(s) : s); return; } + if (os.lockedMode()) { + bool space; + docstring cmd; + for (char_type c : s) { + try { + Encodings::latexMathChar(c, true, os.encoding(), cmd, space); + os << cmd; + os.pendingSpace(space); + } catch (EncodingException const & e) { + switch (os.output()) { + case WriteStream::wsDryrun: { + os << "<" << _("LyX Warning: ") + << _("uncodable character") << " '"; + os << docstring(1, e.failed_char); + os << "'>"; + break; + } + case WriteStream::wsPreview: { + // indicate the encoding error by a boxed '?' + os << "{\\fboxsep=1pt\\fbox{?}}"; + LYXERR0("Uncodable character" << " '" + << docstring(1, e.failed_char) + << "'"); + break; + } + case WriteStream::wsDefault: + default: + // throw again + throw(e); + } + } + } + return; + } + docstring::const_iterator cit = s.begin(); docstring::const_iterator end = s.end();