]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathExInt.cpp
g-brief loads babel internally. So don't load it ourselves.
[lyx.git] / src / mathed / InsetMathExInt.cpp
index 543a3255a27ef220145600ff20d42626e79cfbd2..03f516dd8370e5ee4a69c14f34461afbce755e09 100644 (file)
@@ -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.
  */
 #include <config.h>
 
 #include "InsetMathExInt.h"
+
+#include "LaTeXFeatures.h"
 #include "MathData.h"
 #include "MathStream.h"
-#include "MathStream.h"
 #include "InsetMathSymbol.h"
-#include "debug.h"
 
-#include <boost/scoped_ptr.hpp>
+#include "support/debug.h"
+#include "support/docstring.h"
 
 
 namespace lyx {
 
-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
@@ -64,20 +62,20 @@ void InsetMathExInt::normalize(NormalStream & os) const
 
 void InsetMathExInt::metrics(MetricsInfo &, Dimension &) const
 {
-       lyxerr << "should not happen" << endl;
+       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';
@@ -90,12 +88,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' << ',';
@@ -107,14 +105,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' << ',';
@@ -125,23 +123,72 @@ void InsetMathExInt::mathematica(MathematicaStream & os) const
 }
 
 
-void InsetMathExInt::mathmlize(MathStream & os) const
+void InsetMathExInt::mathmlize(MathMLStream & ms) const
 {
-       boost::scoped_ptr<InsetMathSymbol> sym(new InsetMathSymbol(symbol_));
-       //if (hasScripts())
-       //      mathmlize(sym, os);
-       //else
-               sym->mathmlize(os);
-       os << cell(0) << "<mo> &InvisibleTimes; </mo>"
-          << MTag("mrow") << "<mo> &DifferentialD; </mo>"
-          << cell(1) << ETag("mrow");
+       // 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)
+               ms << MTag("msubsup");
+       else if (lower)
+               ms << MTag("msub");
+       else if (upper)
+               ms << MTag("msup");
+       ms << MTag("mrow");
+       sym.mathmlize(ms);
+       ms << ETag("mrow");
+       if (lower)
+               ms << cell(2);
+       if (upper)
+               ms << cell(3);
+       if (lower && upper)
+               ms << ETag("msubsup");
+       else if (lower)
+               ms << ETag("msub");
+       else if (upper)
+               ms << ETag("msup");
+       ms << cell(0)
+          << MTagInline("mo") << "&#8290;" << ETagInline("mo") // &InvisibleTimes;
+          << MTag("mrow")
+          << MTagInline("mo") << "&#8518;" << ETagInline("mo") // &DifferentialD;
+          << 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) << "<b>d</b>" << cell(1) << ETag("span");
 }
 
 
+void InsetMathExInt::write(TeXMathStream &) const
+{
+       LYXERR0("should not happen");
+}
+
 } // namespace lyx