=================================================================== RCS file: /cvs/mandoc/man_term.c,v retrieving revision 1.83 retrieving revision 1.86 diff -u -p -r1.83 -r1.86 --- mandoc/man_term.c 2010/07/22 23:03:15 1.83 +++ mandoc/man_term.c 2010/12/05 16:14:16 1.86 @@ -1,4 +1,4 @@ -/* $Id: man_term.c,v 1.83 2010/07/22 23:03:15 kristaps Exp $ */ +/* $Id: man_term.c,v 1.86 2010/12/05 16:14:16 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons * @@ -92,10 +92,9 @@ static int pre_RS(DECL_ARGS); static int pre_SH(DECL_ARGS); static int pre_SS(DECL_ARGS); static int pre_TP(DECL_ARGS); -static int pre_fi(DECL_ARGS); static int pre_ign(DECL_ARGS); static int pre_in(DECL_ARGS); -static int pre_nf(DECL_ARGS); +static int pre_literal(DECL_ARGS); static int pre_sp(DECL_ARGS); static void post_IP(DECL_ARGS); @@ -130,17 +129,14 @@ static const struct termact termacts[MAN_MAX] = { { NULL, NULL, MAN_NOTEXT }, /* na */ { pre_I, NULL, 0 }, /* i */ { pre_sp, NULL, MAN_NOTEXT }, /* sp */ - { pre_nf, NULL, 0 }, /* nf */ - { pre_fi, NULL, 0 }, /* fi */ + { pre_literal, NULL, 0 }, /* nf */ + { pre_literal, NULL, 0 }, /* fi */ { NULL, NULL, 0 }, /* r */ { NULL, NULL, 0 }, /* RE */ { pre_RS, post_RS, 0 }, /* RS */ { pre_ign, NULL, 0 }, /* DT */ { pre_ign, NULL, 0 }, /* UC */ { pre_ign, NULL, 0 }, /* PD */ - { pre_sp, NULL, MAN_NOTEXT }, /* Sp */ - { pre_nf, NULL, 0 }, /* Vb */ - { pre_fi, NULL, 0 }, /* Ve */ { pre_ign, NULL, 0 }, /* AT */ { pre_in, NULL, MAN_NOTEXT }, /* in */ }; @@ -250,26 +246,24 @@ pre_I(DECL_ARGS) /* ARGSUSED */ static int -pre_fi(DECL_ARGS) +pre_literal(DECL_ARGS) { term_newln(p); - mt->fl &= ~MANT_LITERAL; + switch (n->tok) { + case (MAN_nf): + mt->fl |= MANT_LITERAL; + break; + default: + mt->fl &= ~MANT_LITERAL; + break; + } + return(1); } -/* ARGSUSED */ -static int -pre_nf(DECL_ARGS) -{ - term_newln(p); - mt->fl |= MANT_LITERAL; - return(MAN_Vb != n->tok); -} - - /* ARGSUSED */ static int pre_RB(DECL_ARGS) @@ -916,6 +910,10 @@ print_man_foot(struct termp *p, const void *arg) p->flags |= TERMP_NOSPACE | TERMP_NOBREAK; p->rmargin = p->maxrmargin - term_strlen(p, buf); p->offset = 0; + + /* term_strlen() can return zero. */ + if (p->rmargin == p->maxrmargin) + p->rmargin--; if (meta->source) term_word(p, meta->source);