aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/man_term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2011-12-04 23:10:52 +0000
committerIngo Schwarze <schwarze@openbsd.org>2011-12-04 23:10:52 +0000
commit72e1a5b05fe55707d09bd1ef43b0ddb9249a2331 (patch)
tree562e40ea36320e6ecd8ae791a967205b271b4abb /man_term.c
parent7284ec2208ed30f3a0d6f9975f330a7ebb44b988 (diff)
downloadmandoc-72e1a5b05fe55707d09bd1ef43b0ddb9249a2331.tar.gz
mandoc-72e1a5b05fe55707d09bd1ef43b0ddb9249a2331.tar.zst
mandoc-72e1a5b05fe55707d09bd1ef43b0ddb9249a2331.zip
Implement mdoc(7)-like output style variant for man(7) documents:
* one instead of three blank lines after the page header; * one instead of three blank lines before the page footer; * source instead of title(section) in the lower right corner. Select this style variant with the undocumented command line option -Omdoc. In the long run, we hope to unify the ouput of both languages and to pull this out again, but that requires coordination with groff. Grudgingly ok and, (as usual,-) more comments requested by kristaps@
Diffstat (limited to 'man_term.c')
-rw-r--r--man_term.c57
1 files changed, 38 insertions, 19 deletions
diff --git a/man_term.c b/man_term.c
index cd2c5977..180fc677 100644
--- a/man_term.c
+++ b/man_term.c
@@ -1,4 +1,4 @@
-/* $Id: man_term.c,v 1.125 2011/12/04 00:44:12 schwarze Exp $ */
+/* $Id: man_term.c,v 1.126 2011/12/04 23:10:52 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -970,11 +970,26 @@ print_man_foot(struct termp *p, const void *arg)
term_fontrepl(p, TERMFONT_NONE);
term_vspace(p);
- term_vspace(p);
- term_vspace(p);
- snprintf(title, BUFSIZ, "%s(%s)", meta->title, meta->msec);
+
+ /*
+ * Temporary, undocumented option to imitate mdoc(7) output.
+ * In the bottom right corner, use the source instead of
+ * the title.
+ */
+
+ if ( ! p->mdocstyle) {
+ term_vspace(p);
+ term_vspace(p);
+ snprintf(title, BUFSIZ, "%s(%s)", meta->title, meta->msec);
+ } else if (meta->source) {
+ strlcpy(title, meta->source, BUFSIZ);
+ } else {
+ title[0] = '\0';
+ }
datelen = term_strlen(p, meta->date);
+ /* Bottom left corner: manual source. */
+
p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;
p->offset = 0;
p->rmargin = (p->maxrmargin - datelen + term_len(p, 1)) / 2;
@@ -983,6 +998,8 @@ print_man_foot(struct termp *p, const void *arg)
term_word(p, meta->source);
term_flushln(p);
+ /* At the bottom in the middle: manual date. */
+
p->flags |= TERMP_NOSPACE;
p->offset = p->rmargin;
p->rmargin = p->maxrmargin - term_strlen(p, title);
@@ -992,6 +1009,8 @@ print_man_foot(struct termp *p, const void *arg)
term_word(p, meta->date);
term_flushln(p);
+ /* Bottom right corner: manual title and section. */
+
p->flags &= ~TERMP_NOBREAK;
p->flags |= TERMP_NOSPACE;
p->offset = p->rmargin;
@@ -1013,21 +1032,14 @@ print_man_head(struct termp *p, const void *arg)
assert(m->title);
assert(m->msec);
- /*
- * Note that old groff would spit out some spaces before the
- * header. We discontinue this strange behaviour, but at one
- * point we did so here.
- */
-
- p->offset = 0;
- p->rmargin = p->maxrmargin;
-
- buf[0] = title[0] = '\0';
-
if (m->vol)
strlcpy(buf, m->vol, BUFSIZ);
+ else
+ buf[0] = '\0';
buflen = term_strlen(p, buf);
+ /* Top left corner: manual title and section. */
+
snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec);
titlen = term_strlen(p, title);
@@ -1041,6 +1053,8 @@ print_man_head(struct termp *p, const void *arg)
term_word(p, title);
term_flushln(p);
+ /* At the top in the middle: manual volume. */
+
p->flags |= TERMP_NOSPACE;
p->offset = p->rmargin;
p->rmargin = p->offset + buflen + titlen < p->maxrmargin ?
@@ -1049,6 +1063,8 @@ print_man_head(struct termp *p, const void *arg)
term_word(p, buf);
term_flushln(p);
+ /* Top right corner: title and section, again. */
+
p->flags &= ~TERMP_NOBREAK;
if (p->rmargin + titlen <= p->maxrmargin) {
p->flags |= TERMP_NOSPACE;
@@ -1063,11 +1079,14 @@ print_man_head(struct termp *p, const void *arg)
p->rmargin = p->maxrmargin;
/*
- * Groff likes to have some leading spaces before content. Well
- * that's fine by me.
+ * Groff prints three blank lines before the content.
+ * Do the same, except in the temporary, undocumented
+ * mode imitating mdoc(7) output.
*/
term_vspace(p);
- term_vspace(p);
- term_vspace(p);
+ if ( ! p->mdocstyle) {
+ term_vspace(p);
+ term_vspace(p);
+ }
}