=================================================================== RCS file: /cvs/mandoc/man_html.c,v retrieving revision 1.174 retrieving revision 1.177 diff -u -p -r1.174 -r1.177 --- mandoc/man_html.c 2019/04/30 15:53:00 1.174 +++ mandoc/man_html.c 2020/03/13 15:32:28 1.177 @@ -1,7 +1,7 @@ -/* $Id: man_html.c,v 1.174 2019/04/30 15:53:00 schwarze Exp $ */ +/* $Id: man_html.c,v 1.177 2020/03/13 15:32:28 schwarze Exp $ */ /* + * Copyright (c) 2013-2015, 2017-2020 Ingo Schwarze * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons - * Copyright (c) 2013-2015, 2017-2019 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -14,6 +14,8 @@ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * HTML formatter for man(7) used by mandoc(1). */ #include "config.h" @@ -34,7 +36,7 @@ #include "main.h" #define MAN_ARGS const struct roff_meta *man, \ - const struct roff_node *n, \ + struct roff_node *n, \ struct html *h struct man_html_act { @@ -178,7 +180,7 @@ print_man_node(MAN_ARGS) } if (*n->string == ' ' && n->flags & NODE_LINE && (h->flags & HTML_NONEWLINE) == 0) - print_endline(h); + print_otag(h, TAG_BR, ""); else if (n->flags & NODE_DELIMC) h->flags |= HTML_NOSPACE; t = h->tag; @@ -244,7 +246,7 @@ print_man_node(MAN_ARGS) * Close the list if no further item of the same type * follows; otherwise, close the item only. */ - if (list_continues(n, n->next) == '\0') { + if (list_continues(n, roff_node_next(n)) == '\0') { print_tagq(h, t); t = NULL; } @@ -310,7 +312,6 @@ static int man_SH_pre(MAN_ARGS) { const char *class; - char *id; enum htmltag tag; if (n->tok == MAN_SH) { @@ -326,10 +327,8 @@ man_SH_pre(MAN_ARGS) print_otag(h, TAG_SECTION, "c", class); break; case ROFFT_HEAD: - id = html_make_id(n, 1); - print_otag(h, tag, "ci", class, id); - if (id != NULL) - print_otag(h, TAG_A, "chR", "permalink", id); + n->flags |= NODE_ID; + print_otag_id(h, tag, class, n); break; case ROFFT_BODY: break; @@ -445,15 +444,17 @@ list_continues(const struct roff_node *n1, const struc static int man_IP_pre(MAN_ARGS) { - const struct roff_node *nn; + struct roff_node *nn; const char *list_class; enum htmltag list_elem, body_elem; char list_type; nn = n->type == ROFFT_BLOCK ? n : n->parent; - if ((list_type = list_continues(nn->prev, nn)) == '\0') { + list_type = list_continues(roff_node_prev(nn), nn); + if (list_type == '\0') { /* Start a new list. */ - if ((list_type = list_continues(nn, nn->next)) == '\0') + list_type = list_continues(nn, roff_node_next(nn)); + if (list_type == '\0') list_type = ' '; switch (list_type) { case ' ': @@ -487,7 +488,7 @@ man_IP_pre(MAN_ARGS) case ROFFT_HEAD: if (body_elem == TAG_LI) return 0; - print_otag(h, TAG_DT, ""); + print_otag_id(h, TAG_DT, NULL, n); break; case ROFFT_BODY: print_otag(h, body_elem, ""); @@ -495,7 +496,6 @@ man_IP_pre(MAN_ARGS) default: abort(); } - switch(n->tok) { case MAN_IP: /* Only print the first header element. */ if (n->child != NULL)