X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMath.cpp;h=0d21b871d689f86f151ad2d744445c92cba3b5f5;hb=d9082639080b9de993742bd352f92e5183058cf5;hp=0a9772c6769c3e7c1a243b6170aba64c49a13644;hpb=c060a85d811674888c31db9ee0407d8b5cc37b6e;p=lyx.git diff --git a/src/mathed/InsetMath.cpp b/src/mathed/InsetMath.cpp index 0a9772c676..0d21b871d6 100644 --- a/src/mathed/InsetMath.cpp +++ b/src/mathed/InsetMath.cpp @@ -13,20 +13,71 @@ #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"); +} + + MathData & InsetMath::cell(idx_type) { static MathData dummyCell(&buffer()); @@ -43,11 +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; - WriteStream wi(os, false, true, WriteStream::wsDefault); + otexrowstream ots(os); + TeXMathStream wi(ots, false, true, TeXMathStream::wsDefault); write(wi); lyxerr << to_utf8(os.str()); lyxerr << "\n---------------------------------------------" << endl; @@ -66,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(); @@ -78,10 +159,11 @@ void InsetMath::write(WriteStream & os) const } -int InsetMath::plaintext(odocstream &, OutputParams const &) const +int InsetMath::plaintext(odocstringstream &, + OutputParams const &, size_t) const { // all math plain text output shall take place in InsetMathHull - LASSERT(false, /**/); + LATTEST(false); return 0; } @@ -120,12 +202,23 @@ void InsetMath::mathematica(MathematicaStream & os) const } -void InsetMath::mathmlize(MathStream & os) const +void InsetMath::mathmlize(MathMLStream & ms) const +{ + ms << ""; + ms << MTag("mi"); + NormalStream ns(ms.os()); + normalize(ns); + ms << ETag("mi"); +} + + +void InsetMath::htmlize(HtmlStream & os) const { - os << MTag("mi"); + os << ""; + os << MTag("span", "style='color: red;'"); NormalStream ns(os.os()); normalize(ns); - os << ETag("mi"); + os << ETag("span"); } @@ -138,7 +231,8 @@ HullType InsetMath::getType() const ostream & operator<<(ostream & os, MathAtom const & at) { odocstringstream oss; - WriteStream wi(oss, false, false, WriteStream::wsDefault); + otexrowstream ots(oss); + TeXMathStream wi(ots, false, false, TeXMathStream::wsDefault); at->write(wi); return os << to_utf8(oss.str()); } @@ -146,7 +240,8 @@ ostream & operator<<(ostream & os, MathAtom const & at) odocstream & operator<<(odocstream & os, MathAtom const & at) { - WriteStream wi(os, false, false, WriteStream::wsDefault); + otexrowstream ots(os); + TeXMathStream wi(ots, false, false, TeXMathStream::wsDefault); at->write(wi); return os; }