=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/man_macro.c,v retrieving revision 1.88 retrieving revision 1.89 diff -c -r1.88 -r1.89 *** src/usr.bin/mandoc/man_macro.c 2018/08/16 23:40:19 1.88 --- src/usr.bin/mandoc/man_macro.c 2018/08/17 20:31:52 1.89 *************** *** 1,4 **** ! /* $OpenBSD: man_macro.c,v 1.88 2018/08/16 23:40:19 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2012-2015, 2017, 2018 Ingo Schwarze --- 1,4 ---- ! /* $OpenBSD: man_macro.c,v 1.89 2018/08/17 20:31:52 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2012-2015, 2017, 2018 Ingo Schwarze *************** *** 38,44 **** int *, char *, char **); static void rew_scope(struct roff_man *, enum roff_tok); ! const struct man_macro __man_macros[MAN_MAX - MAN_TH] = { { in_line_eoln, MAN_BSCOPE }, /* TH */ { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SH */ { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SS */ --- 38,44 ---- int *, char *, char **); static void rew_scope(struct roff_man *, enum roff_tok); ! static const struct man_macro man_macros[MAN_MAX - MAN_TH] = { { in_line_eoln, MAN_BSCOPE }, /* TH */ { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SH */ { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SS */ *************** *** 77,85 **** { blk_exp, MAN_BSCOPE }, /* MT */ { blk_close, MAN_BSCOPE }, /* ME */ }; - const struct man_macro *const man_macros = __man_macros - MAN_TH; void man_unscope(struct roff_man *man, const struct roff_node *to) { --- 77,91 ---- { blk_exp, MAN_BSCOPE }, /* MT */ { blk_close, MAN_BSCOPE }, /* ME */ }; + const struct man_macro * + man_macro(enum roff_tok tok) + { + assert(tok >= MAN_TH && tok <= MAN_MAX); + return man_macros + (tok - MAN_TH); + } + void man_unscope(struct roff_man *man, const struct roff_node *to) { *************** *** 93,99 **** if (to == NULL && ! (n->flags & NODE_VALID)) { if (man->flags & (MAN_BLINE | MAN_ELINE) && ! man_macros[n->tok].flags & MAN_SCOPED) { mandoc_vmsg(MANDOCERR_BLK_LINE, man->parse, n->line, n->pos, "EOF breaks %s", roff_name[n->tok]); --- 99,105 ---- if (to == NULL && ! (n->flags & NODE_VALID)) { if (man->flags & (MAN_BLINE | MAN_ELINE) && ! man_macro(n->tok)->flags & MAN_SCOPED) { mandoc_vmsg(MANDOCERR_BLK_LINE, man->parse, n->line, n->pos, "EOF breaks %s", roff_name[n->tok]); *************** *** 110,116 **** continue; } if (n->type == ROFFT_BLOCK && ! man_macros[n->tok].fp == blk_exp) mandoc_msg(MANDOCERR_BLK_NOEND, man->parse, n->line, n->pos, roff_name[n->tok]); --- 116,122 ---- continue; } if (n->type == ROFFT_BLOCK && ! man_macro(n->tok)->fp == blk_exp) mandoc_msg(MANDOCERR_BLK_NOEND, man->parse, n->line, n->pos, roff_name[n->tok]); *************** *** 174,180 **** } if (tok != MAN_SH && (n->tok == MAN_SH || (tok != MAN_SS && (n->tok == MAN_SS || ! man_macros[n->tok].fp == blk_exp)))) return; man_unscope(man, n); n = man->last; --- 180,186 ---- } if (tok != MAN_SH && (n->tok == MAN_SH || (tok != MAN_SS && (n->tok == MAN_SS || ! man_macro(n->tok)->fp == blk_exp)))) return; man_unscope(man, n); n = man->last; *************** *** 325,331 **** * For `TP', always keep the head open. */ ! if (man_macros[tok].flags & MAN_SCOPED && (tok == MAN_TP || tok == MAN_TQ || n == man->last)) { man->flags |= MAN_BLINE; return; --- 331,337 ---- * For `TP', always keep the head open. */ ! if (man_macro(tok)->flags & MAN_SCOPED && (tok == MAN_TP || tok == MAN_TQ || n == man->last)) { man->flags |= MAN_BLINE; return; *************** *** 363,369 **** la = *pos; if ( ! man_args(man, line, pos, buf, &p)) break; ! if (man_macros[tok].flags & MAN_JOIN && man->last->type == ROFFT_TEXT) roff_word_append(man, p); else --- 369,375 ---- la = *pos; if ( ! man_args(man, line, pos, buf, &p)) break; ! if (man_macro(tok)->flags & MAN_JOIN && man->last->type == ROFFT_TEXT) roff_word_append(man, p); else *************** *** 385,392 **** * waiting for terms to load into our context. */ ! if (n == man->last && man_macros[tok].flags & MAN_SCOPED) { ! assert( ! (man_macros[tok].flags & MAN_NSCOPED)); man->flags |= MAN_ELINE; return; } --- 391,398 ---- * waiting for terms to load into our context. */ ! if (n == man->last && man_macro(tok)->flags & MAN_SCOPED) { ! assert((man_macro(tok)->flags & MAN_NSCOPED) == 0); man->flags |= MAN_ELINE; return; }