+CYOutput &CYOutput::operator <<(char rhs) {
+ if (rhs == ' ') {
+ if (pretty_) {
+ out_ << ' ';
+ mode_ = NoMode;
+ }
+ goto done;
+ }
+
+ if (mode_ == Terminated && rhs != '}')
+ out_ << ';';
+
+ if (rhs == ';') {
+ if (pretty_)
+ goto none;
+ else {
+ mode_ = Terminated;
+ goto done;
+ }
+ } else if (rhs == '-') {
+ if (mode_ == NoHyphen)
+ out_ << ' ';
+ mode_ = NoHyphen;
+ } else if (WordEndRange_[rhs]) {
+ if (mode_ == NoLetter)
+ out_ << ' ';
+ mode_ = NoLetter;
+ } else none:
+ mode_ = NoMode;
+
+ out_ << rhs;
+ done:
+ return *this;
+}
+
+CYOutput &CYOutput::operator <<(const char *rhs) {
+ size_t size(strlen(rhs));
+
+ if (size == 1)
+ return *this << *rhs;
+
+ if (mode_ == Terminated)
+ out_ << ';';
+ else if (
+ mode_ == NoHyphen && *rhs == '-' ||
+ mode_ == NoLetter && WordEndRange_[*rhs]
+ )
+ out_ << ' ';
+
+ if (WordEndRange_[rhs[size - 1]])
+ mode_ = NoLetter;
+ else
+ mode_ = NoMode;
+
+ out_ << rhs;
+ return *this;
+}
+
+void CYOutput::Indent() {
+ if (!pretty_)
+ return;
+ for (unsigned i(0); i != indent_; ++i)
+ out_ << " ";
+ mode_ = NoMode;
+}
+