=================================================================== RCS file: /cvs/mandoc/man_html.c,v retrieving revision 1.167 retrieving revision 1.170 diff -u -p -r1.167 -r1.170 --- mandoc/man_html.c 2019/01/07 07:26:29 1.167 +++ mandoc/man_html.c 2019/01/18 14:36:21 1.170 @@ -1,4 +1,4 @@ -/* $Id: man_html.c,v 1.167 2019/01/07 07:26:29 schwarze Exp $ */ +/* $Id: man_html.c,v 1.170 2019/01/18 14:36:21 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons * Copyright (c) 2013-2015, 2017-2019 Ingo Schwarze @@ -119,7 +119,7 @@ html_man(void *arg, const struct roff_meta *man) if ((h->oflags & HTML_FRAGMENT) == 0) { print_gen_decls(h); print_otag(h, TAG_HTML, ""); - if (n->type == ROFFT_COMMENT) + if (n != NULL && n->type == ROFFT_COMMENT) print_gen_comment(h, n); t = print_otag(h, TAG_HEAD, ""); print_man_head(man, h); @@ -168,10 +168,6 @@ print_man_node(MAN_ARGS) html_fillmode(h, n->flags & NODE_NOFILL ? ROFF_nf : ROFF_fi); child = 1; - t = h->tag; - if (t->tag == TAG_P || t->tag == TAG_PRE) - t = t->next; - switch (n->type) { case ROFFT_TEXT: if (*n->string == '\0') { @@ -183,9 +179,13 @@ print_man_node(MAN_ARGS) print_endline(h); else if (n->flags & NODE_DELIMC) h->flags |= HTML_NOSPACE; + t = h->tag; + t->refcnt++; print_text(h, n->string); break; case ROFFT_EQN: + t = h->tag; + t->refcnt++; print_eqn(h, n->eqn); break; case ROFFT_TBL: @@ -211,12 +211,13 @@ print_man_node(MAN_ARGS) * the "meta" table state. This will be reopened on the * next table element. */ - if (h->tblt != NULL) { + if (h->tblt != NULL) print_tblclose(h); - t = h->tag; - } + t = h->tag; + t->refcnt++; if (n->tok < ROFF_MAX) { roff_html_pre(h, n); + t->refcnt--; print_stagq(h, t); return; } @@ -231,6 +232,7 @@ print_man_node(MAN_ARGS) print_man_nodelist(man, n->child, h); /* This will automatically close out any font scope. */ + t->refcnt--; print_stagq(h, t); if (n->flags & NODE_NOFILL && n->tok != MAN_YS && @@ -299,9 +301,9 @@ man_SH_pre(MAN_ARGS) case ROFFT_HEAD: id = html_make_id(n, 1); if (n->tok == MAN_SH) - print_otag(h, TAG_H1, "cTi", "Sh", id); + print_otag(h, TAG_H1, "ci", "Sh", id); else - print_otag(h, TAG_H2, "cTi", "Ss", id); + print_otag(h, TAG_H2, "ci", "Ss", id); if (id != NULL) print_otag(h, TAG_A, "chR", "permalink", id); break; @@ -513,7 +515,7 @@ man_SY_pre(MAN_ARGS) break; case ROFFT_HEAD: print_otag(h, TAG_TD, ""); - print_otag(h, TAG_CODE, "cT", "Nm"); + print_otag(h, TAG_CODE, "c", "Nm"); break; case ROFFT_BODY: print_otag(h, TAG_TD, ""); @@ -535,10 +537,10 @@ man_UR_pre(MAN_ARGS) assert(n->child->type == ROFFT_TEXT); if (n->tok == MAN_MT) { mandoc_asprintf(&cp, "mailto:%s", n->child->string); - print_otag(h, TAG_A, "cTh", "Mt", cp); + print_otag(h, TAG_A, "ch", "Mt", cp); free(cp); } else - print_otag(h, TAG_A, "cTh", "Lk", n->child->string); + print_otag(h, TAG_A, "ch", "Lk", n->child->string); } assert(n->next->type == ROFFT_BODY);