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
15 #include "support/strfwd.h"
17 // FIXME: Move to individual insets
18 #include "MetricsInfo.h"
34 WriteStream(odocstream & os, bool fragile, bool latex, bool dryrun);
36 explicit WriteStream(odocstream & os);
40 int line() const { return line_; }
42 bool fragile() const { return fragile_; }
44 bool latex() const { return latex_; }
46 bool dryrun() const { return dryrun_; }
48 odocstream & os() { return os_; }
50 bool & firstitem() { return firstitem_; }
52 void addlines(unsigned int);
53 /// writes space if next thing is isalpha()
54 void pendingSpace(bool how);
55 /// writes space if next thing is isalpha()
56 bool pendingSpace() const { return pendingspace_; }
60 /// do we have to write \\protect sometimes
62 /// are we at the beginning of an MathData?
64 /// are we writing to .tex?
66 /// is it for preview?
68 /// do we have a space pending?
75 WriteStream & operator<<(WriteStream &, MathAtom const &);
77 WriteStream & operator<<(WriteStream &, MathData const &);
79 WriteStream & operator<<(WriteStream &, docstring const &);
81 WriteStream & operator<<(WriteStream &, char const * const);
83 WriteStream & operator<<(WriteStream &, char);
85 WriteStream & operator<<(WriteStream &, int);
87 WriteStream & operator<<(WriteStream &, unsigned int);
98 MTag(char const * const tag) : tag_(tag) {}
100 char const * const tag_;
106 ETag(char const * const tag) : tag_(tag) {}
108 char const * const tag_;
114 explicit MathStream(odocstream & os);
118 odocstream & os() { return os_; }
120 int line() const { return line_; }
122 int & tab() { return tab_; }
124 friend MathStream & operator<<(MathStream &, char const *);
137 MathStream & operator<<(MathStream &, MathAtom const &);
139 MathStream & operator<<(MathStream &, MathData const &);
141 MathStream & operator<<(MathStream &, docstring const &);
143 MathStream & operator<<(MathStream &, char const *);
145 MathStream & operator<<(MathStream &, char);
147 MathStream & operator<<(MathStream &, MTag const &);
149 MathStream & operator<<(MathStream &, ETag const &);
160 explicit NormalStream(odocstream & os) : os_(os) {}
162 odocstream & os() { return os_; }
169 NormalStream & operator<<(NormalStream &, MathAtom const &);
171 NormalStream & operator<<(NormalStream &, MathData const &);
173 NormalStream & operator<<(NormalStream &, docstring const &);
175 NormalStream & operator<<(NormalStream &, char const *);
177 NormalStream & operator<<(NormalStream &, char);
179 NormalStream & operator<<(NormalStream &, int);
190 explicit MapleStream(odocstream & os) : os_(os) {}
192 odocstream & os() { return os_; }
200 MapleStream & operator<<(MapleStream &, MathAtom const &);
202 MapleStream & operator<<(MapleStream &, MathData const &);
204 MapleStream & operator<<(MapleStream &, docstring const &);
206 MapleStream & operator<<(MapleStream &, char_type);
208 MapleStream & operator<<(MapleStream &, char const *);
210 MapleStream & operator<<(MapleStream &, char);
212 MapleStream & operator<<(MapleStream &, int);
223 explicit MaximaStream(odocstream & os) : os_(os) {}
225 odocstream & os() { return os_; }
233 MaximaStream & operator<<(MaximaStream &, MathAtom const &);
235 MaximaStream & operator<<(MaximaStream &, MathData const &);
237 MaximaStream & operator<<(MaximaStream &, docstring const &);
239 MaximaStream & operator<<(MaximaStream &, char_type);
241 MaximaStream & operator<<(MaximaStream &, char const *);
243 MaximaStream & operator<<(MaximaStream &, char);
245 MaximaStream & operator<<(MaximaStream &, int);
253 class MathematicaStream {
256 explicit MathematicaStream(odocstream & os) : os_(os) {}
258 odocstream & os() { return os_; }
266 MathematicaStream & operator<<(MathematicaStream &, MathAtom const &);
268 MathematicaStream & operator<<(MathematicaStream &, MathData const &);
270 MathematicaStream & operator<<(MathematicaStream &, docstring const &);
272 MathematicaStream & operator<<(MathematicaStream &, char const *);
274 MathematicaStream & operator<<(MathematicaStream &, char);
276 MathematicaStream & operator<<(MathematicaStream &, int);
287 explicit OctaveStream(odocstream & os) : os_(os) {}
289 odocstream & os() { return os_; }
296 OctaveStream & operator<<(OctaveStream &, MathAtom const &);
298 OctaveStream & operator<<(OctaveStream &, MathData const &);
300 OctaveStream & operator<<(OctaveStream &, docstring const &);
302 OctaveStream & operator<<(OctaveStream &, char_type);
304 OctaveStream & operator<<(OctaveStream &, char const *);
306 OctaveStream & operator<<(OctaveStream &, char);
308 OctaveStream & operator<<(OctaveStream &, int);