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);
36 explicit WriteStream(odocstream & os);
40 int line() const { return line_; }
42 bool fragile() const { return fragile_; }
44 bool latex() const { return latex_; }
46 odocstream & os() { return os_; }
48 bool & firstitem() { return firstitem_; }
50 void addlines(unsigned int);
51 /// writes space if next thing is isalpha()
52 void pendingSpace(bool how);
53 /// writes space if next thing is isalpha()
54 bool pendingSpace() const { return pendingspace_; }
58 /// do we have to write \\protect sometimes
60 /// are we at the beginning of an MathData?
62 /// are we writing to .tex?
64 /// do we have a space pending?
71 WriteStream & operator<<(WriteStream &, MathAtom const &);
73 WriteStream & operator<<(WriteStream &, MathData const &);
75 WriteStream & operator<<(WriteStream &, docstring const &);
77 WriteStream & operator<<(WriteStream &, char const * const);
79 WriteStream & operator<<(WriteStream &, char);
81 WriteStream & operator<<(WriteStream &, int);
83 WriteStream & operator<<(WriteStream &, unsigned int);
94 MTag(char const * const tag) : tag_(tag) {}
96 char const * const tag_;
102 ETag(char const * const tag) : tag_(tag) {}
104 char const * const tag_;
110 explicit MathStream(odocstream & os);
114 odocstream & os() { return os_; }
116 int line() const { return line_; }
118 int & tab() { return tab_; }
120 friend MathStream & operator<<(MathStream &, char const *);
133 MathStream & operator<<(MathStream &, MathAtom const &);
135 MathStream & operator<<(MathStream &, MathData const &);
137 MathStream & operator<<(MathStream &, docstring const &);
139 MathStream & operator<<(MathStream &, char const *);
141 MathStream & operator<<(MathStream &, char);
143 MathStream & operator<<(MathStream &, MTag const &);
145 MathStream & operator<<(MathStream &, ETag const &);
156 explicit NormalStream(odocstream & os) : os_(os) {}
158 odocstream & os() { return os_; }
165 NormalStream & operator<<(NormalStream &, MathAtom const &);
167 NormalStream & operator<<(NormalStream &, MathData const &);
169 NormalStream & operator<<(NormalStream &, docstring const &);
171 NormalStream & operator<<(NormalStream &, char const *);
173 NormalStream & operator<<(NormalStream &, char);
175 NormalStream & operator<<(NormalStream &, int);
186 explicit MapleStream(odocstream & os) : os_(os) {}
188 odocstream & os() { return os_; }
196 MapleStream & operator<<(MapleStream &, MathAtom const &);
198 MapleStream & operator<<(MapleStream &, MathData const &);
200 MapleStream & operator<<(MapleStream &, docstring const &);
202 MapleStream & operator<<(MapleStream &, char_type);
204 MapleStream & operator<<(MapleStream &, char const *);
206 MapleStream & operator<<(MapleStream &, char);
208 MapleStream & operator<<(MapleStream &, int);
219 explicit MaximaStream(odocstream & os) : os_(os) {}
221 odocstream & os() { return os_; }
229 MaximaStream & operator<<(MaximaStream &, MathAtom const &);
231 MaximaStream & operator<<(MaximaStream &, MathData const &);
233 MaximaStream & operator<<(MaximaStream &, docstring const &);
235 MaximaStream & operator<<(MaximaStream &, char_type);
237 MaximaStream & operator<<(MaximaStream &, char const *);
239 MaximaStream & operator<<(MaximaStream &, char);
241 MaximaStream & operator<<(MaximaStream &, int);
249 class MathematicaStream {
252 explicit MathematicaStream(odocstream & os) : os_(os) {}
254 odocstream & os() { return os_; }
262 MathematicaStream & operator<<(MathematicaStream &, MathAtom const &);
264 MathematicaStream & operator<<(MathematicaStream &, MathData const &);
266 MathematicaStream & operator<<(MathematicaStream &, docstring const &);
268 MathematicaStream & operator<<(MathematicaStream &, char const *);
270 MathematicaStream & operator<<(MathematicaStream &, char);
272 MathematicaStream & operator<<(MathematicaStream &, int);
283 explicit OctaveStream(odocstream & os) : os_(os) {}
285 odocstream & os() { return os_; }
292 OctaveStream & operator<<(OctaveStream &, MathAtom const &);
294 OctaveStream & operator<<(OctaveStream &, MathData const &);
296 OctaveStream & operator<<(OctaveStream &, docstring const &);
298 OctaveStream & operator<<(OctaveStream &, char_type);
300 OctaveStream & operator<<(OctaveStream &, char const *);
302 OctaveStream & operator<<(OctaveStream &, char);
304 OctaveStream & operator<<(OctaveStream &, int);