=================================================================== RCS file: /cvs/mandoc/mdoc_html.c,v retrieving revision 1.325 retrieving revision 1.328 diff -u -p -r1.325 -r1.328 --- mandoc/mdoc_html.c 2019/01/11 12:56:43 1.325 +++ mandoc/mdoc_html.c 2019/03/01 10:57:18 1.328 @@ -1,7 +1,7 @@ -/* $Id: mdoc_html.c,v 1.325 2019/01/11 12:56:43 schwarze Exp $ */ +/* $Id: mdoc_html.c,v 1.328 2019/03/01 10:57:18 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons - * Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze + * Copyright (c) 2014-2019 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -294,7 +294,7 @@ html_mdoc(void *arg, const struct roff_meta *mdoc) 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_mdoc_head(mdoc, h); @@ -354,13 +354,12 @@ print_mdoc_node(MDOC_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; - n->flags &= ~NODE_ENDED; switch (n->type) { case ROFFT_TEXT: + t = h->tag; + t->refcnt++; + /* No tables in this mode... */ assert(NULL == h->tblt); @@ -379,6 +378,8 @@ print_mdoc_node(MDOC_ARGS) h->flags |= HTML_NOSPACE; break; case ROFFT_EQN: + t = h->tag; + t->refcnt++; print_eqn(h, n->eqn); break; case ROFFT_TBL: @@ -395,13 +396,14 @@ print_mdoc_node(MDOC_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; - } assert(h->tblt == NULL); + t = h->tag; + t->refcnt++; if (n->tok < ROFF_MAX) { roff_html_pre(h, n); + t->refcnt--; print_stagq(h, t); return; } @@ -421,6 +423,7 @@ print_mdoc_node(MDOC_ARGS) if (child && n->child != NULL) print_mdoc_nodelist(meta, n->child, h); + t->refcnt--; print_stagq(h, t); switch (n->type) { @@ -528,8 +531,10 @@ mdoc_sh_pre(MDOC_ARGS) html_close_paragraph(h); if ((h->oflags & HTML_TOC) == 0 || h->flags & HTML_TOCDONE || - n->sec <= SEC_SYNOPSIS) + n->sec <= SEC_SYNOPSIS) { + print_otag(h, TAG_SECTION, "c", "Sh"); break; + } h->flags |= HTML_TOCDONE; sc = 0; for (sn = n->next; sn != NULL; sn = sn->next) @@ -570,6 +575,7 @@ mdoc_sh_pre(MDOC_ARGS) print_tagq(h, tsec); } print_tagq(h, t); + print_otag(h, TAG_SECTION, "c", "Sh"); break; case ROFFT_HEAD: id = html_make_id(n, 1); @@ -595,6 +601,7 @@ mdoc_ss_pre(MDOC_ARGS) switch (n->type) { case ROFFT_BLOCK: html_close_paragraph(h); + print_otag(h, TAG_SECTION, "c", "Ss"); return 1; case ROFFT_HEAD: break;