]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathMatrix.cpp
Paint \dot & \ddot more like a dot
[lyx.git] / src / mathed / InsetMathMatrix.cpp
index feb56cb3df61249d8c9c4c37488e872c1daa231f..7f6700f62447a102480e2fd8a4cb87999b9c67b3 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 "MathData.h"
 #include "MathStream.h"
 
+#include "support/convert.h"
 
-namespace lyx {
-
-using std::auto_ptr;
+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)
 {}
 
 
-auto_ptr<InsetBase> InsetMathMatrix::doClone() const
+Inset * InsetMathMatrix::clone() const
 {
-       return auto_ptr<InsetBase>(new InsetMathMatrix(*this));
+       return new InsetMathMatrix(*this);
 }
 
 
@@ -93,7 +94,63 @@ void InsetMathMatrix::mathematica(MathematicaStream & os) const
 
 void InsetMathMatrix::mathmlize(MathStream & os) const
 {
-       InsetMathGrid::mathmlize(os);
+       os << "<mo form='prefix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
+          << convertDelimToXMLEscape(left_)
+          << "</mo>"
+          << MTag("mtable");
+       for (row_type row = 0; row < nrows(); ++row) {
+               os << MTag("mtr");
+               for (col_type col = 0; col < ncols(); ++col) {
+                       idx_type const i = index(row, col);
+                       if (cellinfo_[i].multi_ != CELL_PART_OF_MULTICOLUMN) {
+                               col_type const cellcols = ncellcols(i);
+                               ostringstream attr;
+                               if (cellcols > 1)
+                                       attr << "columnspan='" << cellcols << '\'';
+                               os << MTag("mtd", attr.str()) << cell(i) << ETag("mtd");
+                       }
+               }
+               os << ETag("mtr");
+       }
+       os << ETag("mtable");
+       os << "<mo form='postfix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
+          << convertDelimToXMLEscape(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) {
+                       idx_type const i = index(row, col);
+                       if (cellinfo_[i].multi_ != CELL_PART_OF_MULTICOLUMN) {
+                               col_type const cellcols = ncellcols(i);
+                               ostringstream attr;
+                               if (cellcols > 1)
+                                       attr << "colspan='" << cellcols
+                                            << '\'';
+                               os << MTag("td", attr.str()) << cell(i)
+                                  << ETag("td") << '\n';
+                       }
+               }
+               if (row == 0)
+                       os << MTag("td", rattrib) << ETag("td") << '\n';
+               os << ETag("tr") << '\n';
+       }
+       os << ETag("table") << '\n';
 }