aboutsummaryrefslogtreecommitdiffstatshomepage
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
commit6b3ce9c2f4fab0e6c861db946aec61ff56ce922a (patch)
tree68632c7cc5068403dacb8c0a3db0fdd877765668 /html.c
parentd7c95824f7db0871524969e5fb3f9a938bebc2d7 (diff)
downloadmandoc-6b3ce9c2f4fab0e6c861db946aec61ff56ce922a.tar.gz
mandoc-6b3ce9c2f4fab0e6c861db946aec61ff56ce922a.tar.zst
mandoc-6b3ce9c2f4fab0e6c861db946aec61ff56ce922a.zip
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.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/html.c b/html.c
index 11cec6e0..72153db7 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.247 2018/12/16 00:17:02 schwarze Exp $ */
+/* $Id: html.c,v 1.248 2019/01/05 09:14:44 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -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)
{