=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/man_html.c,v retrieving revision 1.139 retrieving revision 1.140 diff -u -r1.139 -r1.140 --- src/usr.bin/mandoc/man_html.c 2023/10/18 16:11:29 1.139 +++ src/usr.bin/mandoc/man_html.c 2023/10/24 20:30:49 1.140 @@ -1,6 +1,6 @@ -/* $OpenBSD: man_html.c,v 1.139 2023/10/18 16:11:29 schwarze Exp $ */ +/* $OpenBSD: man_html.c,v 1.140 2023/10/24 20:30:49 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 @@ -51,6 +51,7 @@ 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); @@ -104,6 +105,7 @@ { NULL, NULL }, /* UE */ { man_UR_pre, NULL }, /* MT */ { NULL, NULL }, /* ME */ + { man_MR_pre, NULL }, /* MR */ }; @@ -512,6 +514,52 @@ 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; }