=================================================================== RCS file: /cvs/mandoc/mdoc_validate.c,v retrieving revision 1.221 retrieving revision 1.225 diff -u -p -r1.221 -r1.225 --- mandoc/mdoc_validate.c 2014/07/02 13:10:45 1.221 +++ mandoc/mdoc_validate.c 2014/07/04 01:50:07 1.225 @@ -1,4 +1,4 @@ -/* $Id: mdoc_validate.c,v 1.221 2014/07/02 13:10:45 schwarze Exp $ */ +/* $Id: mdoc_validate.c,v 1.225 2014/07/04 01:50:07 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2014 Ingo Schwarze @@ -727,15 +727,16 @@ pre_bl(PRE_ARGS) if (n->norm->Bl.width || n->norm->Bl.offs || n->norm->Bl.comp) - mdoc_nmsg(mdoc, n, MANDOCERR_LISTFIRST); - + mandoc_msg(MANDOCERR_BL_LATETYPE, + mdoc->parse, n->line, n->pos, + mdoc_argnames[n->args->argv[0].arg]); continue; } /* Allow lists to default to LIST_item. */ if (LIST__NONE == n->norm->Bl.type) { - mdoc_nmsg(mdoc, n, MANDOCERR_LISTTYPE); + mdoc_nmsg(mdoc, n, MANDOCERR_BL_NOTYPE); n->norm->Bl.type = LIST_item; } @@ -749,7 +750,7 @@ pre_bl(PRE_ARGS) switch (n->norm->Bl.type) { case LIST_tag: if (NULL == n->norm->Bl.width) - mdoc_nmsg(mdoc, n, MANDOCERR_NOWIDTHARG); + mdoc_nmsg(mdoc, n, MANDOCERR_BL_WIDTH); break; case LIST_column: /* FALLTHROUGH */ @@ -869,7 +870,7 @@ pre_bd(PRE_ARGS) } if (DISP__NONE == n->norm->Bd.type) { - mdoc_nmsg(mdoc, n, MANDOCERR_DISPTYPE); + mdoc_nmsg(mdoc, n, MANDOCERR_BD_NOTYPE); n->norm->Bd.type = DISP_ragged; } @@ -934,7 +935,8 @@ pre_std(PRE_ARGS) if (MDOC_Std == n->args->argv[0].arg) return(1); - mdoc_nmsg(mdoc, n, MANDOCERR_NOARGV); + mandoc_msg(MANDOCERR_ARG_STD, mdoc->parse, + n->line, n->pos, mdoc_macronames[n->tok]); return(1); } @@ -1270,27 +1272,19 @@ post_it(POST_ARGS) { int i, cols; enum mdoc_list lt; - struct mdoc_node *n, *c; + struct mdoc_node *nbl, *nit, *nch; enum mandocerr er; - if (MDOC_BLOCK != mdoc->last->type) + nit = mdoc->last; + if (MDOC_BLOCK != nit->type) return(1); - n = mdoc->last->parent->parent; - lt = n->norm->Bl.type; + nbl = nit->parent->parent; + lt = nbl->norm->Bl.type; - if (LIST__NONE == lt) { - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_LISTTYPE); - return(1); - } - switch (lt) { case LIST_tag: - if (mdoc->last->head->child) - break; - /* FIXME: give this a dummy value. */ - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NOARGS); - break; + /* FALLTHROUGH */ case LIST_hang: /* FALLTHROUGH */ case LIST_ohang: @@ -1298,8 +1292,10 @@ post_it(POST_ARGS) case LIST_inset: /* FALLTHROUGH */ case LIST_diag: - if (NULL == mdoc->last->head->child) - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NOARGS); + if (NULL == nit->head->child) + mandoc_msg(MANDOCERR_IT_NOHEAD, + mdoc->parse, nit->line, nit->pos, + mdoc_argnames[nbl->args->argv[0].arg]); break; case LIST_bullet: /* FALLTHROUGH */ @@ -1308,23 +1304,22 @@ post_it(POST_ARGS) case LIST_enum: /* FALLTHROUGH */ case LIST_hyphen: - if (NULL == mdoc->last->body->child) - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NOBODY); + if (NULL == nit->body->child) + mandoc_msg(MANDOCERR_IT_NOBODY, + mdoc->parse, nit->line, nit->pos, + mdoc_argnames[nbl->args->argv[0].arg]); /* FALLTHROUGH */ case LIST_item: - if (mdoc->last->head->child) - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_ARGSLOST); + if (NULL != nit->head->child) + mdoc_nmsg(mdoc, nit, MANDOCERR_ARGSLOST); break; case LIST_column: - cols = (int)n->norm->Bl.ncols; + cols = (int)nbl->norm->Bl.ncols; - assert(NULL == mdoc->last->head->child); + assert(NULL == nit->head->child); - if (NULL == mdoc->last->body->child) - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NOBODY); - - for (i = 0, c = mdoc->last->child; c; c = c->next) - if (MDOC_BODY == c->type) + for (i = 0, nch = nit->child; nch; nch = nch->next) + if (MDOC_BODY == nch->type) i++; if (i < cols) @@ -1334,12 +1329,11 @@ post_it(POST_ARGS) else er = MANDOCERR_SYNTARGCOUNT; - mandoc_vmsg(er, mdoc->parse, - mdoc->last->line, mdoc->last->pos, + mandoc_vmsg(er, mdoc->parse, nit->line, nit->pos, "columns == %d (have %d)", cols, i); return(MANDOCERR_ARGCOUNT == er); default: - break; + abort(); } return(1); @@ -1668,12 +1662,13 @@ ebool(struct mdoc *mdoc) { if (NULL == mdoc->last->child) { - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_MACROEMPTY); - mdoc_node_delete(mdoc, mdoc->last); + if (MDOC_Sm == mdoc->last->tok) + mdoc->flags ^= MDOC_SMOFF; return(1); } - check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 1); + check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_LT, 2); + assert(MDOC_TEXT == mdoc->last->child->type); if (0 == strcmp(mdoc->last->child->string, "on")) { @@ -1728,7 +1723,9 @@ post_st(POST_ARGS) const char *p; if (NULL == (ch = mdoc->last->child)) { - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_MACROEMPTY); + mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, + mdoc->last->line, mdoc->last->pos, + mdoc_macronames[mdoc->last->tok]); mdoc_node_delete(mdoc, mdoc->last); return(1); }