]> git.lyx.org Git - lyx.git/blobdiff - src/texstream.h
Introduce the notion of math class
[lyx.git] / src / texstream.h
index 2c8299f0afc074bbe4e5347a92c1b07840d75d3a..e5450ce7417a53a84b77672fcd69225d56c6b4ec 100644 (file)
 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();
        ///
@@ -43,7 +41,7 @@ public:
        ///
        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,14 @@ otexrowstream & operator<<(otexrowstream & ots, Type value);
 class otexstream : public otexrowstream {
 public:
        ///
-       explicit otexstream(odocstream & os, bool enable = true)
-               : otexrowstream(os, enable), canbreakline_(false),
+       explicit otexstream(odocstream & os)
+               : otexrowstream(os), canbreakline_(false),
                  protectspace_(false), parbreak_(true), lastchar_(0) {}
        ///
        void put(char_type const & c);
        ///
+       void append(TexString ts);
+       ///
        void canBreakLine(bool breakline) { canbreakline_ = breakline; }
        ///
        bool canBreakLine() const { return canbreakline_; }
@@ -114,6 +116,25 @@ private:
        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;
@@ -133,6 +154,8 @@ otexstream & operator<<(otexstream &, SafeBreakLine);
 ///
 otexstream & operator<<(otexstream &, odocstream_manip);
 ///
+otexstream & operator<<(otexstream &, TexString);
+///
 otexstream & operator<<(otexstream &, docstring const &);
 ///
 otexstream & operator<<(otexstream &, std::string const &);