version 1.96, 2010/06/12 11:58:22 |
version 1.100, 2010/06/27 16:36:22 |
Line 532 pre_display(PRE_ARGS) |
|
Line 532 pre_display(PRE_ARGS) |
|
static int |
static int |
pre_bl(PRE_ARGS) |
pre_bl(PRE_ARGS) |
{ |
{ |
int i, width, offs, cmpt, dupl; |
int i, comp, dup; |
|
const char *offs, *width; |
enum mdoc_list lt; |
enum mdoc_list lt; |
|
|
if (MDOC_BLOCK != n->type) { |
if (MDOC_BLOCK != n->type) { |
Line 552 pre_bl(PRE_ARGS) |
|
Line 553 pre_bl(PRE_ARGS) |
|
*/ |
*/ |
|
|
assert(LIST__NONE == n->data.Bl.type); |
assert(LIST__NONE == n->data.Bl.type); |
offs = width = cmpt = -1; |
|
|
|
/* LINTED */ |
/* LINTED */ |
for (i = 0; n->args && i < (int)n->args->argc; i++) { |
for (i = 0; n->args && i < (int)n->args->argc; i++) { |
lt = LIST__NONE; |
lt = LIST__NONE; |
dupl = 0; |
dup = comp = 0; |
|
width = offs = NULL; |
switch (n->args->argv[i].arg) { |
switch (n->args->argv[i].arg) { |
/* Set list types. */ |
/* Set list types. */ |
case (MDOC_Bullet): |
case (MDOC_Bullet): |
Line 595 pre_bl(PRE_ARGS) |
|
Line 596 pre_bl(PRE_ARGS) |
|
break; |
break; |
/* Set list arguments. */ |
/* Set list arguments. */ |
case (MDOC_Compact): |
case (MDOC_Compact): |
if (cmpt >= 0) |
dup = n->data.Bl.comp; |
dupl++; |
comp = 1; |
cmpt = i; |
|
break; |
break; |
case (MDOC_Width): |
case (MDOC_Width): |
if (width >= 0) |
dup = (NULL != n->data.Bl.width); |
dupl++; |
width = n->args->argv[i].value[0]; |
width = i; |
|
break; |
break; |
case (MDOC_Offset): |
case (MDOC_Offset): |
if (offs >= 0) |
/* NB: this can be empty! */ |
dupl++; |
if (n->args->argv[i].sz) { |
offs = i; |
offs = n->args->argv[i].value[0]; |
|
dup = (NULL != n->data.Bl.offs); |
|
break; |
|
} |
|
if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_IGNARGV)) |
|
return(0); |
break; |
break; |
} |
} |
|
|
/* Check: duplicate auxiliary arguments. */ |
/* Check: duplicate auxiliary arguments. */ |
|
|
if (dupl) |
if (dup && ! mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP)) |
if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP)) |
return(0); |
return(0); |
|
|
|
|
if (comp && ! dup) |
|
n->data.Bl.comp = comp; |
|
if (offs && ! dup) |
|
n->data.Bl.offs = offs; |
|
if (width && ! dup) |
|
n->data.Bl.width = width; |
|
|
/* Check: multiple list types. */ |
/* Check: multiple list types. */ |
|
|
if (LIST__NONE != lt && n->data.Bl.type != LIST__NONE) |
if (LIST__NONE != lt && n->data.Bl.type != LIST__NONE) |
Line 631 pre_bl(PRE_ARGS) |
|
Line 641 pre_bl(PRE_ARGS) |
|
/* The list type should come first. */ |
/* The list type should come first. */ |
|
|
if (n->data.Bl.type == LIST__NONE) |
if (n->data.Bl.type == LIST__NONE) |
if (width >= 0 || offs >= 0 || cmpt >= 0) |
if (n->data.Bl.width || |
|
n->data.Bl.offs || |
|
n->data.Bl.comp) |
if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_LISTFIRST)) |
if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_LISTFIRST)) |
return(0); |
return(0); |
|
|
Line 654 pre_bl(PRE_ARGS) |
|
Line 666 pre_bl(PRE_ARGS) |
|
|
|
switch (n->data.Bl.type) { |
switch (n->data.Bl.type) { |
case (LIST_tag): |
case (LIST_tag): |
if (width >= 0) |
if (n->data.Bl.width) |
break; |
break; |
if (mdoc_nmsg(mdoc, n, MANDOCERR_NOWIDTHARG)) |
if (mdoc_nmsg(mdoc, n, MANDOCERR_NOWIDTHARG)) |
break; |
break; |
Line 668 pre_bl(PRE_ARGS) |
|
Line 680 pre_bl(PRE_ARGS) |
|
case (LIST_inset): |
case (LIST_inset): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (LIST_item): |
case (LIST_item): |
if (width < 0) |
if (NULL == n->data.Bl.width) |
break; |
break; |
if (mdoc_nmsg(mdoc, n, MANDOCERR_WIDTHARG)) |
if (mdoc_nmsg(mdoc, n, MANDOCERR_WIDTHARG)) |
break; |
break; |
Line 794 pre_sh(PRE_ARGS) |
|
Line 806 pre_sh(PRE_ARGS) |
|
|
|
if (MDOC_BLOCK != n->type) |
if (MDOC_BLOCK != n->type) |
return(1); |
return(1); |
|
|
|
mdoc->regs->regs[(int)REG_nS].set = 0; |
return(check_parent(mdoc, n, MDOC_MAX, MDOC_ROOT)); |
return(check_parent(mdoc, n, MDOC_MAX, MDOC_ROOT)); |
} |
} |
|
|