=================================================================== RCS file: /cvs/mandoc/man_term.c,v retrieving revision 1.57 retrieving revision 1.62 diff -u -p -r1.57 -r1.62 --- mandoc/man_term.c 2010/03/23 11:30:48 1.57 +++ mandoc/man_term.c 2010/05/10 08:31:41 1.62 @@ -1,4 +1,4 @@ -/* $Id: man_term.c,v 1.57 2010/03/23 11:30:48 kristaps Exp $ */ +/* $Id: man_term.c,v 1.62 2010/05/10 08:31:41 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -142,6 +142,12 @@ static const struct termact termacts[MAN_MAX] = { { pre_sp, NULL, MAN_NOTEXT }, /* Sp */ { pre_nf, NULL, 0 }, /* Vb */ { pre_fi, NULL, 0 }, /* Ve */ + { pre_ign, NULL, MAN_NOTEXT }, /* de */ + { pre_ign, NULL, MAN_NOTEXT }, /* dei */ + { pre_ign, NULL, MAN_NOTEXT }, /* am */ + { pre_ign, NULL, MAN_NOTEXT }, /* ami */ + { pre_ign, NULL, MAN_NOTEXT }, /* ig */ + { NULL, NULL, 0 }, /* . */ }; @@ -156,10 +162,12 @@ terminal_man(void *arg, const struct man *man) p = (struct termp *)arg; + p->overstep = 0; + p->maxrmargin = 65; + if (NULL == p->symtab) switch (p->enc) { case (TERMENC_ASCII): - p->maxrmargin = 65; p->symtab = chars_init(CHARS_ASCII); break; default: @@ -252,7 +260,6 @@ static int pre_fi(DECL_ARGS) { - p->rmargin = p->maxrmargin = 65; mt->fl &= ~MANT_LITERAL; return(1); } @@ -263,10 +270,7 @@ static int pre_nf(DECL_ARGS) { - p->rmargin = p->maxrmargin = 78; - term_newln(p); mt->fl |= MANT_LITERAL; - return(MAN_Vb != n->tok); } @@ -365,7 +369,7 @@ pre_sp(DECL_ARGS) if (0 == len) term_newln(p); - for (i = 0; i < len; i++) + for (i = 0; i <= len; i++) term_vspace(p); return(0); @@ -706,6 +710,9 @@ pre_SH(DECL_ARGS) if (n->prev && MAN_SH == n->prev->tok) if (NULL == n->prev->body->child) break; + /* If the first macro, no vspae. */ + if (NULL == n->prev) + break; term_vspace(p); break; case (MAN_HEAD): @@ -783,6 +790,8 @@ post_RS(DECL_ARGS) case (MAN_BLOCK): mt->offset = mt->lmargin = INDENT; break; + case (MAN_HEAD): + break; default: term_newln(p); p->offset = INDENT; @@ -810,8 +819,10 @@ print_man_node(DECL_ARGS) /* FIXME: this means that macro lines are munged! */ if (MANT_LITERAL & mt->fl) { + p->rmargin = p->maxrmargin = TERM_MAXMARGIN; p->flags |= TERMP_NOSPACE; term_flushln(p); + p->rmargin = p->maxrmargin = 65; } break; default: @@ -882,7 +893,14 @@ print_man_head(struct termp *p, const struct man_meta char buf[BUFSIZ], title[BUFSIZ]; size_t buflen, titlen; + /* + * 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->rmargin = p->maxrmargin; + p->offset = 0; buf[0] = title[0] = '\0'; @@ -922,4 +940,13 @@ print_man_head(struct termp *p, const struct man_meta p->rmargin = p->maxrmargin; p->offset = 0; p->flags &= ~TERMP_NOSPACE; + + /* + * Groff likes to have some leading spaces before content. Well + * that's fine by me. + */ + + term_vspace(p); + term_vspace(p); + term_vspace(p); }