=================================================================== RCS file: /cvs/mandoc/man_html.c,v retrieving revision 1.185 retrieving revision 1.187 diff -u -p -r1.185 -r1.187 --- mandoc/man_html.c 2023/04/28 20:23:19 1.185 +++ mandoc/man_html.c 2023/10/24 20:53:12 1.187 @@ -1,6 +1,6 @@ -/* $Id: man_html.c,v 1.185 2023/04/28 20:23:19 schwarze Exp $ */ +/* $Id: man_html.c,v 1.187 2023/10/24 20:53:12 schwarze Exp $ */ /* - * Copyright (c) 2013-2015,2017-2020,2022 Ingo Schwarze + * Copyright (c) 2013-15,2017-20,2022-23 Ingo Schwarze * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any @@ -53,6 +53,7 @@ static char list_continues(const struct roff_node * static int man_B_pre(MAN_ARGS); static int man_IP_pre(MAN_ARGS); static int man_I_pre(MAN_ARGS); +static int man_MR_pre(MAN_ARGS); static int man_OP_pre(MAN_ARGS); static int man_PP_pre(MAN_ARGS); static int man_RS_pre(MAN_ARGS); @@ -106,6 +107,7 @@ static const struct man_html_act man_html_acts[MAN_MAX { NULL, NULL }, /* UE */ { man_UR_pre, NULL }, /* MT */ { NULL, NULL }, /* ME */ + { man_MR_pre, NULL }, /* MR */ }; @@ -433,10 +435,12 @@ list_continues(const struct roff_node *n1, const struc s2 = n2 == NULL ? "" : n2->string; c1 = strcmp(s1, "*") == 0 ? '*' : strcmp(s1, "\\-") == 0 ? '-' : - strcmp(s1, "\\(bu") == 0 ? 'b' : ' '; + strcmp(s1, "\\(bu") == 0 ? 'b' : + strcmp(s1, "\\[bu]") == 0 ? 'b' : ' '; c2 = strcmp(s2, "*") == 0 ? '*' : strcmp(s2, "\\-") == 0 ? '-' : - strcmp(s2, "\\(bu") == 0 ? 'b' : ' '; + strcmp(s2, "\\(bu") == 0 ? 'b' : + strcmp(s2, "\\[bu]") == 0 ? 'b' : ' '; return c1 != c2 ? '\0' : c1 == 'b' ? '*' : c1; } @@ -512,6 +516,52 @@ man_IP_pre(MAN_ARGS) break; default: abort(); + } + return 0; +} + +static int +man_MR_pre(MAN_ARGS) +{ + struct tag *t; + const char *name, *section, *suffix; + char *label; + + html_setfont(h, ESCAPE_FONTROMAN); + name = section = suffix = label = NULL; + if (n->child != NULL) { + name = n->child->string; + if (n->child->next != NULL) { + section = n->child->next->string; + mandoc_asprintf(&label, + "%s, section %s", name, section); + if (n->child->next->next != NULL) + suffix = n->child->next->next->string; + } + } + + if (name != NULL && section != NULL && h->base_man1 != NULL) + t = print_otag(h, TAG_A, "chM?", "Xr", + name, section, "aria-label", label); + else + t = print_otag(h, TAG_A, "c?", "Xr", "aria-label", label); + + free(label); + if (name != NULL) { + print_text(h, name); + h->flags |= HTML_NOSPACE; + } + print_text(h, "("); + h->flags |= HTML_NOSPACE; + if (section != NULL) { + print_text(h, section); + h->flags |= HTML_NOSPACE; + } + print_text(h, ")"); + print_tagq(h, t); + if (suffix != NULL) { + h->flags |= HTML_NOSPACE; + print_text(h, suffix); } return 0; }