X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathStream.cpp;h=b142f7e9c04b2d63632d86f57b78883eaf9d6023;hb=573500dd04f154f27318ac5ec469a337f97fe9f0;hp=a638052a87c7a3063c83f0a6ce064395f19449a3;hpb=4479a7f689d5fadc741f7798f85fec540d4970ea;p=lyx.git diff --git a/src/mathed/MathStream.cpp b/src/mathed/MathStream.cpp index a638052a87..b142f7e9c0 100644 --- a/src/mathed/MathStream.cpp +++ b/src/mathed/MathStream.cpp @@ -113,14 +113,14 @@ WriteStream::WriteStream(odocstream & os, bool fragile, bool latex, OutputType o Encoding const * encoding) : os_(os), fragile_(fragile), firstitem_(false), latex_(latex), output_(output), pendingspace_(false), pendingbrace_(false), - textmode_(false), locked_(0), line_(0), encoding_(encoding) + textmode_(false), locked_(0), ascii_(0), line_(0), encoding_(encoding) {} WriteStream::WriteStream(odocstream & os) : os_(os), fragile_(false), firstitem_(false), latex_(false), output_(wsDefault), pendingspace_(false), pendingbrace_(false), - textmode_(false), locked_(0), line_(0), encoding_(0) + textmode_(false), locked_(0), ascii_(0), line_(0), encoding_(0) {} @@ -163,6 +163,12 @@ void WriteStream::lockedMode(bool locked) } +void WriteStream::asciiOnly(bool ascii) +{ + ascii_ = ascii; +} + + WriteStream & operator<<(WriteStream & ws, MathAtom const & at) { at->write(ws); @@ -306,7 +312,7 @@ MathStream & operator<<(MathStream & ms, char c) MathStream & operator<<(MathStream & ms, char_type c) { - ms.os() << c; + ms.os().put(c); return ms; } @@ -315,7 +321,10 @@ MathStream & operator<<(MathStream & ms, MTag const & t) { ++ms.tab(); ms.cr(); - ms.os() << '<' << from_ascii(t.tag_) << '>'; + ms.os() << '<' << from_ascii(t.tag_); + if (!t.attr_.empty()) + ms.os() << " " << from_ascii(t.attr_); + ms << '>'; return ms; } @@ -340,6 +349,190 @@ MathStream & operator<<(MathStream & ms, docstring const & s) ////////////////////////////////////////////////////////////////////// +HtmlStream::HtmlStream(odocstream & os) + : os_(os), tab_(0), line_(0), lastchar_(0), in_text_(false) +{} + + +void HtmlStream::defer(docstring const & s) +{ + deferred_ << s; +} + + +void HtmlStream::defer(string const & s) +{ + deferred_ << from_utf8(s); +} + + +docstring HtmlStream::deferred() const +{ + return deferred_.str(); +} + + +HtmlStream & operator<<(HtmlStream & ms, MathAtom const & at) +{ + at->htmlize(ms); + return ms; +} + + +HtmlStream & operator<<(HtmlStream & ms, MathData const & ar) +{ + htmlize(ar, ms); + return ms; +} + + +HtmlStream & operator<<(HtmlStream & ms, char const * s) +{ + ms.os() << s; + return ms; +} + + +HtmlStream & operator<<(HtmlStream & ms, char c) +{ + ms.os() << c; + return ms; +} + + +HtmlStream & operator<<(HtmlStream & ms, char_type c) +{ + ms.os().put(c); + return ms; +} + + +HtmlStream & operator<<(HtmlStream & ms, MTag const & t) +{ + ms.os() << '<' << from_ascii(t.tag_); + if (!t.attr_.empty()) + ms.os() << " " << from_ascii(t.attr_); + ms << '>'; + return ms; +} + + +HtmlStream & operator<<(HtmlStream & ms, ETag const & t) +{ + ms.os() << "'; + return ms; +} + + +HtmlStream & operator<<(HtmlStream & ms, docstring const & s) +{ + ms.os() << s; + return ms; +} + + +////////////////////////////////////////////////////////////////////// + + +SetMode::SetMode(MathStream & os, bool text) + : os_(os), opened_(false) +{ + init(text, ""); +} + + +SetMode::SetMode(MathStream & os, bool text, string const & attrs) + : os_(os), opened_(false) +{ + init(text, attrs); +} + + +void SetMode::init(bool text, string const & attrs) +{ + was_text_ = os_.inText(); + if (was_text_) + os_ << ""; + if (text) { + os_.setTextMode(); + os_ << ""; + opened_ = true; + } else { + if (!attrs.empty()) { + os_ << ""; + opened_ = true; + } + os_.setMathMode(); + } +} + + +SetMode::~SetMode() +{ + if (opened_) { + if (os_.inText()) + os_ << ""; + else + os_ << ""; + } + if (was_text_) { + os_.setTextMode(); + os_ << ""; + } else { + os_.setMathMode(); + } +} + + +////////////////////////////////////////////////////////////////////// + + +SetHTMLMode::SetHTMLMode(HtmlStream & os, bool text) + : os_(os), opened_(false) +{ + init(text, ""); +} + + +SetHTMLMode::SetHTMLMode(HtmlStream & os, bool text, string attrs) + : os_(os), opened_(true) +{ + init(text, attrs); +} + + +void SetHTMLMode::init(bool text, string const & attrs) +{ + was_text_ = os_.inText(); + if (text) { + os_.setTextMode(); + if (attrs.empty()) + os_ << MTag("span"); + else + os_ << MTag("span", attrs); + opened_ = true; + } else + os_.setMathMode(); +} + + +SetHTMLMode::~SetHTMLMode() +{ + if (opened_) + os_ << ETag("span"); + if (was_text_) + os_.setTextMode(); + else + os_.setMathMode(); +} + + +////////////////////////////////////////////////////////////////////// + + MapleStream & operator<<(MapleStream & ms, MathAtom const & at) { at->maple(ms);