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 s651CMIx026688 for ; Fri, 4 Jul 2014 21:12:22 -0400 (EDT) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.5/8.14.3/Submit) id s651CKFh007613; Fri, 4 Jul 2014 21:12:21 -0400 (EDT) Date: Fri, 4 Jul 2014 21:12:21 -0400 (EDT) Message-Id: <201407050112.s651CKFh007613@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 regarding -offset and -width: * Bugfix: Last one wins, X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Cleanup regarding -offset and -width: * Bugfix: Last one wins, not first one. * Fix .Bl -width without argument: it means 0n, so do not ignore it. * Report macro names, argument names and fallbacks in related messages. * Simplify: Garbage collect auxiliary variables in pre_bd() and pre_bl(). Modified Files: -------------- mdocml: 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.226 retrieving revision 1.227 diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.226 -r1.227 --- mdoc_validate.c +++ mdoc_validate.c @@ -594,10 +594,10 @@ pre_display(PRE_ARGS) static int pre_bl(PRE_ARGS) { - int i, comp, dup; - const char *offs, *width; - enum mdoc_list lt; struct mdoc_node *np; + struct mdoc_argv *argv; + int i; + enum mdoc_list lt; if (MDOC_BLOCK != n->type) { if (ENDBODY_NOT != n->end) { @@ -619,10 +619,9 @@ pre_bl(PRE_ARGS) */ for (i = 0; n->args && i < (int)n->args->argc; i++) { + argv = n->args->argv + i; lt = LIST__NONE; - dup = comp = 0; - width = offs = NULL; - switch (n->args->argv[i].arg) { + switch (argv->arg) { /* Set list types. */ case MDOC_Bullet: lt = LIST_bullet; @@ -659,43 +658,45 @@ pre_bl(PRE_ARGS) break; /* Set list arguments. */ case MDOC_Compact: - dup = n->norm->Bl.comp; - comp = 1; + if (n->norm->Bl.comp) + mandoc_msg(MANDOCERR_ARG_REP, + mdoc->parse, argv->line, + argv->pos, "Bl -compact"); + n->norm->Bl.comp = 1; break; case MDOC_Width: - /* NB: this can be empty! */ - if (n->args->argv[i].sz) { - width = n->args->argv[i].value[0]; - dup = (NULL != n->norm->Bl.width); + if (0 == argv->sz) { + mandoc_msg(MANDOCERR_ARG_EMPTY, + mdoc->parse, argv->line, + argv->pos, "Bl -width"); + n->norm->Bl.width = "0n"; break; } - mdoc_nmsg(mdoc, n, MANDOCERR_IGNARGV); + if (NULL != n->norm->Bl.width) + mandoc_vmsg(MANDOCERR_ARG_REP, + mdoc->parse, argv->line, + argv->pos, "Bl -width %s", + argv->value[0]); + n->norm->Bl.width = argv->value[0]; break; case MDOC_Offset: - /* NB: this can be empty! */ - if (n->args->argv[i].sz) { - offs = n->args->argv[i].value[0]; - dup = (NULL != n->norm->Bl.offs); + if (0 == argv->sz) { + mandoc_msg(MANDOCERR_ARG_EMPTY, + mdoc->parse, argv->line, + argv->pos, "Bl -offset"); break; } - mdoc_nmsg(mdoc, n, MANDOCERR_IGNARGV); + if (NULL != n->norm->Bl.offs) + mandoc_vmsg(MANDOCERR_ARG_REP, + mdoc->parse, argv->line, + argv->pos, "Bl -offset %s", + argv->value[0]); + n->norm->Bl.offs = argv->value[0]; break; default: continue; } - /* Check: duplicate auxiliary arguments. */ - - if (dup) - mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP); - - if (comp && ! dup) - n->norm->Bl.comp = comp; - if (offs && ! dup) - n->norm->Bl.offs = offs; - if (width && ! dup) - n->norm->Bl.width = width; - /* Check: multiple list types. */ if (LIST__NONE != lt && n->norm->Bl.type != LIST__NONE) @@ -779,10 +780,10 @@ pre_bl(PRE_ARGS) static int pre_bd(PRE_ARGS) { - int i, dup, comp; - enum mdoc_disp dt; - const char *offs; struct mdoc_node *np; + struct mdoc_argv *argv; + int i; + enum mdoc_disp dt; if (MDOC_BLOCK != n->type) { if (ENDBODY_NOT != n->end) { @@ -798,11 +799,10 @@ pre_bd(PRE_ARGS) } for (i = 0; n->args && i < (int)n->args->argc; i++) { + argv = n->args->argv + i; dt = DISP__NONE; - dup = comp = 0; - offs = NULL; - switch (n->args->argv[i].arg) { + switch (argv->arg) { case MDOC_Centred: dt = DISP_centred; break; @@ -822,34 +822,30 @@ pre_bd(PRE_ARGS) mdoc_nmsg(mdoc, n, MANDOCERR_BADDISP); return(0); case MDOC_Offset: - /* NB: this can be empty! */ - if (n->args->argv[i].sz) { - offs = n->args->argv[i].value[0]; - dup = (NULL != n->norm->Bd.offs); + if (0 == argv->sz) { + mandoc_msg(MANDOCERR_ARG_EMPTY, + mdoc->parse, argv->line, + argv->pos, "Bd -offset"); break; } - mdoc_nmsg(mdoc, n, MANDOCERR_IGNARGV); + if (NULL != n->norm->Bd.offs) + mandoc_vmsg(MANDOCERR_ARG_REP, + mdoc->parse, argv->line, + argv->pos, "Bd -offset %s", + argv->value[0]); + n->norm->Bd.offs = argv->value[0]; break; case MDOC_Compact: - comp = 1; - dup = n->norm->Bd.comp; + if (n->norm->Bd.comp) + mandoc_msg(MANDOCERR_ARG_REP, + mdoc->parse, argv->line, + argv->pos, "Bd -compact"); + n->norm->Bd.comp = 1; break; default: abort(); /* NOTREACHED */ } - - /* Check whether we have duplicates. */ - - if (dup) - mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP); - - /* Make our auxiliary assignments. */ - - if (offs && ! dup) - n->norm->Bd.offs = offs; - if (comp && ! dup) - n->norm->Bd.comp = comp; /* Check whether a type has already been assigned. */ Index: mandoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.h,v retrieving revision 1.134 retrieving revision 1.135 diff -Lmandoc.h -Lmandoc.h -u -p -r1.134 -r1.135 --- mandoc.h +++ mandoc.h @@ -87,6 +87,7 @@ enum mandocerr { MANDOCERR_REQ_EMPTY, /* skipping empty request: request */ MANDOCERR_COND_EMPTY, /* conditional request controls empty scope */ MANDOCERR_MACRO_EMPTY, /* skipping empty macro: macro */ + MANDOCERR_ARG_EMPTY, /* empty argument, using 0n: macro arg */ MANDOCERR_ARGCWARN, /* argument count wrong */ MANDOCERR_BD_NOTYPE, /* missing display type, using -ragged */ MANDOCERR_BL_LATETYPE, /* list type is not the first argument: arg */ @@ -99,7 +100,7 @@ enum mandocerr { /* related to bad macro arguments */ MANDOCERR_IGNARGV, /* skipping argument */ - MANDOCERR_ARGVREP, /* duplicate 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 */ Index: read.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/read.c,v retrieving revision 1.61 retrieving revision 1.62 diff -Lread.c -Lread.c -u -p -r1.61 -r1.62 --- read.c +++ read.c @@ -131,6 +131,7 @@ static const char * const mandocerrs[MAN "skipping empty request", "conditional request controls empty scope", "skipping empty macro", + "empty argument, using 0n", "argument count wrong", "missing display type, using -ragged", "list type is not the first argument", -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv