]> git.lyx.org Git - features.git/blobdiff - src/mathed/InsetMathScript.cpp
Introduce a return value for mathmlize(). We will need this to be able
[features.git] / src / mathed / InsetMathScript.cpp
index 8a6c25808022a14835ffb6bdb344a848077eb733..74420279cb8d5ee23abe7fe3b55ad29129e7f12b 100644 (file)
@@ -18,6 +18,7 @@
 #include "InsetMathScript.h"
 #include "InsetMathSymbol.h"
 #include "MathData.h"
+#include "MathExtern.h"
 #include "MathStream.h"
 #include "MathSupport.h"
 
@@ -32,18 +33,18 @@ using namespace std;
 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);
@@ -612,7 +613,11 @@ void InsetMathScript::mathematica(MathematicaStream & os) const
 }
 
 
-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();
@@ -624,17 +629,23 @@ void InsetMathScript::mathmlize(MathStream & os) const
        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;
 }
 
 
@@ -675,11 +686,13 @@ bool InsetMathScript::notifyCursorLeaves(Cursor const & old, Cursor & cur)
        if (nargs() > 2 && (!cell(1).empty() || !cell(2).empty())) {
                if (cell(2).empty()) {
                        // must be a subscript...
+                       old.recordUndoInset();
                        removeScript(false);
                        cur.updateFlags(cur.disp_.update() | Update::SinglePar);
                        return true;
                } else if (cell(1).empty()) {
                        // must be a superscript...
+                       old.recordUndoInset();
                        removeScript(true);
                        cur.updateFlags(cur.disp_.update() | Update::SinglePar);
                        return true;