version 1.61, 2009/03/08 20:50:12 |
version 1.65, 2009/03/10 15:01:54 |
|
|
#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 182 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
Line 181 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
{ 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_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Ap */ |
|
{ macro_text, 0 }, /* Lp */ |
|
{ macro_text, MDOC_PARSED }, /* Lk */ |
|
{ macro_text, MDOC_PARSED }, /* Mt */ |
}; |
}; |
|
|
const struct mdoc_macro * const mdoc_macros = __mdoc_macros; |
const struct mdoc_macro * const mdoc_macros = __mdoc_macros; |
Line 798 macro_text(MACRO_PROT_ARGS) |
|
Line 800 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 807 macro_text(MACRO_PROT_ARGS) |
|
Line 809 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 822 macro_text(MACRO_PROT_ARGS) |
|
Line 828 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)) |