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, OutputType output,
111 Encoding const * encoding)
112 : os_(os), fragile_(fragile), firstitem_(false), latex_(latex),
113 output_(output), pendingspace_(false), pendingbrace_(false),
114 textmode_(false), locked_(0), line_(0), encoding_(encoding)
118 WriteStream::WriteStream(odocstream & os)
119 : os_(os), fragile_(false), firstitem_(false), latex_(false),
120 output_(wsDefault), pendingspace_(false), pendingbrace_(false),
121 textmode_(false), locked_(0), 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 void WriteStream::lockedMode(bool locked)
164 WriteStream & operator<<(WriteStream & ws, MathAtom const & at)
171 WriteStream & operator<<(WriteStream & ws, MathData const & ar)
178 WriteStream & operator<<(WriteStream & ws, char const * s)
180 if (ws.pendingBrace()) {
182 ws.pendingBrace(false);
183 ws.pendingSpace(false);
185 } else if (ws.pendingSpace() && strlen(s) > 0) {
186 if (isAlphaASCII(s[0]))
188 ws.pendingSpace(false);
191 ws.addlines(int(count(s, s + strlen(s), '\n')));
196 WriteStream & operator<<(WriteStream & ws, char c)
198 if (ws.pendingBrace()) {
200 ws.pendingBrace(false);
201 ws.pendingSpace(false);
203 } else if (ws.pendingSpace()) {
206 ws.pendingSpace(false);
215 WriteStream & operator<<(WriteStream & ws, int i)
217 if (ws.pendingBrace()) {
219 ws.pendingBrace(false);
227 WriteStream & operator<<(WriteStream & ws, unsigned int i)
229 if (ws.pendingBrace()) {
231 ws.pendingBrace(false);
239 //////////////////////////////////////////////////////////////////////
242 MathStream::MathStream(odocstream & os)
243 : os_(os), tab_(0), line_(0), lastchar_(0)
247 MathStream & operator<<(MathStream & ms, MathAtom const & at)
254 MathStream & operator<<(MathStream & ms, MathData const & ar)
261 MathStream & operator<<(MathStream & ms, char const * s)
268 MathStream & operator<<(MathStream & ms, char c)
275 MathStream & operator<<(MathStream & ms, MTag const & t)
279 ms.os() << '<' << from_ascii(t.tag_) << '>';
284 MathStream & operator<<(MathStream & ms, ETag const & t)
289 ms.os() << "</" << from_ascii(t.tag_) << '>';
294 void MathStream::cr()
297 for (int i = 0; i < tab(); ++i)
302 MathStream & operator<<(MathStream & ms, docstring const & s)
308 //////////////////////////////////////////////////////////////////////
311 MapleStream & operator<<(MapleStream & ms, MathAtom const & at)
318 MapleStream & operator<<(MapleStream & ms, MathData const & ar)
325 MapleStream & operator<<(MapleStream & ms, char const * s)
332 MapleStream & operator<<(MapleStream & ms, char c)
339 MapleStream & operator<<(MapleStream & ms, int i)
346 MapleStream & operator<<(MapleStream & ms, char_type c)
353 MapleStream & operator<<(MapleStream & ms, docstring const & s)
360 //////////////////////////////////////////////////////////////////////
363 MaximaStream & operator<<(MaximaStream & ms, MathAtom const & at)
370 MaximaStream & operator<<(MaximaStream & ms, MathData const & ar)
377 MaximaStream & operator<<(MaximaStream & ms, char const * s)
384 MaximaStream & operator<<(MaximaStream & ms, char c)
391 MaximaStream & operator<<(MaximaStream & ms, int i)
398 MaximaStream & operator<<(MaximaStream & ms, docstring const & s)
405 MaximaStream & operator<<(MaximaStream & ms, char_type c)
412 //////////////////////////////////////////////////////////////////////
415 MathematicaStream & operator<<(MathematicaStream & ms, MathAtom const & at)
422 MathematicaStream & operator<<(MathematicaStream & ms, MathData const & ar)
429 MathematicaStream & operator<<(MathematicaStream & ms, char const * s)
436 MathematicaStream & operator<<(MathematicaStream & ms, char c)
443 MathematicaStream & operator<<(MathematicaStream & ms, int i)
450 MathematicaStream & operator<<(MathematicaStream & ms, docstring const & s)
457 MathematicaStream & operator<<(MathematicaStream & ms, char_type c)
464 //////////////////////////////////////////////////////////////////////
467 OctaveStream & operator<<(OctaveStream & ns, MathAtom const & at)
474 OctaveStream & operator<<(OctaveStream & ns, MathData const & ar)
481 OctaveStream & operator<<(OctaveStream & ns, char const * s)
488 OctaveStream & operator<<(OctaveStream & ns, char c)
495 OctaveStream & operator<<(OctaveStream & ns, int i)
502 OctaveStream & operator<<(OctaveStream & ns, docstring const & s)
509 OctaveStream & operator<<(OctaveStream & ns, char_type c)
516 OctaveStream & operator<<(OctaveStream & os, string const & s)
518 os.os() << from_utf8(s);