=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/man_term.c,v retrieving revision 1.71 retrieving revision 1.72 diff -c -r1.71 -r1.72 *** src/usr.bin/mandoc/man_term.c 2011/09/18 10:25:28 1.71 --- src/usr.bin/mandoc/man_term.c 2011/09/19 22:36:11 1.72 *************** *** 1,4 **** ! /* $Id: man_term.c,v 1.71 2011/09/18 10:25:28 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010, 2011 Ingo Schwarze --- 1,4 ---- ! /* $Id: man_term.c,v 1.72 2011/09/19 22:36:11 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010, 2011 Ingo Schwarze *************** *** 241,246 **** --- 241,258 ---- else mt->fl &= ~MANT_LITERAL; + /* + * Unlike .IP and .TP, .HP does not have a HEAD. + * So in case a second call to term_flushln() is needed, + * indentation has to be set up explicitly. + */ + if (MAN_HP == n->parent->tok && p->rmargin < p->maxrmargin) { + p->offset = p->rmargin + 1; + p->rmargin = p->maxrmargin; + p->flags &= ~(TERMP_NOBREAK | TERMP_TWOSPACE); + p->flags |= TERMP_NOSPACE; + } + return(0); } *************** *** 427,433 **** static int pre_HP(DECL_ARGS) { ! size_t len; int ival; const struct man_node *nn; --- 439,445 ---- static int pre_HP(DECL_ARGS) { ! size_t len, one; int ival; const struct man_node *nn; *************** *** 452,459 **** if ((ival = a2width(p, nn->string)) >= 0) len = (size_t)ival; ! if (0 == len) ! len = term_len(p, 1); p->offset = mt->offset; p->rmargin = mt->offset + len; --- 464,474 ---- if ((ival = a2width(p, nn->string)) >= 0) len = (size_t)ival; ! one = term_len(p, 1); ! if (len > one) ! len -= one; ! else ! len = one; p->offset = mt->offset; p->rmargin = mt->offset + len; *************** *** 516,522 **** switch (n->type) { case (MAN_BODY): - p->flags |= TERMP_NOLPAD; p->flags |= TERMP_NOSPACE; break; case (MAN_HEAD): --- 531,536 ---- *************** *** 587,593 **** break; case (MAN_BODY): term_newln(p); - p->flags &= ~TERMP_NOLPAD; break; default: break; --- 601,606 ---- *************** *** 608,614 **** p->flags |= TERMP_NOBREAK; break; case (MAN_BODY): - p->flags |= TERMP_NOLPAD; p->flags |= TERMP_NOSPACE; break; case (MAN_BLOCK): --- 621,626 ---- *************** *** 677,683 **** break; case (MAN_BODY): term_newln(p); - p->flags &= ~TERMP_NOLPAD; break; default: break; --- 689,694 ---- *************** *** 878,884 **** * -man doesn't have nested macros, we don't need to be * more specific than this. */ ! if (MANT_LITERAL & mt->fl && (NULL == n->next || n->next->line > n->line)) { rm = p->rmargin; --- 889,895 ---- * -man doesn't have nested macros, we don't need to be * more specific than this. */ ! if (MANT_LITERAL & mt->fl && ! (TERMP_NOBREAK & p->flags) && (NULL == n->next || n->next->line > n->line)) { rm = p->rmargin; *************** *** 886,892 **** p->rmargin = p->maxrmargin = TERM_MAXMARGIN; p->flags |= TERMP_NOSPACE; term_flushln(p); - p->flags &= ~TERMP_NOLPAD; p->rmargin = rm; p->maxrmargin = rmax; } --- 897,902 ---- *************** *** 968,974 **** term_word(p, ""); term_flushln(p); ! p->flags |= TERMP_NOLPAD | TERMP_NOSPACE; p->offset = p->rmargin; p->rmargin = p->maxrmargin; p->flags &= ~TERMP_NOBREAK; --- 978,984 ---- term_word(p, ""); term_flushln(p); ! p->flags |= TERMP_NOSPACE; p->offset = p->rmargin; p->rmargin = p->maxrmargin; p->flags &= ~TERMP_NOBREAK; *************** *** 1015,1021 **** term_word(p, title); term_flushln(p); ! p->flags |= TERMP_NOLPAD | TERMP_NOSPACE; p->offset = p->rmargin; p->rmargin = p->offset + buflen + titlen < p->maxrmargin ? p->maxrmargin - titlen : p->maxrmargin; --- 1025,1031 ---- 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; *************** *** 1025,1031 **** p->flags &= ~TERMP_NOBREAK; if (p->rmargin + titlen <= p->maxrmargin) { ! p->flags |= TERMP_NOLPAD | TERMP_NOSPACE; p->offset = p->rmargin; p->rmargin = p->maxrmargin; term_word(p, title); --- 1035,1041 ---- 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);