diff options
Diffstat (limited to 'usr.bin/mandoc/mdoc.c')
-rw-r--r-- | usr.bin/mandoc/mdoc.c | 55 |
1 files changed, 32 insertions, 23 deletions
diff --git a/usr.bin/mandoc/mdoc.c b/usr.bin/mandoc/mdoc.c index 48e68243eb1..8d8adf023aa 100644 --- a/usr.bin/mandoc/mdoc.c +++ b/usr.bin/mandoc/mdoc.c @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.7 2009/06/18 23:34:53 schwarze Exp $ */ +/* $Id: mdoc.c,v 1.8 2009/06/18 23:51:12 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se> * @@ -97,11 +97,6 @@ static int parsemacro(struct mdoc *, int, char *); static int macrowarn(struct mdoc *, int, const char *); static int perr(struct mdoc *, int, int, enum merr); -#define verr(m, t) perr((m), (m)->last->line, (m)->last->pos, (t)) - -/* - * Get the first (root) node of the parse tree. - */ const struct mdoc_node * mdoc_node(const struct mdoc *m) { @@ -118,6 +113,9 @@ mdoc_meta(const struct mdoc *m) } +/* + * Frees volatile resources (parse tree, meta-data, fields). + */ static void mdoc_free1(struct mdoc *mdoc) { @@ -137,6 +135,9 @@ mdoc_free1(struct mdoc *mdoc) } +/* + * Allocate all volatile resources (parse tree, meta-data, fields). + */ static int mdoc_alloc1(struct mdoc *mdoc) { @@ -156,9 +157,10 @@ mdoc_alloc1(struct mdoc *mdoc) /* - * Free up all resources contributed by a parse: the node tree, - * meta-data and so on. Then reallocate the root node for another - * parse. + * Free up volatile resources (see mdoc_free1()) then re-initialises the + * data with mdoc_alloc1(). After invocation, parse data has been reset + * and the parser is ready for re-invocation on a new tree; however, + * cross-parse non-volatile data is kept intact. */ int mdoc_reset(struct mdoc *mdoc) @@ -170,7 +172,8 @@ mdoc_reset(struct mdoc *mdoc) /* - * Completely free up all resources. + * Completely free up all volatile and non-volatile parse resources. + * After invocation, the pointer is no longer usable. */ void mdoc_free(struct mdoc *mdoc) @@ -183,6 +186,9 @@ mdoc_free(struct mdoc *mdoc) } +/* + * Allocate volatile and non-volatile parse resources. + */ struct mdoc * mdoc_alloc(void *data, int pflags, const struct mdoc_cb *cb) { @@ -209,7 +215,7 @@ mdoc_alloc(void *data, int pflags, const struct mdoc_cb *cb) /* * Climb back up the parse tree, validating open scopes. Mostly calls - * through to macro_end in macro.c. + * through to macro_end() in macro.c. */ int mdoc_endparse(struct mdoc *m) @@ -226,14 +232,12 @@ mdoc_endparse(struct mdoc *m) /* * Main parse routine. Parses a single line -- really just hands off to - * the macro or text parser. + * the macro (parsemacro()) or text parser (parsetext()). */ int mdoc_parseln(struct mdoc *m, int ln, char *buf) { - /* If in error-mode, then we parse no more. */ - if (MDOC_HALT & m->flags) return(0); @@ -277,7 +281,8 @@ mdoc_vwarn(struct mdoc *mdoc, int ln, int pos, int -mdoc_nerr(struct mdoc *mdoc, const struct mdoc_node *node, const char *fmt, ...) +mdoc_nerr(struct mdoc *mdoc, const struct mdoc_node *node, + const char *fmt, ...) { char buf[256]; va_list ap; @@ -288,12 +293,14 @@ mdoc_nerr(struct mdoc *mdoc, const struct mdoc_node *node, const char *fmt, ...) va_start(ap, fmt); (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); va_end(ap); - return((*mdoc->cb.mdoc_err)(mdoc->data, node->line, node->pos, buf)); + return((*mdoc->cb.mdoc_err)(mdoc->data, + node->line, node->pos, buf)); } int -mdoc_warn(struct mdoc *mdoc, enum mdoc_warn type, const char *fmt, ...) +mdoc_warn(struct mdoc *mdoc, enum mdoc_warn type, + const char *fmt, ...) { char buf[256]; va_list ap; @@ -305,7 +312,7 @@ mdoc_warn(struct mdoc *mdoc, enum mdoc_warn type, const char *fmt, ...) (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); va_end(ap); return((*mdoc->cb.mdoc_warn)(mdoc->data, mdoc->last->line, - mdoc->last->pos, type, buf)); + mdoc->last->pos, type, buf)); } @@ -322,7 +329,7 @@ mdoc_err(struct mdoc *mdoc, const char *fmt, ...) (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); va_end(ap); return((*mdoc->cb.mdoc_err)(mdoc->data, mdoc->last->line, - mdoc->last->pos, buf)); + mdoc->last->pos, buf)); } @@ -339,7 +346,8 @@ mdoc_pwarn(struct mdoc *mdoc, int line, int pos, enum mdoc_warn type, va_start(ap, fmt); (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); va_end(ap); - return((*mdoc->cb.mdoc_warn)(mdoc->data, line, pos, type, buf)); + return((*mdoc->cb.mdoc_warn)(mdoc->data, + line, pos, type, buf)); } int @@ -483,7 +491,8 @@ node_alloc(struct mdoc *mdoc, int line, struct mdoc_node *p; if (NULL == (p = calloc(1, sizeof(struct mdoc_node)))) { - (void)verr(mdoc, EMALLOC); + (void)perr(mdoc, (mdoc)->last->line, + (mdoc)->last->pos, EMALLOC); return(NULL); } @@ -579,7 +588,8 @@ mdoc_word_alloc(struct mdoc *mdoc, if (NULL == p) return(0); if (NULL == (p->string = strdup(word))) { - (void)verr(mdoc, EMALLOC); + (void)perr(mdoc, (mdoc)->last->line, + (mdoc)->last->pos, EMALLOC); return(0); } return(node_append(mdoc, p)); @@ -646,7 +656,6 @@ macrowarn(struct mdoc *m, int ln, const char *buf) } - /* * Parse a macro line, that is, a line beginning with the control * character. |