=================================================================== RCS file: /cvs/mandoc/mdoc_html.c,v retrieving revision 1.258 retrieving revision 1.266 diff -u -p -r1.258 -r1.266 --- mandoc/mdoc_html.c 2017/01/20 23:51:00 1.258 +++ mandoc/mdoc_html.c 2017/02/05 19:29:19 1.266 @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.258 2017/01/20 23:51:00 schwarze Exp $ */ +/* $Id: mdoc_html.c,v 1.266 2017/02/05 19:29:19 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze @@ -349,7 +349,7 @@ print_mdoc_node(MDOC_ARGS) return; child = 1; - t = h->tags.head; + t = h->tag; n->flags &= ~NODE_ENDED; switch (n->type) { @@ -389,7 +389,7 @@ print_mdoc_node(MDOC_ARGS) */ if (h->tblt != NULL) { print_tblclose(h); - t = h->tags.head; + t = h->tag; } assert(h->tblt == NULL); if (mdocs[n->tok].pre && (n->end == ENDBODY_NOT || n->child)) @@ -428,7 +428,6 @@ mdoc_root_post(MDOC_ARGS) struct tag *t, *tt; t = print_otag(h, TAG_TABLE, "c", "foot"); - print_otag(h, TAG_TBODY, ""); tt = print_otag(h, TAG_TR, ""); print_otag(h, TAG_TD, "c", "foot-date"); @@ -459,7 +458,6 @@ mdoc_root_pre(MDOC_ARGS) meta->title, meta->msec); t = print_otag(h, TAG_TABLE, "c", "head"); - print_otag(h, TAG_TBODY, ""); tt = print_otag(h, TAG_TR, ""); print_otag(h, TAG_TD, "c", "head-ltitle"); @@ -507,22 +505,18 @@ mdoc_sh_pre(MDOC_ARGS) char *id; switch (n->type) { - case ROFFT_BLOCK: - return 1; + case ROFFT_HEAD: + id = make_id(n); + print_otag(h, TAG_H1, "ci", "Sh", id); + free(id); + break; case ROFFT_BODY: if (n->sec == SEC_AUTHORS) h->flags &= ~(HTML_SPLIT|HTML_NOSPLIT); - return 1; + break; default: break; } - - if ((id = make_id(n)) != NULL) { - print_otag(h, TAG_H1, "ci", "Sh", id); - free(id); - } else - print_otag(h, TAG_H1, "c", "Sh"); - return 1; } @@ -534,12 +528,9 @@ mdoc_ss_pre(MDOC_ARGS) if (n->type != ROFFT_HEAD) return 1; - if ((id = make_id(n)) != NULL) { - print_otag(h, TAG_H2, "ci", "Ss", id); - free(id); - } else - print_otag(h, TAG_H2, "c", "Ss"); - + id = make_id(n); + print_otag(h, TAG_H2, "ci", "Ss", id); + free(id); return 1; } @@ -574,13 +565,14 @@ mdoc_nd_pre(MDOC_ARGS) /* XXX: this tag in theory can contain block elements. */ print_text(h, "\\(em"); - print_otag(h, TAG_SPAN, "c", "desc"); + print_otag(h, TAG_SPAN, "c", "Nd"); return 1; } static int mdoc_nm_pre(MDOC_ARGS) { + struct tag *t; int len; switch (n->type) { @@ -609,9 +601,10 @@ mdoc_nm_pre(MDOC_ARGS) if (len == 0 && meta->name != NULL) len = html_strlen(meta->name); + t = print_otag(h, TAG_COLGROUP, ""); print_otag(h, TAG_COL, "shw", len); print_otag(h, TAG_COL, ""); - print_otag(h, TAG_TBODY, ""); + print_tagq(h, t); print_otag(h, TAG_TR, ""); return 1; } @@ -663,7 +656,7 @@ mdoc_ar_pre(MDOC_ARGS) static int mdoc_xx_pre(MDOC_ARGS) { - print_otag(h, TAG_SPAN, "c", "unix"); + print_otag(h, TAG_SPAN, "c", "Ux"); return 1; } @@ -671,6 +664,7 @@ static int mdoc_it_pre(MDOC_ARGS) { const struct roff_node *bl; + struct tag *t; const char *cattr; enum mdoc_list type; @@ -725,8 +719,10 @@ mdoc_it_pre(MDOC_ARGS) case ROFFT_HEAD: return 0; case ROFFT_BODY: - print_otag(h, TAG_LI, "csvt", cattr, - !bl->norm->Bl.comp); + if (bl->norm->Bl.comp) + print_otag(h, TAG_LI, "csvt", cattr, 0); + else + print_otag(h, TAG_LI, "c", cattr); break; default: break; @@ -736,20 +732,47 @@ mdoc_it_pre(MDOC_ARGS) case LIST_hang: case LIST_inset: case LIST_ohang: - case LIST_tag: switch (n->type) { case ROFFT_HEAD: - print_otag(h, TAG_DT, "csvt", cattr, - !bl->norm->Bl.comp); + if (bl->norm->Bl.comp) + print_otag(h, TAG_DT, "csvt", cattr, 0); + else + print_otag(h, TAG_DT, "c", cattr); if (type == LIST_diag) print_otag(h, TAG_B, "c", cattr); break; case ROFFT_BODY: - if (bl->norm->Bl.width == NULL) + print_otag(h, TAG_DD, "cswl", cattr, + bl->norm->Bl.width); + break; + default: + 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)) { + 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); + } + 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); - else - print_otag(h, TAG_DD, "cswl", cattr, - bl->norm->Bl.width); break; default: break; @@ -760,8 +783,10 @@ mdoc_it_pre(MDOC_ARGS) case ROFFT_HEAD: break; case ROFFT_BODY: - print_otag(h, TAG_TD, "csvt", cattr, - !bl->norm->Bl.comp); + if (bl->norm->Bl.comp) + print_otag(h, TAG_TD, "csvt", cattr, 0); + else + print_otag(h, TAG_TD, "c", cattr); break; default: print_otag(h, TAG_TR, "c", cattr); @@ -776,18 +801,20 @@ mdoc_it_pre(MDOC_ARGS) static int mdoc_bl_pre(MDOC_ARGS) { + struct tag *t; + struct mdoc_bl *bl; const char *cattr; - int i; + size_t i; enum htmltag elemtype; - if (n->type == ROFFT_BODY) { - if (LIST_column == n->norm->Bl.type) - print_otag(h, TAG_TBODY, ""); + bl = &n->norm->Bl; + + switch (n->type) { + case ROFFT_BODY: return 1; - } - if (n->type == ROFFT_HEAD) { - if (LIST_column != n->norm->Bl.type) + case ROFFT_HEAD: + if (bl->type != LIST_column || bl->ncols == 0) return 0; /* @@ -797,14 +824,18 @@ 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]); - + 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, "swW", bl->cols[i]); + print_tagq(h, t); return 0; + + default: + break; } - switch (n->norm->Bl.type) { + switch (bl->type) { case LIST_bullet: elemtype = TAG_UL; cattr = "Bl-bullet"; @@ -839,9 +870,11 @@ 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); + print_otag(h, TAG_DL, "cswl", cattr, bl->width); + return 1; case LIST_column: elemtype = TAG_TABLE; cattr = "Bl-column"; @@ -849,13 +882,7 @@ mdoc_bl_pre(MDOC_ARGS) default: abort(); } - - if (n->norm->Bl.offs) - print_otag(h, elemtype, "csvtvbwl", cattr, 0, 0, - n->norm->Bl.offs); - else - print_otag(h, elemtype, "csvtvb", cattr, 0, 0); - + print_otag(h, elemtype, "cswl", cattr, bl->offs); return 1; } @@ -870,7 +897,7 @@ mdoc_ex_pre(MDOC_ARGS) static int mdoc_em_pre(MDOC_ARGS) { - print_otag(h, TAG_SPAN, "c", "emph"); + print_otag(h, TAG_I, "c", "Em"); return 1; } @@ -893,12 +920,9 @@ mdoc_sx_pre(MDOC_ARGS) { char *id; - if ((id = make_id(n)) != NULL) { - print_otag(h, TAG_A, "chR", "Sx", id); - free(id); - } else - print_otag(h, TAG_A, "c", "Sx"); - + id = make_id(n); + print_otag(h, TAG_A, "chR", "Sx", id); + free(id); return 1; } @@ -1439,9 +1463,9 @@ mdoc_bf_pre(MDOC_ARGS) return 1; if (FONT_Em == n->norm->Bf.font) - cattr = "emph"; + cattr = "Em"; else if (FONT_Sy == n->norm->Bf.font) - cattr = "symb"; + cattr = "Sy"; else if (FONT_Li == n->norm->Bf.font) cattr = "Li"; else @@ -1488,14 +1512,14 @@ mdoc_rs_pre(MDOC_ARGS) if (n->prev && SEC_SEE_ALSO == n->sec) print_paragraph(h); - print_otag(h, TAG_SPAN, "c", "Rs"); + print_otag(h, TAG_CITE, "c", "Rs"); return 1; } static int mdoc_no_pre(MDOC_ARGS) { - print_otag(h, TAG_SPAN, "c", "none"); + print_otag(h, TAG_SPAN, "c", "No"); return 1; } @@ -1509,7 +1533,7 @@ mdoc_li_pre(MDOC_ARGS) static int mdoc_sy_pre(MDOC_ARGS) { - print_otag(h, TAG_SPAN, "c", "symb"); + print_otag(h, TAG_B, "c", "Sy"); return 1; }