From b039e0910fa465b73d66c37dc6f3c37a0be1e77e Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Sat, 5 Jan 2019 09:14:44 +0000 Subject: 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. --- html.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'html.c') 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) { -- cgit