2 * \file InsetMathMatrix.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "InsetMathMatrix.h"
15 #include "MathStream.h"
17 #include "support/convert.h"
23 InsetMathMatrix::InsetMathMatrix(InsetMathGrid const & p,
24 docstring const & left, docstring const & right)
25 : InsetMathGrid(p), left_(left), right_(right)
29 Inset * InsetMathMatrix::clone() const
31 return new InsetMathMatrix(*this);
35 void InsetMathMatrix::write(WriteStream & os) const
37 InsetMathGrid::write(os);
41 void InsetMathMatrix::normalize(NormalStream & os) const
43 InsetMathGrid::normalize(os);
47 void InsetMathMatrix::maple(MapleStream & os) const
49 os << "matrix(" << int(nrows()) << ',' << int(ncols()) << ",[";
50 for (idx_type idx = 0; idx < nargs(); ++idx) {
59 void InsetMathMatrix::maxima(MaximaStream & os) const
62 for (row_type row = 0; row < nrows(); ++row) {
66 for (col_type col = 0; col < ncols(); ++col) {
69 os << cell(index(row, col));
77 void InsetMathMatrix::mathematica(MathematicaStream & os) const
80 for (row_type row = 0; row < nrows(); ++row) {
84 for (col_type col = 0; col < ncols(); ++col) {
87 os << cell(index(row, col));
95 void InsetMathMatrix::mathmlize(MathStream & os) const
97 os << "<mo form='prefix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
98 << convertDelimToXMLEscape(left_)
101 for (row_type row = 0; row < nrows(); ++row) {
103 for (col_type col = 0; col < ncols(); ++col) {
104 idx_type const i = index(row, col);
105 if (cellinfo(i).multi != CELL_PART_OF_MULTICOLUMN) {
106 col_type const cellcols = ncellcols(i);
109 attr << "columnspan='" << cellcols << '\'';
110 os << MTag("mtd", attr.str()) << cell(i) << ETag("mtd");
115 os << ETag("mtable");
116 os << "<mo form='postfix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
117 << convertDelimToXMLEscape(right_)
122 void InsetMathMatrix::htmlize(HtmlStream & os) const
124 os << MTag("table", "class='matrix'") << '\n';
126 // we do not print the delimiters but instead try to hack them
127 string const rows = convert<string>(nrows());
128 string const lattrib =
129 "class='ldelim' rowspan='" + rows + "'";
130 string const rattrib =
131 "class='rdelim' rowspan='" + rows + "'";
133 for (row_type row = 0; row < nrows(); ++row) {
134 os << MTag("tr") << '\n';
136 os << MTag("td", lattrib) << ETag("td") << '\n';
137 for (col_type col = 0; col < ncols(); ++col) {
138 idx_type const i = index(row, col);
139 if (cellinfo(i).multi != CELL_PART_OF_MULTICOLUMN) {
140 col_type const cellcols = ncellcols(i);
143 attr << "colspan='" << cellcols
145 os << MTag("td", attr.str()) << cell(i)
146 << ETag("td") << '\n';
150 os << MTag("td", rattrib) << ETag("td") << '\n';
151 os << ETag("tr") << '\n';
153 os << ETag("table") << '\n';
157 void InsetMathMatrix::octave(OctaveStream & os) const
160 for (row_type row = 0; row < nrows(); ++row) {
164 for (col_type col = 0; col < ncols(); ++col)
165 os << cell(index(row, col)) << ' ';