X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftexstream.h;h=a14f84bf95fec38f64fe101b594c513a6d6532c9;hb=861c6167ca5f1329e16dd788489a7c03772e2332;hp=f6f421133541fa3f65cbac16733b4695c553059a;hpb=670efa8f646218f2a378f0cc614c4c37a9f6b89a;p=lyx.git diff --git a/src/texstream.h b/src/texstream.h index f6f4211335..a14f84bf95 100644 --- a/src/texstream.h +++ b/src/texstream.h @@ -18,11 +18,9 @@ namespace lyx { class TexRow; +struct TexString; -// declared below -class otexstringstream; - /** Wrapper class for odocstream. This class is used to automatically count the lines of the exported latex code. @@ -31,7 +29,7 @@ class otexstringstream; class otexrowstream { public: /// - explicit otexrowstream(odocstream & os, bool enable = true); + explicit otexrowstream(odocstream & os); /// defaulted ~otexrowstream(); /// @@ -39,11 +37,11 @@ public: /// TexRow & texrow() { return *texrow_; } /// - unique_ptr && releaseTexRow(); + unique_ptr releaseTexRow(); /// void put(char_type const & c); /// - void append(docstring const & str, TexRow texrow); + void append(TexString ts); private: /// odocstream & os_; @@ -54,6 +52,8 @@ private: /// otexrowstream & operator<<(otexrowstream &, odocstream_manip); /// +otexrowstream & operator<<(otexrowstream &, TexString); +/// otexrowstream & operator<<(otexrowstream &, docstring const &); /// otexrowstream & operator<<(otexrowstream &, std::string const &); @@ -79,12 +79,15 @@ otexrowstream & operator<<(otexrowstream & ots, Type value); class otexstream : public otexrowstream { public: /// - explicit otexstream(odocstream & os, bool enable = true) - : otexrowstream(os, enable), canbreakline_(false), - protectspace_(false), parbreak_(true), lastchar_(0) {} + explicit otexstream(odocstream & os) + : otexrowstream(os), canbreakline_(false), + protectspace_(false), terminate_command_(false), + parbreak_(true), blankline_(true), lastchar_(0) {} /// void put(char_type const & c); /// + void append(TexString ts); + /// void canBreakLine(bool breakline) { canbreakline_ = breakline; } /// bool canBreakLine() const { return canbreakline_; } @@ -93,9 +96,14 @@ public: /// bool protectSpace() const { return protectspace_; } /// + void terminateCommand(bool terminate) { terminate_command_ = terminate; } + /// + bool terminateCommand() const { return terminate_command_; } + /// void lastChar(char_type const & c) { parbreak_ = (!canbreakline_ && c == '\n'); + blankline_ = ((!canbreakline_ && c == ' ') || c == '\n'); canbreakline_ = (c != '\n'); lastchar_ = c; } @@ -103,17 +111,42 @@ public: char_type lastChar() const { return lastchar_; } /// bool afterParbreak() const { return parbreak_; } + /// + bool blankLine() const { return blankline_; } private: /// bool canbreakline_; /// bool protectspace_; /// + bool terminate_command_; + /// bool parbreak_; /// + bool blankline_; + /// char_type lastchar_; }; + +/// because we need to pass ods_ to the base class +struct otexstringstream_helper { odocstringstream ods_; }; + +/// otexstringstream : a odocstringstream with tex/row correspondence +class otexstringstream : otexstringstream_helper, public otexstream { +public: + otexstringstream() : otexstringstream_helper(), otexstream(ods_) {} + /// + docstring str() const { return ods_.str(); } + /// + size_t length(); + /// + bool empty() { return 0 == length(); } + /// move-returns the contents and reset the texstream + TexString release(); +}; + + /// Helper structs for breaking a line struct BreakLine { char n; @@ -123,16 +156,26 @@ struct SafeBreakLine { char n; }; +/// Helper structs for terminating a command +struct TerminateCommand { + char n; +}; + extern BreakLine breakln; extern SafeBreakLine safebreakln; +extern TerminateCommand termcmd; /// otexstream & operator<<(otexstream &, BreakLine); /// otexstream & operator<<(otexstream &, SafeBreakLine); /// +otexstream & operator<<(otexstream &, TerminateCommand); +/// otexstream & operator<<(otexstream &, odocstream_manip); /// +otexstream & operator<<(otexstream &, TexString); +/// otexstream & operator<<(otexstream &, docstring const &); /// otexstream & operator<<(otexstream &, std::string const &); @@ -145,6 +188,6 @@ template otexstream & operator<<(otexstream & ots, Type value); -} +} // namespace lyx #endif