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_; }
57 /// tell whether we are in text mode or not when producing latex code
58 void textMode(bool textmode);
59 /// tell whether we are in text mode or not when producing latex code
60 bool textMode() const { return textmode_; }
64 /// do we have to write \\protect sometimes
66 /// are we at the beginning of an MathData?
68 /// are we writing to .tex?
70 /// is it for preview?
72 /// do we have a space pending?
74 /// are we in text mode when producing latex code?
81 WriteStream & operator<<(WriteStream &, MathAtom const &);
83 WriteStream & operator<<(WriteStream &, MathData const &);
85 WriteStream & operator<<(WriteStream &, docstring const &);
87 WriteStream & operator<<(WriteStream &, char const * const);
89 WriteStream & operator<<(WriteStream &, char);
91 WriteStream & operator<<(WriteStream &, int);
93 WriteStream & operator<<(WriteStream &, unsigned int);
104 MTag(char const * const tag) : tag_(tag) {}
106 char const * const tag_;
112 ETag(char const * const tag) : tag_(tag) {}
114 char const * const tag_;
120 explicit MathStream(odocstream & os);
124 odocstream & os() { return os_; }
126 int line() const { return line_; }
128 int & tab() { return tab_; }
130 friend MathStream & operator<<(MathStream &, char const *);
143 MathStream & operator<<(MathStream &, MathAtom const &);
145 MathStream & operator<<(MathStream &, MathData const &);
147 MathStream & operator<<(MathStream &, docstring const &);
149 MathStream & operator<<(MathStream &, char const *);
151 MathStream & operator<<(MathStream &, char);
153 MathStream & operator<<(MathStream &, MTag const &);
155 MathStream & operator<<(MathStream &, ETag const &);
166 explicit NormalStream(odocstream & os) : os_(os) {}
168 odocstream & os() { return os_; }
175 NormalStream & operator<<(NormalStream &, MathAtom const &);
177 NormalStream & operator<<(NormalStream &, MathData const &);
179 NormalStream & operator<<(NormalStream &, docstring const &);
181 NormalStream & operator<<(NormalStream &, char const *);
183 NormalStream & operator<<(NormalStream &, char);
185 NormalStream & operator<<(NormalStream &, int);
196 explicit MapleStream(odocstream & os) : os_(os) {}
198 odocstream & os() { return os_; }
206 MapleStream & operator<<(MapleStream &, MathAtom const &);
208 MapleStream & operator<<(MapleStream &, MathData const &);
210 MapleStream & operator<<(MapleStream &, docstring const &);
212 MapleStream & operator<<(MapleStream &, char_type);
214 MapleStream & operator<<(MapleStream &, char const *);
216 MapleStream & operator<<(MapleStream &, char);
218 MapleStream & operator<<(MapleStream &, int);
229 explicit MaximaStream(odocstream & os) : os_(os) {}
231 odocstream & os() { return os_; }
239 MaximaStream & operator<<(MaximaStream &, MathAtom const &);
241 MaximaStream & operator<<(MaximaStream &, MathData const &);
243 MaximaStream & operator<<(MaximaStream &, docstring const &);
245 MaximaStream & operator<<(MaximaStream &, char_type);
247 MaximaStream & operator<<(MaximaStream &, char const *);
249 MaximaStream & operator<<(MaximaStream &, char);
251 MaximaStream & operator<<(MaximaStream &, int);
259 class MathematicaStream {
262 explicit MathematicaStream(odocstream & os) : os_(os) {}
264 odocstream & os() { return os_; }
272 MathematicaStream & operator<<(MathematicaStream &, MathAtom const &);
274 MathematicaStream & operator<<(MathematicaStream &, MathData const &);
276 MathematicaStream & operator<<(MathematicaStream &, docstring const &);
278 MathematicaStream & operator<<(MathematicaStream &, char const *);
280 MathematicaStream & operator<<(MathematicaStream &, char);
282 MathematicaStream & operator<<(MathematicaStream &, int);
293 explicit OctaveStream(odocstream & os) : os_(os) {}
295 odocstream & os() { return os_; }
302 OctaveStream & operator<<(OctaveStream &, MathAtom const &);
304 OctaveStream & operator<<(OctaveStream &, MathData const &);
306 OctaveStream & operator<<(OctaveStream &, docstring const &);
308 OctaveStream & operator<<(OctaveStream &, char_type);
310 OctaveStream & operator<<(OctaveStream &, char const *);
312 OctaveStream & operator<<(OctaveStream &, char);
314 OctaveStream & operator<<(OctaveStream &, int);