version 1.56, 2009/03/05 12:08:53 |
version 1.57, 2009/03/06 14:13:47 |
Line 184 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
Line 184 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
{ macro_constant, 0 }, /* Hf */ |
{ macro_constant, 0 }, /* Hf */ |
{ macro_obsolete, 0 }, /* Fr */ |
{ macro_obsolete, 0 }, /* Fr */ |
{ macro_constant, 0 }, /* Ud */ |
{ macro_constant, 0 }, /* Ud */ |
|
{ macro_constant, 0 }, /* Lb */ |
}; |
}; |
|
|
const struct mdoc_macro * const mdoc_macros = __mdoc_macros; |
const struct mdoc_macro * const mdoc_macros = __mdoc_macros; |
Line 522 rewind_subblock(enum mdoc_type type, struct mdoc *mdoc |
|
Line 523 rewind_subblock(enum mdoc_type type, struct mdoc *mdoc |
|
break; |
break; |
else if (rewind_dobreak(tok, n)) |
else if (rewind_dobreak(tok, n)) |
continue; |
continue; |
return(mdoc_perr(mdoc, line, ppos, "scope breaks prior %s", mdoc_node2a(n))); |
return(mdoc_perr(mdoc, line, ppos, |
|
"scope breaks %s", MDOC_ROOT == n->type ? |
|
"<root>" : mdoc_macronames[n->tok])); |
} |
} |
|
|
assert(n); |
assert(n); |
Line 546 rewind_expblock(struct mdoc *mdoc, int tok, int line, |
|
Line 549 rewind_expblock(struct mdoc *mdoc, int tok, int line, |
|
else if (rewind_dobreak(tok, n)) |
else if (rewind_dobreak(tok, n)) |
continue; |
continue; |
return(mdoc_perr(mdoc, line, ppos, |
return(mdoc_perr(mdoc, line, ppos, |
"scope breaks prior %s", |
"scope breaks %s", MDOC_ROOT == n->type ? |
mdoc_node2a(n))); |
"<root>" : mdoc_macronames[n->tok])); |
} |
} |
|
|
assert(n); |
assert(n); |
Line 571 rewind_impblock(struct mdoc *mdoc, int tok, int line, |
|
Line 574 rewind_impblock(struct mdoc *mdoc, int tok, int line, |
|
else if (rewind_dobreak(tok, n)) |
else if (rewind_dobreak(tok, n)) |
continue; |
continue; |
return(mdoc_perr(mdoc, line, ppos, |
return(mdoc_perr(mdoc, line, ppos, |
"scope breaks prior %s", |
"scope breaks %s", MDOC_ROOT == n->type ? |
mdoc_node2a(n))); |
"<root>" : mdoc_macronames[n->tok])); |
} |
} |
|
|
assert(n); |
assert(n); |
|
|
macro_constant_delimited(MACRO_PROT_ARGS) |
macro_constant_delimited(MACRO_PROT_ARGS) |
{ |
{ |
int lastarg, flushed, j, c, maxargs, argc, |
int lastarg, flushed, j, c, maxargs, argc, |
igndelim; |
igndelim, ignargs; |
struct mdoc_arg argv[MDOC_LINEARG_MAX]; |
struct mdoc_arg argv[MDOC_LINEARG_MAX]; |
char *p; |
char *p; |
|
|
lastarg = ppos; |
lastarg = ppos; |
flushed = 0; |
flushed = 0; |
|
|
|
|
|
/* |
|
* Maximum arguments per macro. Some of these have none and |
|
* exit as soon as they're parsed. |
|
*/ |
|
|
switch (tok) { |
switch (tok) { |
case (MDOC_No): |
case (MDOC_No): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Ns): |
case (MDOC_Ns): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Ux): |
case (MDOC_Ux): |
/* FALLTHROUGH */ |
|
case (MDOC_St): |
|
maxargs = 0; |
maxargs = 0; |
break; |
break; |
default: |
default: |
Line 1205 macro_constant_delimited(MACRO_PROT_ARGS) |
|
Line 1212 macro_constant_delimited(MACRO_PROT_ARGS) |
|
break; |
break; |
} |
} |
|
|
|
/* |
|
* Whether to ignore delimiter characters. `Pf' accepts its |
|
* first token as a parameter no matter what it looks like (if |
|
* it's text). |
|
*/ |
|
|
switch (tok) { |
switch (tok) { |
case (MDOC_Pf): |
case (MDOC_Pf): |
igndelim = 1; |
igndelim = 1; |
Line 1214 macro_constant_delimited(MACRO_PROT_ARGS) |
|
Line 1227 macro_constant_delimited(MACRO_PROT_ARGS) |
|
break; |
break; |
} |
} |
|
|
for (argc = 0; argc < MDOC_LINEARG_MAX; argc++) { |
/* |
lastarg = *pos; |
* Whether to ignore arguments: `St', for example, handles its |
c = mdoc_argv(mdoc, line, tok, &argv[argc], pos, buf); |
* argument-like parameters as regular parameters. |
if (ARGV_EOLN == c) |
*/ |
break; |
|
if (ARGV_WORD == c) { |
switch (tok) { |
*pos = lastarg; |
case (MDOC_St): |
break; |
ignargs = 1; |
} else if (ARGV_ARG == c) |
break; |
continue; |
default: |
mdoc_argv_free(argc, argv); |
ignargs = 0; |
return(0); |
break; |
} |
} |
|
|
|
argc = 0; |
|
|
|
if ( ! ignargs) |
|
for ( ; argc < MDOC_LINEARG_MAX; argc++) { |
|
lastarg = *pos; |
|
c = mdoc_argv(mdoc, line, tok, |
|
&argv[argc], pos, buf); |
|
if (ARGV_EOLN == c) |
|
break; |
|
if (ARGV_WORD == c) { |
|
*pos = lastarg; |
|
break; |
|
} else if (ARGV_ARG == c) |
|
continue; |
|
mdoc_argv_free(argc, argv); |
|
return(0); |
|
} |
|
|
if (MDOC_LINEARG_MAX == argc) { |
if (MDOC_LINEARG_MAX == argc) { |
mdoc_argv_free(argc - 1, argv); |
mdoc_argv_free(argc - 1, argv); |