summaryrefslogtreecommitdiff
path: root/cli/context.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cli/context.cxx')
-rw-r--r--cli/context.cxx80
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.