#include "InsetMathScript.h"
#include "InsetMathSymbol.h"
#include "MathData.h"
+#include "MathExtern.h"
#include "MathStream.h"
#include "MathSupport.h"
namespace lyx {
-InsetMathScript::InsetMathScript()
- : InsetMathNest(1), cell_1_is_up_(false), limits_(0)
+InsetMathScript::InsetMathScript(Buffer * buf)
+ : InsetMathNest(buf, 1), cell_1_is_up_(false), limits_(0)
{}
-InsetMathScript::InsetMathScript(bool up)
- : InsetMathNest(2), cell_1_is_up_(up), limits_(0)
+InsetMathScript::InsetMathScript(Buffer * buf, bool up)
+ : InsetMathNest(buf, 2), cell_1_is_up_(up), limits_(0)
{}
-InsetMathScript::InsetMathScript(MathAtom const & at, bool up)
- : InsetMathNest(2), cell_1_is_up_(up), limits_(0)
+InsetMathScript::InsetMathScript(Buffer * buf, MathAtom const & at, bool up)
+ : InsetMathNest(buf, 2), cell_1_is_up_(up), limits_(0)
{
LASSERT(nargs() >= 1, /**/);
cell(0).push_back(at);
}
-void InsetMathScript::mathmlize(MathStream & os) const
+// FIXME XHTML
+// It may be worth trying to output munder, mover, and munderover
+// in certain cases, e.g., for display formulas. But then we would
+// need to know if we're in a display formula.
+docstring InsetMathScript::mathmlize(MathStream & os) const
{
bool d = hasDown() && down().size();
bool u = hasUp() && up().size();
else if (d)
os << MTag("msub");
- if (nuc().size())
- os << nuc();
- else
- os << "<mrow/>";
+ docstring rv;
+ if (nuc().size()) {
+ os << MTag("mrow");
+ rv = lyx::mathmlize(nuc(), os);
+ os << ETag("mrow");
+ } else
+ os << "<mrow />";
if (u && d)
- os << down() << up() << ETag("msubsup");
+ os << MTag("mrow") << down() << ETag("mrow")
+ << MTag("mrow") << up() << ETag("mrow")
+ << ETag("msubsup");
else if (u)
- os << up() << ETag("msup");
+ os << MTag("mrow") << up() << ETag("mrow") << ETag("msup");
else if (d)
- os << down() << ETag("msub");
+ os << MTag("mrow") << down() << ETag("mrow") << ETag("msub");
+ return rv;
}