=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mdoc_validate.c,v retrieving revision 1.235 retrieving revision 1.236 diff -c -r1.235 -r1.236 *** src/usr.bin/mandoc/mdoc_validate.c 2017/03/06 17:25:24 1.235 --- src/usr.bin/mandoc/mdoc_validate.c 2017/04/24 23:06:09 1.236 *************** *** 1,4 **** ! /* $OpenBSD: mdoc_validate.c,v 1.235 2017/03/06 17:25:24 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2017 Ingo Schwarze --- 1,4 ---- ! /* $OpenBSD: mdoc_validate.c,v 1.236 2017/04/24 23:06:09 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2017 Ingo Schwarze *************** *** 55,61 **** struct roff_node *, struct mdoc_argv *); static void check_args(struct roff_man *, struct roff_node *); static int child_an(const struct roff_node *); ! static size_t macro2len(int); static void rewrite_macro2len(char **); static void post_an(POST_ARGS); --- 55,61 ---- struct roff_node *, struct mdoc_argv *); static void check_args(struct roff_man *, struct roff_node *); static int child_an(const struct roff_node *); ! static size_t macro2len(enum roff_tok); static void rewrite_macro2len(char **); static void post_an(POST_ARGS); *************** *** 106,113 **** static void post_xr(POST_ARGS); static void post_xx(POST_ARGS); ! static v_post mdoc_valids[MDOC_MAX] = { ! NULL, /* Ap */ post_dd, /* Dd */ post_dt, /* Dt */ post_os, /* Os */ --- 106,112 ---- static void post_xr(POST_ARGS); static void post_xx(POST_ARGS); ! static const v_post __mdoc_valids[MDOC_MAX - MDOC_Dd] = { post_dd, /* Dd */ post_dt, /* Dt */ post_os, /* Os */ *************** *** 123,128 **** --- 122,128 ---- post_it, /* It */ NULL, /* Ad */ post_an, /* An */ + NULL, /* Ap */ post_defaults, /* Ar */ NULL, /* Cd */ NULL, /* Cm */ *************** *** 231,240 **** NULL, /* Ta */ NULL, /* ll */ }; #define RSORD_MAX 14 /* Number of `Rs' blocks. */ ! static const int rsord[RSORD_MAX] = { MDOC__A, MDOC__T, MDOC__B, --- 231,241 ---- NULL, /* Ta */ NULL, /* ll */ }; + static const v_post *const mdoc_valids = __mdoc_valids - MDOC_Dd; #define RSORD_MAX 14 /* Number of `Rs' blocks. */ ! static const enum roff_tok rsord[RSORD_MAX] = { MDOC__A, MDOC__T, MDOC__B, *************** *** 282,288 **** mdoc_node_validate(struct roff_man *mdoc) { struct roff_node *n; ! v_post *p; n = mdoc->last; mdoc->last = mdoc->last->child; --- 283,289 ---- mdoc_node_validate(struct roff_man *mdoc) { struct roff_node *n; ! const v_post *p; n = mdoc->last; mdoc->last = mdoc->last->child; *************** *** 659,667 **** n = mdoc->last; if (n->child != NULL) ! mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, ! n->line, n->pos, "%s %s", ! mdoc_macronames[n->tok], n->child->string); while (n->child != NULL) roff_node_delete(mdoc, n->child); --- 660,667 ---- n = mdoc->last; if (n->child != NULL) ! mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, n->line, ! n->pos, "%s %s", roff_name[n->tok], n->child->string); while (n->child != NULL) roff_node_delete(mdoc, n->child); *************** *** 805,811 **** return; mandoc_msg(MANDOCERR_ARG_STD, mdoc->parse, ! n->line, n->pos, mdoc_macronames[n->tok]); } static void --- 805,811 ---- return; mandoc_msg(MANDOCERR_ARG_STD, mdoc->parse, ! n->line, n->pos, roff_name[n->tok]); } static void *************** *** 840,846 **** n = mdoc->last; if (n->type == ROFFT_ELEM || n->type == ROFFT_BLOCK) mandoc_msg(MANDOCERR_MACRO_OBS, mdoc->parse, ! n->line, n->pos, mdoc_macronames[n->tok]); } /* --- 840,846 ---- n = mdoc->last; if (n->type == ROFFT_ELEM || n->type == ROFFT_BLOCK) mandoc_msg(MANDOCERR_MACRO_OBS, mdoc->parse, ! n->line, n->pos, roff_name[n->tok]); } /* *************** *** 1048,1054 **** roff_node_delete(mdoc, n); } else if (n->child == NULL) mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse, ! n->line, n->pos, mdoc_macronames[n->tok]); else if (n->tok == MDOC_D1) post_hyph(mdoc); break; --- 1048,1054 ---- roff_node_delete(mdoc, n); } else if (n->child == NULL) mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse, ! n->line, n->pos, roff_name[n->tok]); else if (n->tok == MDOC_D1) post_hyph(mdoc); break; *************** *** 1071,1077 **** if (np->type == ROFFT_BLOCK && np->tok == MDOC_Bd) { mandoc_vmsg(MANDOCERR_BD_NEST, mdoc->parse, n->line, n->pos, ! "%s in Bd", mdoc_macronames[n->tok]); break; } } --- 1071,1077 ---- if (np->type == ROFFT_BLOCK && np->tok == MDOC_Bd) { mandoc_vmsg(MANDOCERR_BD_NEST, mdoc->parse, n->line, n->pos, ! "%s in Bd", roff_name[n->tok]); break; } } *************** *** 1257,1266 **** /* FALLTHROUGH */ case LIST_item: if ((nch = nit->head->child) != NULL) ! mandoc_vmsg(MANDOCERR_ARG_SKIP, ! mdoc->parse, nit->line, nit->pos, ! "It %s", nch->string == NULL ? ! mdoc_macronames[nch->tok] : nch->string); break; case LIST_column: cols = (int)nbl->norm->Bl.ncols; --- 1257,1266 ---- /* FALLTHROUGH */ case LIST_item: if ((nch = nit->head->child) != NULL) ! mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, ! nit->line, nit->pos, "It %s", ! nch->string == NULL ? roff_name[nch->tok] : ! nch->string); break; case LIST_column: cols = (int)nbl->norm->Bl.ncols; *************** *** 1307,1320 **** if (ni->next == NULL) { mandoc_msg(MANDOCERR_PAR_MOVE, mdoc->parse, nc->line, nc->pos, ! mdoc_macronames[nc->tok]); mdoc_node_relink(mdoc, nc); } else if (n->norm->Bl.comp == 0 && n->norm->Bl.type != LIST_column) { mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, nc->line, nc->pos, ! "%s before It", ! mdoc_macronames[nc->tok]); roff_node_delete(mdoc, nc); } else break; --- 1307,1319 ---- if (ni->next == NULL) { mandoc_msg(MANDOCERR_PAR_MOVE, mdoc->parse, nc->line, nc->pos, ! roff_name[nc->tok]); mdoc_node_relink(mdoc, nc); } else if (n->norm->Bl.comp == 0 && n->norm->Bl.type != LIST_column) { mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, nc->line, nc->pos, ! "%s before It", roff_name[nc->tok]); roff_node_delete(mdoc, nc); } else break; *************** *** 1331,1337 **** rewrite_macro2len(char **arg) { size_t width; ! int tok; if (*arg == NULL) return; --- 1330,1336 ---- rewrite_macro2len(char **arg) { size_t width; ! enum roff_tok tok; if (*arg == NULL) return; *************** *** 1478,1485 **** } mandoc_msg(MANDOCERR_BL_MOVE, mdoc->parse, ! nchild->line, nchild->pos, ! mdoc_macronames[nchild->tok]); /* * Move the node out of the Bl block. --- 1477,1483 ---- } mandoc_msg(MANDOCERR_BL_MOVE, mdoc->parse, ! nchild->line, nchild->pos, roff_name[nchild->tok]); /* * Move the node out of the Bl block. *************** *** 1557,1563 **** mandoc_vmsg(MANDOCERR_SM_BAD, mdoc->parse, nch->line, nch->pos, ! "%s %s", mdoc_macronames[mdoc->last->tok], nch->string); mdoc_node_relink(mdoc, nch); return; } --- 1555,1561 ---- mandoc_vmsg(MANDOCERR_SM_BAD, mdoc->parse, nch->line, nch->pos, ! "%s %s", roff_name[mdoc->last->tok], nch->string); mdoc_node_relink(mdoc, nch); return; } *************** *** 1600,1606 **** mandoc_msg(MANDOCERR_DOC_EMPTY, mdoc->parse, 0, 0, NULL); else if (n->tok != MDOC_Sh) mandoc_msg(MANDOCERR_SEC_BEFORE, mdoc->parse, ! n->line, n->pos, mdoc_macronames[n->tok]); } static void --- 1598,1604 ---- mandoc_msg(MANDOCERR_DOC_EMPTY, mdoc->parse, 0, 0, NULL); else if (n->tok != MDOC_Sh) mandoc_msg(MANDOCERR_SEC_BEFORE, mdoc->parse, ! n->line, n->pos, roff_name[n->tok]); } static void *************** *** 1634,1642 **** break; if (i == RSORD_MAX) { ! mandoc_msg(MANDOCERR_RS_BAD, ! mdoc->parse, nch->line, nch->pos, ! mdoc_macronames[nch->tok]); i = -1; } else if (nch->tok == MDOC__J || nch->tok == MDOC__B) np->norm->Rs.quote_T++; --- 1632,1639 ---- break; if (i == RSORD_MAX) { ! mandoc_msg(MANDOCERR_RS_BAD, mdoc->parse, ! nch->line, nch->pos, roff_name[nch->tok]); i = -1; } else if (nch->tok == MDOC__J || nch->tok == MDOC__B) np->norm->Rs.quote_T++; *************** *** 1789,1795 **** /* FALLTHROUGH */ default: mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse, ! n->line, n->pos, mdoc_macronames[n->tok]); continue; } break; --- 1786,1792 ---- /* FALLTHROUGH */ default: mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse, ! n->line, n->pos, roff_name[n->tok]); continue; } break; *************** *** 1910,1916 **** sec != SEC_CUSTOM ? secnames[sec] : (nch = mdoc->last->child) == NULL ? "" : nch->type == ROFFT_TEXT ? nch->string : ! mdoc_macronames[nch->tok]); /* The SYNOPSIS gets special attention in other areas. */ --- 1907,1913 ---- sec != SEC_CUSTOM ? secnames[sec] : (nch = mdoc->last->child) == NULL ? "" : nch->type == ROFFT_TEXT ? nch->string : ! roff_name[nch->tok]); /* The SYNOPSIS gets special attention in other areas. */ *************** *** 2019,2026 **** if (np->tok == MDOC_Pp || np->tok == MDOC_Lp) { mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, np->line, np->pos, ! "%s after %s", mdoc_macronames[np->tok], ! mdoc_macronames[mdoc->last->tok]); roff_node_delete(mdoc, np); } --- 2016,2023 ---- if (np->tok == MDOC_Pp || np->tok == MDOC_Lp) { mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, np->line, np->pos, ! "%s after %s", roff_name[np->tok], ! roff_name[mdoc->last->tok]); roff_node_delete(mdoc, np); } *************** *** 2028,2035 **** if (np->tok == MDOC_Pp || np->tok == MDOC_Lp) { mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, np->line, np->pos, "%s at the end of %s", ! mdoc_macronames[np->tok], ! mdoc_macronames[mdoc->last->tok]); roff_node_delete(mdoc, np); } } --- 2025,2032 ---- if (np->tok == MDOC_Pp || np->tok == MDOC_Lp) { mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, np->line, np->pos, "%s at the end of %s", ! roff_name[np->tok], ! roff_name[mdoc->last->tok]); roff_node_delete(mdoc, np); } } *************** *** 2062,2070 **** return; mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, ! n->prev->line, n->prev->pos, ! "%s before %s", mdoc_macronames[n->prev->tok], ! mdoc_macronames[n->tok]); roff_node_delete(mdoc, n->prev); } --- 2059,2066 ---- return; mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, ! n->prev->line, n->prev->pos, "%s before %s", ! roff_name[n->prev->tok], roff_name[n->tok]); roff_node_delete(mdoc, n->prev); } *************** *** 2085,2091 **** } else if (np->child != NULL) mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, np->line, np->pos, "%s %s", ! mdoc_macronames[np->tok], np->child->string); if ((np = mdoc->last->prev) == NULL) { np = mdoc->last->parent; --- 2081,2087 ---- } else if (np->child != NULL) mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, np->line, np->pos, "%s %s", ! roff_name[np->tok], np->child->string); if ((np = mdoc->last->prev) == NULL) { np = mdoc->last->parent; *************** *** 2097,2105 **** return; mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, ! mdoc->last->line, mdoc->last->pos, ! "%s after %s", mdoc_macronames[mdoc->last->tok], ! mdoc_macronames[np->tok]); roff_node_delete(mdoc, mdoc->last); } --- 2093,2100 ---- return; mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, ! mdoc->last->line, mdoc->last->pos, "%s after %s", ! roff_name[mdoc->last->tok], roff_name[np->tok]); roff_node_delete(mdoc, mdoc->last); } *************** *** 2350,2356 **** } static size_t ! macro2len(int macro) { switch (macro) { --- 2345,2351 ---- } static size_t ! macro2len(enum roff_tok macro) { switch (macro) {