=================================================================== RCS file: /cvs/mandoc/mdoc_html.c,v retrieving revision 1.316 retrieving revision 1.322 diff -u -p -r1.316 -r1.322 --- mandoc/mdoc_html.c 2018/12/03 21:00:10 1.316 +++ mandoc/mdoc_html.c 2018/12/31 10:35:56 1.322 @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.316 2018/12/03 21:00:10 schwarze Exp $ */ +/* $Id: mdoc_html.c,v 1.322 2018/12/31 10:35:56 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze @@ -283,7 +283,7 @@ synopsis_pre(struct html *h, const struct roff_node *n } void -html_mdoc(void *arg, const struct roff_man *mdoc) +html_mdoc(void *arg, const struct roff_meta *mdoc) { struct html *h; struct roff_node *n; @@ -298,16 +298,16 @@ html_mdoc(void *arg, const struct roff_man *mdoc) if (n->type == ROFFT_COMMENT) print_gen_comment(h, n); t = print_otag(h, TAG_HEAD, ""); - print_mdoc_head(&mdoc->meta, h); + print_mdoc_head(mdoc, h); print_tagq(h, t); print_otag(h, TAG_BODY, ""); } - mdoc_root_pre(&mdoc->meta, h); + mdoc_root_pre(mdoc, h); t = print_otag(h, TAG_DIV, "c", "manual-text"); - print_mdoc_nodelist(&mdoc->meta, n, h); + print_mdoc_nodelist(mdoc, n, h); print_tagq(h, t); - mdoc_root_post(&mdoc->meta, h); + mdoc_root_post(mdoc, h); print_tagq(h, NULL); } @@ -366,7 +366,8 @@ print_mdoc_node(MDOC_ARGS) * (i.e., within a
) don't print the newline.
 		 */
 		if (*n->string == ' ' && n->flags & NODE_LINE &&
-		    (h->flags & (HTML_LITERAL | HTML_NONEWLINE)) == 0)
+		    (h->flags & HTML_NONEWLINE) == 0 &&
+		    (n->flags & NODE_NOFILL) == 0)
 			print_otag(h, TAG_BR, "");
 		if (NODE_DELIMC & n->flags)
 			h->flags |= HTML_NOSPACE;
@@ -534,9 +535,10 @@ mdoc_sh_pre(MDOC_ARGS)
 		for (sn = n; sn != NULL; sn = sn->next) {
 			tsec = print_otag(h, TAG_LI, "");
 			id = html_make_id(sn->head, 0);
-			print_otag(h, TAG_A, "hR", id);
+			tsub = print_otag(h, TAG_A, "hR", id);
 			free(id);
 			print_mdoc_nodelist(meta, sn->head->child, h);
+			print_tagq(h, tsub);
 			tsub = NULL;
 			for (subn = sn->body->child; subn != NULL;
 			    subn = subn->next) {
@@ -795,7 +797,7 @@ mdoc_it_pre(MDOC_ARGS)
 static int
 mdoc_bl_pre(MDOC_ARGS)
 {
-	char		 cattr[28];
+	char		 cattr[32];
 	struct mdoc_bl	*bl;
 	enum htmltag	 elemtype;
 
@@ -914,7 +916,7 @@ mdoc_sx_pre(MDOC_ARGS)
 static int
 mdoc_bd_pre(MDOC_ARGS)
 {
-	int			 comp, sv;
+	int			 comp;
 	struct roff_node	*nn;
 
 	if (n->type == ROFFT_HEAD)
@@ -948,12 +950,6 @@ mdoc_bd_pre(MDOC_ARGS)
 		return 1;
 
 	print_otag(h, TAG_PRE, "c", "Li");
-
-	/* This can be recursive: save & set our literal state. */
-
-	sv = h->flags & HTML_LITERAL;
-	h->flags |= HTML_LITERAL;
-
 	for (nn = n->child; nn; nn = nn->next) {
 		print_mdoc_node(meta, nn, h);
 		/*
@@ -982,10 +978,6 @@ mdoc_bd_pre(MDOC_ARGS)
 
 		h->flags |= HTML_NOSPACE;
 	}
-
-	if (0 == sv)
-		h->flags &= ~HTML_LITERAL;
-
 	return 0;
 }