version 1.121, 2010/04/06 11:33:00 |
version 1.123, 2010/04/08 07:53:01 |
Line 84 const char *const __mdoc_merrnames[MERRMAX] = { |
|
Line 84 const char *const __mdoc_merrnames[MERRMAX] = { |
|
"no description found for library", /* ELIB */ |
"no description found for library", /* ELIB */ |
"bad child for parent context", /* EBADCHILD */ |
"bad child for parent context", /* EBADCHILD */ |
"list arguments preceding type", /* ENOTYPE */ |
"list arguments preceding type", /* ENOTYPE */ |
|
"deprecated comment style", /* EBADCOMMENT */ |
}; |
}; |
|
|
const char *const __mdoc_macronames[MDOC_MAX] = { |
const char *const __mdoc_macronames[MDOC_MAX] = { |
Line 150 static struct mdoc_node *node_alloc(struct mdoc *, int |
|
Line 151 static struct mdoc_node *node_alloc(struct mdoc *, int |
|
enum mdoct, enum mdoc_type); |
enum mdoct, enum mdoc_type); |
static int node_append(struct mdoc *, |
static int node_append(struct mdoc *, |
struct mdoc_node *); |
struct mdoc_node *); |
static int parsetext(struct mdoc *, int, char *); |
static int mdoc_ptext(struct mdoc *, int, char *); |
static int parsemacro(struct mdoc *, int, char *); |
static int mdoc_pmacro(struct mdoc *, int, char *); |
static int macrowarn(struct mdoc *, int, const char *); |
static int macrowarn(struct mdoc *, int, const char *); |
static int pstring(struct mdoc *, int, int, |
static int pstring(struct mdoc *, int, int, |
const char *, size_t); |
const char *, size_t); |
Line 280 mdoc_endparse(struct mdoc *m) |
|
Line 281 mdoc_endparse(struct mdoc *m) |
|
|
|
/* |
/* |
* Main parse routine. Parses a single line -- really just hands off to |
* Main parse routine. Parses a single line -- really just hands off to |
* the macro (parsemacro()) or text parser (parsetext()). |
* the macro (mdoc_pmacro()) or text parser (mdoc_ptext()). |
*/ |
*/ |
int |
int |
mdoc_parseln(struct mdoc *m, int ln, char *buf) |
mdoc_parseln(struct mdoc *m, int ln, char *buf) |
Line 289 mdoc_parseln(struct mdoc *m, int ln, char *buf) |
|
Line 290 mdoc_parseln(struct mdoc *m, int ln, char *buf) |
|
if (MDOC_HALT & m->flags) |
if (MDOC_HALT & m->flags) |
return(0); |
return(0); |
|
|
return('.' == *buf ? parsemacro(m, ln, buf) : |
return('.' == *buf ? mdoc_pmacro(m, ln, buf) : |
parsetext(m, ln, buf)); |
mdoc_ptext(m, ln, buf)); |
} |
} |
|
|
|
|
|
|
mdoc_macro(struct mdoc *m, enum mdoct tok, |
mdoc_macro(struct mdoc *m, enum mdoct tok, |
int ln, int pp, int *pos, char *buf) |
int ln, int pp, int *pos, char *buf) |
{ |
{ |
|
|
assert(tok < MDOC_MAX); |
assert(tok < MDOC_MAX); |
/* |
|
* If we're in the prologue, deny "body" macros. Similarly, if |
/* If we're in the body, deny prologue calls. */ |
* we're in the body, deny prologue calls. |
|
*/ |
|
if (MDOC_PROLOGUE & mdoc_macros[tok].flags && |
if (MDOC_PROLOGUE & mdoc_macros[tok].flags && |
MDOC_PBODY & m->flags) { |
MDOC_PBODY & m->flags) |
|
return(mdoc_perr(m, ln, pp, EPROLBODY)); |
|
|
|
/* If we're in the prologue, deny "body" macros. */ |
|
|
|
if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) && |
|
! (MDOC_PBODY & m->flags)) { |
if ( ! mdoc_pwarn(m, ln, pp, EBODYPROL)) |
if ( ! mdoc_pwarn(m, ln, pp, EBODYPROL)) |
return(0); |
return(0); |
/* |
|
* FIXME: do this in mdoc_action.c. |
|
*/ |
|
if (NULL == m->meta.title) |
if (NULL == m->meta.title) |
m->meta.title = mandoc_strdup("unknown"); |
m->meta.title = mandoc_strdup("unknown"); |
if (NULL == m->meta.vol) |
if (NULL == m->meta.vol) |
Line 371 mdoc_macro(struct mdoc *m, enum mdoct tok, |
|
Line 373 mdoc_macro(struct mdoc *m, enum mdoct tok, |
|
m->meta.date = time(NULL); |
m->meta.date = time(NULL); |
m->flags |= MDOC_PBODY; |
m->flags |= MDOC_PBODY; |
} |
} |
if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) && |
|
! (MDOC_PBODY & m->flags)) |
|
return(mdoc_perr(m, ln, pp, EBODYPROL)); |
|
|
|
return((*mdoc_macros[tok].fp)(m, tok, ln, pp, pos, buf)); |
return((*mdoc_macros[tok].fp)(m, tok, ln, pp, pos, buf)); |
} |
} |
Line 632 mdoc_node_delete(struct mdoc *m, struct mdoc_node *p) |
|
Line 631 mdoc_node_delete(struct mdoc *m, struct mdoc_node *p) |
|
* control character. |
* control character. |
*/ |
*/ |
static int |
static int |
parsetext(struct mdoc *m, int line, char *buf) |
mdoc_ptext(struct mdoc *m, int line, char *buf) |
{ |
{ |
int i, j; |
int i, j; |
char sv; |
char sv; |
|
|
|
/* Ignore bogus comments. */ |
|
|
|
if ('\\' == buf[0] && '.' == buf[1] && '\"' == buf[2]) |
|
return(mdoc_pwarn(m, line, 0, EBADCOMMENT)); |
|
|
if (SEC_NONE == m->lastnamed) |
if (SEC_NONE == m->lastnamed) |
return(mdoc_perr(m, line, 0, ETEXTPROL)); |
return(mdoc_perr(m, line, 0, ETEXTPROL)); |
|
|
Line 732 macrowarn(struct mdoc *m, int ln, const char *buf) |
|
Line 736 macrowarn(struct mdoc *m, int ln, const char *buf) |
|
* character. |
* character. |
*/ |
*/ |
int |
int |
parsemacro(struct mdoc *m, int ln, char *buf) |
mdoc_pmacro(struct mdoc *m, int ln, char *buf) |
{ |
{ |
int i, j, c; |
int i, j, c; |
char mac[5]; |
char mac[5]; |