4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
12 #ifndef MATH_MATHMLSTREAM_H
13 #define MATH_MATHMLSTREAM_H
16 // Please keep all four streams in one file until the interface has
20 #include "metricsinfo.h"
21 #include "support/docstream.h"
23 #include "support/docstream.h"
39 WriteStream(odocstream & os, bool fragile, bool latex);
41 explicit WriteStream(odocstream & os);
45 int line() const { return line_; }
47 bool fragile() const { return fragile_; }
49 bool latex() const { return latex_; }
51 odocstream & os() { return os_; }
53 bool & firstitem() { return firstitem_; }
55 void addlines(unsigned int);
56 /// writes space if next thing is isalpha()
57 void pendingSpace(bool how);
58 /// writes space if next thing is isalpha()
59 bool pendingSpace() const { return pendingspace_; }
63 /// do we have to write \\protect sometimes
65 /// are we at the beginning of an MathArray?
67 /// are we writing to .tex?
69 /// do we have a space pending?
76 WriteStream & operator<<(WriteStream &, MathAtom const &);
78 WriteStream & operator<<(WriteStream &, MathArray const &);
80 WriteStream & operator<<(WriteStream &, char const *);
82 WriteStream & operator<<(WriteStream &, char);
84 WriteStream & operator<<(WriteStream &, int);
86 WriteStream & operator<<(WriteStream &, unsigned int);
97 MTag(char const * const tag) : tag_(tag) {}
99 char const * const tag_;
105 ETag(char const * const tag) : tag_(tag) {}
107 char const * const tag_;
113 explicit MathMLStream(odocstream & os);
117 odocstream & os() { return os_; }
119 int line() const { return line_; }
121 int & tab() { return tab_; }
123 friend MathMLStream & operator<<(MathMLStream &, char const *);
125 friend MathMLStream & operator<<(MathMLStream &, docstring const &);
138 MathMLStream & operator<<(MathMLStream &, MathAtom const &);
140 MathMLStream & operator<<(MathMLStream &, MathArray const &);
142 MathMLStream & operator<<(MathMLStream &, char const *);
144 MathMLStream & operator<<(MathMLStream &, char);
146 MathMLStream & operator<<(MathMLStream &, MTag const &);
148 MathMLStream & operator<<(MathMLStream &, ETag const &);
159 explicit NormalStream(odocstream & os) : os_(os) {}
161 odocstream & os() { return os_; }
168 NormalStream & operator<<(NormalStream &, MathAtom const &);
170 NormalStream & operator<<(NormalStream &, MathArray const &);
172 NormalStream & operator<<(NormalStream &, char const *);
174 NormalStream & operator<<(NormalStream &, char);
176 NormalStream & operator<<(NormalStream &, int);
187 explicit MapleStream(odocstream & os) : os_(os) {}
189 odocstream & os() { return os_; }
197 MapleStream & operator<<(MapleStream &, MathAtom const &);
199 MapleStream & operator<<(MapleStream &, MathArray const &);
201 MapleStream & operator<<(MapleStream &, char const *);
203 MapleStream & operator<<(MapleStream &, char);
205 MapleStream & operator<<(MapleStream &, int);
216 explicit MaximaStream(odocstream & os) : os_(os) {}
218 odocstream & os() { return os_; }
226 MaximaStream & operator<<(MaximaStream &, MathAtom const &);
228 MaximaStream & operator<<(MaximaStream &, MathArray const &);
230 MaximaStream & operator<<(MaximaStream &, char const *);
232 MaximaStream & operator<<(MaximaStream &, char);
234 MaximaStream & operator<<(MaximaStream &, int);
242 class MathematicaStream {
245 explicit MathematicaStream(odocstream & os) : os_(os) {}
247 odocstream & os() { return os_; }
255 MathematicaStream & operator<<(MathematicaStream &, MathAtom const &);
257 MathematicaStream & operator<<(MathematicaStream &, MathArray const &);
259 MathematicaStream & operator<<(MathematicaStream &, char const *);
261 MathematicaStream & operator<<(MathematicaStream &, char);
263 MathematicaStream & operator<<(MathematicaStream &, int);
274 explicit OctaveStream(odocstream & os) : os_(os) {}
276 odocstream & os() { return os_; }
283 OctaveStream & operator<<(OctaveStream &, MathAtom const &);
285 OctaveStream & operator<<(OctaveStream &, MathArray const &);
287 OctaveStream & operator<<(OctaveStream &, char const *);
289 OctaveStream & operator<<(OctaveStream &, char);
291 OctaveStream & operator<<(OctaveStream &, int);