3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "MathStream.h"
16 #include "MathExtern.h"
18 #include "support/textutils.h"
19 #include "support/docstring.h"
30 //////////////////////////////////////////////////////////////////////
33 NormalStream & operator<<(NormalStream & ns, MathAtom const & at)
40 NormalStream & operator<<(NormalStream & ns, MathData const & ar)
47 NormalStream & operator<<(NormalStream & ns, docstring const & s)
54 NormalStream & operator<<(NormalStream & ns, const string & s)
56 ns.os() << from_utf8(s);
61 NormalStream & operator<<(NormalStream & ns, char const * s)
68 NormalStream & operator<<(NormalStream & ns, char c)
75 NormalStream & operator<<(NormalStream & ns, int i)
83 /////////////////////////////////////////////////////////////////
86 WriteStream & operator<<(WriteStream & ws, docstring const & s)
88 if (ws.pendingBrace()) {
90 ws.pendingBrace(false);
91 ws.pendingSpace(false);
93 } else if (ws.pendingSpace() && s.length() > 0) {
94 if (isAlphaASCII(s[0]))
96 ws.pendingSpace(false);
100 docstring::const_iterator dit = s.begin();
101 docstring::const_iterator end = s.end();
102 for (; dit != end; ++dit)
110 WriteStream::WriteStream(odocstream & os, bool fragile, bool latex, bool dryrun,
111 Encoding const * encoding)
112 : os_(os), fragile_(fragile), firstitem_(false), latex_(latex),
113 dryrun_(dryrun), pendingspace_(false), pendingbrace_(false),
114 textmode_(false), line_(0), encoding_(encoding)
118 WriteStream::WriteStream(odocstream & os)
119 : os_(os), fragile_(false), firstitem_(false), latex_(false),
120 dryrun_(false), pendingspace_(false), pendingbrace_(false),
121 textmode_(false), line_(0), encoding_(0)
125 WriteStream::~WriteStream()
129 else if (pendingspace_)
134 void WriteStream::addlines(unsigned int n)
140 void WriteStream::pendingSpace(bool how)
146 void WriteStream::pendingBrace(bool brace)
148 pendingbrace_ = brace;
152 void WriteStream::textMode(bool textmode)
154 textmode_ = textmode;
158 WriteStream & operator<<(WriteStream & ws, MathAtom const & at)
165 WriteStream & operator<<(WriteStream & ws, MathData const & ar)
172 WriteStream & operator<<(WriteStream & ws, char const * s)
174 if (ws.pendingBrace()) {
176 ws.pendingBrace(false);
177 ws.pendingSpace(false);
179 } else if (ws.pendingSpace() && strlen(s) > 0) {
180 if (isAlphaASCII(s[0]))
182 ws.pendingSpace(false);
185 ws.addlines(int(count(s, s + strlen(s), '\n')));
190 WriteStream & operator<<(WriteStream & ws, char c)
192 if (ws.pendingBrace()) {
194 ws.pendingBrace(false);
195 ws.pendingSpace(false);
197 } else if (ws.pendingSpace()) {
200 ws.pendingSpace(false);
209 WriteStream & operator<<(WriteStream & ws, int i)
211 if (ws.pendingBrace()) {
213 ws.pendingBrace(false);
221 WriteStream & operator<<(WriteStream & ws, unsigned int i)
223 if (ws.pendingBrace()) {
225 ws.pendingBrace(false);
233 //////////////////////////////////////////////////////////////////////
236 MathStream::MathStream(odocstream & os)
237 : os_(os), tab_(0), line_(0), lastchar_(0)
241 MathStream & operator<<(MathStream & ms, MathAtom const & at)
248 MathStream & operator<<(MathStream & ms, MathData const & ar)
255 MathStream & operator<<(MathStream & ms, char const * s)
262 MathStream & operator<<(MathStream & ms, char c)
269 MathStream & operator<<(MathStream & ms, MTag const & t)
273 ms.os() << '<' << from_ascii(t.tag_) << '>';
278 MathStream & operator<<(MathStream & ms, ETag const & t)
283 ms.os() << "</" << from_ascii(t.tag_) << '>';
288 void MathStream::cr()
291 for (int i = 0; i < tab(); ++i)
296 MathStream & operator<<(MathStream & ms, docstring const & s)
302 //////////////////////////////////////////////////////////////////////
305 MapleStream & operator<<(MapleStream & ms, MathAtom const & at)
312 MapleStream & operator<<(MapleStream & ms, MathData const & ar)
319 MapleStream & operator<<(MapleStream & ms, char const * s)
326 MapleStream & operator<<(MapleStream & ms, char c)
333 MapleStream & operator<<(MapleStream & ms, int i)
340 MapleStream & operator<<(MapleStream & ms, char_type c)
347 MapleStream & operator<<(MapleStream & ms, docstring const & s)
354 //////////////////////////////////////////////////////////////////////
357 MaximaStream & operator<<(MaximaStream & ms, MathAtom const & at)
364 MaximaStream & operator<<(MaximaStream & ms, MathData const & ar)
371 MaximaStream & operator<<(MaximaStream & ms, char const * s)
378 MaximaStream & operator<<(MaximaStream & ms, char c)
385 MaximaStream & operator<<(MaximaStream & ms, int i)
392 MaximaStream & operator<<(MaximaStream & ms, docstring const & s)
399 MaximaStream & operator<<(MaximaStream & ms, char_type c)
406 //////////////////////////////////////////////////////////////////////
409 MathematicaStream & operator<<(MathematicaStream & ms, MathAtom const & at)
416 MathematicaStream & operator<<(MathematicaStream & ms, MathData const & ar)
423 MathematicaStream & operator<<(MathematicaStream & ms, char const * s)
430 MathematicaStream & operator<<(MathematicaStream & ms, char c)
437 MathematicaStream & operator<<(MathematicaStream & ms, int i)
444 MathematicaStream & operator<<(MathematicaStream & ms, docstring const & s)
451 MathematicaStream & operator<<(MathematicaStream & ms, char_type c)
458 //////////////////////////////////////////////////////////////////////
461 OctaveStream & operator<<(OctaveStream & ns, MathAtom const & at)
468 OctaveStream & operator<<(OctaveStream & ns, MathData const & ar)
475 OctaveStream & operator<<(OctaveStream & ns, char const * s)
482 OctaveStream & operator<<(OctaveStream & ns, char c)
489 OctaveStream & operator<<(OctaveStream & ns, int i)
496 OctaveStream & operator<<(OctaveStream & ns, docstring const & s)
503 OctaveStream & operator<<(OctaveStream & ns, char_type c)
510 OctaveStream & operator<<(OctaveStream & os, string const & s)
512 os.os() << from_utf8(s);