]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathMatrix.cpp
Remove unneccessary uses of dynamic_cast from the code.
[lyx.git] / src / mathed / InsetMathMatrix.cpp
index 0460a9443ffd2dc14e992f596ef5f1b10002dfe5..4d309d13e88dba668401e28dd6b23e4562f17149 100644 (file)
 #include "MathData.h"
 #include "MathStream.h"
 
+#include "support/convert.h"
+
+using namespace std;
 
 namespace lyx {
 
-InsetMathMatrix::InsetMathMatrix(InsetMathGrid const & p)
-       : InsetMathGrid(p)
+InsetMathMatrix::InsetMathMatrix(InsetMathGrid const & p, 
+                       docstring const & left, docstring const & right)
+       : InsetMathGrid(p), left_(left), right_(right)
 {}
 
 
@@ -88,15 +92,10 @@ void InsetMathMatrix::mathematica(MathematicaStream & os) const
 }
 
 
-// FIXME XHTML
-// We need more information here, so we can output the correct
-// delimiters, which will not always be "[". To do this, we need
-// to make some changes to InsetMathMatrix, adding a member to 
-// record the type of delimiter, and then make the extractMatrices 
-// routine in MathExtern give us this information.
 void InsetMathMatrix::mathmlize(MathStream & os) const
 {
-       os << "<mo form='prefix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>[</mo>";
+       os << "<mo form='prefix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
+          << left_ << "</mo>";
        os << MTag("mtable");
        for (row_type row = 0; row < nrows(); ++row) {
                os << MTag("mtr");
@@ -105,7 +104,33 @@ void InsetMathMatrix::mathmlize(MathStream & os) const
                os << ETag("mtr");
        }
        os << ETag("mtable");
-       os << "<mo form='postfix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>]</mo>";
+       os << "<mo form='postfix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
+          << right_ << "</mo>";
+}
+
+
+void InsetMathMatrix::htmlize(HtmlStream & os) const
+{
+       os << MTag("table", "class='matrix'") << '\n';
+
+       // we do not print the delimiters but instead try to hack them
+       string const rows = convert<string>(nrows());
+       string const lattrib = 
+                       "class='ldelim' rowspan='" + rows + "'";
+       string const rattrib = 
+                       "class='rdelim' rowspan='" + rows + "'";
+       
+       for (row_type row = 0; row < nrows(); ++row) {
+               os << MTag("tr") << '\n';
+               if (row == 0)
+                       os << MTag("td", lattrib) << ETag("td") << '\n';
+               for (col_type col = 0; col < ncols(); ++col)
+                       os << MTag("td") << cell(index(row, col)) << ETag("td") << '\n';
+               if (row == 0)
+                       os << MTag("td", rattrib) << ETag("td") << '\n';
+               os << ETag("tr") << '\n';
+       }
+       os << ETag("table") << '\n';
 }