Improve rule generation in the "man" backend so that if the output
authorben <ben@cda61777-01e9-0310-a592-d414129be87e>
Sat, 6 May 2006 20:01:09 +0000 (20:01 +0000)
committerben <ben@cda61777-01e9-0310-a592-d414129be87e>
Sat, 6 May 2006 20:01:09 +0000 (20:01 +0000)
is processed by nroff, the rule is made up of \cfg{man-rule}
characters (same defaults as \cfg{text-rule}).

git-svn-id: svn://svn.tartarus.org/sgt/halibut@6651 cda61777-01e9-0310-a592-d414129be87e

bk_man.c
doc/output.but

index b380a1d..2eff926 100644 (file)
--- a/bk_man.c
+++ b/bk_man.c
@@ -13,7 +13,7 @@ typedef struct {
     int mindepth;
     char *filename;
     int charset;
-    wchar_t *bullet, *lquote, *rquote;
+    wchar_t *bullet, *rule, *lquote, *rquote;
 } manconfig;
 
 static void man_text(FILE *, word *,
@@ -127,6 +127,7 @@ static manconfig man_configure(paragraph *source) {
     ret.filename = dupstr("output.1");
     ret.charset = CS_ASCII;
     ret.bullet = L"\x2022\0o\0\0";
+    ret.rule = L"\x2500\0-\0\0";
     ret.lquote = L"\x2018\0\x2019\0\"\0\"\0\0";
     ret.rquote = uadv(ret.lquote);
 
@@ -170,6 +171,8 @@ static manconfig man_configure(paragraph *source) {
                ret.filename = dupstr(adv(p->origkeyword));
            } else if (!ustricmp(p->keyword, L"man-bullet")) {
                ret.bullet = uadv(p->keyword);
+           } else if (!ustricmp(p->keyword, L"man-rule")) {
+               ret.rule = uadv(p->keyword);
            } else if (!ustricmp(p->keyword, L"man-quotes")) {
                if (*uadv(p->keyword) && *uadv(uadv(p->keyword))) {
                    ret.lquote = uadv(p->keyword);
@@ -180,7 +183,8 @@ static manconfig man_configure(paragraph *source) {
     }
 
     /*
-     * Now process fallbacks on quote characters and bullets.
+     * Now process fallbacks on quote characters, bullets, and the
+     * rule character.
      */
     while (*uadv(ret.rquote) && *uadv(uadv(ret.rquote)) &&
           (!troff_ok(ret.charset, ret.lquote) ||
@@ -193,6 +197,10 @@ static manconfig man_configure(paragraph *source) {
           !troff_ok(ret.charset, ret.bullet))
        ret.bullet = uadv(ret.bullet);
 
+    while (*ret.rule && *uadv(ret.rule) &&
+          !troff_ok(ret.charset, ret.rule))
+       ret.rule = uadv(ret.rule);
+
     return ret;
 }
 
@@ -379,13 +387,19 @@ void man_backend(paragraph *sourceform, keywordlist *keywords,
        break;
 
       case para_Rule:
-       /*
-        * New paragraph containing a horizontal line 1/2em above the
-        * baseline whose length is the line length minus the current
-        * indent.
-        */
-       cleanup_described_thing;
-       fprintf(fp, ".PP\n\\u\\l'\\n(.lu-\\n(.iu'\\d\n");
+       {
+           char *ruletext;
+           /*
+            * New paragraph containing a horizontal line 1/2em above
+            * the baseline, or a line of rule characters, whose
+            * length is the line length minus the current indent.
+            */
+           cleanup_described_thing;
+           man_convert(conf.rule, -1, &ruletext, 0, conf.charset, NULL);
+           fprintf(fp, ".PP\n.ie t \\u\\l'\\n(.lu-\\n(.iu'\\d\n"
+                   ".el \\l'\\n(.lu-\\n(.iu\\&%s'\n", ruletext);
+           sfree(ruletext);
+       }
        break;
 
       case para_LcontPush:
index 351726e..c9614cd 100644 (file)
@@ -1064,6 +1064,15 @@ sensible to output man pages in that charset.
 You can specify multiple fallback options. Works exactly like the
 \cw{\\cfg\{text-bullet\}} directive (see \k{output-text-characters}).
 
+\dt \I{\cw{\\cfg\{man-rule\}}}\cw{\\cfg\{man-rule\}\{}\e{text}\cw{\}}[\cw{\{}\e{text}...\cw{\}}]
+
+\dd This specifies the text which should be used for drawing
+\i{horizontal rules} (generated by \i\c{\\rule}; see
+\k{input-rule}) when the manual page is rendered into text.
+It should only be one character long, but otherwise
+it works like the \cw{\\cfg\{text-rule\}} directive
+(see \k{output-text-characters}).
+
 \dt \I{\cw{\\cfg\{man-quotes\}}}\cw{\\cfg\{man-quotes\}\{}\e{open-quote}\cw{\}\{}\e{close-quote}\cw{\}}[\cw{\{}\e{open-quote}\cw{\}\{}\e{close-quote}...\cw{\}}]
 
 \dd Specifies the quotation marks to use, overriding any
@@ -1084,6 +1093,7 @@ The \i{default settings} for the \cw{man} page output format are:
 \c
 \c \cfg{man-charset}{ASCII}
 \c \cfg{man-bullet}{\u2022}{o}
+\c \cfg{man-rule}{\u2500}{-}
 \c \cfg{man-quotes}{\u2018}{\u2019}{"}{"}
 
 \H{output-info} GNU \c{info}