=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mdoc_term.c,v retrieving revision 1.136 retrieving revision 1.137 diff -c -r1.136 -r1.137 *** src/usr.bin/mandoc/mdoc_term.c 2011/09/19 22:36:11 1.136 --- src/usr.bin/mandoc/mdoc_term.c 2011/09/20 09:02:18 1.137 *************** *** 1,4 **** ! /* $Id: mdoc_term.c,v 1.136 2011/09/19 22:36:11 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze --- 1,4 ---- ! /* $Id: mdoc_term.c,v 1.137 2011/09/20 09:02:18 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze *************** *** 454,466 **** print_mdoc_head(struct termp *p, const void *arg) { char buf[BUFSIZ], title[BUFSIZ]; 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: --- 454,464 ---- 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; /* * The header is strange. It has three components, which are * really two with the first duplicated. It goes like this: *************** *** 474,481 **** --- 472,483 ---- * 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); *************** *** 484,516 **** } snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec); - p->offset = 0; - p->rmargin = (p->maxrmargin - - term_strlen(p, buf) + term_len(p, 1)) / 2; p->flags |= TERMP_NOBREAK | TERMP_NOSPACE; term_word(p, title); term_flushln(p); - p->offset = p->rmargin; - p->rmargin = p->maxrmargin - term_strlen(p, title); p->flags |= TERMP_NOSPACE; 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); ! p->offset = 0; p->rmargin = p->maxrmargin; - p->flags &= ~TERMP_NOSPACE; } --- 486,523 ---- } snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec); + titlen = term_strlen(p, title); 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->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->flags &= ~TERMP_NOBREAK; ! 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; }