=================================================================== RCS file: /cvs/mandoc/man_html.c,v retrieving revision 1.156 retrieving revision 1.162 diff -u -p -r1.156 -r1.162 --- mandoc/man_html.c 2018/08/18 02:08:27 1.156 +++ mandoc/man_html.c 2018/12/31 07:08:12 1.162 @@ -1,4 +1,4 @@ -/* $Id: man_html.c,v 1.156 2018/08/18 02:08:27 schwarze Exp $ */ +/* $Id: man_html.c,v 1.162 2018/12/31 07:08:12 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons * Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze @@ -63,6 +63,7 @@ static int man_SM_pre(MAN_ARGS); static int man_SS_pre(MAN_ARGS); static int man_SY_pre(MAN_ARGS); static int man_UR_pre(MAN_ARGS); +static int man_abort_pre(MAN_ARGS); static int man_alt_pre(MAN_ARGS); static int man_ign_pre(MAN_ARGS); static int man_in_pre(MAN_ARGS); @@ -77,9 +78,9 @@ static const struct man_html_act man_html_acts[MAN_MAX { man_SS_pre, NULL }, /* SS */ { man_IP_pre, NULL }, /* TP */ { man_IP_pre, NULL }, /* TQ */ - { man_PP_pre, NULL }, /* LP */ + { man_abort_pre, NULL }, /* LP */ { man_PP_pre, NULL }, /* PP */ - { man_PP_pre, NULL }, /* P */ + { man_abort_pre, NULL }, /* P */ { man_IP_pre, NULL }, /* IP */ { man_HP_pre, NULL }, /* HP */ { man_SM_pre, NULL }, /* SM */ @@ -93,8 +94,6 @@ static const struct man_html_act man_html_acts[MAN_MAX { man_I_pre, NULL }, /* I */ { man_alt_pre, NULL }, /* IR */ { man_alt_pre, NULL }, /* RI */ - { NULL, NULL }, /* nf */ - { NULL, NULL }, /* fi */ { NULL, NULL }, /* RE */ { man_RS_pre, NULL }, /* RS */ { man_ign_pre, NULL }, /* DT */ @@ -138,7 +137,7 @@ print_bvspace(struct html *h, const struct roff_node * } void -html_man(void *arg, const struct roff_man *man) +html_man(void *arg, const struct roff_meta *man) { struct html *h; struct roff_node *n; @@ -153,16 +152,16 @@ html_man(void *arg, const struct roff_man *man) if (n->type == ROFFT_COMMENT) print_gen_comment(h, n); t = print_otag(h, TAG_HEAD, ""); - print_man_head(&man->meta, h); + print_man_head(man, h); print_tagq(h, t); print_otag(h, TAG_BODY, ""); } - man_root_pre(&man->meta, h); + man_root_pre(man, h); t = print_otag(h, TAG_DIV, "c", "manual-text"); - print_man_nodelist(&man->meta, n, h); + print_man_nodelist(man, n, h); print_tagq(h, t); - man_root_post(&man->meta, h); + man_root_post(man, h); print_tagq(h, NULL); } @@ -191,7 +190,7 @@ print_man_nodelist(MAN_ARGS) static void print_man_node(MAN_ARGS) { - static int want_fillmode = MAN_fi; + static int want_fillmode = ROFF_fi; static int save_fillmode; struct tag *t; @@ -203,14 +202,14 @@ print_man_node(MAN_ARGS) */ switch (n->tok) { - case MAN_nf: + case ROFF_nf: case MAN_EX: - want_fillmode = MAN_nf; + want_fillmode = ROFF_nf; return; - case MAN_fi: + case ROFF_fi: case MAN_EE: - want_fillmode = MAN_fi; - if (fillmode(h, 0) == MAN_fi) + want_fillmode = ROFF_fi; + if (fillmode(h, 0) == ROFF_fi) print_otag(h, TAG_BR, ""); return; default: @@ -231,22 +230,20 @@ print_man_node(MAN_ARGS) /* FALLTHROUGH */ case MAN_SH: /* Section headers */ case MAN_SS: /* permanently cancel .nf. */ - want_fillmode = MAN_fi; + want_fillmode = ROFF_fi; /* FALLTHROUGH */ case MAN_PP: /* These have no head. */ - case MAN_LP: /* They will simply */ - case MAN_P: /* reopen .nf in the body. */ - case MAN_RS: - case MAN_UR: + case MAN_RS: /* They will simply */ + case MAN_UR: /* reopen .nf in the body. */ case MAN_MT: - fillmode(h, MAN_fi); + fillmode(h, ROFF_fi); break; default: break; } break; case ROFFT_TBL: - fillmode(h, MAN_fi); + fillmode(h, ROFF_fi); break; case ROFFT_ELEM: /* @@ -259,12 +256,12 @@ print_man_node(MAN_ARGS) fillmode(h, want_fillmode); break; case ROFFT_TEXT: - if (fillmode(h, want_fillmode) == MAN_fi && - want_fillmode == MAN_fi && + if (fillmode(h, want_fillmode) == ROFF_fi && + want_fillmode == ROFF_fi && n->flags & NODE_LINE && *n->string == ' ' && (h->flags & HTML_NONEWLINE) == 0) print_otag(h, TAG_BR, ""); - if (*n->string != '\0') + if (want_fillmode == ROFF_nf || *n->string != '\0') break; print_paragraph(h); return; @@ -337,13 +334,16 @@ print_man_node(MAN_ARGS) /* This will automatically close out any font scope. */ print_stagq(h, t); - if (fillmode(h, 0) == MAN_nf && - n->next != NULL && n->next->flags & NODE_LINE) + if (fillmode(h, 0) == ROFF_nf && + n->next != NULL && n->next->flags & NODE_LINE) { + /* In .nf =
, print even empty lines. */
+		h->col++;
 		print_endline(h);
+	}
 }
 
 /*
- * MAN_nf switches to no-fill mode, MAN_fi to fill mode.
+ * ROFF_nf switches to no-fill mode, ROFF_fi to fill mode.
  * Other arguments do not switch.
  * The old mode is returned.
  */
@@ -357,10 +357,10 @@ fillmode(struct html *h, int want)
 		if (pre->tag == TAG_PRE)
 			break;
 
-	had = pre == NULL ? MAN_fi : MAN_nf;
+	had = pre == NULL ? ROFF_fi : ROFF_nf;
 
 	if (want && want != had) {
-		if (want == MAN_nf)
+		if (want == ROFF_nf)
 			print_otag(h, TAG_PRE, "");
 		else
 			print_tagq(h, pre);
@@ -668,4 +668,10 @@ man_UR_pre(MAN_ARGS)
 	print_man_nodelist(man, n->child, h);
 
 	return 0;
+}
+
+static int
+man_abort_pre(MAN_ARGS)
+{
+	abort();
 }