=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/man_term.c,v retrieving revision 1.99 retrieving revision 1.100 diff -c -r1.99 -r1.100 *** src/usr.bin/mandoc/man_term.c 2014/04/08 07:13:01 1.99 --- src/usr.bin/mandoc/man_term.c 2014/04/20 16:44:44 1.100 *************** *** 1,4 **** ! /* $Id: man_term.c,v 1.99 2014/04/08 07:13:01 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2014 Ingo Schwarze --- 1,4 ---- ! /* $Id: man_term.c,v 1.100 2014/04/20 16:44:44 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2014 Ingo Schwarze *************** *** 41,47 **** int pardist; /* vert. space before par., unit: [v] */ }; ! #define DECL_ARGS struct termp *p, \ struct mtermp *mt, \ const struct man_node *n, \ const struct man_meta *meta --- 41,47 ---- int pardist; /* vert. space before par., unit: [v] */ }; ! #define DECL_ARGS struct termp *p, \ struct mtermp *mt, \ const struct man_node *n, \ const struct man_meta *meta *************** *** 60,66 **** static void print_man_node(DECL_ARGS); static void print_man_head(struct termp *, const void *); static void print_man_foot(struct termp *, const void *); ! static void print_bvspace(struct termp *, const struct man_node *, int); static int pre_B(DECL_ARGS); --- 60,66 ---- static void print_man_node(DECL_ARGS); static void print_man_head(struct termp *, const void *); static void print_man_foot(struct termp *, const void *); ! static void print_bvspace(struct termp *, const struct man_node *, int); static int pre_B(DECL_ARGS); *************** *** 101,107 **** { pre_PP, NULL, 0 }, /* PP */ { pre_PP, NULL, 0 }, /* P */ { pre_IP, post_IP, 0 }, /* IP */ ! { pre_HP, post_HP, 0 }, /* HP */ { NULL, NULL, 0 }, /* SM */ { pre_B, NULL, 0 }, /* SB */ { pre_alternate, NULL, 0 }, /* BI */ --- 101,107 ---- { pre_PP, NULL, 0 }, /* PP */ { pre_PP, NULL, 0 }, /* P */ { pre_IP, post_IP, 0 }, /* IP */ ! { pre_HP, post_HP, 0 }, /* HP */ { NULL, NULL, 0 }, /* SM */ { pre_B, NULL, 0 }, /* SB */ { pre_alternate, NULL, 0 }, /* BI */ *************** *** 134,140 **** }; - void terminal_man(void *arg, const struct man *man) { --- 134,139 ---- *************** *** 185,191 **** return(term_vspan(p, &su)); } - static int a2width(const struct termp *p, const char *cp) { --- 184,189 ---- *************** *** 224,230 **** term_vspace(p); } ! /* ARGSUSED */ static int pre_ign(DECL_ARGS) { --- 222,228 ---- term_vspace(p); } ! static int pre_ign(DECL_ARGS) { *************** *** 232,239 **** return(0); } - - /* ARGSUSED */ static int pre_ll(DECL_ARGS) { --- 230,235 ---- *************** *** 242,249 **** return(0); } - - /* ARGSUSED */ static int pre_I(DECL_ARGS) { --- 238,243 ---- *************** *** 252,259 **** return(1); } - - /* ARGSUSED */ static int pre_literal(DECL_ARGS) { --- 246,251 ---- *************** *** 281,287 **** return(0); } - /* ARGSUSED */ static int pre_PD(DECL_ARGS) { --- 273,278 ---- *************** *** 296,302 **** return(0); } - /* ARGSUSED */ static int pre_alternate(DECL_ARGS) { --- 287,292 ---- *************** *** 305,331 **** int savelit, i; switch (n->tok) { ! case (MAN_RB): font[0] = TERMFONT_NONE; font[1] = TERMFONT_BOLD; break; ! case (MAN_RI): font[0] = TERMFONT_NONE; font[1] = TERMFONT_UNDER; break; ! case (MAN_BR): font[0] = TERMFONT_BOLD; font[1] = TERMFONT_NONE; break; ! case (MAN_BI): font[0] = TERMFONT_BOLD; font[1] = TERMFONT_UNDER; break; ! case (MAN_IR): font[0] = TERMFONT_UNDER; font[1] = TERMFONT_NONE; break; ! case (MAN_IB): font[0] = TERMFONT_UNDER; font[1] = TERMFONT_BOLD; break; --- 295,321 ---- int savelit, i; switch (n->tok) { ! case MAN_RB: font[0] = TERMFONT_NONE; font[1] = TERMFONT_BOLD; break; ! case MAN_RI: font[0] = TERMFONT_NONE; font[1] = TERMFONT_UNDER; break; ! case MAN_BR: font[0] = TERMFONT_BOLD; font[1] = TERMFONT_NONE; break; ! case MAN_BI: font[0] = TERMFONT_BOLD; font[1] = TERMFONT_UNDER; break; ! case MAN_IR: font[0] = TERMFONT_UNDER; font[1] = TERMFONT_NONE; break; ! case MAN_IB: font[0] = TERMFONT_UNDER; font[1] = TERMFONT_BOLD; break; *************** *** 348,354 **** return(0); } - /* ARGSUSED */ static int pre_B(DECL_ARGS) { --- 338,343 ---- *************** *** 357,363 **** return(1); } - /* ARGSUSED */ static int pre_OP(DECL_ARGS) { --- 346,351 ---- *************** *** 380,386 **** return(0); } - /* ARGSUSED */ static int pre_ft(DECL_ARGS) { --- 368,373 ---- *************** *** 393,418 **** 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; ! case ('P'): term_fontlast(p); break; ! case ('1'): /* FALLTHROUGH */ ! case ('C'): /* FALLTHROUGH */ ! case ('R'): term_fontrepl(p, TERMFONT_NONE); break; default: --- 380,405 ---- 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; ! case 'P': term_fontlast(p); break; ! case '1': /* FALLTHROUGH */ ! case 'C': /* FALLTHROUGH */ ! case 'R': term_fontrepl(p, TERMFONT_NONE); break; default: *************** *** 421,427 **** return(0); } - /* ARGSUSED */ static int pre_in(DECL_ARGS) { --- 408,413 ---- *************** *** 455,461 **** p->offset -= p->offset > v ? v : p->offset; else if (less > 0) p->offset += v; ! else p->offset = v; /* Don't let this creep beyond the right margin. */ --- 441,447 ---- p->offset -= p->offset > v ? v : p->offset; else if (less > 0) p->offset += v; ! else p->offset = v; /* Don't let this creep beyond the right margin. */ *************** *** 466,473 **** return(0); } - - /* ARGSUSED */ static int pre_sp(DECL_ARGS) { --- 452,457 ---- *************** *** 477,491 **** 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); default: --- 461,475 ---- 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); default: *************** *** 495,501 **** neg = 0; switch (n->tok) { ! case (MAN_br): len = 0; break; default: --- 479,485 ---- neg = 0; switch (n->tok) { ! case MAN_br: len = 0; break; default: *************** *** 523,530 **** return(0); } - - /* ARGSUSED */ static int pre_HP(DECL_ARGS) { --- 507,512 ---- *************** *** 533,542 **** const struct man_node *nn; switch (n->type) { ! case (MAN_BLOCK): print_bvspace(p, n, mt->pardist); return(1); ! case (MAN_BODY): break; default: return(0); --- 515,524 ---- const struct man_node *nn; switch (n->type) { ! case MAN_BLOCK: print_bvspace(p, n, mt->pardist); return(1); ! case MAN_BODY: break; default: return(0); *************** *** 569,582 **** return(1); } - - /* ARGSUSED */ static void post_HP(DECL_ARGS) { switch (n->type) { ! case (MAN_BODY): term_newln(p); p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND); p->trailspace = 0; --- 551,562 ---- return(1); } static void post_HP(DECL_ARGS) { switch (n->type) { ! case MAN_BODY: term_newln(p); p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND); p->trailspace = 0; *************** *** 588,601 **** } } - - /* ARGSUSED */ static int pre_PP(DECL_ARGS) { switch (n->type) { ! case (MAN_BLOCK): mt->lmargin[mt->lmargincur] = term_len(p, p->defindent); print_bvspace(p, n, mt->pardist); break; --- 568,579 ---- } } static int pre_PP(DECL_ARGS) { switch (n->type) { ! case MAN_BLOCK: mt->lmargin[mt->lmargincur] = term_len(p, p->defindent); print_bvspace(p, n, mt->pardist); break; *************** *** 607,614 **** return(MAN_HEAD != n->type); } - - /* ARGSUSED */ static int pre_IP(DECL_ARGS) { --- 585,590 ---- *************** *** 617,630 **** int savelit, ival; switch (n->type) { ! case (MAN_BODY): p->flags |= TERMP_NOSPACE; break; ! case (MAN_HEAD): p->flags |= TERMP_NOBREAK; p->trailspace = 1; break; ! case (MAN_BLOCK): print_bvspace(p, n, mt->pardist); /* FALLTHROUGH */ default: --- 593,606 ---- int savelit, ival; switch (n->type) { ! case MAN_BODY: p->flags |= TERMP_NOSPACE; break; ! case MAN_HEAD: p->flags |= TERMP_NOBREAK; p->trailspace = 1; break; ! case MAN_BLOCK: print_bvspace(p, n, mt->pardist); /* FALLTHROUGH */ default: *************** *** 641,647 **** len = (size_t)ival; switch (n->type) { ! case (MAN_HEAD): /* Handle zero-width lengths. */ if (0 == len) len = term_len(p, 1); --- 617,623 ---- len = (size_t)ival; switch (n->type) { ! case MAN_HEAD: /* Handle zero-width lengths. */ if (0 == len) len = term_len(p, 1); *************** *** 664,673 **** mt->fl |= MANT_LITERAL; return(0); ! case (MAN_BODY): p->offset = mt->offset + len; p->rmargin = p->maxrmargin > p->offset ? ! p->maxrmargin : p->offset; break; default: break; --- 640,649 ---- mt->fl |= MANT_LITERAL; return(0); ! case MAN_BODY: p->offset = mt->offset + len; p->rmargin = p->maxrmargin > p->offset ? ! p->maxrmargin : p->offset; break; default: break; *************** *** 676,695 **** return(1); } - - /* ARGSUSED */ static void post_IP(DECL_ARGS) { switch (n->type) { ! case (MAN_HEAD): term_flushln(p); p->flags &= ~TERMP_NOBREAK; p->trailspace = 0; p->rmargin = p->maxrmargin; break; ! case (MAN_BODY): term_newln(p); p->offset = mt->offset; break; --- 652,669 ---- return(1); } static void post_IP(DECL_ARGS) { switch (n->type) { ! case MAN_HEAD: term_flushln(p); p->flags &= ~TERMP_NOBREAK; p->trailspace = 0; p->rmargin = p->maxrmargin; break; ! case MAN_BODY: term_newln(p); p->offset = mt->offset; break; *************** *** 698,705 **** } } - - /* ARGSUSED */ static int pre_TP(DECL_ARGS) { --- 672,677 ---- *************** *** 708,721 **** int savelit, ival; switch (n->type) { ! case (MAN_HEAD): p->flags |= TERMP_NOBREAK; p->trailspace = 1; break; ! case (MAN_BODY): p->flags |= TERMP_NOSPACE; break; ! case (MAN_BLOCK): print_bvspace(p, n, mt->pardist); /* FALLTHROUGH */ default: --- 680,693 ---- int savelit, ival; switch (n->type) { ! case MAN_HEAD: p->flags |= TERMP_NOBREAK; p->trailspace = 1; break; ! case MAN_BODY: p->flags |= TERMP_NOSPACE; break; ! case MAN_BLOCK: print_bvspace(p, n, mt->pardist); /* FALLTHROUGH */ default: *************** *** 733,739 **** len = (size_t)ival; switch (n->type) { ! case (MAN_HEAD): /* Handle zero-length properly. */ if (0 == len) len = term_len(p, 1); --- 705,711 ---- len = (size_t)ival; switch (n->type) { ! case MAN_HEAD: /* Handle zero-length properly. */ if (0 == len) len = term_len(p, 1); *************** *** 760,769 **** mt->lmargin[mt->lmargincur] = (size_t)ival; return(0); ! case (MAN_BODY): p->offset = mt->offset + len; p->rmargin = p->maxrmargin > p->offset ? ! p->maxrmargin : p->offset; p->trailspace = 0; p->flags &= ~TERMP_NOBREAK; break; --- 732,741 ---- mt->lmargin[mt->lmargincur] = (size_t)ival; return(0); ! case MAN_BODY: p->offset = mt->offset + len; p->rmargin = p->maxrmargin > p->offset ? ! p->maxrmargin : p->offset; p->trailspace = 0; p->flags &= ~TERMP_NOBREAK; break; *************** *** 774,790 **** return(1); } - - /* ARGSUSED */ static void post_TP(DECL_ARGS) { switch (n->type) { ! case (MAN_HEAD): term_flushln(p); break; ! case (MAN_BODY): term_newln(p); p->offset = mt->offset; break; --- 746,760 ---- return(1); } static void post_TP(DECL_ARGS) { switch (n->type) { ! case MAN_HEAD: term_flushln(p); break; ! case MAN_BODY: term_newln(p); p->offset = mt->offset; break; *************** *** 793,807 **** } } - - /* ARGSUSED */ static int pre_SS(DECL_ARGS) { int i; switch (n->type) { ! case (MAN_BLOCK): mt->fl &= ~MANT_LITERAL; mt->lmargin[mt->lmargincur] = term_len(p, p->defindent); mt->offset = term_len(p, p->defindent); --- 763,775 ---- } } static int pre_SS(DECL_ARGS) { int i; switch (n->type) { ! case MAN_BLOCK: mt->fl &= ~MANT_LITERAL; mt->lmargin[mt->lmargincur] = term_len(p, p->defindent); mt->offset = term_len(p, p->defindent); *************** *** 814,824 **** for (i = 0; i < mt->pardist; i++) term_vspace(p); break; ! case (MAN_HEAD): term_fontrepl(p, TERMFONT_BOLD); p->offset = term_len(p, 3); break; ! case (MAN_BODY): p->offset = mt->offset; break; default: --- 782,792 ---- for (i = 0; i < mt->pardist; i++) term_vspace(p); break; ! case MAN_HEAD: term_fontrepl(p, TERMFONT_BOLD); p->offset = term_len(p, 3); break; ! case MAN_BODY: p->offset = mt->offset; break; default: *************** *** 828,844 **** return(1); } - - /* ARGSUSED */ static void post_SS(DECL_ARGS) { ! switch (n->type) { ! case (MAN_HEAD): term_newln(p); break; ! case (MAN_BODY): term_newln(p); break; default: --- 796,810 ---- return(1); } static void post_SS(DECL_ARGS) { ! switch (n->type) { ! case MAN_HEAD: term_newln(p); break; ! case MAN_BODY: term_newln(p); break; default: *************** *** 846,860 **** } } - - /* ARGSUSED */ static int pre_SH(DECL_ARGS) { int i; switch (n->type) { ! case (MAN_BLOCK): mt->fl &= ~MANT_LITERAL; mt->lmargin[mt->lmargincur] = term_len(p, p->defindent); mt->offset = term_len(p, p->defindent); --- 812,824 ---- } } static int pre_SH(DECL_ARGS) { int i; switch (n->type) { ! case MAN_BLOCK: mt->fl &= ~MANT_LITERAL; mt->lmargin[mt->lmargincur] = term_len(p, p->defindent); mt->offset = term_len(p, p->defindent); *************** *** 868,878 **** for (i = 0; i < mt->pardist; i++) term_vspace(p); break; ! case (MAN_HEAD): term_fontrepl(p, TERMFONT_BOLD); p->offset = 0; break; ! case (MAN_BODY): p->offset = mt->offset; break; default: --- 832,842 ---- for (i = 0; i < mt->pardist; i++) term_vspace(p); break; ! case MAN_HEAD: term_fontrepl(p, TERMFONT_BOLD); p->offset = 0; break; ! case MAN_BODY: p->offset = mt->offset; break; default: *************** *** 882,898 **** return(1); } - - /* ARGSUSED */ static void post_SH(DECL_ARGS) { ! switch (n->type) { ! case (MAN_HEAD): term_newln(p); break; ! case (MAN_BODY): term_newln(p); break; default: --- 846,860 ---- return(1); } static void post_SH(DECL_ARGS) { ! switch (n->type) { ! case MAN_HEAD: term_newln(p); break; ! case MAN_BODY: term_newln(p); break; default: *************** *** 900,906 **** } } - /* ARGSUSED */ static int pre_RS(DECL_ARGS) { --- 862,867 ---- *************** *** 908,917 **** size_t sz; switch (n->type) { ! case (MAN_BLOCK): term_newln(p); return(1); ! case (MAN_HEAD): return(0); default: break; --- 869,878 ---- size_t sz; switch (n->type) { ! case MAN_BLOCK: term_newln(p); return(1); ! case MAN_HEAD: return(0); default: break; *************** *** 920,932 **** sz = term_len(p, p->defindent); if (NULL != (n = n->parent->head->child)) ! if ((ival = a2width(p, n->string)) >= 0) sz = (size_t)ival; mt->offset += sz; p->offset = mt->offset; p->rmargin = p->maxrmargin > p->offset ? ! p->maxrmargin : p->offset; if (++mt->lmarginsz < MAXMARGINS) mt->lmargincur = mt->lmarginsz; --- 881,893 ---- sz = term_len(p, p->defindent); if (NULL != (n = n->parent->head->child)) ! if ((ival = a2width(p, n->string)) >= 0) sz = (size_t)ival; mt->offset += sz; p->offset = mt->offset; p->rmargin = p->maxrmargin > p->offset ? ! p->maxrmargin : p->offset; if (++mt->lmarginsz < MAXMARGINS) mt->lmargincur = mt->lmarginsz; *************** *** 935,941 **** return(1); } - /* ARGSUSED */ static void post_RS(DECL_ARGS) { --- 896,901 ---- *************** *** 943,951 **** size_t sz; switch (n->type) { ! case (MAN_BLOCK): return; ! case (MAN_HEAD): return; default: term_newln(p); --- 903,911 ---- size_t sz; switch (n->type) { ! case MAN_BLOCK: return; ! case MAN_HEAD: return; default: term_newln(p); *************** *** 954,961 **** sz = term_len(p, p->defindent); ! if (NULL != (n = n->parent->head->child)) ! if ((ival = a2width(p, n->string)) >= 0) sz = (size_t)ival; mt->offset = mt->offset < sz ? 0 : mt->offset - sz; --- 914,921 ---- sz = term_len(p, p->defindent); ! if (NULL != (n = n->parent->head->child)) ! if ((ival = a2width(p, n->string)) >= 0) sz = (size_t)ival; mt->offset = mt->offset < sz ? 0 : mt->offset - sz; *************** *** 965,971 **** mt->lmargincur = mt->lmarginsz; } - /* ARGSUSED */ static int pre_UR(DECL_ARGS) { --- 925,930 ---- *************** *** 973,979 **** return (MAN_HEAD != n->type); } - /* ARGSUSED */ static void post_UR(DECL_ARGS) { --- 932,937 ---- *************** *** 998,1004 **** int c; switch (n->type) { ! case(MAN_TEXT): /* * If we have a blank line, output a vertical space. * If we have a space as the first character, break --- 956,962 ---- int c; switch (n->type) { ! case MAN_TEXT: /* * If we have a blank line, output a vertical space. * If we have a space as the first character, break *************** *** 1013,1027 **** term_word(p, n->string); goto out; ! case (MAN_EQN): term_eqn(p, n->eqn); return; ! case (MAN_TBL): /* * Tables are preceded by a newline. Then process a * table line, which will cause line termination, */ ! if (TBL_SPAN_FIRST & n->span->flags) term_newln(p); term_tbl(p, n->span); return; --- 971,985 ---- term_word(p, n->string); goto out; ! case MAN_EQN: term_eqn(p, n->eqn); return; ! case MAN_TBL: /* * Tables are preceded by a newline. Then process a * table line, which will cause line termination, */ ! if (TBL_SPAN_FIRST & n->span->flags) term_newln(p); term_tbl(p, n->span); return; *************** *** 1084,1090 **** print_man_nodelist(p, mt, n->next, meta); } - static void print_man_foot(struct termp *p, const void *arg) { --- 1042,1047 ---- *************** *** 1152,1158 **** term_flushln(p); } - static void print_man_head(struct termp *p, const void *arg) { --- 1109,1114 ---- *************** *** 1179,1185 **** p->trailspace = 1; 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; --- 1135,1141 ---- p->trailspace = 1; 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; *************** *** 1212,1218 **** p->offset = 0; p->rmargin = p->maxrmargin; ! /* * Groff prints three blank lines before the content. * Do the same, except in the temporary, undocumented * mode imitating mdoc(7) output. --- 1168,1174 ---- p->offset = 0; p->rmargin = p->maxrmargin; ! /* * Groff prints three blank lines before the content. * Do the same, except in the temporary, undocumented * mode imitating mdoc(7) output.