diff options
author | 2020-02-27 01:43:52 +0000 | |
---|---|---|
committer | 2020-02-27 01:43:52 +0000 | |
commit | 88750dda2da444fce307d20d33700d72e7c49c7f (patch) | |
tree | 140fdcb1a59ea5418ca8046a300e844dadd832d6 /man_html.c | |
parent | 4e9a246966125ec03e481374634f3448a906235b (diff) | |
download | mandoc-88750dda2da444fce307d20d33700d72e7c49c7f.tar.gz mandoc-88750dda2da444fce307d20d33700d72e7c49c7f.tar.zst mandoc-88750dda2da444fce307d20d33700d72e7c49c7f.zip |
Introduce the concept of nodes that are semantically transparent:
they are skipped when looking for previous or following high-level
macros. Examples include roff(7) .ft, .ll, and .ta, mdoc(7) .Sm
and .Tg, and man(7) .DT and .PD. Use this concept for a variety
of improved decisions in various validators and formatters.
While here,
* remove a few const qualifiers on struct arguments that caused trouble;
* get rid of some more Yoda notation in the vicinity;
* and apply some other stylistic improvements in the vicinity.
I found this class of issues while considering .Tg patches from kn@.
Diffstat (limited to 'man_html.c')
-rw-r--r-- | man_html.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -1,4 +1,4 @@ -/* $Id: man_html.c,v 1.175 2020/02/12 21:15:53 schwarze Exp $ */ +/* $Id: man_html.c,v 1.176 2020/02/27 01:43:52 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2013-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org> @@ -34,7 +34,7 @@ #include "main.h" #define MAN_ARGS const struct roff_meta *man, \ - const struct roff_node *n, \ + struct roff_node *n, \ struct html *h struct man_html_act { @@ -244,7 +244,7 @@ print_man_node(MAN_ARGS) * Close the list if no further item of the same type * follows; otherwise, close the item only. */ - if (list_continues(n, n->next) == '\0') { + if (list_continues(n, roff_node_next(n)) == '\0') { print_tagq(h, t); t = NULL; } @@ -445,15 +445,17 @@ list_continues(const struct roff_node *n1, const struct roff_node *n2) static int man_IP_pre(MAN_ARGS) { - const struct roff_node *nn; + struct roff_node *nn; const char *list_class; enum htmltag list_elem, body_elem; char list_type; nn = n->type == ROFFT_BLOCK ? n : n->parent; - if ((list_type = list_continues(nn->prev, nn)) == '\0') { + list_type = list_continues(roff_node_prev(nn), nn); + if (list_type == '\0') { /* Start a new list. */ - if ((list_type = list_continues(nn, nn->next)) == '\0') + list_type = list_continues(nn, roff_node_next(nn)); + if (list_type == '\0') list_type = ' '; switch (list_type) { case ' ': |