X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fdocstream.h;h=e2f56f91c889b309a1b9c1e8b6d8d71cb0fce997;hb=dae8555234f0e5c8358b91c307d91b219c664617;hp=40f8e004dbceaf624469b2a81cf25912c55c4fd4;hpb=ab9548d06d4b59852a390e8d98b78b9df5382bd6;p=lyx.git diff --git a/src/support/docstream.h b/src/support/docstream.h index 40f8e004db..e2f56f91c8 100644 --- a/src/support/docstream.h +++ b/src/support/docstream.h @@ -12,6 +12,7 @@ #ifndef LYX_DOCSTREAM_H #define LYX_DOCSTREAM_H +#include "TexRow.h" #include "support/docstring.h" #if defined(_MSC_VER) && (_MSC_VER >= 1600) @@ -41,9 +42,9 @@ typedef std::basic_istream idocstream; \endcode, not \code os << c; \endcode . The latter will not output the character, but the code point - as number. This is because we can't overload operator<< (our character - type is not a real type but a typedef). Narrow characters of type char - can be output as usual. + as number if USE_WCHAR_T is not defined. This is because we can't overload + operator<< (our character type is not always a real type but sometimes a + typedef). Narrow characters of type char can be output as usual. */ typedef std::basic_ostream odocstream; @@ -79,32 +80,32 @@ public: /// UCS4 input stringstream typedef std::basic_istringstream idocstringstream; -/// UCS4 output stringstream -typedef std::basic_ostringstream odocstringstream; +/// UCS4 output manipulator +typedef odocstream & (*odocstream_manip)(odocstream &); /** Wrapper class for odocstream. - This class helps ensuring that no blank lines may be inadvertently output. - Use the special variables "breakln" and "safebreakln" as if they were - iomanip's to ensure that the next output will start at the beginning of - a line. Using "breakln", a '\n' char will be output if needed, while - using "safebreakln", "%\n" will be output if needed. - Use countLines() to retrieve the number of \n output since previous call. + This class is used to automatically count the lines of the exported latex + code and also to ensure that no blank lines may be inadvertently output. + To this end, use the special variables "breakln" and "safebreakln" as if + they were iomanip's to ensure that the next output will start at the + beginning of a line. Using "breakln", a '\n' char will be output if needed, + while using "safebreakln", "%\n" will be output if needed. + The class also records the last output character and can tell whether + a paragraph break was just output. */ class otexstream { public: /// - explicit otexstream(odocstream & os) - : os_(os), lines_(0), canbreakline_(false), protectspace_(false) - {} + otexstream(odocstream & os, TexRow & texrow) + : os_(os), texrow_(texrow), canbreakline_(false), + protectspace_(false), parbreak_(true), lastchar_(0) {} /// odocstream & os() { return os_; } /// - void put(char_type const & c); - /// - size_t countLines() { size_t l = lines_; lines_ = 0; return l; } + TexRow & texrow() { return texrow_; } /// - void addLines(size_t n) { lines_ += n; } + void put(char_type const & c); /// void canBreakLine(bool breakline) { canbreakline_ = breakline; } /// @@ -113,15 +114,30 @@ public: void protectSpace(bool protectspace) { protectspace_ = protectspace; } /// bool protectSpace() const { return protectspace_; } + /// + void lastChar(char_type const & c) + { + parbreak_ = (!canbreakline_ && c == '\n'); + canbreakline_ = (c != '\n'); + lastchar_ = c; + } + /// + char_type lastChar() const { return lastchar_; } + /// + bool afterParbreak() const { return parbreak_; } private: /// odocstream & os_; /// - size_t lines_; + TexRow & texrow_; /// bool canbreakline_; /// bool protectspace_; + /// + bool parbreak_; + /// + char_type lastchar_; }; /// Helper structs for breaking a line @@ -141,8 +157,12 @@ otexstream & operator<<(otexstream &, BreakLine); /// otexstream & operator<<(otexstream &, SafeBreakLine); /// +otexstream & operator<<(otexstream &, odocstream_manip); +/// otexstream & operator<<(otexstream &, docstring const &); /// +otexstream & operator<<(otexstream &, std::string const &); +/// otexstream & operator<<(otexstream &, char const *); /// otexstream & operator<<(otexstream &, char);