summaryrefslogtreecommitdiffstats
path: root/mdoc_html.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-01-13 14:30:13 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-01-13 14:30:13 +0000
commit85474e8c235db9ab473084a381b03aeb8422a12d (patch)
tree0302ed33798c6aa009545379a6a14cddbc71c4b2 /mdoc_html.c
parentb9b8f8cdfe53fa8d9f13f22beb2ec50f83a231d8 (diff)
downloadmandoc-85474e8c235db9ab473084a381b03aeb8422a12d.tar.gz
Change how -Thtml behaves with tables: use multiple rows, with widths
set by COL, until an external macro is encountered. At this point in time, close out the table and process the macro. When the first table row is again re-encountered, re-start the table. This requires a bit of tracking added to "struct html", but the change is very small and follows the logic of meta-fonts. This all follows a bug-report by joerg@.
Diffstat (limited to 'mdoc_html.c')
-rw-r--r--mdoc_html.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/mdoc_html.c b/mdoc_html.c
index a3708728..1697ac32 100644
--- a/mdoc_html.c
+++ b/mdoc_html.c
@@ -420,14 +420,32 @@ print_mdoc_node(MDOC_ARGS)
child = mdoc_root_pre(m, n, h);
break;
case (MDOC_TEXT):
+ /* No tables in this mode... */
+ assert(NULL == h->tblt);
if (' ' == *n->string && MDOC_LINE & n->flags)
print_otag(h, TAG_BR, 0, NULL);
print_text(h, n->string);
return;
case (MDOC_TBL):
+ /*
+ * This will take care of initialising all of the table
+ * state data for the first table, then tearing it down
+ * for the last one.
+ */
print_tbl(h, n->span);
- break;
+ return;
default:
+ /*
+ * Close out the current table, if it's open, and unset
+ * the "meta" table state. This will be reopened on the
+ * next table element.
+ */
+ if (h->tblt) {
+ print_tblclose(h);
+ t = h->tags.head;
+ }
+
+ assert(NULL == h->tblt);
if (mdocs[n->tok].pre && ENDBODY_NOT == n->end)
child = (*mdocs[n->tok].pre)(m, n, h);
break;
@@ -455,8 +473,6 @@ print_mdoc_node(MDOC_ARGS)
case (MDOC_ROOT):
mdoc_root_post(m, n, h);
break;
- case (MDOC_TBL):
- break;
default:
if (mdocs[n->tok].post && ENDBODY_NOT == n->end)
(*mdocs[n->tok].post)(m, n, h);