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), ascii_(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), ascii_(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 void WriteStream::asciiOnly(bool ascii)
172 WriteStream & operator<<(WriteStream & ws, MathAtom const & at)
179 WriteStream & operator<<(WriteStream & ws, MathData const & ar)
186 WriteStream & operator<<(WriteStream & ws, char const * s)
188 if (ws.pendingBrace()) {
190 ws.pendingBrace(false);
191 ws.pendingSpace(false);
193 } else if (ws.pendingSpace() && strlen(s) > 0) {
194 if (isAlphaASCII(s[0]))
196 else if (s[0] == ' ' && ws.textMode())
198 ws.pendingSpace(false);
201 ws.addlines(int(count(s, s + strlen(s), '\n')));
206 WriteStream & operator<<(WriteStream & ws, char c)
208 if (ws.pendingBrace()) {
210 ws.pendingBrace(false);
211 ws.pendingSpace(false);
213 } else if (ws.pendingSpace()) {
216 else if (c == ' ' && ws.textMode())
218 ws.pendingSpace(false);
227 WriteStream & operator<<(WriteStream & ws, int i)
229 if (ws.pendingBrace()) {
231 ws.pendingBrace(false);
239 WriteStream & operator<<(WriteStream & ws, unsigned int i)
241 if (ws.pendingBrace()) {
243 ws.pendingBrace(false);
251 //////////////////////////////////////////////////////////////////////
254 MathStream::MathStream(odocstream & os)
255 : os_(os), tab_(0), line_(0), lastchar_(0), in_text_(false)
259 void MathStream::cr()
262 for (int i = 0; i < tab(); ++i)
267 void MathStream::defer(docstring const & s)
273 void MathStream::defer(string const & s)
275 deferred_ << from_utf8(s);
279 docstring MathStream::deferred() const
281 return deferred_.str();
285 MathStream & operator<<(MathStream & ms, MathAtom const & at)
292 MathStream & operator<<(MathStream & ms, MathData const & ar)
299 MathStream & operator<<(MathStream & ms, char const * s)
306 MathStream & operator<<(MathStream & ms, char c)
313 MathStream & operator<<(MathStream & ms, char_type c)
320 MathStream & operator<<(MathStream & ms, MTag const & t)
324 ms.os() << '<' << from_ascii(t.tag_);
325 if (!t.attr_.empty())
326 ms.os() << " " << from_ascii(t.attr_);
332 MathStream & operator<<(MathStream & ms, ETag const & t)
337 ms.os() << "</" << from_ascii(t.tag_) << '>';
342 MathStream & operator<<(MathStream & ms, docstring const & s)
349 //////////////////////////////////////////////////////////////////////
352 HtmlStream::HtmlStream(odocstream & os)
353 : os_(os), tab_(0), line_(0), lastchar_(0), in_text_(false)
357 void HtmlStream::defer(docstring const & s)
363 void HtmlStream::defer(string const & s)
365 deferred_ << from_utf8(s);
369 docstring HtmlStream::deferred() const
371 return deferred_.str();
375 HtmlStream & operator<<(HtmlStream & ms, MathAtom const & at)
382 HtmlStream & operator<<(HtmlStream & ms, MathData const & ar)
389 HtmlStream & operator<<(HtmlStream & ms, char const * s)
396 HtmlStream & operator<<(HtmlStream & ms, char c)
403 HtmlStream & operator<<(HtmlStream & ms, char_type c)
410 HtmlStream & operator<<(HtmlStream & ms, MTag const & t)
412 ms.os() << '<' << from_ascii(t.tag_);
413 if (!t.attr_.empty())
414 ms.os() << " " << from_ascii(t.attr_);
420 HtmlStream & operator<<(HtmlStream & ms, ETag const & t)
422 ms.os() << "</" << from_ascii(t.tag_) << '>';
427 HtmlStream & operator<<(HtmlStream & ms, docstring const & s)
434 //////////////////////////////////////////////////////////////////////
437 SetMode::SetMode(MathStream & os, bool text)
438 : os_(os), opened_(false)
444 SetMode::SetMode(MathStream & os, bool text, string const & attrs)
445 : os_(os), opened_(false)
451 void SetMode::init(bool text, string const & attrs)
453 was_text_ = os_.inText();
460 os_ << " " << from_utf8(attrs);
464 if (!attrs.empty()) {
465 os_ << "<mstyle " << from_utf8(attrs) << ">";
490 //////////////////////////////////////////////////////////////////////
493 SetHTMLMode::SetHTMLMode(HtmlStream & os, bool text)
494 : os_(os), opened_(false)
500 SetHTMLMode::SetHTMLMode(HtmlStream & os, bool text, string attrs)
501 : os_(os), opened_(true)
507 void SetHTMLMode::init(bool text, string const & attrs)
509 was_text_ = os_.inText();
515 os_ << MTag("span", attrs);
522 SetHTMLMode::~SetHTMLMode()
533 //////////////////////////////////////////////////////////////////////
536 MapleStream & operator<<(MapleStream & ms, MathAtom const & at)
543 MapleStream & operator<<(MapleStream & ms, MathData const & ar)
550 MapleStream & operator<<(MapleStream & ms, char const * s)
557 MapleStream & operator<<(MapleStream & ms, char c)
564 MapleStream & operator<<(MapleStream & ms, int i)
571 MapleStream & operator<<(MapleStream & ms, char_type c)
578 MapleStream & operator<<(MapleStream & ms, docstring const & s)
585 //////////////////////////////////////////////////////////////////////
588 MaximaStream & operator<<(MaximaStream & ms, MathAtom const & at)
595 MaximaStream & operator<<(MaximaStream & ms, MathData const & ar)
602 MaximaStream & operator<<(MaximaStream & ms, char const * s)
609 MaximaStream & operator<<(MaximaStream & ms, char c)
616 MaximaStream & operator<<(MaximaStream & ms, int i)
623 MaximaStream & operator<<(MaximaStream & ms, docstring const & s)
630 MaximaStream & operator<<(MaximaStream & ms, char_type c)
637 //////////////////////////////////////////////////////////////////////
640 MathematicaStream & operator<<(MathematicaStream & ms, MathAtom const & at)
647 MathematicaStream & operator<<(MathematicaStream & ms, MathData const & ar)
654 MathematicaStream & operator<<(MathematicaStream & ms, char const * s)
661 MathematicaStream & operator<<(MathematicaStream & ms, char c)
668 MathematicaStream & operator<<(MathematicaStream & ms, int i)
675 MathematicaStream & operator<<(MathematicaStream & ms, docstring const & s)
682 MathematicaStream & operator<<(MathematicaStream & ms, char_type c)
689 //////////////////////////////////////////////////////////////////////
692 OctaveStream & operator<<(OctaveStream & ns, MathAtom const & at)
699 OctaveStream & operator<<(OctaveStream & ns, MathData const & ar)
706 OctaveStream & operator<<(OctaveStream & ns, char const * s)
713 OctaveStream & operator<<(OctaveStream & ns, char c)
720 OctaveStream & operator<<(OctaveStream & ns, int i)
727 OctaveStream & operator<<(OctaveStream & ns, docstring const & s)
734 OctaveStream & operator<<(OctaveStream & ns, char_type c)
741 OctaveStream & operator<<(OctaveStream & os, string const & s)
743 os.os() << from_utf8(s);