]> git.lyx.org Git - lyx.git/blob - src/mathed/InsetMathMatrix.cpp
RefChanger
[lyx.git] / src / mathed / InsetMathMatrix.cpp
1 /**
2  * \file InsetMathMatrix.cpp
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author André Pönitz
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "InsetMathMatrix.h"
14 #include "MathData.h"
15 #include "MathStream.h"
16
17 #include "support/convert.h"
18
19 using namespace std;
20
21 namespace lyx {
22
23 InsetMathMatrix::InsetMathMatrix(InsetMathGrid const & p, 
24                         docstring const & left, docstring const & right)
25         : InsetMathGrid(p), left_(left), right_(right)
26 {}
27
28
29 Inset * InsetMathMatrix::clone() const
30 {
31         return new InsetMathMatrix(*this);
32 }
33
34
35 void InsetMathMatrix::write(WriteStream & os) const
36 {
37         InsetMathGrid::write(os);
38 }
39
40
41 void InsetMathMatrix::normalize(NormalStream & os) const
42 {
43         InsetMathGrid::normalize(os);
44 }
45
46
47 void InsetMathMatrix::maple(MapleStream & os) const
48 {
49         os << "matrix(" << int(nrows()) << ',' << int(ncols()) << ",[";
50         for (idx_type idx = 0; idx < nargs(); ++idx) {
51                 if (idx)
52                         os << ',';
53                 os << cell(idx);
54         }
55         os << "])";
56 }
57
58
59 void InsetMathMatrix::maxima(MaximaStream & os) const
60 {
61         os << "matrix(";
62         for (row_type row = 0; row < nrows(); ++row) {
63                 if (row)
64                         os << ',';
65                 os << '[';
66                 for (col_type col = 0; col < ncols(); ++col) {
67                         if (col)
68                                 os << ',';
69                         os << cell(index(row, col));
70                 }
71                 os << ']';
72         }
73         os << ')';
74 }
75
76
77 void InsetMathMatrix::mathematica(MathematicaStream & os) const
78 {
79         os << '{';
80         for (row_type row = 0; row < nrows(); ++row) {
81                 if (row)
82                         os << ',';
83                 os << '{';
84                 for (col_type col = 0; col < ncols(); ++col) {
85                         if (col)
86                                 os << ',';
87                         os << cell(index(row, col));
88                 }
89                 os << '}';
90         }
91         os << '}';
92 }
93
94
95 void InsetMathMatrix::mathmlize(MathStream & os) const
96 {
97         os << "<mo form='prefix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
98            << left_ << "</mo>";
99         os << MTag("mtable");
100         for (row_type row = 0; row < nrows(); ++row) {
101                 os << MTag("mtr");
102                 for (col_type col = 0; col < ncols(); ++col) {
103                         idx_type const i = index(row, col);
104                         if (cellinfo_[i].multi_ != CELL_PART_OF_MULTICOLUMN) {
105                                 col_type const cellcols = ncellcols(i);
106                                 ostringstream attr;
107                                 if (cellcols > 1)
108                                         attr << "columnspan='" << cellcols << '\'';
109                                 os << MTag("mtd", attr.str()) << cell(i) << ETag("mtd");
110                         }
111                 }
112                 os << ETag("mtr");
113         }
114         os << ETag("mtable");
115         os << "<mo form='postfix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
116            << right_ << "</mo>";
117 }
118
119
120 void InsetMathMatrix::htmlize(HtmlStream & os) const
121 {
122         os << MTag("table", "class='matrix'") << '\n';
123
124         // we do not print the delimiters but instead try to hack them
125         string const rows = convert<string>(nrows());
126         string const lattrib = 
127                         "class='ldelim' rowspan='" + rows + "'";
128         string const rattrib = 
129                         "class='rdelim' rowspan='" + rows + "'";
130         
131         for (row_type row = 0; row < nrows(); ++row) {
132                 os << MTag("tr") << '\n';
133                 if (row == 0)
134                         os << MTag("td", lattrib) << ETag("td") << '\n';
135                 for (col_type col = 0; col < ncols(); ++col) {
136                         idx_type const i = index(row, col);
137                         if (cellinfo_[i].multi_ != CELL_PART_OF_MULTICOLUMN) {
138                                 col_type const cellcols = ncellcols(i);
139                                 ostringstream attr;
140                                 if (cellcols > 1)
141                                         attr << "colspan='" << cellcols
142                                              << '\'';
143                                 os << MTag("td", attr.str()) << cell(i)
144                                    << ETag("td") << '\n';
145                         }
146                 }
147                 if (row == 0)
148                         os << MTag("td", rattrib) << ETag("td") << '\n';
149                 os << ETag("tr") << '\n';
150         }
151         os << ETag("table") << '\n';
152 }
153
154
155 void InsetMathMatrix::octave(OctaveStream & os) const
156 {
157         os << '[';
158         for (row_type row = 0; row < nrows(); ++row) {
159                 if (row)
160                         os << ';';
161                 os << '[';
162                 for (col_type col = 0; col < ncols(); ++col)
163                         os << cell(index(row, col)) << ' ';
164                 os << ']';
165         }
166         os << ']';
167 }
168
169
170 } // namespace lyx