diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-06-12 12:10:55 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-06-12 12:10:55 +0000 |
commit | b2b5082e5673e0127d8316e54a5d2ad084a62864 (patch) | |
tree | 065fff7700eb20616226134fedbfec463842ed39 /mdoc_validate.c | |
parent | 9182860daa80b4a3002521ca4fdbd780d009b616 (diff) | |
download | mandoc-b2b5082e5673e0127d8316e54a5d2ad084a62864.tar.gz |
Moved `Bl -compact' into cached data. This allowed the removal of
scanning the argv list in print_bvspace(), and thus the parent pointer.
Diffstat (limited to 'mdoc_validate.c')
-rw-r--r-- | mdoc_validate.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/mdoc_validate.c b/mdoc_validate.c index ddd152be..7b2ea1f4 100644 --- a/mdoc_validate.c +++ b/mdoc_validate.c @@ -532,7 +532,7 @@ pre_display(PRE_ARGS) static int pre_bl(PRE_ARGS) { - int i, width, offs, cmpt, dupl; + int i, width, offs, comp, dup; enum mdoc_list lt; if (MDOC_BLOCK != n->type) { @@ -552,12 +552,12 @@ pre_bl(PRE_ARGS) */ assert(LIST__NONE == n->data.Bl.type); - offs = width = cmpt = -1; + offs = width = -1; /* LINTED */ for (i = 0; n->args && i < (int)n->args->argc; i++) { lt = LIST__NONE; - dupl = 0; + dup = comp = 0; switch (n->args->argv[i].arg) { /* Set list types. */ case (MDOC_Bullet): @@ -595,27 +595,28 @@ pre_bl(PRE_ARGS) break; /* Set list arguments. */ case (MDOC_Compact): - if (cmpt >= 0) - dupl++; - cmpt = i; + dup = n->data.Bl.comp; + comp = 1; break; case (MDOC_Width): if (width >= 0) - dupl++; + dup++; width = i; break; case (MDOC_Offset): if (offs >= 0) - dupl++; + dup++; offs = i; break; } /* Check: duplicate auxiliary arguments. */ - if (dupl) - if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP)) - return(0); + if (dup && ! mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP)) + return(0); + + if (comp && ! dup) + n->data.Bl.comp = comp; /* Check: multiple list types. */ @@ -631,7 +632,7 @@ pre_bl(PRE_ARGS) /* The list type should come first. */ if (n->data.Bl.type == LIST__NONE) - if (width >= 0 || offs >= 0 || cmpt >= 0) + if (width >= 0 || offs >= 0 || n->data.Bl.comp) if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_LISTFIRST)) return(0); |