=================================================================== RCS file: /cvs/mandoc/mdoc_html.c,v retrieving revision 1.313 retrieving revision 1.316 diff -u -p -r1.313 -r1.316 --- mandoc/mdoc_html.c 2018/10/02 14:56:47 1.313 +++ mandoc/mdoc_html.c 2018/12/03 21:00:10 1.316 @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.313 2018/10/02 14:56:47 schwarze Exp $ */ +/* $Id: mdoc_html.c,v 1.316 2018/12/03 21:00:10 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze @@ -62,6 +62,7 @@ static int mdoc_root_pre(const struct roff_meta *, static void mdoc__x_post(MDOC_ARGS); static int mdoc__x_pre(MDOC_ARGS); +static int mdoc_abort_pre(MDOC_ARGS); static int mdoc_ad_pre(MDOC_ARGS); static int mdoc_an_pre(MDOC_ARGS); static int mdoc_ap_pre(MDOC_ARGS); @@ -154,7 +155,7 @@ static const struct mdoc_html_act mdoc_html_acts[MDOC_ {mdoc_nd_pre, NULL}, /* Nd */ {mdoc_nm_pre, NULL}, /* Nm */ {mdoc_quote_pre, mdoc_quote_post}, /* Op */ - {mdoc_ft_pre, NULL}, /* Ot */ + {mdoc_abort_pre, NULL}, /* Ot */ {mdoc_pa_pre, NULL}, /* Pa */ {mdoc_ex_pre, NULL}, /* Rv */ {mdoc_st_pre, NULL}, /* St */ @@ -227,7 +228,7 @@ static const struct mdoc_html_act mdoc_html_acts[MDOC_ {mdoc_em_pre, NULL}, /* Fr */ {NULL, NULL}, /* Ud */ {mdoc_lb_pre, NULL}, /* Lb */ - {mdoc_pp_pre, NULL}, /* Lp */ + {mdoc_abort_pre, NULL}, /* Lp */ {mdoc_lk_pre, NULL}, /* Lk */ {mdoc_mt_pre, NULL}, /* Mt */ {mdoc_quote_pre, mdoc_quote_post}, /* Brq */ @@ -507,8 +508,8 @@ cond_id(const struct roff_node *n) static int mdoc_sh_pre(MDOC_ARGS) { - struct roff_node *sn; - struct tag *t, *tt; + struct roff_node *sn, *subn; + struct tag *t, *tsec, *tsub; char *id; int sc; @@ -530,13 +531,31 @@ mdoc_sh_pre(MDOC_ARGS) print_text(h, "TABLE OF CONTENTS"); print_tagq(h, t); t = print_otag(h, TAG_UL, "c", "Bl-compact"); - for (sn = n->next; sn != NULL; sn = sn->next) { + for (sn = n; sn != NULL; sn = sn->next) { + tsec = print_otag(h, TAG_LI, ""); id = html_make_id(sn->head, 0); - tt = print_otag(h, TAG_LI, ""); print_otag(h, TAG_A, "hR", id); - print_mdoc_nodelist(meta, sn->head->child, h); - print_tagq(h, tt); free(id); + print_mdoc_nodelist(meta, sn->head->child, h); + tsub = NULL; + for (subn = sn->body->child; subn != NULL; + subn = subn->next) { + if (subn->tok != MDOC_Ss) + continue; + id = html_make_id(subn->head, 0); + if (id == NULL) + continue; + if (tsub == NULL) + print_otag(h, TAG_UL, + "c", "Bl-compact"); + tsub = print_otag(h, TAG_LI, ""); + print_otag(h, TAG_A, "hR", id); + free(id); + print_mdoc_nodelist(meta, + subn->head->child, h); + print_tagq(h, tsub); + } + print_tagq(h, tsec); } print_tagq(h, t); break; @@ -950,7 +969,6 @@ mdoc_bd_pre(MDOC_ARGS) case MDOC_Bl: case MDOC_D1: case MDOC_Dl: - case MDOC_Lp: case MDOC_Pp: continue; default: @@ -1789,4 +1807,10 @@ mdoc_eo_post(MDOC_ARGS) h->flags |= HTML_NOSPACE; else if ( ! tail) h->flags &= ~HTML_NOSPACE; +} + +static int +mdoc_abort_pre(MDOC_ARGS) +{ + abort(); }