]> git.lyx.org Git - lyx.git/blob - src/mathed/InsetMathMatrix.cpp
Account for old versions of Pygments
[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            << convertDelimToXMLEscape(left_) 
99            << "</mo>"
100            << MTag("mtable");
101         for (row_type row = 0; row < nrows(); ++row) {
102                 os << MTag("mtr");
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);
107                                 ostringstream attr;
108                                 if (cellcols > 1)
109                                         attr << "columnspan='" << cellcols << '\'';
110                                 os << MTag("mtd", attr.str()) << cell(i) << ETag("mtd");
111                         }
112                 }
113                 os << ETag("mtr");
114         }
115         os << ETag("mtable");
116         os << "<mo form='postfix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
117            << convertDelimToXMLEscape(right_) 
118            << "</mo>";
119 }
120
121
122 void InsetMathMatrix::htmlize(HtmlStream & os) const
123 {
124         os << MTag("table", "class='matrix'") << '\n';
125
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 + "'";
132         
133         for (row_type row = 0; row < nrows(); ++row) {
134                 os << MTag("tr") << '\n';
135                 if (row == 0)
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);
141                                 ostringstream attr;
142                                 if (cellcols > 1)
143                                         attr << "colspan='" << cellcols
144                                              << '\'';
145                                 os << MTag("td", attr.str()) << cell(i)
146                                    << ETag("td") << '\n';
147                         }
148                 }
149                 if (row == 0)
150                         os << MTag("td", rattrib) << ETag("td") << '\n';
151                 os << ETag("tr") << '\n';
152         }
153         os << ETag("table") << '\n';
154 }
155
156
157 void InsetMathMatrix::octave(OctaveStream & os) const
158 {
159         os << '[';
160         for (row_type row = 0; row < nrows(); ++row) {
161                 if (row)
162                         os << ';';
163                 os << '[';
164                 for (col_type col = 0; col < ncols(); ++col)
165                         os << cell(index(row, col)) << ' ';
166                 os << ']';
167         }
168         os << ']';
169 }
170
171
172 } // namespace lyx