=================================================================== RCS file: /cvs/mandoc/mdoc_html.c,v retrieving revision 1.135 retrieving revision 1.148 diff -u -p -r1.135 -r1.148 --- mandoc/mdoc_html.c 2010/12/22 11:15:16 1.135 +++ mandoc/mdoc_html.c 2011/01/25 16:20:24 1.148 @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.135 2010/12/22 11:15:16 kristaps Exp $ */ +/* $Id: mdoc_html.c,v 1.148 2011/01/25 16:20:24 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons * @@ -420,9 +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); + 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; @@ -800,8 +823,14 @@ mdoc_xx_pre(MDOC_ARGS) PAIR_CLASS_INIT(&tag, "unix"); print_otag(h, TAG_SPAN, 1, &tag); + print_text(h, pp); - return(1); + if (n->child) { + h->flags |= HTML_KEEP; + print_text(h, n->child->string); + h->flags &= ~HTML_KEEP; + } + return(0); } @@ -809,22 +838,31 @@ mdoc_xx_pre(MDOC_ARGS) static int mdoc_bx_pre(MDOC_ARGS) { - const struct mdoc_node *nn; - struct htmlpair tag; + struct htmlpair tag; PAIR_CLASS_INIT(&tag, "unix"); print_otag(h, TAG_SPAN, 1, &tag); - for (nn = n->child; nn; nn = nn->next) - print_mdoc_node(m, nn, h); + if (NULL != (n = n->child)) { + print_text(h, n->string); + h->flags |= HTML_NOSPACE; + print_text(h, "BSD"); + } else { + print_text(h, "BSD"); + return(0); + } - if (n->child) + if (NULL != (n = n->next)) { h->flags |= HTML_NOSPACE; + print_text(h, "-"); + h->flags |= HTML_NOSPACE; + print_text(h, n->string); + } - print_text(h, "BSD"); return(0); } +/* ARGSUSED */ static int mdoc_it_pre(MDOC_ARGS) { @@ -839,7 +877,7 @@ mdoc_it_pre(MDOC_ARGS) assert(bl); - type = bl->norm->d.Bl.type; + type = bl->norm->Bl.type; assert(lists[type]); PAIR_CLASS_INIT(&tag[0], lists[type]); @@ -865,7 +903,7 @@ mdoc_it_pre(MDOC_ARGS) case(LIST_ohang): /* FALLTHROUGH */ case(LIST_tag): - SCALE_VS_INIT(&su, ! bl->norm->d.Bl.comp); + SCALE_VS_INIT(&su, ! bl->norm->Bl.comp); bufcat_su(h, "margin-top", &su); PAIR_STYLE_INIT(&tag[1], h); print_otag(h, TAG_DT, 2, tag); @@ -890,7 +928,7 @@ mdoc_it_pre(MDOC_ARGS) case(LIST_enum): /* FALLTHROUGH */ case(LIST_item): - SCALE_VS_INIT(&su, ! bl->norm->d.Bl.comp); + SCALE_VS_INIT(&su, ! bl->norm->Bl.comp); bufcat_su(h, "margin-top", &su); PAIR_STYLE_INIT(&tag[1], h); print_otag(h, TAG_LI, 2, tag); @@ -904,17 +942,17 @@ mdoc_it_pre(MDOC_ARGS) case(LIST_ohang): /* FALLTHROUGH */ case(LIST_tag): - if (NULL == bl->norm->d.Bl.width) { + if (NULL == bl->norm->Bl.width) { print_otag(h, TAG_DD, 1, tag); break; } - a2width(bl->norm->d.Bl.width, &su); + a2width(bl->norm->Bl.width, &su); bufcat_su(h, "margin-left", &su); PAIR_STYLE_INIT(&tag[1], h); print_otag(h, TAG_DD, 2, tag); break; case(LIST_column): - SCALE_VS_INIT(&su, ! bl->norm->d.Bl.comp); + SCALE_VS_INIT(&su, ! bl->norm->Bl.comp); bufcat_su(h, "margin-top", &su); PAIR_STYLE_INIT(&tag[1], h); print_otag(h, TAG_TD, 2, tag); @@ -939,19 +977,19 @@ mdoc_it_pre(MDOC_ARGS) static int mdoc_bl_pre(MDOC_ARGS) { - size_t i; + int i; struct htmlpair tag[3]; struct roffsu su; char buf[BUFSIZ]; if (MDOC_BODY == n->type) { - if (LIST_column == n->norm->d.Bl.type) + if (LIST_column == n->norm->Bl.type) print_otag(h, TAG_TBODY, 0, NULL); return(1); } if (MDOC_HEAD == n->type) { - if (LIST_column != n->norm->d.Bl.type) + if (LIST_column != n->norm->Bl.type) return(0); /* @@ -961,10 +999,10 @@ mdoc_bl_pre(MDOC_ARGS) * screen and we want to preserve that behaviour. */ - for (i = 0; i < n->norm->d.Bl.ncols; i++) { - a2width(n->norm->d.Bl.cols[i], &su); + for (i = 0; i < (int)n->norm->Bl.ncols; i++) { + a2width(n->norm->Bl.cols[i], &su); bufinit(h); - if (i < n->norm->d.Bl.ncols - 1) + if (i < (int)n->norm->Bl.ncols - 1) bufcat_su(h, "width", &su); else bufcat_su(h, "min-width", &su); @@ -980,19 +1018,19 @@ mdoc_bl_pre(MDOC_ARGS) bufcat_su(h, "margin-bottom", &su); PAIR_STYLE_INIT(&tag[0], h); - assert(lists[n->norm->d.Bl.type]); + assert(lists[n->norm->Bl.type]); strlcpy(buf, "list ", BUFSIZ); - strlcat(buf, lists[n->norm->d.Bl.type], BUFSIZ); + strlcat(buf, lists[n->norm->Bl.type], BUFSIZ); PAIR_INIT(&tag[1], ATTR_CLASS, buf); /* Set the block's left-hand margin. */ - if (n->norm->d.Bl.offs) { - a2offs(n->norm->d.Bl.offs, &su); + if (n->norm->Bl.offs) { + a2offs(n->norm->Bl.offs, &su); bufcat_su(h, "margin-left", &su); } - switch (n->norm->d.Bl.type) { + switch (n->norm->Bl.type) { case(LIST_bullet): /* FALLTHROUGH */ case(LIST_dash): @@ -1096,13 +1134,13 @@ mdoc_d1_pre(MDOC_ARGS) /* BLOCKQUOTE needs a block body. */ + PAIR_CLASS_INIT(&tag[0], "display"); + print_otag(h, TAG_DIV, 1, tag); + if (MDOC_Dl == n->tok) { - PAIR_CLASS_INIT(&tag[0], "lit display"); + PAIR_CLASS_INIT(&tag[0], "lit"); print_otag(h, TAG_CODE, 1, tag); - } else { - PAIR_CLASS_INIT(&tag[0], "display"); - print_otag(h, TAG_DIV, 1, tag); - } + } return(1); } @@ -1145,7 +1183,7 @@ mdoc_bd_pre(MDOC_ARGS) return(0); if (MDOC_BLOCK == n->type) { - comp = n->norm->d.Bd.comp; + comp = n->norm->Bd.comp; for (nn = n; nn && ! comp; nn = nn->parent) { if (MDOC_BLOCK != nn->type) continue; @@ -1160,14 +1198,14 @@ mdoc_bd_pre(MDOC_ARGS) } SCALE_HS_INIT(&su, 0); - if (n->norm->d.Bd.offs) - a2offs(n->norm->d.Bd.offs, &su); + if (n->norm->Bd.offs) + a2offs(n->norm->Bd.offs, &su); bufcat_su(h, "margin-left", &su); PAIR_STYLE_INIT(&tag[0], h); - if (DISP_unfilled != n->norm->d.Bd.type && - DISP_literal != n->norm->d.Bd.type) { + if (DISP_unfilled != n->norm->Bd.type && + DISP_literal != n->norm->Bd.type) { PAIR_CLASS_INIT(&tag[1], "display"); print_otag(h, TAG_DIV, 2, tag); return(1); @@ -1597,7 +1635,7 @@ mdoc_fo_pre(MDOC_ARGS) assert(n->child->string); PAIR_CLASS_INIT(&tag, "fname"); - t = print_otag(h, TAG_SPAN, 1, &tag); + t = print_otag(h, TAG_B, 1, &tag); print_text(h, n->child->string); print_tagq(h, t); return(0); @@ -1684,7 +1722,7 @@ mdoc_rv_pre(MDOC_ARGS) for (nn = n->child; nn; nn = nn->next) { PAIR_CLASS_INIT(&tag, "fname"); - t = print_otag(h, TAG_SPAN, 1, &tag); + t = print_otag(h, TAG_B, 1, &tag); print_text(h, nn->string); print_tagq(h, t); @@ -1750,11 +1788,11 @@ mdoc_bf_pre(MDOC_ARGS) else if (MDOC_BODY != n->type) return(1); - if (FONT_Em == n->norm->d.Bf.font) + if (FONT_Em == n->norm->Bf.font) PAIR_CLASS_INIT(&tag[0], "emph"); - else if (FONT_Sy == n->norm->d.Bf.font) + else if (FONT_Sy == n->norm->Bf.font) PAIR_CLASS_INIT(&tag[0], "symb"); - else if (FONT_Li == n->norm->d.Bf.font) + else if (FONT_Li == n->norm->Bf.font) PAIR_CLASS_INIT(&tag[0], "lit"); else PAIR_CLASS_INIT(&tag[0], "none"); @@ -1933,7 +1971,6 @@ mdoc__x_pre(MDOC_ARGS) break; case(MDOC__T): PAIR_CLASS_INIT(&tag[0], "ref-title"); - t = TAG_U; break; case(MDOC__U): PAIR_CLASS_INIT(&tag[0], "link-ref");