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 "InsetMath.h"
15 #include "MathExtern.h"
16 #include "MathStream.h"
18 #include "support/lyxalgo.h"
25 return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
29 bool isAlpha(lyx::char_type c)
31 return c < 0x80 && isAlpha(static_cast<char>(c));
44 //////////////////////////////////////////////////////////////////////
47 NormalStream & operator<<(NormalStream & ns, MathAtom const & at)
54 NormalStream & operator<<(NormalStream & ns, MathArray const & ar)
61 NormalStream & operator<<(NormalStream & ns, docstring const & s)
68 NormalStream & operator<<(NormalStream & ns, const std::string & s)
70 ns.os() << from_utf8(s);
75 NormalStream & operator<<(NormalStream & ns, char const * s)
82 NormalStream & operator<<(NormalStream & ns, char c)
89 NormalStream & operator<<(NormalStream & ns, int i)
97 /////////////////////////////////////////////////////////////////
100 WriteStream & operator<<(WriteStream & ws, docstring const & s)
102 if (ws.pendingSpace() && s.length() > 0) {
105 ws.pendingSpace(false);
109 docstring::const_iterator dit = s.begin();
110 docstring::const_iterator end = s.end();
111 for (; dit != end; ++dit)
119 WriteStream::WriteStream(odocstream & os, bool fragile, bool latex)
120 : os_(os), fragile_(fragile), firstitem_(false), latex_(latex),
121 pendingspace_(false), line_(0)
125 WriteStream::WriteStream(odocstream & os)
126 : os_(os), fragile_(false), firstitem_(false), latex_(false),
127 pendingspace_(false), line_(0)
131 WriteStream::~WriteStream()
138 void WriteStream::addlines(unsigned int n)
144 void WriteStream::pendingSpace(bool how)
150 WriteStream & operator<<(WriteStream & ws, MathAtom const & at)
157 WriteStream & operator<<(WriteStream & ws, MathArray const & ar)
164 WriteStream & operator<<(WriteStream & ws, char const * s)
166 if (ws.pendingSpace() && strlen(s) > 0) {
169 ws.pendingSpace(false);
172 ws.addlines(int(count(s, s + strlen(s), '\n')));
177 WriteStream & operator<<(WriteStream & ws, char c)
179 if (ws.pendingSpace()) {
182 ws.pendingSpace(false);
191 WriteStream & operator<<(WriteStream & ws, int i)
198 WriteStream & operator<<(WriteStream & ws, unsigned int i)
205 //////////////////////////////////////////////////////////////////////
208 MathStream::MathStream(odocstream & os)
209 : os_(os), tab_(0), line_(0), lastchar_(0)
213 MathStream & operator<<(MathStream & ms, MathAtom const & at)
220 MathStream & operator<<(MathStream & ms, MathArray const & ar)
227 MathStream & operator<<(MathStream & ms, char const * s)
234 MathStream & operator<<(MathStream & ms, char c)
241 MathStream & operator<<(MathStream & ms, MTag const & t)
245 ms.os() << '<' << t.tag_ << '>';
250 MathStream & operator<<(MathStream & ms, ETag const & t)
255 ms.os() << "</" << t.tag_ << '>';
260 void MathStream::cr()
263 for (int i = 0; i < tab(); ++i)
268 MathStream & operator<<(MathStream & ms, docstring const & s)
274 //////////////////////////////////////////////////////////////////////
277 MapleStream & operator<<(MapleStream & ms, MathAtom const & at)
284 MapleStream & operator<<(MapleStream & ms, MathArray const & ar)
291 MapleStream & operator<<(MapleStream & ms, char const * s)
298 MapleStream & operator<<(MapleStream & ms, char c)
305 MapleStream & operator<<(MapleStream & ms, int i)
312 MapleStream & operator<<(MapleStream & ms, char_type c)
319 MapleStream & operator<<(MapleStream & ms, docstring const & s)
326 //////////////////////////////////////////////////////////////////////
329 MaximaStream & operator<<(MaximaStream & ms, MathAtom const & at)
336 MaximaStream & operator<<(MaximaStream & ms, MathArray const & ar)
343 MaximaStream & operator<<(MaximaStream & ms, char const * s)
350 MaximaStream & operator<<(MaximaStream & ms, char c)
357 MaximaStream & operator<<(MaximaStream & ms, int i)
364 MaximaStream & operator<<(MaximaStream & ms, docstring const & s)
371 MaximaStream & operator<<(MaximaStream & ms, char_type c)
378 //////////////////////////////////////////////////////////////////////
381 MathematicaStream & operator<<(MathematicaStream & ms, MathAtom const & at)
388 MathematicaStream & operator<<(MathematicaStream & ms, MathArray const & ar)
395 MathematicaStream & operator<<(MathematicaStream & ms, char const * s)
402 MathematicaStream & operator<<(MathematicaStream & ms, char c)
409 MathematicaStream & operator<<(MathematicaStream & ms, int i)
416 MathematicaStream & operator<<(MathematicaStream & ms, docstring const & s)
423 MathematicaStream & operator<<(MathematicaStream & ms, char_type c)
430 //////////////////////////////////////////////////////////////////////
433 OctaveStream & operator<<(OctaveStream & ns, MathAtom const & at)
440 OctaveStream & operator<<(OctaveStream & ns, MathArray const & ar)
447 OctaveStream & operator<<(OctaveStream & ns, char const * s)
454 OctaveStream & operator<<(OctaveStream & ns, char c)
461 OctaveStream & operator<<(OctaveStream & ns, int i)
468 OctaveStream & operator<<(OctaveStream & ns, docstring const & s)
475 OctaveStream & operator<<(OctaveStream & ns, char_type c)
482 OctaveStream & operator<<(OctaveStream & os, std::string const & s)
484 os.os() << from_utf8(s);