version 1.59, 2009/03/08 18:02:36 |
version 1.66, 2009/03/11 00:39:58 |
|
|
#include <stdlib.h> |
#include <stdlib.h> |
#include <stdio.h> |
#include <stdio.h> |
#include <string.h> |
#include <string.h> |
#ifdef __linux__ |
|
#include <time.h> |
|
#endif |
|
|
|
|
#include "private.h" |
|
|
/* |
/* |
* This has scanning/parsing routines, each of which extract a macro and |
* This has scanning/parsing routines, each of which extract a macro and |
* its arguments and parameters, then know how to progress to the next |
* its arguments and parameters, then know how to progress to the next |
* macro. |
* macro. |
*/ |
*/ |
|
|
#include "private.h" |
/* FIXME: .Fl, .Ar, .Cd handling of `|'. */ |
|
|
static int macro_obsolete(MACRO_PROT_ARGS); |
static int macro_obsolete(MACRO_PROT_ARGS); |
static int macro_constant(MACRO_PROT_ARGS); |
static int macro_constant(MACRO_PROT_ARGS); |
Line 181 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
Line 180 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
{ macro_obsolete, 0 }, /* Fr */ |
{ macro_obsolete, 0 }, /* Fr */ |
{ macro_constant, 0 }, /* Ud */ |
{ macro_constant, 0 }, /* Ud */ |
{ macro_constant, 0 }, /* Lb */ |
{ macro_constant, 0 }, /* Lb */ |
|
{ macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Ap */ |
|
{ macro_text, 0 }, /* Lp */ |
|
{ macro_text, MDOC_PARSED }, /* Lk */ |
|
{ macro_text, MDOC_PARSED }, /* Mt */ |
|
{ macro_scoped_line, MDOC_CALLABLE | MDOC_PARSED }, /* Brq */ |
|
{ macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Bro */ |
|
{ macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Brc */ |
}; |
}; |
|
|
const struct mdoc_macro * const mdoc_macros = __mdoc_macros; |
const struct mdoc_macro * const mdoc_macros = __mdoc_macros; |
Line 238 scopewarn(struct mdoc *mdoc, enum mdoc_type type, |
|
Line 244 scopewarn(struct mdoc *mdoc, enum mdoc_type type, |
|
n = t = "<root>"; |
n = t = "<root>"; |
tt = "block"; |
tt = "block"; |
|
|
switch (p->type) { |
switch (type) { |
case (MDOC_BODY): |
case (MDOC_BODY): |
tt = "multi-line"; |
tt = "multi-line"; |
break; |
break; |
Line 323 rewind_alt(int tok) |
|
Line 329 rewind_alt(int tok) |
|
return(MDOC_Ao); |
return(MDOC_Ao); |
case (MDOC_Bc): |
case (MDOC_Bc): |
return(MDOC_Bo); |
return(MDOC_Bo); |
|
case (MDOC_Brc): |
|
return(MDOC_Bro); |
case (MDOC_Dc): |
case (MDOC_Dc): |
return(MDOC_Do); |
return(MDOC_Do); |
case (MDOC_Ec): |
case (MDOC_Ec): |
Line 372 rewind_dohalt(int tok, enum mdoc_type type, const stru |
|
Line 380 rewind_dohalt(int tok, enum mdoc_type type, const stru |
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Bq): |
case (MDOC_Bq): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
|
case (MDOC_Brq): |
|
/* FALLTHROUGH */ |
case (MDOC_D1): |
case (MDOC_D1): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Dl): |
case (MDOC_Dl): |
Line 426 rewind_dohalt(int tok, enum mdoc_type type, const stru |
|
Line 436 rewind_dohalt(int tok, enum mdoc_type type, const stru |
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Bo): |
case (MDOC_Bo): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
|
case (MDOC_Bro): |
|
/* FALLTHROUGH */ |
case (MDOC_Do): |
case (MDOC_Do): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Eo): |
case (MDOC_Eo): |
Line 452 rewind_dohalt(int tok, enum mdoc_type type, const stru |
|
Line 464 rewind_dohalt(int tok, enum mdoc_type type, const stru |
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Bc): |
case (MDOC_Bc): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
|
case (MDOC_Brc): |
|
/* FALLTHROUGH */ |
case (MDOC_Dc): |
case (MDOC_Dc): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Ec): |
case (MDOC_Ec): |
Line 797 macro_text(MACRO_PROT_ARGS) |
|
Line 811 macro_text(MACRO_PROT_ARGS) |
|
for (;;) { |
for (;;) { |
la = *pos; |
la = *pos; |
w = mdoc_args(mdoc, line, pos, buf, tok, &p); |
w = mdoc_args(mdoc, line, pos, buf, tok, &p); |
assert(ARGS_PHRASE != c); |
assert(ARGS_PHRASE != w); |
|
|
if (ARGS_ERROR == w) |
if (ARGS_ERROR == w) |
return(0); |
return(0); |
Line 806 macro_text(MACRO_PROT_ARGS) |
|
Line 820 macro_text(MACRO_PROT_ARGS) |
|
if (ARGS_PUNCT == w) |
if (ARGS_PUNCT == w) |
break; |
break; |
|
|
|
/* Quoted words shouldn't be looked-up. */ |
|
|
c = ARGS_QWORD == w ? MDOC_MAX : |
c = ARGS_QWORD == w ? MDOC_MAX : |
lookup(mdoc, line, la, tok, p); |
lookup(mdoc, line, la, tok, p); |
|
|
|
/* MDOC_MAX (not a macro) or -1 (error). */ |
|
|
if (MDOC_MAX != c && -1 != c) { |
if (MDOC_MAX != c && -1 != c) { |
if (0 == lastpunct && ! rewind_elem(mdoc, tok)) |
if (0 == lastpunct && ! rewind_elem(mdoc, tok)) |
return(0); |
return(0); |
Line 821 macro_text(MACRO_PROT_ARGS) |
|
Line 839 macro_text(MACRO_PROT_ARGS) |
|
} else if (-1 == c) |
} else if (-1 == c) |
return(0); |
return(0); |
|
|
/* FIXME: .Fl and .Ar handling of `|'. */ |
/* Non-quote-enclosed punctuation. */ |
|
|
if (ARGS_QWORD != w && mdoc_isdelim(p)) { |
if (ARGS_QWORD != w && mdoc_isdelim(p)) { |
if (0 == lastpunct && ! rewind_elem(mdoc, tok)) |
if (0 == lastpunct && ! rewind_elem(mdoc, tok)) |
Line 1204 macro_constant_delimited(MACRO_PROT_ARGS) |
|
Line 1222 macro_constant_delimited(MACRO_PROT_ARGS) |
|
*/ |
*/ |
|
|
switch (tok) { |
switch (tok) { |
|
case (MDOC_Ap): |
|
/* FALLTHROUGH */ |
case (MDOC_No): |
case (MDOC_No): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Ns): |
case (MDOC_Ns): |