=================================================================== RCS file: /cvs/mandoc/mdoc_html.c,v retrieving revision 1.260 retrieving revision 1.262 diff -u -p -r1.260 -r1.262 --- mandoc/mdoc_html.c 2017/01/21 02:09:51 1.260 +++ mandoc/mdoc_html.c 2017/01/28 18:43:00 1.262 @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.260 2017/01/21 02:09:51 schwarze Exp $ */ +/* $Id: mdoc_html.c,v 1.262 2017/01/28 18:43:00 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze @@ -671,6 +671,7 @@ static int mdoc_it_pre(MDOC_ARGS) { const struct roff_node *bl; + struct tag *t; const char *cattr; enum mdoc_list type; @@ -738,7 +739,6 @@ mdoc_it_pre(MDOC_ARGS) case LIST_hang: case LIST_inset: case LIST_ohang: - case LIST_tag: switch (n->type) { case ROFFT_HEAD: if (bl->norm->Bl.comp) @@ -759,6 +759,41 @@ mdoc_it_pre(MDOC_ARGS) break; } break; + case LIST_tag: + switch (n->type) { + case ROFFT_HEAD: + if (h->style != NULL && !bl->norm->Bl.comp && + (n->parent->prev == NULL || + n->parent->prev->body->child != NULL)) { + if (bl->norm->Bl.width == NULL) + t = print_otag(h, TAG_DT, "c", cattr); + else + t = print_otag(h, TAG_DT, "csWl", + cattr, bl->norm->Bl.width); + print_text(h, "\\ "); + print_tagq(h, t); + t = print_otag(h, TAG_DD, "c", cattr); + print_text(h, "\\ "); + print_tagq(h, t); + } + if (bl->norm->Bl.width == NULL) + print_otag(h, TAG_DT, "c", cattr); + else + print_otag(h, TAG_DT, "csWl", cattr, + bl->norm->Bl.width); + break; + case ROFFT_BODY: + if (n->child == NULL) { + print_otag(h, TAG_DD, "css?", cattr, + "width", "auto"); + print_text(h, "\\ "); + } else + print_otag(h, TAG_DD, "c", cattr); + break; + default: + break; + } + break; case LIST_column: switch (n->type) { case ROFFT_HEAD: @@ -782,18 +817,21 @@ mdoc_it_pre(MDOC_ARGS) static int mdoc_bl_pre(MDOC_ARGS) { + struct mdoc_bl *bl; const char *cattr; - int i; + size_t i; enum htmltag elemtype; + bl = &n->norm->Bl; + if (n->type == ROFFT_BODY) { - if (LIST_column == n->norm->Bl.type) + if (bl->type == LIST_column) print_otag(h, TAG_TBODY, ""); return 1; } if (n->type == ROFFT_HEAD) { - if (LIST_column != n->norm->Bl.type) + if (bl->type != LIST_column || bl->ncols == 0) return 0; /* @@ -803,14 +841,13 @@ mdoc_bl_pre(MDOC_ARGS) * screen and we want to preserve that behaviour. */ - for (i = 0; i < (int)n->norm->Bl.ncols - 1; i++) - print_otag(h, TAG_COL, "sww", n->norm->Bl.cols[i]); - print_otag(h, TAG_COL, "swW", n->norm->Bl.cols[i]); - + for (i = 0; i < bl->ncols - 1; i++) + print_otag(h, TAG_COL, "sww", bl->cols[i]); + print_otag(h, TAG_COL, "swW", bl->cols[i]); return 0; } - switch (n->norm->Bl.type) { + switch (bl->type) { case LIST_bullet: elemtype = TAG_UL; cattr = "Bl-bullet"; @@ -845,9 +882,14 @@ mdoc_bl_pre(MDOC_ARGS) cattr = "Bl-ohang"; break; case LIST_tag: - elemtype = TAG_DL; cattr = "Bl-tag"; - break; + if (bl->offs) + print_otag(h, TAG_DIV, "cswl", cattr, bl->offs); + if (bl->width == NULL) + print_otag(h, TAG_DL, "c", cattr); + else + print_otag(h, TAG_DL, "cswl", cattr, bl->width); + return 1; case LIST_column: elemtype = TAG_TABLE; cattr = "Bl-column"; @@ -856,8 +898,8 @@ mdoc_bl_pre(MDOC_ARGS) abort(); } - if (n->norm->Bl.offs) - print_otag(h, elemtype, "cswl", cattr, n->norm->Bl.offs); + if (bl->offs) + print_otag(h, elemtype, "cswl", cattr, bl->offs); else print_otag(h, elemtype, "c", cattr);