version 1.23, 2009/08/22 22:39:55 |
version 1.24, 2009/09/21 21:11:37 |
|
|
static int rew_last(struct mdoc *, |
static int rew_last(struct mdoc *, |
const struct mdoc_node *); |
const struct mdoc_node *); |
static int append_delims(struct mdoc *, int, int *, char *); |
static int append_delims(struct mdoc *, int, int *, char *); |
static int lookup(struct mdoc *, int, const char *); |
static int lookup(int, const char *); |
static int lookup_raw(struct mdoc *, const char *); |
static int lookup_raw(const char *); |
static int swarn(struct mdoc *, enum mdoc_type, int, int, |
static int swarn(struct mdoc *, enum mdoc_type, int, int, |
const struct mdoc_node *); |
const struct mdoc_node *); |
|
|
|
|
* Look up a macro from within a subsequent context. |
* Look up a macro from within a subsequent context. |
*/ |
*/ |
static int |
static int |
lookup(struct mdoc *mdoc, int from, const char *p) |
lookup(int from, const char *p) |
{ |
{ |
|
/* FIXME: make -diag lists be un-PARSED. */ |
|
|
if ( ! (MDOC_PARSED & mdoc_macros[from].flags)) |
if ( ! (MDOC_PARSED & mdoc_macros[from].flags)) |
return(MDOC_MAX); |
return(MDOC_MAX); |
return(lookup_raw(mdoc, p)); |
return(lookup_raw(p)); |
} |
} |
|
|
|
|
|
|
* Lookup a macro following the initial line macro. |
* Lookup a macro following the initial line macro. |
*/ |
*/ |
static int |
static int |
lookup_raw(struct mdoc *mdoc, const char *p) |
lookup_raw(const char *p) |
{ |
{ |
int res; |
int res; |
|
|
if (MDOC_MAX == (res = mdoc_hash_find(mdoc->htab, p))) |
if (MDOC_MAX == (res = mdoc_hash_find(p))) |
return(MDOC_MAX); |
return(MDOC_MAX); |
if (MDOC_CALLABLE & mdoc_macros[res].flags) |
if (MDOC_CALLABLE & mdoc_macros[res].flags) |
return(res); |
return(res); |
|
|
if (ARGS_EOLN == c) |
if (ARGS_EOLN == c) |
break; |
break; |
|
|
if (MDOC_MAX != (c = lookup(m, tok, p))) { |
if (MDOC_MAX != (c = lookup(tok, p))) { |
if ( ! flushed) { |
if ( ! flushed) { |
if ( ! rew_sub(MDOC_BLOCK, m, tok, line, ppos)) |
if ( ! rew_sub(MDOC_BLOCK, m, tok, line, ppos)) |
return(0); |
return(0); |
|
|
|
|
/* Quoted words shouldn't be looked-up. */ |
/* Quoted words shouldn't be looked-up. */ |
|
|
c = ARGS_QWORD == w ? MDOC_MAX : lookup(m, tok, p); |
c = ARGS_QWORD == w ? MDOC_MAX : lookup(tok, p); |
|
|
/* |
/* |
* In this case, we've located a submacro and must |
* In this case, we've located a submacro and must |
|
|
continue; |
continue; |
} |
} |
|
|
if (MDOC_MAX == (c = lookup(m, tok, p))) { |
if (MDOC_MAX == (c = lookup(tok, p))) { |
if ( ! mdoc_word_alloc(m, line, lastarg, p)) |
if ( ! mdoc_word_alloc(m, line, lastarg, p)) |
return(0); |
return(0); |
continue; |
continue; |
|
|
if (ARGS_EOLN == c) |
if (ARGS_EOLN == c) |
break; |
break; |
|
|
if (MDOC_MAX == (c = lookup(m, tok, p))) { |
if (MDOC_MAX == (c = lookup(tok, p))) { |
if ( ! mdoc_word_alloc(m, line, la, p)) |
if ( ! mdoc_word_alloc(m, line, la, p)) |
return(0); |
return(0); |
continue; |
continue; |
|
|
if (ARGS_EOLN == c) |
if (ARGS_EOLN == c) |
break; |
break; |
|
|
if (MDOC_MAX != (c = lookup(m, tok, p))) { |
if (MDOC_MAX != (c = lookup(tok, p))) { |
if ( ! flushed) { |
if ( ! flushed) { |
if ( ! rew_sub(MDOC_HEAD, m, tok, line, ppos)) |
if ( ! rew_sub(MDOC_HEAD, m, tok, line, ppos)) |
return(0); |
return(0); |
|
|
if (ARGS_EOLN == c) |
if (ARGS_EOLN == c) |
break; |
break; |
|
|
if (MDOC_MAX != (c = lookup(m, tok, p))) { |
if (MDOC_MAX != (c = lookup(tok, p))) { |
if ( ! flushed && ! rew_elem(m, tok)) |
if ( ! flushed && ! rew_elem(m, tok)) |
return(0); |
return(0); |
flushed = 1; |
flushed = 1; |
|
|
if (ARGS_EOLN == w) |
if (ARGS_EOLN == w) |
break; |
break; |
|
|
c = ARGS_QWORD == w ? MDOC_MAX : lookup(m, tok, p); |
c = ARGS_QWORD == w ? MDOC_MAX : lookup(tok, p); |
|
|
if (MDOC_MAX != c) { |
if (MDOC_MAX != c) { |
if ( ! rew_elem(m, tok)) |
if ( ! rew_elem(m, tok)) |
|
|
if (ARGS_EOLN == w) |
if (ARGS_EOLN == w) |
break; |
break; |
|
|
c = ARGS_QWORD == w ? MDOC_MAX : lookup_raw(m, p); |
c = ARGS_QWORD == w ? MDOC_MAX : lookup_raw(p); |
|
|
if (MDOC_MAX != c) { |
if (MDOC_MAX != c) { |
if ( ! mdoc_macro(m, c, line, la, &pos, buf)) |
if ( ! mdoc_macro(m, c, line, la, &pos, buf)) |