From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (schwarze@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.5/8.14.5) with ESMTP id s65CYMkR025306 for ; Sat, 5 Jul 2014 08:34:22 -0400 (EDT) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.5/8.14.3/Submit) id s65CYH6I020952; Sat, 5 Jul 2014 08:34:17 -0400 (EDT) Date: Sat, 5 Jul 2014 08:34:17 -0400 (EDT) Message-Id: <201407051234.s65CYH6I020952@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: schwarze@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: Cleanup with respect to bad macro arguments. X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Cleanup with respect to bad macro arguments. * Fix .Sm with invalid arg: move arg out and toggle mode. * Promote "unknown standard" from WARNING to ERROR, it loses information. * Delete MANDOCERR_BADWIDTH, it would only indicate a mandoc(1) bug. * Do not report MANDOCERR_BL_LATETYPE when there is no type at all. * Mention macro names, arguments and fallbacks. Modified Files: -------------- mdocml: man_validate.c mandoc.h mdoc_validate.c read.c Revision Data ------------- Index: mdoc_validate.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_validate.c,v retrieving revision 1.227 retrieving revision 1.228 diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.227 -r1.228 --- mdoc_validate.c +++ mdoc_validate.c @@ -696,35 +696,32 @@ pre_bl(PRE_ARGS) default: continue; } + if (LIST__NONE == lt) + continue; /* Check: multiple list types. */ - if (LIST__NONE != lt && n->norm->Bl.type != LIST__NONE) - mdoc_nmsg(mdoc, n, MANDOCERR_LISTREP); - - /* Assign list type. */ - - if (LIST__NONE != lt && n->norm->Bl.type == LIST__NONE) { - n->norm->Bl.type = lt; - /* Set column information, too. */ - if (LIST_column == lt) { - n->norm->Bl.ncols = - n->args->argv[i].sz; - n->norm->Bl.cols = (void *) - n->args->argv[i].value; - } + if (LIST__NONE != n->norm->Bl.type) { + mandoc_msg(MANDOCERR_BL_REP, + mdoc->parse, n->line, n->pos, + mdoc_argnames[argv->arg]); + continue; } /* The list type should come first. */ - if (n->norm->Bl.type == LIST__NONE) - if (n->norm->Bl.width || - n->norm->Bl.offs || - n->norm->Bl.comp) - mandoc_msg(MANDOCERR_BL_LATETYPE, - mdoc->parse, n->line, n->pos, - mdoc_argnames[n->args->argv[0].arg]); - continue; + if (n->norm->Bl.width || + n->norm->Bl.offs || + n->norm->Bl.comp) + mandoc_msg(MANDOCERR_BL_LATETYPE, + mdoc->parse, n->line, n->pos, + mdoc_argnames[n->args->argv[0].arg]); + + n->norm->Bl.type = lt; + if (LIST_column == lt) { + n->norm->Bl.ncols = argv->sz; + n->norm->Bl.cols = (void *)argv->value; + } } /* Allow lists to default to LIST_item. */ @@ -744,7 +741,7 @@ pre_bl(PRE_ARGS) switch (n->norm->Bl.type) { case LIST_tag: if (NULL == n->norm->Bl.width) - mdoc_nmsg(mdoc, n, MANDOCERR_BL_WIDTH); + mdoc_nmsg(mdoc, n, MANDOCERR_BL_NOWIDTH); break; case LIST_column: /* FALLTHROUGH */ @@ -846,16 +843,15 @@ pre_bd(PRE_ARGS) abort(); /* NOTREACHED */ } + if (DISP__NONE == dt) + continue; - /* Check whether a type has already been assigned. */ - - if (DISP__NONE != dt && n->norm->Bd.type != DISP__NONE) - mdoc_nmsg(mdoc, n, MANDOCERR_DISPREP); - - /* Make our type assignment. */ - - if (DISP__NONE != dt && n->norm->Bd.type == DISP__NONE) + if (DISP__NONE == n->norm->Bd.type) n->norm->Bd.type = dt; + else + mandoc_msg(MANDOCERR_BD_REP, + mdoc->parse, n->line, n->pos, + mdoc_argnames[argv->arg]); } if (DISP__NONE == n->norm->Bd.type) { @@ -1222,7 +1218,8 @@ post_at(POST_ARGS) assert(MDOC_TEXT == n->type); if (NULL == (std_att = mdoc_a2att(n->string))) { - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADATT); + mandoc_msg(MANDOCERR_AT_BAD, mdoc->parse, + n->line, n->pos, n->string); mandoc_asprintf(&att, "AT&T UNIX %s", n->string); } else att = mandoc_strdup(std_att); @@ -1425,10 +1422,8 @@ post_bl_block_width(POST_ARGS) width = 6; else if (MDOC_MAX == (tok = mdoc_hash_find(n->norm->Bl.width))) return(1); - else if (0 == (width = macro2len(tok))) { - mdoc_nmsg(mdoc, n, MANDOCERR_BADWIDTH); - return(1); - } + else + width = macro2len(tok); /* The value already exists: free and reallocate it. */ @@ -1659,30 +1654,37 @@ post_bl(POST_ARGS) static int ebool(struct mdoc *mdoc) { + struct mdoc_node *nch; + enum mdoct tok; + + tok = mdoc->last->tok; + nch = mdoc->last->child; - if (NULL == mdoc->last->child) { - if (MDOC_Sm == mdoc->last->tok) + if (NULL == nch) { + if (MDOC_Sm == tok) mdoc->flags ^= MDOC_SMOFF; return(1); } check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_LT, 2); - assert(MDOC_TEXT == mdoc->last->child->type); + assert(MDOC_TEXT == nch->type); - if (0 == strcmp(mdoc->last->child->string, "on")) { - if (MDOC_Sm == mdoc->last->tok) + if (0 == strcmp(nch->string, "on")) { + if (MDOC_Sm == tok) mdoc->flags &= ~MDOC_SMOFF; return(1); } - if (0 == strcmp(mdoc->last->child->string, "off")) { - if (MDOC_Sm == mdoc->last->tok) + if (0 == strcmp(nch->string, "off")) { + if (MDOC_Sm == tok) mdoc->flags |= MDOC_SMOFF; return(1); } - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADBOOL); - return(1); + mandoc_vmsg(MANDOCERR_SM_BAD, + mdoc->parse, nch->line, nch->pos, + "%s %s", mdoc_macronames[tok], nch->string); + return(mdoc_node_relink(mdoc, nch)); } static int @@ -1718,25 +1720,28 @@ post_root(POST_ARGS) static int post_st(POST_ARGS) { - struct mdoc_node *ch; + struct mdoc_node *n, *nch; const char *p; - if (NULL == (ch = mdoc->last->child)) { + n = mdoc->last; + nch = n->child; + + if (NULL == nch) { mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, - mdoc->last->line, mdoc->last->pos, - mdoc_macronames[mdoc->last->tok]); - mdoc_node_delete(mdoc, mdoc->last); + n->line, n->pos, mdoc_macronames[n->tok]); + mdoc_node_delete(mdoc, n); return(1); } - assert(MDOC_TEXT == ch->type); + assert(MDOC_TEXT == nch->type); - if (NULL == (p = mdoc_a2st(ch->string))) { - mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADSTANDARD); - mdoc_node_delete(mdoc, mdoc->last); + if (NULL == (p = mdoc_a2st(nch->string))) { + mandoc_msg(MANDOCERR_ST_BAD, mdoc->parse, + nch->line, nch->pos, nch->string); + mdoc_node_delete(mdoc, n); } else { - free(ch->string); - ch->string = mandoc_strdup(p); + free(nch->string); + nch->string = mandoc_strdup(p); } return(1); Index: mandoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.h,v retrieving revision 1.135 retrieving revision 1.136 diff -Lmandoc.h -Lmandoc.h -u -p -r1.135 -r1.136 --- mandoc.h +++ mandoc.h @@ -91,23 +91,21 @@ enum mandocerr { MANDOCERR_ARGCWARN, /* argument count wrong */ MANDOCERR_BD_NOTYPE, /* missing display type, using -ragged */ MANDOCERR_BL_LATETYPE, /* list type is not the first argument: arg */ - MANDOCERR_BL_WIDTH, /* missing -width in -tag list, using 8n */ + MANDOCERR_BL_NOWIDTH, /* missing -width in -tag list, using 8n */ MANDOCERR_IT_NOHEAD, /* empty head in list item: type */ MANDOCERR_IT_NOBODY, /* empty list item: type */ MANDOCERR_BF_NOFONT, /* missing font type, using \fR */ - MANDOCERR_BF_BADFONT, /* unknown font type, using \fR: Bf font */ + MANDOCERR_BF_BADFONT, /* unknown font type, using \fR: macro font */ MANDOCERR_ARG_STD, /* missing -std argument, adding it: macro */ /* related to bad macro arguments */ MANDOCERR_IGNARGV, /* skipping argument */ MANDOCERR_ARG_REP, /* duplicate argument: macro arg */ - MANDOCERR_DISPREP, /* duplicate display type */ - MANDOCERR_LISTREP, /* duplicate list type */ - MANDOCERR_BADATT, /* unknown AT&T UNIX version */ - MANDOCERR_BADBOOL, /* bad Boolean value */ - MANDOCERR_BADFONT, /* unknown font */ - MANDOCERR_BADSTANDARD, /* unknown standard specifier */ - MANDOCERR_BADWIDTH, /* bad width argument */ + MANDOCERR_BD_REP, /* skipping duplicate display type: type */ + MANDOCERR_BL_REP, /* skipping duplicate list type: type */ + MANDOCERR_AT_BAD, /* unknown AT&T UNIX version: version */ + MANDOCERR_SM_BAD, /* invalid Boolean argument: macro arg */ + MANDOCERR_FT_BAD, /* unknown font, skipping request: request font */ /* related to plain text */ MANDOCERR_NOBLANKLN, /* blank line in non-literal context */ @@ -145,6 +143,7 @@ enum mandocerr { MANDOCERR_REQUEST, /* NOT IMPLEMENTED: skipping request */ MANDOCERR_ARGCOUNT, /* argument count wrong */ MANDOCERR_RS_SKIP, /* skipping invalid content in .Rs block: macro */ + MANDOCERR_ST_BAD, /* unknown standard specifier: standard */ MANDOCERR_STRAYTA, /* skipping column outside column list */ MANDOCERR_NOSCOPE, /* skipping end of block that is not open */ MANDOCERR_SCOPEBROKEN, /* missing end of block */ Index: read.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/read.c,v retrieving revision 1.62 retrieving revision 1.63 diff -Lread.c -Lread.c -u -p -r1.62 -r1.63 --- read.c +++ read.c @@ -145,13 +145,11 @@ static const char * const mandocerrs[MAN /* related to bad macro arguments */ "skipping argument", "duplicate argument", - "duplicate display type", - "duplicate list type", + "skipping duplicate display type", + "skipping duplicate list type", "unknown AT&T UNIX version", - "bad Boolean value", - "unknown font", - "unknown standard specifier", - "bad width argument", + "invalid Boolean argument", + "unknown font, skipping request", /* related to plain text */ "blank line in non-literal context", @@ -189,6 +187,7 @@ static const char * const mandocerrs[MAN "NOT IMPLEMENTED, please use groff: skipping request", "argument count wrong", "skipping invalid content in .Rs block", + "unknown standard specifier", "skipping column outside column list", "skipping end of block that is not open", "missing end of block", Index: man_validate.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_validate.c,v retrieving revision 1.97 retrieving revision 1.98 diff -Lman_validate.c -Lman_validate.c -u -p -r1.97 -r1.98 --- man_validate.c +++ man_validate.c @@ -303,8 +303,8 @@ post_ft(CHKARGS) } if (0 == ok) { - mandoc_vmsg(MANDOCERR_BADFONT, man->parse, n->line, - n->pos, "%s", cp); + mandoc_vmsg(MANDOCERR_FT_BAD, man->parse, + n->line, n->pos, "ft %s", cp); *cp = '\0'; } -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv