X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathString.cpp;h=53aba589899135ca2131cb21841f310af8c56422;hb=3d4076b598deb18660e50ec9c327efc3b15f15d0;hp=5dcd595d858a0d97e018df7389a4246bd9eb922e;hpb=d786fa0ab86fd63659a3e17948b558cff4306f29;p=lyx.git diff --git a/src/mathed/InsetMathString.cpp b/src/mathed/InsetMathString.cpp index 5dcd595d85..53aba58989 100644 --- a/src/mathed/InsetMathString.cpp +++ b/src/mathed/InsetMathString.cpp @@ -11,15 +11,20 @@ #include #include "InsetMathString.h" +#include "MathFactory.h" #include "MathStream.h" #include "MathSupport.h" #include "Encoding.h" +#include "support/debug.h" #include "support/gettext.h" +#include "support/lassert.h" #include "support/lstrings.h" #include "support/textutils.h" +using lyx::support::escape; + namespace lyx { @@ -86,25 +91,17 @@ void InsetMathString::octave(OctaveStream & os) const } -void InsetMathString::mathmlize(MathStream & os) const +void InsetMathString::mathmlize(MathStream &) const { -/* - if (code_ == LM_TC_VAR) - os << " " << str_ << " "; - else if (code_ == LM_TC_CONST) - os << " " << str_ << " "; - else if (code_ == LM_TC_RM || code_ == LM_TC_TEXTRM) - os << " " << str_ << " "; - else -*/ - os << str_; + // useless, no doubt, but we should not be here + LATTEST(false); } void InsetMathString::write(WriteStream & os) const { - if (!os.latex()) { - os << str_; + if (!os.latex() || os.lockedMode()) { + os << (os.asciiOnly() ? escape(str_) : str_); return; } @@ -122,7 +119,9 @@ void InsetMathString::write(WriteStream & os) const char_type const c = *cit; docstring command(1, c); try { - if (c < 0x80 || Encodings::latexMathChar(c, mathmode, os.encoding(), command)) { + bool termination = false; + if (isASCII(c) || + Encodings::latexMathChar(c, mathmode, os.encoding(), command, termination)) { if (os.textMode()) { if (in_forced_mode) { // we were inside \lyxmathsym @@ -130,12 +129,12 @@ void InsetMathString::write(WriteStream & os) const os.textMode(false); in_forced_mode = false; } - if (c >= 0x80 && os.textMode()) { + if (!isASCII(c) && os.textMode()) { os << "\\ensuremath{"; os.textMode(false); in_forced_mode = true; } - } else if (c < 0x80 && in_forced_mode) { + } else if (isASCII(c) && in_forced_mode) { // we were inside \ensuremath os << '}'; os.textMode(true); @@ -155,18 +154,27 @@ void InsetMathString::write(WriteStream & os) const os << command; // We may need a space if the command contains a macro // and the last char is ASCII. - if (lyx::support::contains(command, '\\') - && isAlphaASCII(command[command.size() - 1])) + if (termination) os.pendingSpace(true); - } catch (EncodingException & e) { - if (os.dryrun()) { - // FIXME: this is OK for View->Source - // but math preview will likely fail. + } catch (EncodingException const & e) { + switch (os.output()) { + case WriteStream::wsDryrun: { os << "<" << _("LyX Warning: ") << _("uncodable character") << " '"; os << docstring(1, e.failed_char); os << "'>"; - } else { + 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); }