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 else if (s[0] == ' ' && ws.textMode())
98 ws.pendingSpace(false);
102 docstring::const_iterator dit = s.begin();
103 docstring::const_iterator end = s.end();
104 for (; dit != end; ++dit)
112 WriteStream::WriteStream(odocstream & os, bool fragile, bool latex, OutputType output,
113 Encoding const * encoding)
114 : os_(os), fragile_(fragile), firstitem_(false), latex_(latex),
115 output_(output), pendingspace_(false), pendingbrace_(false),
116 textmode_(false), locked_(0), line_(0), encoding_(encoding)
120 WriteStream::WriteStream(odocstream & os)
121 : os_(os), fragile_(false), firstitem_(false), latex_(false),
122 output_(wsDefault), pendingspace_(false), pendingbrace_(false),
123 textmode_(false), locked_(0), line_(0), encoding_(0)
127 WriteStream::~WriteStream()
131 else if (pendingspace_)
136 void WriteStream::addlines(unsigned int n)
142 void WriteStream::pendingSpace(bool how)
148 void WriteStream::pendingBrace(bool brace)
150 pendingbrace_ = brace;
154 void WriteStream::textMode(bool textmode)
156 textmode_ = textmode;
160 void WriteStream::lockedMode(bool locked)
166 WriteStream & operator<<(WriteStream & ws, MathAtom const & at)
173 WriteStream & operator<<(WriteStream & ws, MathData const & ar)
180 WriteStream & operator<<(WriteStream & ws, char const * s)
182 if (ws.pendingBrace()) {
184 ws.pendingBrace(false);
185 ws.pendingSpace(false);
187 } else if (ws.pendingSpace() && strlen(s) > 0) {
188 if (isAlphaASCII(s[0]))
190 else if (s[0] == ' ' && ws.textMode())
192 ws.pendingSpace(false);
195 ws.addlines(int(count(s, s + strlen(s), '\n')));
200 WriteStream & operator<<(WriteStream & ws, char c)
202 if (ws.pendingBrace()) {
204 ws.pendingBrace(false);
205 ws.pendingSpace(false);
207 } else if (ws.pendingSpace()) {
210 else if (c == ' ' && ws.textMode())
212 ws.pendingSpace(false);
221 WriteStream & operator<<(WriteStream & ws, int i)
223 if (ws.pendingBrace()) {
225 ws.pendingBrace(false);
233 WriteStream & operator<<(WriteStream & ws, unsigned int i)
235 if (ws.pendingBrace()) {
237 ws.pendingBrace(false);
245 //////////////////////////////////////////////////////////////////////
248 MathStream::MathStream(odocstream & os)
249 : os_(os), tab_(0), line_(0), lastchar_(0), in_text_(false)
253 void MathStream::cr()
256 for (int i = 0; i < tab(); ++i)
261 void MathStream::defer(docstring const & s)
267 void MathStream::defer(string const & s)
269 deferred_ << from_utf8(s);
273 docstring MathStream::deferred() const
275 return deferred_.str();
279 MathStream & operator<<(MathStream & ms, MathAtom const & at)
286 MathStream & operator<<(MathStream & ms, MathData const & ar)
293 MathStream & operator<<(MathStream & ms, char const * s)
300 MathStream & operator<<(MathStream & ms, char c)
307 MathStream & operator<<(MathStream & ms, char_type c)
314 MathStream & operator<<(MathStream & ms, MTag const & t)
318 ms.os() << '<' << from_ascii(t.tag_);
319 if (!t.attr_.empty())
320 ms.os() << " " << from_ascii(t.attr_);
326 MathStream & operator<<(MathStream & ms, ETag const & t)
331 ms.os() << "</" << from_ascii(t.tag_) << '>';
336 MathStream & operator<<(MathStream & ms, docstring const & s)
343 SetMode::SetMode(MathStream & os, bool text)
344 : os_(os), opened_(false)
346 init(text, from_ascii(""));
350 SetMode::SetMode(MathStream & os, bool text, docstring attrs)
351 : os_(os), opened_(false)
357 void SetMode::init(bool text, docstring attrs)
359 was_text_ = os_.inText();
370 if (!attrs.empty()) {
371 os_ << "<mstyle " << attrs << ">";
396 //////////////////////////////////////////////////////////////////////
399 MapleStream & operator<<(MapleStream & ms, MathAtom const & at)
406 MapleStream & operator<<(MapleStream & ms, MathData const & ar)
413 MapleStream & operator<<(MapleStream & ms, char const * s)
420 MapleStream & operator<<(MapleStream & ms, char c)
427 MapleStream & operator<<(MapleStream & ms, int i)
434 MapleStream & operator<<(MapleStream & ms, char_type c)
441 MapleStream & operator<<(MapleStream & ms, docstring const & s)
448 //////////////////////////////////////////////////////////////////////
451 MaximaStream & operator<<(MaximaStream & ms, MathAtom const & at)
458 MaximaStream & operator<<(MaximaStream & ms, MathData const & ar)
465 MaximaStream & operator<<(MaximaStream & ms, char const * s)
472 MaximaStream & operator<<(MaximaStream & ms, char c)
479 MaximaStream & operator<<(MaximaStream & ms, int i)
486 MaximaStream & operator<<(MaximaStream & ms, docstring const & s)
493 MaximaStream & operator<<(MaximaStream & ms, char_type c)
500 //////////////////////////////////////////////////////////////////////
503 MathematicaStream & operator<<(MathematicaStream & ms, MathAtom const & at)
510 MathematicaStream & operator<<(MathematicaStream & ms, MathData const & ar)
517 MathematicaStream & operator<<(MathematicaStream & ms, char const * s)
524 MathematicaStream & operator<<(MathematicaStream & ms, char c)
531 MathematicaStream & operator<<(MathematicaStream & ms, int i)
538 MathematicaStream & operator<<(MathematicaStream & ms, docstring const & s)
545 MathematicaStream & operator<<(MathematicaStream & ms, char_type c)
552 //////////////////////////////////////////////////////////////////////
555 OctaveStream & operator<<(OctaveStream & ns, MathAtom const & at)
562 OctaveStream & operator<<(OctaveStream & ns, MathData const & ar)
569 OctaveStream & operator<<(OctaveStream & ns, char const * s)
576 OctaveStream & operator<<(OctaveStream & ns, char c)
583 OctaveStream & operator<<(OctaveStream & ns, int i)
590 OctaveStream & operator<<(OctaveStream & ns, docstring const & s)
597 OctaveStream & operator<<(OctaveStream & ns, char_type c)
604 OctaveStream & operator<<(OctaveStream & os, string const & s)
606 os.os() << from_utf8(s);