=================================================================== RCS file: /cvs/mandoc/man_html.c,v retrieving revision 1.153 retrieving revision 1.155 diff -u -p -r1.153 -r1.155 --- mandoc/man_html.c 2018/07/27 17:49:31 1.153 +++ mandoc/man_html.c 2018/08/17 20:33:37 1.155 @@ -1,4 +1,4 @@ -/* $Id: man_html.c,v 1.153 2018/07/27 17:49:31 schwarze Exp $ */ +/* $Id: man_html.c,v 1.155 2018/08/17 20:33:37 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons * Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze @@ -39,7 +39,7 @@ const struct roff_node *n, \ struct html *h -struct htmlman { +struct man_html_act { int (*pre)(MAN_ARGS); int (*post)(MAN_ARGS); }; @@ -70,11 +70,12 @@ static void man_root_post(const struct roff_meta *, static void man_root_pre(const struct roff_meta *, struct html *); -static const struct htmlman __mans[MAN_MAX - MAN_TH] = { +static const struct man_html_act man_html_acts[MAN_MAX - MAN_TH] = { { NULL, NULL }, /* TH */ { man_SH_pre, NULL }, /* SH */ { man_SS_pre, NULL }, /* SS */ { man_IP_pre, NULL }, /* TP */ + { man_IP_pre, NULL }, /* TQ */ { man_PP_pre, NULL }, /* LP */ { man_PP_pre, NULL }, /* PP */ { man_PP_pre, NULL }, /* P */ @@ -108,7 +109,6 @@ static const struct htmlman __mans[MAN_MAX - MAN_TH] = { man_UR_pre, NULL }, /* MT */ { NULL, NULL }, /* ME */ }; -static const struct htmlman *const mans = __mans - MAN_TH; /* @@ -317,8 +317,9 @@ print_man_node(MAN_ARGS) } assert(n->tok >= MAN_TH && n->tok < MAN_MAX); - if (mans[n->tok].pre) - child = (*mans[n->tok].pre)(man, n, h); + if (man_html_acts[n->tok - MAN_TH].pre != NULL) + child = (*man_html_acts[n->tok - MAN_TH].pre)(man, + n, h); /* Some block macros resume .nf in the body. */ if (save_fillmode && n->type == ROFFT_BODY) @@ -518,25 +519,25 @@ man_IP_pre(MAN_ARGS) return 1; } - /* FIXME: width specification. */ - print_otag(h, TAG_DT, ""); - /* For IP, only print the first header element. */ - - if (MAN_IP == n->tok && n->child) - print_man_node(man, n->child, h); - - /* For TP, only print next-line header elements. */ - - if (MAN_TP == n->tok) { + switch(n->tok) { + case MAN_IP: /* Only print the first header element. */ + if (n->child != NULL) + print_man_node(man, n->child, h); + break; + case MAN_TP: /* Only print next-line header elements. */ + case MAN_TQ: nn = n->child; - while (NULL != nn && 0 == (NODE_LINE & nn->flags)) + while (nn != NULL && (NODE_LINE & nn->flags) == 0) nn = nn->next; - while (NULL != nn) { + while (nn != NULL) { print_man_node(man, nn, h); nn = nn->next; } + break; + default: + abort(); } return 0;