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 to write the closing brace of \ensuremath
58 void pendingBrace(bool brace);
59 /// tell whether to write the closing brace of \ensuremath
60 bool pendingBrace() const { return pendingbrace_; }
61 /// tell whether we are in text mode or not when producing latex code
62 void textMode(bool textmode);
63 /// tell whether we are in text mode or not when producing latex code
64 bool textMode() const { return textmode_; }
68 /// do we have to write \\protect sometimes
70 /// are we at the beginning of an MathData?
72 /// are we writing to .tex?
74 /// is it for preview?
76 /// do we have a space pending?
78 /// do we have a brace pending?
80 /// are we in text mode when producing latex code?
87 WriteStream & operator<<(WriteStream &, MathAtom const &);
89 WriteStream & operator<<(WriteStream &, MathData const &);
91 WriteStream & operator<<(WriteStream &, docstring const &);
93 WriteStream & operator<<(WriteStream &, char const * const);
95 WriteStream & operator<<(WriteStream &, char);
97 WriteStream & operator<<(WriteStream &, int);
99 WriteStream & operator<<(WriteStream &, unsigned int);
110 MTag(char const * const tag) : tag_(tag) {}
112 char const * const tag_;
118 ETag(char const * const tag) : tag_(tag) {}
120 char const * const tag_;
126 explicit MathStream(odocstream & os);
130 odocstream & os() { return os_; }
132 int line() const { return line_; }
134 int & tab() { return tab_; }
136 friend MathStream & operator<<(MathStream &, char const *);
149 MathStream & operator<<(MathStream &, MathAtom const &);
151 MathStream & operator<<(MathStream &, MathData const &);
153 MathStream & operator<<(MathStream &, docstring const &);
155 MathStream & operator<<(MathStream &, char const *);
157 MathStream & operator<<(MathStream &, char);
159 MathStream & operator<<(MathStream &, MTag const &);
161 MathStream & operator<<(MathStream &, ETag const &);
172 explicit NormalStream(odocstream & os) : os_(os) {}
174 odocstream & os() { return os_; }
181 NormalStream & operator<<(NormalStream &, MathAtom const &);
183 NormalStream & operator<<(NormalStream &, MathData const &);
185 NormalStream & operator<<(NormalStream &, docstring const &);
187 NormalStream & operator<<(NormalStream &, char const *);
189 NormalStream & operator<<(NormalStream &, char);
191 NormalStream & operator<<(NormalStream &, int);
202 explicit MapleStream(odocstream & os) : os_(os) {}
204 odocstream & os() { return os_; }
212 MapleStream & operator<<(MapleStream &, MathAtom const &);
214 MapleStream & operator<<(MapleStream &, MathData const &);
216 MapleStream & operator<<(MapleStream &, docstring const &);
218 MapleStream & operator<<(MapleStream &, char_type);
220 MapleStream & operator<<(MapleStream &, char const *);
222 MapleStream & operator<<(MapleStream &, char);
224 MapleStream & operator<<(MapleStream &, int);
235 explicit MaximaStream(odocstream & os) : os_(os) {}
237 odocstream & os() { return os_; }
245 MaximaStream & operator<<(MaximaStream &, MathAtom const &);
247 MaximaStream & operator<<(MaximaStream &, MathData const &);
249 MaximaStream & operator<<(MaximaStream &, docstring const &);
251 MaximaStream & operator<<(MaximaStream &, char_type);
253 MaximaStream & operator<<(MaximaStream &, char const *);
255 MaximaStream & operator<<(MaximaStream &, char);
257 MaximaStream & operator<<(MaximaStream &, int);
265 class MathematicaStream {
268 explicit MathematicaStream(odocstream & os) : os_(os) {}
270 odocstream & os() { return os_; }
278 MathematicaStream & operator<<(MathematicaStream &, MathAtom const &);
280 MathematicaStream & operator<<(MathematicaStream &, MathData const &);
282 MathematicaStream & operator<<(MathematicaStream &, docstring const &);
284 MathematicaStream & operator<<(MathematicaStream &, char const *);
286 MathematicaStream & operator<<(MathematicaStream &, char);
288 MathematicaStream & operator<<(MathematicaStream &, int);
299 explicit OctaveStream(odocstream & os) : os_(os) {}
301 odocstream & os() { return os_; }
308 OctaveStream & operator<<(OctaveStream &, MathAtom const &);
310 OctaveStream & operator<<(OctaveStream &, MathData const &);
312 OctaveStream & operator<<(OctaveStream &, docstring const &);
314 OctaveStream & operator<<(OctaveStream &, char_type);
316 OctaveStream & operator<<(OctaveStream &, char const *);
318 OctaveStream & operator<<(OctaveStream &, char);
320 OctaveStream & operator<<(OctaveStream &, int);