diff options
-rw-r--r-- | cli/context.cxx | 80 |
1 files changed, 65 insertions, 15 deletions
diff --git a/cli/context.cxx b/cli/context.cxx index d13f1e5..63de336 100644 --- a/cli/context.cxx +++ b/cli/context.cxx @@ -345,31 +345,54 @@ format_line (output_type ot, string& r, const char* s, size_t n) switch (c) { - case '\\': + case 'n': { switch (ot) { + case ot_plain: + { + r += '\n'; + break; + } + case ot_html: + { + if (!r.empty () && r[r.size () - 1] != '\n') + r += '\n'; + + r += "<br/>"; + break; + } case ot_man: { - r += "\\e"; + if (!r.empty () && r[r.size () - 1] != '\n') + r += '\n'; + + // Note that if we have several consecutive breaks, they + // will be collapsed into a single one. No, .sp doesn't + // work (or, more exactly, will only work for two breaks). + // + r += ".br"; break; } - default: + } + + // Skip following spaces. + // + for (; i + 1 < n && s[i + 1] == ' '; ++i) ; + + switch (ot) + { + case ot_plain: break; + case ot_html: + case ot_man: { - r += '\\'; + if (i + 1 < n) // More text in this paragraph? + r += "\n"; + break; } } - break; - } - case '"': - { - r += '"'; - break; - } - case '\'': - { - r += '\''; + break; } case 'c': @@ -579,6 +602,33 @@ format_line (output_type ot, string& r, const char* s, size_t n) r += 'l'; break; } + case '\\': + { + switch (ot) + { + case ot_man: + { + r += "\\e"; + break; + } + default: + { + r += '\\'; + break; + } + } + break; + } + case '"': + { + r += '"'; + break; + } + case '\'': + { + r += '\''; + break; + } case '}': { r += '}'; @@ -1211,7 +1261,7 @@ format (output_type ot, string const& s, bool para) { v += ".nf\n"; - // Note that if we have several consequtive blank lines, they + // Note that if we have several consecutive blank lines, they // will be collapsed into a single one. No, .sp doesn't work. // char c, p ('\n'); // Current and previous characters. |