-void otexstream::put(char_type const & c)
-{
- if (protectspace_) {
- if (!canbreakline_ && c == ' ')
- os_ << "{}";
- protectspace_ = false;
- }
- os_.put(c);
- if (c == '\n') {
- ++lines_;
- canbreakline_ = false;
- } else
- canbreakline_ = true;
-}
-
-
-BreakLine breakln;
-SafeBreakLine safebreakln;
-
-
-otexstream & operator<<(otexstream & ots, BreakLine)
-{
- if (ots.canBreakLine()) {
- ots.os().put('\n');
- ots.canBreakLine(false);
- ots.addLines(1);
- }
- ots.protectSpace(false);
- return ots;
-}
-
-
-otexstream & operator<<(otexstream & ots, SafeBreakLine)
-{
- if (ots.canBreakLine()) {
- ots.os() << "%\n";
- ots.canBreakLine(false);
- ots.addLines(1);
- }
- ots.protectSpace(false);
- return ots;
-}
-
-
-otexstream & operator<<(otexstream & ots, SetEnc e)
-{
- ots.os() << e;
- ots.canBreakLine(true);
- ots.protectSpace(false);
- return ots;
-}
-
-
-otexstream & operator<<(otexstream & ots, docstring const & s)
-{
- size_t const len = s.length();
-
- // Check whether there's something to output
- if (len == 0)
- return ots;
-
- if (ots.protectSpace()) {
- if (!ots.canBreakLine() && s[0] == ' ')
- ots.os() << "{}";
- ots.protectSpace(false);
- }
- ots.os() << s;
- ots.addLines(count(s.begin(), s.end(), '\n'));
- ots.canBreakLine(s[len - 1] != '\n');
- return ots;
-}
-
-
-otexstream & operator<<(otexstream & ots, char const * s)
-{
- size_t const len = strlen(s);
-
- // Check whether there's something to output
- if (len == 0)
- return ots;
-
- if (ots.protectSpace()) {
- if (!ots.canBreakLine() && s[0] == ' ')
- ots.os() << "{}";
- ots.protectSpace(false);
- }
- ots.os() << s;
- ots.addLines(count(s, s + len, '\n'));
- ots.canBreakLine(s[len - 1] != '\n');
- return ots;
-}
-
-
-otexstream & operator<<(otexstream & ots, char c)
-{
- if (ots.protectSpace()) {
- if (!ots.canBreakLine() && c == ' ')
- ots.os() << "{}";
- ots.protectSpace(false);
- }
- ots.os() << c;
- if (c == '\n')
- ots.addLines(1);
- ots.canBreakLine(c != '\n');
- return ots;
-}
-
-
-otexstream & operator<<(otexstream & ots, double d)
-{
- ots.os() << d;
- ots.canBreakLine(true);
- ots.protectSpace(false);
- return ots;
-}
-
-
-otexstream & operator<<(otexstream & ots, int i)
-{
- ots.os() << i;
- ots.canBreakLine(true);
- ots.protectSpace(false);
- return ots;
-}
-
-
-otexstream & operator<<(otexstream & ots, unsigned int i)
-{
- ots.os() << i;
- ots.canBreakLine(true);
- ots.protectSpace(false);
- return ots;
-}
-
-}