=================================================================== RCS file: /cvs/mandoc/mdoc_html.c,v retrieving revision 1.286 retrieving revision 1.289 diff -u -p -r1.286 -r1.289 --- mandoc/mdoc_html.c 2017/05/09 14:10:01 1.286 +++ mandoc/mdoc_html.c 2017/05/30 16:31:29 1.289 @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.286 2017/05/09 14:10:01 schwarze Exp $ */ +/* $Id: mdoc_html.c,v 1.289 2017/05/30 16:31:29 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze @@ -585,9 +585,6 @@ mdoc_nd_pre(MDOC_ARGS) static int mdoc_nm_pre(MDOC_ARGS) { - struct tag *t; - int len; - switch (n->type) { case ROFFT_HEAD: print_otag(h, TAG_TD, ""); @@ -601,22 +598,8 @@ mdoc_nm_pre(MDOC_ARGS) default: break; } - synopsis_pre(h, n); print_otag(h, TAG_TABLE, "c", "Nm"); - - for (len = 0, n = n->head->child; n; n = n->next) - if (n->type == ROFFT_TEXT) - len += html_strlen(n->string); - - if (len == 0 && meta->name != NULL) - len = html_strlen(meta->name); - - t = print_otag(h, TAG_COLGROUP, ""); - /* Increase width to make even bold text fit. */ - print_otag(h, TAG_COL, "shw", len + 2); - print_otag(h, TAG_COL, ""); - print_tagq(h, t); print_otag(h, TAG_TR, ""); return 1; } @@ -768,7 +751,7 @@ mdoc_it_pre(MDOC_ARGS) (n->parent->prev == NULL || n->parent->prev->body == NULL || n->parent->prev->body->child != NULL)) { - t = print_otag(h, TAG_DT, "csWl", + t = print_otag(h, TAG_DT, "csw+-l", cattr, bl->norm->Bl.width); print_text(h, "\\ "); print_tagq(h, t); @@ -776,7 +759,7 @@ mdoc_it_pre(MDOC_ARGS) print_text(h, "\\ "); print_tagq(h, t); } - print_otag(h, TAG_DT, "csWl", cattr, + print_otag(h, TAG_DT, "csw+-l", cattr, bl->norm->Bl.width); break; case ROFFT_BODY: @@ -839,7 +822,7 @@ mdoc_bl_pre(MDOC_ARGS) t = print_otag(h, TAG_COLGROUP, ""); for (i = 0; i < bl->ncols - 1; i++) - print_otag(h, TAG_COL, "sww", bl->cols[i]); + print_otag(h, TAG_COL, "sw+w", bl->cols[i]); print_otag(h, TAG_COL, "swW", bl->cols[i]); print_tagq(h, t); return 0; @@ -886,7 +869,7 @@ mdoc_bl_pre(MDOC_ARGS) cattr = "Bl-tag"; if (bl->offs) print_otag(h, TAG_DIV, "cswl", cattr, bl->offs); - print_otag(h, TAG_DL, "cswl", cattr, bl->width); + print_otag(h, TAG_DL, "csw+l", cattr, bl->width); return 1; case LIST_column: elemtype = TAG_TABLE; @@ -1326,24 +1309,32 @@ mdoc_pp_pre(MDOC_ARGS) static int mdoc_lk_pre(MDOC_ARGS) { + const struct roff_node *link, *descr, *punct; struct tag *t; - if ((n = n->child) == NULL) + if ((link = n->child) == NULL) return 0; + /* Find beginning of trailing punctuation. */ + punct = n->last; + while (punct != link && punct->flags & NODE_DELIMC) + punct = punct->prev; + punct = punct->next; + /* Link target and link text. */ - t = print_otag(h, TAG_A, "cTh", "Lk", n->string); - if (n->next == NULL || n->next->flags & NODE_DELIMC) - print_text(h, n->string); - for (n = n->next; n != NULL && !(n->flags & NODE_DELIMC); n = n->next) - print_text(h, n->string); + t = print_otag(h, TAG_A, "cTh", "Lk", link->string); + for (descr = link->next; descr != punct; descr = descr->next) { + if (descr->flags & (NODE_DELIMC | NODE_DELIMO)) + h->flags |= HTML_NOSPACE; + print_text(h, descr->string); + } print_tagq(h, t); /* Trailing punctuation. */ - while (n != NULL) { + while (punct != NULL) { h->flags |= HTML_NOSPACE; - print_text(h, n->string); - n = n->next; + print_text(h, punct->string); + punct = punct->next; } return 0; }