From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (kristaps@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.3/8.14.3) with ESMTP id oAUAW9Wm022418 for ; Tue, 30 Nov 2010 05:32:09 -0500 (EST) Received: (from kristaps@localhost) by krisdoz.my.domain (8.14.3/8.14.3/Submit) id oAUAW6qD030226; Tue, 30 Nov 2010 05:32:06 -0500 (EST) Date: Tue, 30 Nov 2010 05:32:06 -0500 (EST) Message-Id: <201011301032.oAUAW6qD030226@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: kristaps@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: Move -column list validation and normal-formisation from X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Move -column list validation and normal-formisation from mdoc_action.c into mdoc_validate.c. Modified Files: -------------- mdocml: mdoc_action.c mdoc_validate.c Revision Data ------------- Index: mdoc_validate.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_validate.c,v retrieving revision 1.129 retrieving revision 1.130 diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.129 -r1.130 --- mdoc_validate.c +++ mdoc_validate.c @@ -1402,23 +1402,68 @@ post_it(POST_ARGS) static int post_bl_head(POST_ARGS) { - struct mdoc_node *n; + struct mdoc_node *np, *nn, *nnp; + int i, j; - assert(mdoc->last->parent); - n = mdoc->last->parent; + if (LIST_column != mdoc->last->data.Bl->type) + /* FIXME: this should be ERROR class... */ + return(hwarn_eq0(mdoc)); - if (LIST_column == n->data.Bl->type) { - if (n->data.Bl->ncols && mdoc->last->nchild) { - mdoc_nmsg(mdoc, n, MANDOCERR_COLUMNS); - return(0); - } + /* + * Convert old-style lists, where the column width specifiers + * trail as macro parameters, to the new-style ("normal-form") + * lists where they're argument values following -column. + */ + + /* First, disallow both types and allow normal-form. */ + + /* + * TODO: technically, we can accept both and just merge the two + * lists, but I'll leave that for another day. + */ + + if (mdoc->last->data.Bl->ncols && mdoc->last->nchild) { + mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_COLUMNS); + return(0); + } else if (NULL == mdoc->last->child) return(1); + + np = mdoc->last->parent; + assert(np->args); + + for (j = 0; j < (int)np->args->argc; j++) + if (MDOC_Column == np->args->argv[j].arg) + break; + + assert(j < (int)np->args->argc); + assert(0 == np->args->argv[j].sz); + + /* + * Accomodate for new-style groff column syntax. Shuffle the + * child nodes, all of which must be TEXT, as arguments for the + * column field. Then, delete the head children. + */ + + np->args->argv[j].sz = (size_t)mdoc->last->nchild; + np->args->argv[j].value = mandoc_malloc + ((size_t)mdoc->last->nchild * sizeof(char *)); + + mdoc->last->data.Bl->ncols = np->args->argv[j].sz; + mdoc->last->data.Bl->cols = (const char **)np->args->argv[j].value; + + for (i = 0, nn = mdoc->last->child; nn; i++) { + np->args->argv[j].value[i] = nn->string; + nn->string = NULL; + nnp = nn; + nn = nn->next; + mdoc_node_delete(NULL, nnp); } - /* FIXME: should be ERROR class. */ - return(hwarn_eq0(mdoc)); -} + mdoc->last->nchild = 0; + mdoc->last->child = NULL; + return(1); +} static int post_bl(POST_ARGS) Index: mdoc_action.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_action.c,v retrieving revision 1.85 retrieving revision 1.86 diff -Lmdoc_action.c -Lmdoc_action.c -u -p -r1.85 -r1.86 --- mdoc_action.c +++ mdoc_action.c @@ -52,7 +52,6 @@ static int concat(struct mdoc *, char const struct mdoc_node *, size_t); static int post_bl(POST_ARGS); -static int post_bl_head(POST_ARGS); static int post_bl_tagwidth(POST_ARGS); static int post_bl_width(POST_ARGS); static int post_dd(POST_ARGS); @@ -550,65 +549,10 @@ post_bl_width(POST_ARGS) } -/* - * Do processing for -column lists, which can have two distinct styles - * of invocation. Merge this two styles into a consistent form. - */ -/* ARGSUSED */ -static int -post_bl_head(POST_ARGS) -{ - int i, c; - struct mdoc_node *np, *nn, *nnp; - - if (LIST_column != n->data.Bl->type) - return(1); - else if (NULL == n->child) - return(1); - - np = n->parent; - assert(np->args); - - for (c = 0; c < (int)np->args->argc; c++) - if (MDOC_Column == np->args->argv[c].arg) - break; - - assert(c < (int)np->args->argc); - assert(0 == np->args->argv[c].sz); - - /* - * Accomodate for new-style groff column syntax. Shuffle the - * child nodes, all of which must be TEXT, as arguments for the - * column field. Then, delete the head children. - */ - - np->args->argv[c].sz = (size_t)n->nchild; - np->args->argv[c].value = mandoc_malloc - ((size_t)n->nchild * sizeof(char *)); - - n->data.Bl->ncols = np->args->argv[c].sz; - n->data.Bl->cols = (const char **)np->args->argv[c].value; - - for (i = 0, nn = n->child; nn; i++) { - np->args->argv[c].value[i] = nn->string; - nn->string = NULL; - nnp = nn; - nn = nn->next; - mdoc_node_delete(NULL, nnp); - } - - n->nchild = 0; - n->child = NULL; - return(1); -} - - static int post_bl(POST_ARGS) { - if (MDOC_HEAD == n->type) - return(post_bl_head(m, n)); if (MDOC_BLOCK != n->type) return(1); -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv