]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMath.cpp
Assure correct spacing of colored items in mathed
[lyx.git] / src / mathed / InsetMath.cpp
index a4e310fc6ec42e09068c48a1caeaf6f4b9797341..bddd82fe7a261df04a129cfff9f46f9fda9e2ea8 100644 (file)
 
 #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;
 
@@ -49,11 +52,41 @@ MathData const & InsetMath::cell(idx_type) const
 }
 
 
+InsetMath::marker_type InsetMath::marker(BufferView const *) const
+{
+       return nargs() > 0 ? MARKER : 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 ? NO_MARKER : marker(mi.base.bv);
+       mrow.push_back(e);
+       return true;
+}
+
+
+/// write LaTeX and LyX code
+void InsetMath::writeLimits(WriteStream & 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);
+       WriteStream wi(ots, false, true, WriteStream::wsDefault);
        write(wi);
        lyxerr << to_utf8(os.str());
        lyxerr << "\n---------------------------------------------" << endl;
@@ -84,11 +117,11 @@ void InsetMath::write(WriteStream & os) const
 }
 
 
-int InsetMath::plaintext(odocstringstream &, 
+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;
 }
 
@@ -127,13 +160,13 @@ void InsetMath::mathematica(MathematicaStream & os) const
 }
 
 
-void InsetMath::mathmlize(MathStream & os) const
+void InsetMath::mathmlize(MathStream & ms) const
 {
-       os << "<!-- " << from_utf8(insetName(lyxCode())) << " -->";
-       os << MTag("mi");
-       NormalStream ns(os.os());
+       ms << "<!-- " << from_utf8(insetName(lyxCode())) << " -->";
+       ms << MTag("mi");
+       NormalStream ns(ms.os());
        normalize(ns);
-       os << ETag("mi");
+       ms << ETag("mi");
 }
 
 
@@ -156,7 +189,8 @@ HullType InsetMath::getType() const
 ostream & operator<<(ostream & os, MathAtom const & at)
 {
        odocstringstream oss;
-       WriteStream wi(oss, false, false, WriteStream::wsDefault);
+       otexrowstream ots(oss);
+       WriteStream wi(ots, false, false, WriteStream::wsDefault);
        at->write(wi);
        return os << to_utf8(oss.str());
 }
@@ -164,7 +198,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);
+       WriteStream wi(ots, false, false, WriteStream::wsDefault);
        at->write(wi);
        return os;
 }