X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMath.cpp;h=0d21b871d689f86f151ad2d744445c92cba3b5f5;hb=d9082639080b9de993742bd352f92e5183058cf5;hp=f71febc06de2a97dc386db267739e903c07dd30b;hpb=460a764b7f601871dbb8ed4ad0f8260e7cdad509;p=lyx.git diff --git a/src/mathed/InsetMath.cpp b/src/mathed/InsetMath.cpp index f71febc06d..0d21b871d6 100644 --- a/src/mathed/InsetMath.cpp +++ b/src/mathed/InsetMath.cpp @@ -13,20 +13,65 @@ #include "InsetMath.h" #include "MathData.h" +#include "MathRow.h" #include "MathStream.h" +#include "MetricsInfo.h" + #include "support/debug.h" #include "support/docstream.h" #include "support/gettext.h" +#include "support/lassert.h" #include "support/lstrings.h" #include "support/textutils.h" -#include "support/lassert.h" using namespace std; namespace lyx { +HullType hullType(docstring const & name) +{ + if (name == "none") return hullNone; + if (name == "simple") return hullSimple; + if (name == "equation") return hullEquation; + if (name == "eqnarray") return hullEqnArray; + if (name == "align") return hullAlign; + if (name == "alignat") return hullAlignAt; + if (name == "xalignat") return hullXAlignAt; + if (name == "xxalignat") return hullXXAlignAt; + if (name == "multline") return hullMultline; + if (name == "gather") return hullGather; + if (name == "flalign") return hullFlAlign; + if (name == "regexp") return hullRegexp; + lyxerr << "unknown hull type '" << to_utf8(name) << "'" << endl; + return hullUnknown; +} + + +docstring hullName(HullType type) +{ + switch (type) { + case hullNone: return from_ascii("none"); + case hullSimple: return from_ascii("simple"); + case hullEquation: return from_ascii("equation"); + case hullEqnArray: return from_ascii("eqnarray"); + case hullAlign: return from_ascii("align"); + case hullAlignAt: return from_ascii("alignat"); + case hullXAlignAt: return from_ascii("xalignat"); + case hullXXAlignAt: return from_ascii("xxalignat"); + case hullMultline: return from_ascii("multline"); + case hullGather: return from_ascii("gather"); + case hullFlAlign: return from_ascii("flalign"); + case hullRegexp: return from_ascii("regexp"); + case hullUnknown: + lyxerr << "unknown hull type" << endl; + break; + } + return from_ascii("none"); +} + + docstring InsetMath::name() const { return from_utf8("Unknown"); @@ -49,13 +94,41 @@ MathData const & InsetMath::cell(idx_type) const } +marker_type InsetMath::marker(BufferView const *) const +{ + return nargs() > 0 ? marker_type::MARKER : marker_type::NO_MARKER; +} + + +bool InsetMath::addToMathRow(MathRow & mrow, MetricsInfo & mi) const +{ + MathRow::Element e(mi, MathRow::INSET, mathClass()); + e.inset = this; + e.marker = mi.base.macro_nesting ? marker_type::NO_MARKER : marker(mi.base.bv); + mrow.push_back(e); + return true; +} + + +/// write LaTeX and LyX code +void InsetMath::writeLimits(TeXMathStream & os) const +{ + if (limits() == LIMITS) { + os << "\\limits"; + os.pendingSpace(true); + } else if (limits() == NO_LIMITS) { + os << "\\nolimits"; + os.pendingSpace(true); + } +} + + void InsetMath::dump() const { lyxerr << "---------------------------------------------" << endl; odocstringstream os; - TexRow texrow(false); - otexrowstream ots(os,texrow); - WriteStream wi(ots, false, true, WriteStream::wsDefault); + otexrowstream ots(os); + TeXMathStream wi(ots, false, true, TeXMathStream::wsDefault); write(wi); lyxerr << to_utf8(os.str()); lyxerr << "\n---------------------------------------------" << endl; @@ -74,7 +147,7 @@ void InsetMath::drawT(TextPainter &, int, int) const } -void InsetMath::write(WriteStream & os) const +void InsetMath::write(TeXMathStream & os) const { MathEnsurer ensurer(os); docstring const s = name(); @@ -86,7 +159,7 @@ void InsetMath::write(WriteStream & os) const } -int InsetMath::plaintext(odocstringstream &, +int InsetMath::plaintext(odocstringstream &, OutputParams const &, size_t) const { // all math plain text output shall take place in InsetMathHull @@ -129,13 +202,13 @@ void InsetMath::mathematica(MathematicaStream & os) const } -void InsetMath::mathmlize(MathStream & os) const +void InsetMath::mathmlize(MathMLStream & ms) const { - os << ""; - os << MTag("mi"); - NormalStream ns(os.os()); + ms << ""; + ms << MTag("mi"); + NormalStream ns(ms.os()); normalize(ns); - os << ETag("mi"); + ms << ETag("mi"); } @@ -158,9 +231,8 @@ HullType InsetMath::getType() const ostream & operator<<(ostream & os, MathAtom const & at) { odocstringstream oss; - TexRow texrow(false); - otexrowstream ots(oss,texrow); - WriteStream wi(ots, false, false, WriteStream::wsDefault); + otexrowstream ots(oss); + TeXMathStream wi(ots, false, false, TeXMathStream::wsDefault); at->write(wi); return os << to_utf8(oss.str()); } @@ -168,9 +240,8 @@ ostream & operator<<(ostream & os, MathAtom const & at) odocstream & operator<<(odocstream & os, MathAtom const & at) { - TexRow texrow(false); - otexrowstream ots(os,texrow); - WriteStream wi(ots, false, false, WriteStream::wsDefault); + otexrowstream ots(os); + TeXMathStream wi(ots, false, false, TeXMathStream::wsDefault); at->write(wi); return os; }