X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathExInt.cpp;h=64f49cd996778bbd80637c8ec9b7533622c12a36;hb=2de30c62f8d671a8c8d4d52a6a7310e2c5ca84de;hp=23fca486bcdec8690a237be9cc95a6c8e595c3a1;hpb=31059d1741933d95403e7f07ed033cae482f778b;p=lyx.git diff --git a/src/mathed/InsetMathExInt.cpp b/src/mathed/InsetMathExInt.cpp index 23fca486bc..64f49cd996 100644 --- a/src/mathed/InsetMathExInt.cpp +++ b/src/mathed/InsetMathExInt.cpp @@ -3,7 +3,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author André Pönitz + * \author André Pönitz * * Full author contact details are available in file CREDITS. */ @@ -11,25 +11,21 @@ #include #include "InsetMathExInt.h" + +#include "LaTeXFeatures.h" #include "MathData.h" #include "MathStream.h" #include "MathStream.h" #include "InsetMathSymbol.h" -#include "debug.h" -#include +#include "support/debug.h" +#include "support/docstring.h" namespace lyx { - -using std::string; -using std::auto_ptr; -using std::endl; - - -InsetMathExInt::InsetMathExInt(docstring const & name) - : InsetMathNest(4), symbol_(name) +InsetMathExInt::InsetMathExInt(Buffer * buf, docstring const & name) + : InsetMathNest(buf, 4), symbol_(name) {} // 0 - core @@ -38,9 +34,9 @@ InsetMathExInt::InsetMathExInt(docstring const & name) // 3 - upper -auto_ptr InsetMathExInt::doClone() const +Inset * InsetMathExInt::clone() const { - return auto_ptr(new InsetMathExInt(*this)); + return new InsetMathExInt(*this); } @@ -65,23 +61,22 @@ void InsetMathExInt::normalize(NormalStream & os) const } -bool InsetMathExInt::metrics(MetricsInfo &, Dimension &) const +void InsetMathExInt::metrics(MetricsInfo &, Dimension &) const { - lyxerr << "should not happen" << endl; - return true; + LYXERR0("should not happen"); } void InsetMathExInt::draw(PainterInfo &, int, int) const { - lyxerr << "should not happen" << endl; + LYXERR0("should not happen"); } void InsetMathExInt::maple(MapleStream & os) const { os << symbol_ << '('; - if (cell(0).size()) + if (!cell(0).empty()) os << cell(0); else os << '1'; @@ -94,12 +89,12 @@ void InsetMathExInt::maple(MapleStream & os) const void InsetMathExInt::maxima(MaximaStream & os) const { - if ( symbol_ == "int" ) + if (symbol_ == "int") os << "integrate("; else os << symbol_ << '('; - if (cell(0).size()) + if (!cell(0).empty()) os << cell(0) << ','; else os << '1' << ','; @@ -111,14 +106,14 @@ void InsetMathExInt::maxima(MaximaStream & os) const void InsetMathExInt::mathematica(MathematicaStream & os) const { - if ( symbol_ == "int" ) + if (symbol_ == "int") os << "Integrate["; else if (symbol_ == "sum") os << "Sum["; else os << symbol_ << '['; - if (cell(0).size()) + if (!cell(0).empty()) os << cell(0) << ','; else os << '1' << ','; @@ -131,21 +126,67 @@ void InsetMathExInt::mathematica(MathematicaStream & os) const void InsetMathExInt::mathmlize(MathStream & os) const { - boost::scoped_ptr sym(new InsetMathSymbol(symbol_)); - //if (hasScripts()) - // mathmlize(sym, os); - //else - sym->mathmlize(os); + // At the moment, we are not extracting sums and the like for MathML. + // If we should decide to do so later, then we'll need to re-merge + // r32566 and r32568. + // So right now this only handles integrals. + InsetMathSymbol sym(symbol_); + bool const lower = !cell(2).empty(); + bool const upper = !cell(3).empty(); + if (lower && upper) + os << MTag("msubsup"); + else if (lower) + os << MTag("msub"); + else if (upper) + os << MTag("msup"); + os << MTag("mrow"); + sym.mathmlize(os); + os << ETag("mrow"); + if (lower) + os << MTag("mrow") << cell(2) << ETag("mrow"); + if (upper) + os << MTag("mrow") << cell(3) << ETag("mrow"); + if (lower && upper) + os << ETag("msubsup"); + else if (lower) + os << ETag("msub"); + else if (upper) + os << ETag("msup"); os << cell(0) << "" << MTag("mrow") << "" << cell(1) << ETag("mrow"); } -void InsetMathExInt::write(WriteStream &) const +void InsetMathExInt::htmlize(HtmlStream & os) const { - lyxerr << "should not happen" << endl; + // At the moment, we are not extracting sums and the like for HTML. + // So right now this only handles integrals. + InsetMathSymbol sym(symbol_); + bool const lower = !cell(2).empty(); + bool const upper = !cell(3).empty(); + + os << MTag("span", "class='integral'") + << MTag("span", "class='intsym'"); + sym.htmlize(os, false); + os << ETag("span"); + + if (lower && upper) { + os << MTag("span", "class='limits'") + << MTag("span") << cell(2) << ETag("span") + << MTag("span") << cell(3) << ETag("span") + << ETag("span"); + } else if (lower) + os << MTag("sub", "class='limit'") << cell(2) << ETag("sub"); + else if (upper) + os << MTag("sup", "class='limit'") << cell(3) << ETag("sup"); + os << cell(0) << "d" << cell(1) << ETag("span"); } +void InsetMathExInt::write(WriteStream &) const +{ + LYXERR0("should not happen"); +} + } // namespace lyx