summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-11-20 11:06:36 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-11-20 11:06:36 +0200
commit6ae324a6088efdc353478623804f5b13de8a0b0b (patch)
tree4a3a0b48906ea712b839175d96f67ae5f49d8146 /cli
parent813e4744038ec3a1ca8095111074c1cb2a824d83 (diff)
Implement line break support (\n)
Note that several consecutive breaks in the man format will be collapsed into a single one.
Diffstat (limited to 'cli')
-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.