-/* $Id: mdoc_macro.c,v 1.32 2009/08/19 14:09:33 kristaps Exp $ */
+/* $Id: mdoc_macro.c,v 1.36 2009/09/20 17:24:57 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
static int rew_last(struct mdoc *,
const struct mdoc_node *);
static int append_delims(struct mdoc *, int, int *, char *);
-static int lookup(struct mdoc *, int, const char *);
-static int lookup_raw(struct mdoc *, const char *);
+static int lookup(int, const char *);
+static int lookup_raw(const char *);
static int swarn(struct mdoc *, enum mdoc_type, int, int,
const struct mdoc_node *);
* Look up a macro from within a subsequent context.
*/
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))
return(MDOC_MAX);
- return(lookup_raw(mdoc, p));
+ return(lookup_raw(p));
}
* Lookup a macro following the initial line macro.
*/
static int
-lookup_raw(struct mdoc *mdoc, const char *p)
+lookup_raw(const char *p)
{
int res;
- if (MDOC_MAX == (res = mdoc_hash_find(mdoc->htab, p)))
+ if (MDOC_MAX == (res = mdoc_hash_find(p)))
return(MDOC_MAX);
if (MDOC_CALLABLE & mdoc_macros[res].flags)
return(res);
for (;;) {
lastarg = *pos;
- c = mdoc_args(mdoc, line, pos, buf, 0, &p);
+ c = mdoc_zargs(mdoc, line, pos, buf, ARGS_NOWARN, &p);
assert(ARGS_PHRASE != c);
if (ARGS_ERROR == c)
if (ARGS_EOLN == c)
break;
- if (MDOC_MAX != (c = lookup(m, tok, p))) {
+ if (MDOC_MAX != (c = lookup(tok, p))) {
if ( ! flushed) {
if ( ! rew_sub(MDOC_BLOCK, m, tok, line, ppos))
return(0);
/* 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
continue;
}
- if (MDOC_MAX == (c = lookup(m, tok, p))) {
+ if (MDOC_MAX == (c = lookup(tok, p))) {
if ( ! mdoc_word_alloc(m, line, lastarg, p))
return(0);
continue;
if (ARGS_EOLN == c)
break;
- if (MDOC_MAX == (c = lookup(m, tok, p))) {
+ if (MDOC_MAX == (c = lookup(tok, p))) {
if ( ! mdoc_word_alloc(m, line, la, p))
return(0);
continue;
if (ARGS_EOLN == c)
break;
- if (MDOC_MAX != (c = lookup(m, tok, p))) {
+ if (MDOC_MAX != (c = lookup(tok, p))) {
if ( ! flushed) {
if ( ! rew_sub(MDOC_HEAD, m, tok, line, ppos))
return(0);
if (ARGS_EOLN == c)
break;
- if (MDOC_MAX != (c = lookup(m, tok, p))) {
+ if (MDOC_MAX != (c = lookup(tok, p))) {
if ( ! flushed && ! rew_elem(m, tok))
return(0);
flushed = 1;
if (ARGS_EOLN == w)
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 ( ! rew_elem(m, tok))
la = pos;
/* Note: no calling context! */
- w = mdoc_zargs(m, line, &pos, buf, &p);
+ w = mdoc_zargs(m, line, &pos, buf, 0, &p);
if (ARGS_ERROR == w)
return(0);
if (ARGS_EOLN == w)
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_macro(m, c, line, la, &pos, buf))