version 1.61, 2008/12/10 13:15:55 |
version 1.63, 2008/12/10 16:03:12 |
|
|
/* TODO: (warn) some sections need specific elements. */ |
/* TODO: (warn) some sections need specific elements. */ |
/* TODO: (warn) NAME section has particular order. */ |
/* TODO: (warn) NAME section has particular order. */ |
/* TODO: macros with a set number of arguments? */ |
/* TODO: macros with a set number of arguments? */ |
/* TODO: validate Dt macro arguments. */ |
|
/* FIXME: Bl -diag supposed to ignore callable children. */ |
/* FIXME: Bl -diag supposed to ignore callable children. */ |
|
|
struct roffnode { |
struct roffnode { |
|
|
roff_layout(ROFFCALL_ARGS) |
roff_layout(ROFFCALL_ARGS) |
{ |
{ |
int i, c, argcp[ROFF_MAXLINEARG]; |
int i, c, argcp[ROFF_MAXLINEARG]; |
char *argvp[ROFF_MAXLINEARG]; |
char *argvp[ROFF_MAXLINEARG], *p; |
|
|
/* |
/* |
* The roff_layout function is for multi-line macros. A layout |
* The roff_layout function is for multi-line macros. A layout |
Line 1182 roff_layout(ROFFCALL_ARGS) |
|
Line 1181 roff_layout(ROFFCALL_ARGS) |
|
|
|
assert( ! (ROFF_CALLABLE & tokens[tok].flags)); |
assert( ! (ROFF_CALLABLE & tokens[tok].flags)); |
|
|
if ( ! ROFFSec_NAME & tree->asec) |
if ( ! (ROFFSec_PR_Os & tree->asec)) |
return(roff_errp(tree, *argv, tok, ERR_NOT_PR)); |
return(roff_errp(tree, *argv, tok, ERR_NOT_PR)); |
|
|
if (ROFF_EXIT == type) { |
if (ROFF_EXIT == type) { |
Line 1192 roff_layout(ROFFCALL_ARGS) |
|
Line 1191 roff_layout(ROFFCALL_ARGS) |
|
return((*tree->cb.roffblkout)(tree->arg, tok)); |
return((*tree->cb.roffblkout)(tree->arg, tok)); |
} |
} |
|
|
argv++; |
p = *argv++; |
assert( ! (ROFF_CALLABLE & tokens[tok].flags)); |
assert( ! (ROFF_CALLABLE & tokens[tok].flags)); |
|
|
if ( ! roffparseopts(tree, tok, &argv, argcp, argvp)) |
if ( ! roffparseopts(tree, tok, &argv, argcp, argvp)) |
Line 1249 roff_layout(ROFFCALL_ARGS) |
|
Line 1248 roff_layout(ROFFCALL_ARGS) |
|
return(0); |
return(0); |
|
|
tree->asec |= tree->csec; |
tree->asec |= tree->csec; |
|
|
|
if ( ! roffspecial(tree, tok, p, argcp, |
|
(const char **)argvp, 0, argv)) |
|
return(0); |
break; |
break; |
default: |
default: |
break; |
break; |
Line 1346 roff_ordered(ROFFCALL_ARGS) |
|
Line 1349 roff_ordered(ROFFCALL_ARGS) |
|
* .Xr arg1 arg2 punctuation |
* .Xr arg1 arg2 punctuation |
*/ |
*/ |
|
|
if ( ! ROFFSec_NAME & tree->asec) |
if ( ! (ROFFSec_PR_Os & tree->asec)) |
return(roff_errp(tree, *argv, tok, ERR_NOT_PR)); |
return(roff_errp(tree, *argv, tok, ERR_NOT_PR)); |
|
|
first = (*argv == tree->cur); |
first = (*argv == tree->cur); |
Line 1418 roff_text(ROFFCALL_ARGS) |
|
Line 1421 roff_text(ROFFCALL_ARGS) |
|
* <fl> v W f </fl> ; |
* <fl> v W f </fl> ; |
*/ |
*/ |
|
|
if ( ! ROFFSec_NAME & tree->asec) |
if ( ! (ROFFSec_PR_Os & tree->asec)) |
return(roff_errp(tree, *argv, tok, ERR_NOT_PR)); |
return(roff_errp(tree, *argv, tok, ERR_NOT_PR)); |
|
|
first = (*argv == tree->cur); |
first = (*argv == tree->cur); |