summaryrefslogtreecommitdiffstats
path: root/html.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2019-01-05 09:14:44 +0000
committerIngo Schwarze <schwarze@openbsd.org>2019-01-05 09:14:44 +0000
commitb039e0910fa465b73d66c37dc6f3c37a0be1e77e (patch)
tree3afc7a4af4cc7ca799ce86b128a2431db6c40aed /html.c
parentdf6a082de3c130efd8582d20d12e3dffa98ebd8f (diff)
downloadmandoc-b039e0910fa465b73d66c37dc6f3c37a0be1e77e.tar.gz
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 'html.c')
-rw-r--r--html.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/html.c b/html.c
index 4d4dacf3..7744f579 100644
--- a/html.c
+++ b/html.c
@@ -265,6 +265,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)
{