aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2011-09-20 09:02:23 +0000
committerIngo Schwarze <schwarze@openbsd.org>2011-09-20 09:02:23 +0000
commitec760ca5e2ff2a1ab37653be558d6b2736219f4d (patch)
tree734ae6c6ca012430cfb5e35662417c0f6411dea1 /mdoc_term.c
parenteee1390dda1a4f11d87431577c7c95163d5f60a5 (diff)
downloadmandoc-ec760ca5e2ff2a1ab37653be558d6b2736219f4d.tar.gz
mandoc-ec760ca5e2ff2a1ab37653be558d6b2736219f4d.tar.zst
mandoc-ec760ca5e2ff2a1ab37653be558d6b2736219f4d.zip
Sync print_mdoc_head to print_man_head;
this was forgotten after man_term.c rev. 1.25 on March 2, 2010. The benefit is a sane page header line when .Dt is very long. Reminded by Thomas Klausner <wiz at NetBSD>, thanks.
Diffstat (limited to 'mdoc_term.c')
-rw-r--r--mdoc_term.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/mdoc_term.c b/mdoc_term.c
index 7f68c229..5f55d648 100644
--- a/mdoc_term.c
+++ b/mdoc_term.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_term.c,v 1.234 2011/09/19 22:36:16 schwarze Exp $ */
+/* $Id: mdoc_term.c,v 1.235 2011/09/20 09:02:23 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -458,13 +458,11 @@ static void
print_mdoc_head(struct termp *p, const void *arg)
{
char buf[BUFSIZ], title[BUFSIZ];
+ size_t buflen, titlen;
const struct mdoc_meta *m;
m = (const struct mdoc_meta *)arg;
- p->rmargin = p->maxrmargin;
- p->offset = 0;
-
/*
* The header is strange. It has three components, which are
* really two with the first duplicated. It goes like this:
@@ -478,8 +476,12 @@ print_mdoc_head(struct termp *p, const void *arg)
* switches on the manual section.
*/
+ p->offset = 0;
+ p->rmargin = p->maxrmargin;
+
assert(m->vol);
strlcpy(buf, m->vol, BUFSIZ);
+ buflen = term_strlen(p, buf);
if (m->arch) {
strlcat(buf, " (", BUFSIZ);
@@ -488,33 +490,38 @@ print_mdoc_head(struct termp *p, const void *arg)
}
snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec);
+ titlen = term_strlen(p, title);
- p->offset = 0;
- p->rmargin = (p->maxrmargin -
- term_strlen(p, buf) + term_len(p, 1)) / 2;
p->flags |= TERMP_NOBREAK | TERMP_NOSPACE;
+ p->offset = 0;
+ p->rmargin = 2 * (titlen+1) + buflen < p->maxrmargin ?
+ (p->maxrmargin -
+ term_strlen(p, buf) + term_len(p, 1)) / 2 :
+ p->maxrmargin - buflen;
term_word(p, title);
term_flushln(p);
- p->offset = p->rmargin;
- p->rmargin = p->maxrmargin - term_strlen(p, title);
p->flags |= TERMP_NOSPACE;
+ p->offset = p->rmargin;
+ p->rmargin = p->offset + buflen + titlen < p->maxrmargin ?
+ p->maxrmargin - titlen : p->maxrmargin;
term_word(p, buf);
term_flushln(p);
- p->offset = p->rmargin;
- p->rmargin = p->maxrmargin;
p->flags &= ~TERMP_NOBREAK;
- p->flags |= TERMP_NOSPACE;
-
- term_word(p, title);
- term_flushln(p);
+ if (p->rmargin + titlen <= p->maxrmargin) {
+ p->flags |= TERMP_NOSPACE;
+ p->offset = p->rmargin;
+ p->rmargin = p->maxrmargin;
+ term_word(p, title);
+ term_flushln(p);
+ }
+ p->flags &= ~TERMP_NOSPACE;
p->offset = 0;
p->rmargin = p->maxrmargin;
- p->flags &= ~TERMP_NOSPACE;
}