=================================================================== RCS file: /cvs/mandoc/man_term.c,v retrieving revision 1.183 retrieving revision 1.190 diff -u -p -r1.183 -r1.190 --- mandoc/man_term.c 2015/04/19 19:44:21 1.183 +++ mandoc/man_term.c 2017/02/11 21:49:50 1.190 @@ -1,7 +1,7 @@ -/* $Id: man_term.c,v 1.183 2015/04/19 19:44:21 schwarze Exp $ */ +/* $Id: man_term.c,v 1.190 2017/02/11 21:49:50 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons - * Copyright (c) 2010-2015 Ingo Schwarze + * Copyright (c) 2010-2015, 2017 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -143,6 +143,7 @@ terminal_man(void *arg, const struct roff_man *man) struct termp *p; struct roff_node *n; struct mtermp mt; + size_t save_defindent; p = (struct termp *)arg; p->overstep = 0; @@ -170,6 +171,7 @@ terminal_man(void *arg, const struct roff_man *man) n = n->next; } } else { + save_defindent = p->defindent; if (p->defindent == 0) p->defindent = 7; term_begin(p, print_man_head, print_man_foot, &man->meta); @@ -177,6 +179,7 @@ terminal_man(void *arg, const struct roff_man *man) if (n != NULL) print_man_nodelist(p, &mt, n, &man->meta); term_end(p); + p->defindent = save_defindent; } } @@ -212,15 +215,15 @@ static int pre_ign(DECL_ARGS) { - return(0); + return 0; } static int pre_ll(DECL_ARGS) { - term_setwidth(p, n->nchild ? n->child->string : NULL); - return(0); + term_setwidth(p, n->child != NULL ? n->child->string : NULL); + return 0; } static int @@ -228,7 +231,7 @@ pre_I(DECL_ARGS) { term_fontrepl(p, TERMFONT_UNDER); - return(1); + return 1; } static int @@ -255,7 +258,7 @@ pre_literal(DECL_ARGS) p->flags |= TERMP_NOSPACE; } - return(0); + return 0; } static int @@ -266,12 +269,12 @@ pre_PD(DECL_ARGS) n = n->child; if (n == NULL) { mt->pardist = 1; - return(0); + return 0; } assert(n->type == ROFFT_TEXT); if (a2roffsu(n->string, &su, SCALE_VS)) mt->pardist = term_vspan(p, &su); - return(0); + return 0; } static int @@ -319,13 +322,13 @@ pre_alternate(DECL_ARGS) mt->fl |= MANT_LITERAL; assert(nn->type == ROFFT_TEXT); term_word(p, nn->string); - if (nn->flags & MAN_EOS) + if (nn->flags & NODE_EOS) p->flags |= TERMP_SENTENCE; if (nn->next) p->flags |= TERMP_NOSPACE; } - return(0); + return 0; } static int @@ -333,7 +336,7 @@ pre_B(DECL_ARGS) { term_fontrepl(p, TERMFONT_BOLD); - return(1); + return 1; } static int @@ -355,7 +358,7 @@ pre_OP(DECL_ARGS) term_fontrepl(p, TERMFONT_NONE); p->flags |= TERMP_NOSPACE; term_word(p, "]"); - return(0); + return 0; } static int @@ -365,20 +368,17 @@ pre_ft(DECL_ARGS) if (NULL == n->child) { term_fontlast(p); - return(0); + return 0; } cp = n->child->string; switch (*cp) { case '4': - /* FALLTHROUGH */ case '3': - /* FALLTHROUGH */ case 'B': term_fontrepl(p, TERMFONT_BOLD); break; case '2': - /* FALLTHROUGH */ case 'I': term_fontrepl(p, TERMFONT_UNDER); break; @@ -386,16 +386,14 @@ pre_ft(DECL_ARGS) term_fontlast(p); break; case '1': - /* FALLTHROUGH */ case 'C': - /* FALLTHROUGH */ case 'R': term_fontrepl(p, TERMFONT_NONE); break; default: break; } - return(0); + return 0; } static int @@ -410,7 +408,7 @@ pre_in(DECL_ARGS) if (NULL == n->child) { p->offset = mt->offset; - return(0); + return 0; } cp = n->child->string; @@ -424,7 +422,7 @@ pre_in(DECL_ARGS) cp--; if ( ! a2roffsu(++cp, &su, SCALE_EN)) - return(0); + return 0; v = (term_hspan(p, &su) + 11) / 24; @@ -437,7 +435,7 @@ pre_in(DECL_ARGS) if (p->offset > SHRT_MAX) p->offset = term_len(p, p->defindent); - return(0); + return 0; } static int @@ -449,16 +447,11 @@ pre_sp(DECL_ARGS) if ((NULL == n->prev && n->parent)) { switch (n->parent->tok) { case MAN_SH: - /* FALLTHROUGH */ case MAN_SS: - /* FALLTHROUGH */ case MAN_PP: - /* FALLTHROUGH */ case MAN_LP: - /* FALLTHROUGH */ case MAN_P: - /* FALLTHROUGH */ - return(0); + return 0; default: break; } @@ -493,7 +486,7 @@ pre_sp(DECL_ARGS) p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND); } - return(0); + return 0; } static int @@ -506,11 +499,11 @@ pre_HP(DECL_ARGS) switch (n->type) { case ROFFT_BLOCK: print_bvspace(p, n, mt->pardist); - return(1); + return 1; case ROFFT_BODY: break; default: - return(0); + return 0; } if ( ! (MANT_LITERAL & mt->fl)) { @@ -533,7 +526,7 @@ pre_HP(DECL_ARGS) p->offset = mt->offset; p->rmargin = mt->offset + len; - return(1); + return 1; } static void @@ -578,7 +571,7 @@ pre_PP(DECL_ARGS) break; } - return(n->type != ROFFT_HEAD); + return n->type != ROFFT_HEAD; } static int @@ -600,7 +593,7 @@ pre_IP(DECL_ARGS) print_bvspace(p, n, mt->pardist); /* FALLTHROUGH */ default: - return(1); + return 1; } /* Calculate the offset from the optional second argument. */ @@ -630,7 +623,7 @@ pre_IP(DECL_ARGS) if (savelit) mt->fl |= MANT_LITERAL; - return(0); + return 0; case ROFFT_BODY: p->offset = mt->offset + len; p->rmargin = p->maxrmargin; @@ -639,7 +632,7 @@ pre_IP(DECL_ARGS) break; } - return(1); + return 1; } static void @@ -671,7 +664,7 @@ pre_TP(DECL_ARGS) switch (n->type) { case ROFFT_HEAD: - p->flags |= TERMP_NOBREAK; + p->flags |= TERMP_NOBREAK | TERMP_BRTRSP; p->trailspace = 1; break; case ROFFT_BODY: @@ -681,13 +674,13 @@ pre_TP(DECL_ARGS) print_bvspace(p, n, mt->pardist); /* FALLTHROUGH */ default: - return(1); + return 1; } /* Calculate offset. */ if ((nn = n->parent->head->child) != NULL && - nn->string != NULL && ! (MAN_LINE & nn->flags) && + nn->string != NULL && ! (NODE_LINE & nn->flags) && a2roffsu(nn->string, &su, SCALE_EN)) { len = term_hspan(p, &su) / 24; if (len < 0 && (size_t)(-len) > mt->offset) @@ -708,7 +701,7 @@ pre_TP(DECL_ARGS) /* Don't print same-line elements. */ nn = n->child; - while (NULL != nn && 0 == (MAN_LINE & nn->flags)) + while (NULL != nn && 0 == (NODE_LINE & nn->flags)) nn = nn->next; while (NULL != nn) { @@ -718,18 +711,18 @@ pre_TP(DECL_ARGS) if (savelit) mt->fl |= MANT_LITERAL; - return(0); + return 0; case ROFFT_BODY: p->offset = mt->offset + len; p->rmargin = p->maxrmargin; p->trailspace = 0; - p->flags &= ~TERMP_NOBREAK; + p->flags &= ~(TERMP_NOBREAK | TERMP_BRTRSP); break; default: break; } - return(1); + return 1; } static void @@ -792,7 +785,7 @@ pre_SS(DECL_ARGS) break; } - return(1); + return 1; } static void @@ -829,7 +822,8 @@ pre_SH(DECL_ARGS) do { n = n->prev; - } while (n != NULL && termacts[n->tok].flags & MAN_NOTEXT); + } while (n != NULL && n->tok < MAN_MAX && + termacts[n->tok].flags & MAN_NOTEXT); if (n == NULL || (n->tok == MAN_SH && n->body->child == NULL)) break; @@ -853,7 +847,7 @@ pre_SH(DECL_ARGS) break; } - return(1); + return 1; } static void @@ -880,9 +874,9 @@ pre_RS(DECL_ARGS) switch (n->type) { case ROFFT_BLOCK: term_newln(p); - return(1); + return 1; case ROFFT_HEAD: - return(0); + return 0; default: break; } @@ -906,7 +900,7 @@ pre_RS(DECL_ARGS) mt->lmargincur = mt->lmarginsz; mt->lmargin[mt->lmargincur] = term_len(p, p->defindent); - return(1); + return 1; } static void @@ -934,7 +928,7 @@ static int pre_UR(DECL_ARGS) { - return (n->type != ROFFT_HEAD); + return n->type != ROFFT_HEAD; } static void @@ -970,17 +964,17 @@ print_man_node(DECL_ARGS) if ('\0' == *n->string) { term_vspace(p); return; - } else if (' ' == *n->string && MAN_LINE & n->flags) + } else if (' ' == *n->string && NODE_LINE & n->flags) term_newln(p); term_word(p, n->string); goto out; case ROFFT_EQN: - if ( ! (n->flags & MAN_LINE)) + if ( ! (n->flags & NODE_LINE)) p->flags |= TERMP_NOSPACE; term_eqn(p, n->eqn); - if (n->next != NULL && ! (n->next->flags & MAN_LINE)) + if (n->next != NULL && ! (n->next->flags & NODE_LINE)) p->flags |= TERMP_NOSPACE; return; case ROFFT_TBL: @@ -1017,7 +1011,7 @@ out: */ if (mt->fl & MANT_LITERAL && ! (p->flags & (TERMP_NOBREAK | TERMP_NONEWLINE)) && - (n->next == NULL || n->next->flags & MAN_LINE)) { + (n->next == NULL || n->next->flags & NODE_LINE)) { rm = p->rmargin; rmax = p->maxrmargin; p->rmargin = p->maxrmargin = TERM_MAXMARGIN; @@ -1033,7 +1027,7 @@ out: p->rmargin = rm; p->maxrmargin = rmax; } - if (MAN_EOS & n->flags) + if (NODE_EOS & n->flags) p->flags |= TERMP_SENTENCE; }