-/* $Id: man_html.c,v 1.175 2020/02/12 21:15:53 schwarze Exp $ */
+/* $Id: man_html.c,v 1.178 2020/04/04 20:33:33 schwarze Exp $ */
/*
- * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* 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"
#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 {
* 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;
}
man_SH_pre(MAN_ARGS)
{
const char *class;
- char *id;
enum htmltag tag;
if (n->tok == MAN_SH) {
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);
+ print_otag_id(h, tag, class, n);
break;
case ROFFT_BODY:
break;
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 ' ':
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, "");
default:
abort();
}
-
switch(n->tok) {
case MAN_IP: /* Only print the first header element. */
if (n->child != NULL)