+ tbl = mandoc_calloc(1, sizeof(struct tbl_node));
+ tbl->line = line;
+ tbl->pos = pos;
+ tbl->parse = parse;
+ tbl->part = TBL_PART_OPTS;
+ tbl->opts.tab = '\t';
+ tbl->opts.linesize = 12;
+ tbl->opts.decimal = '.';
+ return(tbl);
+}
+
+void
+tbl_free(struct tbl_node *tbl)
+{
+ struct tbl_row *rp;
+ struct tbl_cell *cp;
+ struct tbl_span *sp;
+ struct tbl_dat *dp;
+ struct tbl_head *hp;
+
+ while (NULL != (rp = tbl->first_row)) {
+ tbl->first_row = rp->next;
+ while (rp->first) {
+ cp = rp->first;
+ rp->first = cp->next;
+ free(cp);
+ }
+ free(rp);
+ }
+
+ while (NULL != (sp = tbl->first_span)) {
+ tbl->first_span = sp->next;
+ while (sp->first) {
+ dp = sp->first;
+ sp->first = dp->next;
+ if (dp->string)
+ free(dp->string);
+ free(dp);
+ }
+ free(sp);
+ }
+
+ while (NULL != (hp = tbl->first_head)) {
+ tbl->first_head = hp->next;
+ free(hp);
+ }
+
+ free(tbl);