=================================================================== RCS file: /cvs/mandoc/man_html.c,v retrieving revision 1.186 retrieving revision 1.188 diff -u -p -r1.186 -r1.188 --- mandoc/man_html.c 2023/10/18 16:11:33 1.186 +++ mandoc/man_html.c 2025/06/26 17:06:34 1.188 @@ -1,6 +1,6 @@ -/* $Id: man_html.c,v 1.186 2023/10/18 16:11:33 schwarze Exp $ */ +/* $Id: man_html.c,v 1.188 2025/06/26 17:06:34 schwarze Exp $ */ /* - * Copyright (c) 2013-2015,2017-2020,2022 Ingo Schwarze + * Copyright (c) 2013-2020,2022-2023,2025 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 */ }; @@ -291,21 +293,30 @@ static void man_root_post(const struct roff_meta *man, struct html *h) { struct tag *t; + char *title; + assert(man->title != NULL); + if (man->msec == NULL) + title = mandoc_strdup(man->title); + else + mandoc_asprintf(&title, "%s(%s)", man->title, man->msec); + t = print_otag(h, TAG_DIV, "cr?", "foot", "doc-pagefooter", "aria-label", "Manual footer line"); print_otag(h, TAG_SPAN, "c", "foot-left"); + if (man->os != NULL) + print_text(h, man->os); print_stagq(h, t); print_otag(h, TAG_SPAN, "c", "foot-date"); print_text(h, man->date); print_stagq(h, t); - print_otag(h, TAG_SPAN, "c", "foot-os"); - if (man->os != NULL) - print_text(h, man->os); + print_otag(h, TAG_SPAN, "c", "foot-right"); + print_text(h, title); print_tagq(h, t); + free(title); } static int @@ -514,6 +525,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; }