=================================================================== RCS file: /cvs/mandoc/Attic/validate.c,v retrieving revision 1.46 retrieving revision 1.50 diff -u -p -r1.46 -r1.50 --- mandoc/Attic/validate.c 2009/01/21 11:35:26 1.46 +++ mandoc/Attic/validate.c 2009/02/21 21:00:06 1.50 @@ -1,4 +1,4 @@ -/* $Id: validate.c,v 1.46 2009/01/21 11:35:26 kristaps Exp $ */ +/* $Id: validate.c,v 1.50 2009/02/21 21:00:06 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -35,7 +35,7 @@ typedef int (*v_post)(struct mdoc *); /* FIXME: some sections should only occur in specific msecs. */ /* FIXME: ignoring Pp. */ /* FIXME: math symbols. */ -/* FIXME: valid character-escape checks. */ +/* FIXME: valid character-escape checks!!!! */ /* FIXME: make sure required sections are included (NAME, ...). */ struct valids { @@ -150,7 +150,6 @@ const struct valids mdoc_valids[MDOC_MAX] = { { pres_prologue, posts_text }, /* Dd */ { pres_prologue, NULL }, /* Dt */ { pres_prologue, NULL }, /* Os */ - /* FIXME: NAME section internal ordering. */ { pres_sh, posts_sh }, /* Sh */ { pres_ss, posts_ss }, /* Ss */ { NULL, posts_pp }, /* Pp */ @@ -709,6 +708,9 @@ static int pre_it(struct mdoc *mdoc, struct mdoc_node *node) { + /* TODO: -width attribute must be specified for -tag. */ + /* TODO: children too big for -width? */ + if (MDOC_BLOCK != node->type) return(1); return(pre_check_parent(mdoc, node, MDOC_Bl, MDOC_BODY)); @@ -905,6 +907,7 @@ post_it(struct mdoc *mdoc) #define TYPE_NONE (0) #define TYPE_BODY (1) #define TYPE_HEAD (2) +#define TYPE_OHEAD (3) size_t i, argc; struct mdoc_node *n; @@ -951,20 +954,23 @@ post_it(struct mdoc *mdoc) case (MDOC_Hyphen): /* FALLTHROUGH */ case (MDOC_Item): - /* FALLTHROUGH */ - case (MDOC_Column): type = TYPE_BODY; sv = n->data.block.argv[(int)i].arg; break; + case (MDOC_Column): + type = TYPE_OHEAD; + sv = n->data.block.argv[(int)i].arg; + break; default: break; } assert(TYPE_NONE != type); + n = mdoc->last->data.block.head; + assert(n); + if (TYPE_HEAD == type) { - n = mdoc->last->data.block.head; - assert(n); if (NULL == n->child) if ( ! mdoc_warn(mdoc, WARN_SYNTAX, "macro suggests line parameters")) return(0); @@ -975,26 +981,29 @@ post_it(struct mdoc *mdoc) if ( ! mdoc_warn(mdoc, WARN_SYNTAX, "macro suggests body children")) return(0); - return(1); + } else if (TYPE_BODY == type) { + if (n->child) + if ( ! mdoc_warn(mdoc, WARN_SYNTAX, "macro suggests no line parameters")) + return(0); + + n = mdoc->last->data.block.body; + assert(n); + if (NULL == n->child) + if ( ! mdoc_warn(mdoc, WARN_SYNTAX, "macro suggests body children")) + return(0); + } else { + if (NULL == n->child) + if ( ! mdoc_warn(mdoc, WARN_SYNTAX, "macro suggests line parameters")) + return(0); + + n = mdoc->last->data.block.body; + assert(n); + if (n->child) + if ( ! mdoc_warn(mdoc, WARN_SYNTAX, "macro suggests no body children")) + return(0); } - assert(TYPE_BODY == type); - assert(mdoc->last->data.block.head); - - n = mdoc->last->data.block.head; - assert(n); - if (n->child) - if ( ! mdoc_warn(mdoc, WARN_SYNTAX, "macro suggests no line parameters")) - return(0); - - n = mdoc->last->data.block.body; - assert(n); - if (NULL == n->child) - if ( ! mdoc_warn(mdoc, WARN_SYNTAX, "macro suggests body children")) - return(0); - - assert(-1 != sv); - if (MDOC_Column != sv) + if (MDOC_Column != sv) return(1); /* Make sure the number of columns is sane. */ @@ -1011,6 +1020,7 @@ post_it(struct mdoc *mdoc) #undef TYPE_NONE #undef TYPE_BODY #undef TYPE_HEAD +#undef TYPE_OHEAD }