version 1.14, 2009/01/02 14:06:16 |
version 1.16, 2009/01/05 14:14:04 |
Line 141 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
Line 141 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
{ macro_scoped_line, MDOC_CALLABLE }, /* Aq */ |
{ macro_scoped_line, MDOC_CALLABLE }, /* Aq */ |
{ macro_constant, 0 }, /* At */ |
{ macro_constant, 0 }, /* At */ |
{ NULL, 0 }, /* Bc */ |
{ NULL, 0 }, /* Bc */ |
{ macro_scoped, 0 }, /* Bf */ |
{ macro_scoped, MDOC_EXPLICIT }, /* Bf */ |
{ NULL, 0 }, /* Bo */ |
{ NULL, 0 }, /* Bo */ |
{ macro_scoped_line, MDOC_CALLABLE }, /* Bq */ |
{ macro_scoped_line, MDOC_CALLABLE }, /* Bq */ |
{ macro_constant_delimited, 0 }, /* Bsx */ |
{ macro_constant_delimited, 0 }, /* Bsx */ |
Line 201 static struct mdoc_arg *argdup(size_t, const struct m |
|
Line 201 static struct mdoc_arg *argdup(size_t, const struct m |
|
static void argfree(size_t, struct mdoc_arg *); |
static void argfree(size_t, struct mdoc_arg *); |
static void argcpy(struct mdoc_arg *, |
static void argcpy(struct mdoc_arg *, |
const struct mdoc_arg *); |
const struct mdoc_arg *); |
static char **paramdup(size_t, const char **); |
|
static void paramfree(size_t, char **); |
|
|
|
static void mdoc_node_freelist(struct mdoc_node *); |
static void mdoc_node_freelist(struct mdoc_node *); |
static void mdoc_node_append(struct mdoc *, int, |
static void mdoc_node_append(struct mdoc *, int, |
Line 491 mdoc_block_alloc(struct mdoc *mdoc, int pos, int tok, |
|
Line 489 mdoc_block_alloc(struct mdoc *mdoc, int pos, int tok, |
|
|
|
void |
void |
mdoc_elem_alloc(struct mdoc *mdoc, int pos, int tok, |
mdoc_elem_alloc(struct mdoc *mdoc, int pos, int tok, |
size_t argsz, const struct mdoc_arg *args, |
size_t argsz, const struct mdoc_arg *args) |
size_t paramsz, const char **params) |
|
{ |
{ |
struct mdoc_node *p; |
struct mdoc_node *p; |
|
|
p = xcalloc(1, sizeof(struct mdoc_node)); |
p = xcalloc(1, sizeof(struct mdoc_node)); |
p->type = MDOC_ELEM; |
p->type = MDOC_ELEM; |
p->data.elem.tok = tok; |
p->data.elem.tok = tok; |
p->data.elem.sz = paramsz; |
/* FIXME: freeing of params... */ |
p->data.elem.args = paramdup(paramsz, params); |
|
p->data.elem.argc = argsz; |
p->data.elem.argc = argsz; |
p->data.elem.argv = argdup(argsz, args); |
p->data.elem.argv = argdup(argsz, args); |
|
|
|
|
mdoc_elem_free(struct mdoc_elem *p) |
mdoc_elem_free(struct mdoc_elem *p) |
{ |
{ |
|
|
paramfree(p->sz, p->args); |
|
argfree(p->argc, p->argv); |
argfree(p->argc, p->argv); |
} |
} |
|
|
Line 641 argdup(size_t argsz, const struct mdoc_arg *args) |
|
Line 636 argdup(size_t argsz, const struct mdoc_arg *args) |
|
return(pp); |
return(pp); |
} |
} |
|
|
|
|
static void |
|
paramfree(size_t sz, char **p) |
|
{ |
|
int i; |
|
|
|
if (0 == sz) |
|
return; |
|
|
|
assert(p); |
|
/* LINTED */ |
|
for (i = 0; i < (int)sz; i++) |
|
free(p[i]); |
|
free(p); |
|
} |
|
|
|
|
|
static char ** |
|
paramdup(size_t sz, const char **p) |
|
{ |
|
char **pp; |
|
int i; |
|
|
|
if (0 == sz) |
|
return(NULL); |
|
|
|
pp = xcalloc(sz, sizeof(char *)); |
|
for (i = 0; i < (int)sz; i++) |
|
pp[i] = xstrdup(p[i]); |
|
|
|
return(pp); |
|
} |
|