X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMath.cpp;h=0d21b871d689f86f151ad2d744445c92cba3b5f5;hb=d9082639080b9de993742bd352f92e5183058cf5;hp=aec53d0518a961da755350b0d127a270b79e9ba2;hpb=361bd53bc36da61c6abfc2e0b7b7c7294800bbd9;p=lyx.git diff --git a/src/mathed/InsetMath.cpp b/src/mathed/InsetMath.cpp index aec53d0518..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,9 +94,32 @@ MathData const & InsetMath::cell(idx_type) const } -MathClass InsetMath::mathClass() 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 { - return MC_ORD; + 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); + } } @@ -60,7 +128,7 @@ void InsetMath::dump() const lyxerr << "---------------------------------------------" << endl; odocstringstream os; otexrowstream ots(os); - WriteStream wi(ots, false, true, WriteStream::wsDefault); + TeXMathStream wi(ots, false, true, TeXMathStream::wsDefault); write(wi); lyxerr << to_utf8(os.str()); lyxerr << "\n---------------------------------------------" << endl; @@ -79,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(); @@ -91,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 @@ -134,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"); } @@ -164,7 +232,7 @@ ostream & operator<<(ostream & os, MathAtom const & at) { odocstringstream oss; otexrowstream ots(oss); - WriteStream wi(ots, false, false, WriteStream::wsDefault); + TeXMathStream wi(ots, false, false, TeXMathStream::wsDefault); at->write(wi); return os << to_utf8(oss.str()); } @@ -173,7 +241,7 @@ ostream & operator<<(ostream & os, MathAtom const & at) odocstream & operator<<(odocstream & os, MathAtom const & at) { otexrowstream ots(os); - WriteStream wi(ots, false, false, WriteStream::wsDefault); + TeXMathStream wi(ots, false, false, TeXMathStream::wsDefault); at->write(wi); return os; }