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)
253 MathStream
& operator<<(MathStream
& ms
, MathAtom
const & at
)
260 MathStream
& operator<<(MathStream
& ms
, MathData
const & ar
)
267 MathStream
& operator<<(MathStream
& ms
, char const * s
)
274 MathStream
& operator<<(MathStream
& ms
, char c
)
281 MathStream
& operator<<(MathStream
& ms
, MTag
const & t
)
285 ms
.os() << '<' << from_ascii(t
.tag_
) << '>';
290 MathStream
& operator<<(MathStream
& ms
, ETag
const & t
)
295 ms
.os() << "</" << from_ascii(t
.tag_
) << '>';
300 void MathStream::cr()
303 for (int i
= 0; i
< tab(); ++i
)
308 MathStream
& operator<<(MathStream
& ms
, docstring
const & s
)
314 //////////////////////////////////////////////////////////////////////
317 MapleStream
& operator<<(MapleStream
& ms
, MathAtom
const & at
)
324 MapleStream
& operator<<(MapleStream
& ms
, MathData
const & ar
)
331 MapleStream
& operator<<(MapleStream
& ms
, char const * s
)
338 MapleStream
& operator<<(MapleStream
& ms
, char c
)
345 MapleStream
& operator<<(MapleStream
& ms
, int i
)
352 MapleStream
& operator<<(MapleStream
& ms
, char_type c
)
359 MapleStream
& operator<<(MapleStream
& ms
, docstring
const & s
)
366 //////////////////////////////////////////////////////////////////////
369 MaximaStream
& operator<<(MaximaStream
& ms
, MathAtom
const & at
)
376 MaximaStream
& operator<<(MaximaStream
& ms
, MathData
const & ar
)
383 MaximaStream
& operator<<(MaximaStream
& ms
, char const * s
)
390 MaximaStream
& operator<<(MaximaStream
& ms
, char c
)
397 MaximaStream
& operator<<(MaximaStream
& ms
, int i
)
404 MaximaStream
& operator<<(MaximaStream
& ms
, docstring
const & s
)
411 MaximaStream
& operator<<(MaximaStream
& ms
, char_type c
)
418 //////////////////////////////////////////////////////////////////////
421 MathematicaStream
& operator<<(MathematicaStream
& ms
, MathAtom
const & at
)
428 MathematicaStream
& operator<<(MathematicaStream
& ms
, MathData
const & ar
)
435 MathematicaStream
& operator<<(MathematicaStream
& ms
, char const * s
)
442 MathematicaStream
& operator<<(MathematicaStream
& ms
, char c
)
449 MathematicaStream
& operator<<(MathematicaStream
& ms
, int i
)
456 MathematicaStream
& operator<<(MathematicaStream
& ms
, docstring
const & s
)
463 MathematicaStream
& operator<<(MathematicaStream
& ms
, char_type c
)
470 //////////////////////////////////////////////////////////////////////
473 OctaveStream
& operator<<(OctaveStream
& ns
, MathAtom
const & at
)
480 OctaveStream
& operator<<(OctaveStream
& ns
, MathData
const & ar
)
487 OctaveStream
& operator<<(OctaveStream
& ns
, char const * s
)
494 OctaveStream
& operator<<(OctaveStream
& ns
, char c
)
501 OctaveStream
& operator<<(OctaveStream
& ns
, int i
)
508 OctaveStream
& operator<<(OctaveStream
& ns
, docstring
const & s
)
515 OctaveStream
& operator<<(OctaveStream
& ns
, char_type c
)
522 OctaveStream
& operator<<(OctaveStream
& os
, string
const & s
)
524 os
.os() << from_utf8(s
);