aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tbl.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-12-29 14:38:14 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-12-29 14:38:14 +0000
commite66333ee27414556c8aac46398d7119658673b54 (patch)
tree6375114ad82a58e3d26b9e16b3d1a48c219a1ec7 /tbl.c
parentcd4631099c26cb2f78a75750a291b6c71f83c36d (diff)
downloadmandoc-e66333ee27414556c8aac46398d7119658673b54.tar.gz
mandoc-e66333ee27414556c8aac46398d7119658673b54.tar.zst
mandoc-e66333ee27414556c8aac46398d7119658673b54.zip
Merge, with considerable changes, tbl.bsd.lv's layout-handling code.
Diffstat (limited to 'tbl.c')
-rw-r--r--tbl.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/tbl.c b/tbl.c
index 2e02e13b..1e7f564b 100644
--- a/tbl.c
+++ b/tbl.c
@@ -1,4 +1,4 @@
-/* $Id: tbl.c,v 1.5 2010/12/29 01:16:57 kristaps Exp $ */
+/* $Id: tbl.c,v 1.6 2010/12/29 14:38:14 kristaps Exp $ */
/*
* Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -31,7 +31,21 @@ static void tbl_clear(struct tbl *);
static void
tbl_clear(struct tbl *tbl)
{
+ struct tbl_row *rp;
+ struct tbl_cell *cp;
+
+ while (tbl->first) {
+ rp = tbl->first;
+ tbl->first = rp->next;
+ while (rp->first) {
+ cp = rp->first;
+ rp->first = cp->next;
+ free(cp);
+ }
+ free(rp);
+ }
+ tbl->last = NULL;
}
static void
@@ -69,6 +83,8 @@ tbl_read(struct tbl *tbl, int ln, const char *p, int offs)
switch (tbl->part) {
case (TBL_PART_OPTS):
return(tbl_option(tbl, ln, p) ? ROFF_IGN : ROFF_ERR);
+ case (TBL_PART_LAYOUT):
+ return(tbl_layout(tbl, ln, p) ? ROFF_IGN : ROFF_ERR);
default:
break;
}
@@ -81,7 +97,7 @@ tbl_alloc(void *data, const mandocmsg msg)
{
struct tbl *p;
- p = mandoc_malloc(sizeof(struct tbl));
+ p = mandoc_calloc(1, sizeof(struct tbl));
p->data = data;
p->msg = msg;
tbl_init(p);