X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathString.cpp;h=8aac4f38a8d4f723fa569391887d0fde7decb190;hb=2de30c62f8d671a8c8d4d52a6a7310e2c5ca84de;hp=53aba589899135ca2131cb21841f310af8c56422;hpb=1b1f8dd235ba8e168348cd23c824063f2595a0c5;p=lyx.git diff --git a/src/mathed/InsetMathString.cpp b/src/mathed/InsetMathString.cpp index 53aba58989..8aac4f38a8 100644 --- a/src/mathed/InsetMathString.cpp +++ b/src/mathed/InsetMathString.cpp @@ -11,11 +11,14 @@ #include #include "InsetMathString.h" + #include "MathFactory.h" +#include "MathExtern.h" #include "MathStream.h" #include "MathSupport.h" #include "Encoding.h" +#include "MetricsInfo.h" #include "support/debug.h" #include "support/gettext.h" @@ -100,95 +103,7 @@ void InsetMathString::mathmlize(MathStream &) const void InsetMathString::write(WriteStream & os) const { - if (!os.latex() || os.lockedMode()) { - os << (os.asciiOnly() ? escape(str_) : str_); - return; - } - - docstring::const_iterator cit = str_.begin(); - docstring::const_iterator end = str_.end(); - - // We may already be inside an \ensuremath command. - bool in_forced_mode = os.pendingBrace(); - - // We will take care of matching braces. - os.pendingBrace(false); - - while (cit != end) { - bool mathmode = in_forced_mode ? os.textMode() : !os.textMode(); - char_type const c = *cit; - docstring command(1, c); - try { - 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 - os << '}'; - os.textMode(false); - in_forced_mode = false; - } - if (!isASCII(c) && os.textMode()) { - os << "\\ensuremath{"; - os.textMode(false); - in_forced_mode = true; - } - } else if (isASCII(c) && in_forced_mode) { - // we were inside \ensuremath - os << '}'; - os.textMode(true); - in_forced_mode = false; - } - } else if (!os.textMode()) { - if (in_forced_mode) { - // we were inside \ensuremath - os << '}'; - in_forced_mode = false; - } else { - os << "\\lyxmathsym{"; - in_forced_mode = true; - } - os.textMode(true); - } - os << command; - // We may need a space if the command contains a macro - // and the last char is ASCII. - if (termination) - os.pendingSpace(true); - } 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); - } - } - ++cit; - } - - if (in_forced_mode && os.textMode()) { - // We have to care for closing \lyxmathsym - os << '}'; - os.textMode(false); - } else { - os.pendingBrace(in_forced_mode); - } + writeString(str_, os); }