summaryrefslogtreecommitdiffstatshomepage
path: root/validate.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-02-26 14:56:27 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-02-26 14:56:27 +0000
commit6bdbfd3d4d8125256b009166659cdbfa09434ada (patch)
tree36a5cdc91b849faef88f4e744e0a23ab77ae72de /validate.c
parent0aa4f25b79210adba71044d7536f78537c7b1bc9 (diff)
downloadmandoc-6bdbfd3d4d8125256b009166659cdbfa09434ada.tar.gz
mandoc-6bdbfd3d4d8125256b009166659cdbfa09434ada.tar.zst
mandoc-6bdbfd3d4d8125256b009166659cdbfa09434ada.zip
Lists (scoped elements) now put delims in-scope.
Diffstat (limited to 'validate.c')
-rw-r--r--validate.c59
1 files changed, 51 insertions, 8 deletions
diff --git a/validate.c b/validate.c
index 72a5dea0..c3e6f0b5 100644
--- a/validate.c
+++ b/validate.c
@@ -1,4 +1,4 @@
-/* $Id: validate.c,v 1.60 2009/02/25 12:32:50 kristaps Exp $ */
+/* $Id: validate.c,v 1.61 2009/02/26 14:56:27 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -540,7 +540,7 @@ pre_display(PRE_ARGS)
static int
pre_bl(PRE_ARGS)
{
- int type, i;
+ int type, i, width, offset;
struct mdoc_arg *argv;
size_t argc;
@@ -551,8 +551,10 @@ pre_bl(PRE_ARGS)
/* Make sure that only one type of list is specified. */
+ type = offset = width = -1;
+
/* LINTED */
- for (i = 0, type = 0; i < (int)argc; i++) {
+ for (i = 0; i < (int)argc; i++) {
argv = &n->data.block.argv[i];
switch (argv->arg) {
@@ -577,18 +579,60 @@ pre_bl(PRE_ARGS)
case (MDOC_Inset):
/* FALLTHROUGH */
case (MDOC_Column):
- if (0 == type++)
+ if (-1 == type) {
+ type = argv->arg;
break;
+ }
return(mdoc_perr(mdoc, argv->line, argv->pos,
"multiple types specified"));
+ case (MDOC_Width):
+ if (-1 == width) {
+ width = argv->arg;
+ break;
+ }
+ return(mdoc_perr(mdoc, argv->line, argv->pos,
+ "multiple -%s arguments",
+ mdoc_argnames[MDOC_Width]));
+ case (MDOC_Offset):
+ if (-1 == offset) {
+ offset = argv->arg;
+ break;
+ }
+ return(mdoc_perr(mdoc, argv->line, argv->pos,
+ "multiple -%s arguments",
+ mdoc_argnames[MDOC_Offset]));
default:
break;
}
}
- if (type)
- return(1);
- return(mdoc_err(mdoc, "no type specified"));
+ if (-1 == type)
+ return(mdoc_err(mdoc, "no type specified"));
+
+ switch (type) {
+ case (MDOC_Column):
+ /* FALLTHROUGH */
+ case (MDOC_Diag):
+ /* FALLTHROUGH */
+ case (MDOC_Inset):
+ /* FALLTHROUGH */
+ case (MDOC_Item):
+ if (-1 == width)
+ break;
+ return(mdoc_nwarn(mdoc, n, WARN_SYNTAX,
+ "superfluous -%s argument",
+ mdoc_argnames[MDOC_Width]));
+ case (MDOC_Tag):
+ if (-1 != width)
+ break;
+ return(mdoc_nwarn(mdoc, n, WARN_SYNTAX,
+ "suggest -%s argument",
+ mdoc_argnames[MDOC_Width]));
+ default:
+ break;
+ }
+
+ return(1);
}
@@ -659,7 +703,6 @@ static int
pre_it(PRE_ARGS)
{
- /* TODO: -width attribute must be specified for -tag. */
/* TODO: children too big for -width? */
if (MDOC_BLOCK != n->type)