summaryrefslogtreecommitdiff
path: root/usr.bin/mandoc/html.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@cvs.openbsd.org>2019-01-05 09:14:12 +0000
committerIngo Schwarze <schwarze@cvs.openbsd.org>2019-01-05 09:14:12 +0000
commitbcf949487a05b1a08f49642909bfca143a2bfc1d (patch)
treec3c7bf205a9df318ea69ebf2a15cf79996670617 /usr.bin/mandoc/html.c
parentab0617e570aaaac77c39ed67eb0d3e8527ad9348 (diff)
Now that the NODE_NOFILL flag in the syntax tree is accurate,
use it in the man(7) HTML formatter rather than keeping fill mode state locally, resulting in massive simplification (minus 40 LOC). Move the html_fillmode() state handler function to the html.c module such that both the man(7) and the roff(7) formatter (and in the future, also the mdoc(7) formatter) can use it. Give it a query mode, to be invoked with TOKEN_NONE.
Diffstat (limited to 'usr.bin/mandoc/html.c')
-rw-r--r--usr.bin/mandoc/html.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/usr.bin/mandoc/html.c b/usr.bin/mandoc/html.c
index a2783f1ef34..197338c66e5 100644
--- a/usr.bin/mandoc/html.c
+++ b/usr.bin/mandoc/html.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: html.c,v 1.117 2018/12/15 23:33:20 schwarze Exp $ */
+/* $OpenBSD: html.c,v 1.118 2019/01/05 09:14:11 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -263,6 +263,39 @@ print_metaf(struct html *h, enum mandoc_esc deco)
}
}
+/*
+ * ROFF_nf switches to no-fill mode, ROFF_fi to fill mode.
+ * TOKEN_NONE does not switch. The old mode is returned.
+ */
+enum roff_tok
+html_fillmode(struct html *h, enum roff_tok want)
+{
+ struct tag *t;
+ enum roff_tok had;
+
+ for (t = h->tag; t != NULL; t = t->next)
+ if (t->tag == TAG_PRE)
+ break;
+
+ had = t == NULL ? ROFF_fi : ROFF_nf;
+
+ if (want != had) {
+ switch (want) {
+ case ROFF_fi:
+ print_tagq(h, t);
+ break;
+ case ROFF_nf:
+ print_otag(h, TAG_PRE, "");
+ break;
+ case TOKEN_NONE:
+ break;
+ default:
+ abort();
+ }
+ }
+ return had;
+}
+
char *
html_make_id(const struct roff_node *n, int unique)
{