\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<char_type> odocstream;
/// UCS4 input stringstream
typedef std::basic_istringstream<char_type> idocstringstream;
-/// UCS4 output stringstream
-typedef std::basic_ostringstream<char_type> odocstringstream;
+/// UCS4 output manipulator
+typedef odocstream & (*odocstream_manip)(odocstream &);
/** Wrapper class for odocstream.
This class is used to automatically count the lines of the exported latex
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:
///
otexstream(odocstream & os, TexRow & texrow)
- : os_(os), texrow_(texrow),
- canbreakline_(false), protectspace_(false) {}
+ : os_(os), texrow_(texrow), canbreakline_(false),
+ protectspace_(false), parbreak_(true), lastchar_(0) {}
///
odocstream & os() { return os_; }
///
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_;
bool canbreakline_;
///
bool protectspace_;
+ ///
+ bool parbreak_;
+ ///
+ char_type lastchar_;
};
/// Helper structs for breaking a line
///
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);