+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;
+}
+