=================================================================== RCS file: /cvs/mandoc/mdoc.c,v retrieving revision 1.34 retrieving revision 1.37 diff -u -p -r1.34 -r1.37 --- mandoc/mdoc.c 2009/01/17 16:15:27 1.34 +++ mandoc/mdoc.c 2009/01/19 17:51:33 1.37 @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.34 2009/01/17 16:15:27 kristaps Exp $ */ +/* $Id: mdoc.c,v 1.37 2009/01/19 17:51:33 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -85,9 +85,9 @@ const char *const __mdoc_argnames[MDOC_ARG_MAX] = { const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { NULL, 0 }, /* \" */ - { macro_constant, MDOC_PROLOGUE }, /* Dd */ - { macro_constant, MDOC_PROLOGUE }, /* Dt */ - { macro_constant, MDOC_PROLOGUE }, /* Os */ + { macro_constant, MDOC_PROLOGUE | MDOC_NOKEEP }, /* Dd */ + { macro_constant, MDOC_PROLOGUE | MDOC_NOKEEP }, /* Dt */ + { macro_constant, MDOC_PROLOGUE | MDOC_NOKEEP }, /* Os */ { macro_scoped, 0 }, /* Sh */ { macro_scoped, 0 }, /* Ss */ { macro_text, 0 }, /* Pp */ @@ -205,7 +205,6 @@ static void argfree(size_t, struct mdoc_arg *); static void argcpy(struct mdoc_arg *, const struct mdoc_arg *); -static void mdoc_node_freelist(struct mdoc_node *); static int mdoc_node_append(struct mdoc *, struct mdoc_node *); static void mdoc_elem_free(struct mdoc_elem *); @@ -213,13 +212,21 @@ static void mdoc_text_free(struct mdoc_text *); const struct mdoc_node * -mdoc_result(struct mdoc *mdoc) +mdoc_node(struct mdoc *mdoc) { return(mdoc->first); } +const struct mdoc_meta * +mdoc_meta(struct mdoc *mdoc) +{ + + return(&mdoc->meta); +} + + void mdoc_meta_free(struct mdoc *mdoc) { @@ -671,7 +678,7 @@ mdoc_node_free(struct mdoc_node *p) } -static void +void mdoc_node_freelist(struct mdoc_node *p) { @@ -723,4 +730,28 @@ argdup(size_t argsz, const struct mdoc_arg *args) return(pp); } + + +/* FIXME: deprecate. */ +char * +mdoc_node2a(struct mdoc_node *node) +{ + static char buf[64]; + + assert(node); + + buf[0] = 0; + (void)xstrlcat(buf, mdoc_type2a(node->type), 64); + if (MDOC_ROOT == node->type) + return(buf); + (void)xstrlcat(buf, " `", 64); + if (MDOC_TEXT == node->type) + (void)xstrlcat(buf, node->data.text.string, 64); + else + (void)xstrlcat(buf, mdoc_macronames[node->tok], 64); + (void)xstrlcat(buf, "'", 64); + + return(buf); +} +