diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2015-10-20 02:01:31 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2015-10-20 02:01:31 +0000 |
commit | 3c4f3fa3497c0d1eb3f741840af466708d1a4c86 (patch) | |
tree | 3851ef70f1a96463dca2fe04f0774966761b0db3 /mdoc_macro.c | |
parent | 566f2881c4b58622697653e52c07c10d8346ddd4 (diff) | |
download | mandoc-3c4f3fa3497c0d1eb3f741840af466708d1a4c86.tar.gz |
In order to become able to generate syntax tree nodes on the roff(7)
level, validation must be separated from parsing and rewinding.
This first big step moves calling of the mdoc(7) post_*() functions
out of the parser loop into their own mdoc_validate() pass, while
using a new mdoc_state() module to make syntax tree state handling
available to both the parser loop and the validation pass.
Diffstat (limited to 'mdoc_macro.c')
-rw-r--r-- | mdoc_macro.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/mdoc_macro.c b/mdoc_macro.c index e6d2dc57..5aaab629 100644 --- a/mdoc_macro.c +++ b/mdoc_macro.c @@ -228,6 +228,7 @@ mdoc_endparse(struct roff_man *mdoc) /* Rewind to the first. */ rew_last(mdoc, mdoc->first); + mdoc_state_reset(mdoc); } /* @@ -262,25 +263,18 @@ lookup(struct roff_man *mdoc, int from, int line, int ppos, const char *p) static void rew_last(struct roff_man *mdoc, const struct roff_node *to) { - struct roff_node *np; if (to->flags & MDOC_VALID) return; while (mdoc->last != to) { - /* - * Save the parent here, because we may delete the - * mdoc->last node in the post-validation phase and reset - * it to mdoc->last->parent, causing a step in the closing - * out to be lost. - */ - np = mdoc->last->parent; - mdoc_valid_post(mdoc); - mdoc->last = np; - assert(mdoc->last); + mdoc_state(mdoc, mdoc->last); + mdoc->last->flags |= MDOC_VALID | MDOC_ENDED; + mdoc->last = mdoc->last->parent; } + mdoc_state(mdoc, mdoc->last); + mdoc->last->flags |= MDOC_VALID | MDOC_ENDED; mdoc->next = ROFF_NEXT_SIBLING; - mdoc_valid_post(mdoc); } /* |