summaryrefslogtreecommitdiffstatshomepage
path: root/mdoc.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-01-09 14:45:44 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-01-09 14:45:44 +0000
commitd4119897e8e1f98438694ef49e678e47661a3ae5 (patch)
tree446ad2426ee9788d516b5967a7c89a76a52c6368 /mdoc.c
parent1b6424e34de2a96aaa28ac28d0b0d83c0b46bdf4 (diff)
downloadmandoc-d4119897e8e1f98438694ef49e678e47661a3ae5.tar.gz
mandoc-d4119897e8e1f98438694ef49e678e47661a3ae5.tar.zst
mandoc-d4119897e8e1f98438694ef49e678e47661a3ae5.zip
*** empty log message ***
Diffstat (limited to 'mdoc.c')
-rw-r--r--mdoc.c39
1 files changed, 27 insertions, 12 deletions
diff --git a/mdoc.c b/mdoc.c
index 9052cbed..0d6e492c 100644
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc.c,v 1.24 2009/01/08 15:05:50 kristaps Exp $ */
+/* $Id: mdoc.c,v 1.25 2009/01/09 14:45:44 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -243,7 +243,13 @@ mdoc_alloc(void *data, const struct mdoc_cb *cb)
p->data = data;
(void)memcpy(&p->cb, cb, sizeof(struct mdoc_cb));
+ p->last = xcalloc(1, sizeof(struct mdoc_node));
+ p->last->type = MDOC_ROOT;
+ p->first = p->last;
+
+ p->next = MDOC_NEXT_CHILD;
p->htab = mdoc_tokhash_alloc();
+
return(p);
}
@@ -418,17 +424,9 @@ mdoc_node_append(struct mdoc *mdoc, struct mdoc_node *p)
/* NOTREACHED */
}
- if (NULL == mdoc->first) {
- assert(NULL == mdoc->last);
- if ( ! mdoc_valid_pre(mdoc, p))
- return(0);
- if ( ! mdoc_action_pre(mdoc, p))
- return(0);
- mdoc->first = p;
- mdoc->last = p;
- mdoc_msg(mdoc, "parse: root %s `%s'", nt, nn);
- return(1);
- }
+ assert(mdoc->last);
+ assert(mdoc->first);
+ assert(MDOC_ROOT != p->type);
switch (mdoc->last->type) {
case (MDOC_TEXT):
@@ -455,6 +453,10 @@ mdoc_node_append(struct mdoc *mdoc, struct mdoc_node *p)
on = mdoc_macronames[mdoc->last->data.block.tok];
ot = "block";
break;
+ case (MDOC_ROOT):
+ on = "root";
+ ot = "root";
+ break;
default:
abort();
/* NOTREACHED */
@@ -545,6 +547,19 @@ mdoc_body_alloc(struct mdoc *mdoc, int line, int pos, int tok)
int
+mdoc_root_alloc(struct mdoc *mdoc)
+{
+ struct mdoc_node *p;
+
+ p = xcalloc(1, sizeof(struct mdoc_node));
+
+ p->type = MDOC_ROOT;
+
+ return(mdoc_node_append(mdoc, p));
+}
+
+
+int
mdoc_block_alloc(struct mdoc *mdoc, int line, int pos,
int tok, size_t argsz, const struct mdoc_arg *args)
{