diff options
Diffstat (limited to 'mdoc_macro.c')
-rw-r--r-- | mdoc_macro.c | 96 |
1 files changed, 44 insertions, 52 deletions
diff --git a/mdoc_macro.c b/mdoc_macro.c index d4c69084..0ba08d7b 100644 --- a/mdoc_macro.c +++ b/mdoc_macro.c @@ -62,9 +62,8 @@ static int phrase(struct mdoc *, int, int, char *); static enum mdoct rew_alt(enum mdoct); static enum rew rew_dohalt(enum mdoct, enum mdoc_type, const struct mdoc_node *); -static int rew_elem(struct mdoc *, enum mdoct); -static int rew_last(struct mdoc *, - const struct mdoc_node *); +static void rew_elem(struct mdoc *, enum mdoct); +static void rew_last(struct mdoc *, const struct mdoc_node *); static int rew_sub(enum mdoc_type, struct mdoc *, enum mdoct, int, int); @@ -238,7 +237,8 @@ mdoc_macroend(struct mdoc *mdoc) /* Rewind to the first. */ - return(rew_last(mdoc, mdoc->first)); + rew_last(mdoc, mdoc->first); + return(1); } /* @@ -268,15 +268,13 @@ lookup_raw(const char *p) return(MDOC_MAX); } -static int +static void rew_last(struct mdoc *mdoc, const struct mdoc_node *to) { struct mdoc_node *n, *np; assert(to); mdoc->next = MDOC_NEXT_SIBLING; - - while (mdoc->last != to) { /* * Save the parent here, because we may delete the @@ -285,15 +283,13 @@ rew_last(struct mdoc *mdoc, const struct mdoc_node *to) * out to be lost. */ np = mdoc->last->parent; - if ( ! mdoc_valid_post(mdoc)) - return(0); + mdoc_valid_post(mdoc); n = mdoc->last; mdoc->last = np; assert(mdoc->last); mdoc->last->last = n; } - - return(mdoc_valid_post(mdoc)); + mdoc_valid_post(mdoc); } /* @@ -455,7 +451,7 @@ rew_dohalt(enum mdoct tok, enum mdoc_type type, REWIND_FORCE : REWIND_LATER); } -static int +static void rew_elem(struct mdoc *mdoc, enum mdoct tok) { struct mdoc_node *n; @@ -465,8 +461,7 @@ rew_elem(struct mdoc *mdoc, enum mdoct tok) n = n->parent; assert(MDOC_ELEM == n->type); assert(tok == n->tok); - - return(rew_last(mdoc, n)); + rew_last(mdoc, n); } /* @@ -587,16 +582,14 @@ rew_sub(enum mdoc_type t, struct mdoc *mdoc, } assert(n); - if ( ! rew_last(mdoc, n)) - return(0); + rew_last(mdoc, n); /* * The current block extends an enclosing block. * Now that the current block ends, close the enclosing block, too. */ while (NULL != (n = n->pending)) { - if ( ! rew_last(mdoc, n)) - return(0); + rew_last(mdoc, n); if (MDOC_HEAD == n->type && ! mdoc_body_alloc(mdoc, n->line, n->pos, n->tok)) return(0); @@ -801,8 +794,7 @@ blk_exp_close(MACRO_PROT_ARGS) if ( ! mdoc_elem_alloc(mdoc, line, ppos, MDOC_br, NULL)) return(0); - if ( ! rew_elem(mdoc, MDOC_br)) - return(0); + rew_elem(mdoc, MDOC_br); } else if ( ! mdoc_tail_alloc(mdoc, line, ppos, atok)) return(0); } @@ -812,8 +804,9 @@ blk_exp_close(MACRO_PROT_ARGS) lastarg = *pos; if (j == maxargs && ! flushed) { - if ( ! (endbody != NULL ? rew_last(mdoc, endbody) : - rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos))) + if (endbody != NULL) + rew_last(mdoc, endbody); + else if ( ! rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos)) return(0); flushed = 1; } @@ -837,8 +830,9 @@ blk_exp_close(MACRO_PROT_ARGS) } if ( ! flushed) { - if ( ! (endbody != NULL ? rew_last(mdoc, endbody) : - rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos))) + if (endbody != NULL) + rew_last(mdoc, endbody); + else if ( ! rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos)) return(0); flushed = 1; } @@ -850,9 +844,12 @@ blk_exp_close(MACRO_PROT_ARGS) break; } - if ( ! flushed && ! (endbody != NULL ? rew_last(mdoc, endbody) : - rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos))) - return(0); + if ( ! flushed) { + if (endbody != NULL) + rew_last(mdoc, endbody); + else if ( ! rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos)) + return(0); + } if ( ! nl) return(1); @@ -959,14 +956,13 @@ in_line(MACRO_PROT_ARGS) */ if (MDOC_MAX != ntok) { - if (scope && ! rew_elem(mdoc, tok)) - return(0); + if (scope) + rew_elem(mdoc, tok); if (nc && 0 == cnt) { if ( ! mdoc_elem_alloc(mdoc, line, ppos, tok, arg)) return(0); - if ( ! rew_last(mdoc, mdoc->last)) - return(0); + rew_last(mdoc, mdoc->last); } else if ( ! nc && 0 == cnt) { mdoc_argv_free(arg); mandoc_msg(MANDOCERR_MACRO_EMPTY, @@ -1011,8 +1007,8 @@ in_line(MACRO_PROT_ARGS) * Close out our scope, if one is open, before * any punctuation. */ - if (scope && ! rew_elem(mdoc, tok)) - return(0); + if (scope) + rew_elem(mdoc, tok); scope = 0; if (tok == MDOC_Fn) mayopen = 0; @@ -1042,14 +1038,13 @@ in_line(MACRO_PROT_ARGS) * having to parse out spaces. */ if (scope && MDOC_Fl == tok) { - if ( ! rew_elem(mdoc, tok)) - return(0); + rew_elem(mdoc, tok); scope = 0; } } - if (scope && ! rew_elem(mdoc, tok)) - return(0); + if (scope) + rew_elem(mdoc, tok); /* * If no elements have been collected and we're allowed to have @@ -1060,8 +1055,7 @@ in_line(MACRO_PROT_ARGS) if (nc && 0 == cnt) { if ( ! mdoc_elem_alloc(mdoc, line, ppos, tok, arg)) return(0); - if ( ! rew_last(mdoc, mdoc->last)) - return(0); + rew_last(mdoc, mdoc->last); } else if ( ! nc && 0 == cnt) { mdoc_argv_free(arg); mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, @@ -1102,7 +1096,8 @@ blk_full(MACRO_PROT_ARGS) if ( ! mdoc_elem_alloc(mdoc, line, ppos, MDOC_br, NULL)) return(0); - return(rew_elem(mdoc, MDOC_br)); + rew_elem(mdoc, MDOC_br); + return(1); } } @@ -1643,16 +1638,15 @@ in_line_argn(MACRO_PROT_ARGS) return(0); if (j == maxargs && ! flushed) { - if ( ! rew_elem(mdoc, tok)) - return(0); + rew_elem(mdoc, tok); flushed = 1; } ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p); if (MDOC_MAX != ntok) { - if ( ! flushed && ! rew_elem(mdoc, tok)) - return(0); + if ( ! flushed) + rew_elem(mdoc, tok); flushed = 1; if ( ! mdoc_macro(mdoc, ntok, line, la, pos, buf)) return(0); @@ -1664,8 +1658,7 @@ in_line_argn(MACRO_PROT_ARGS) ARGS_QWORD != ac && ! flushed && DELIM_NONE != mdoc_isdelim(p)) { - if ( ! rew_elem(mdoc, tok)) - return(0); + rew_elem(mdoc, tok); flushed = 1; } @@ -1680,8 +1673,8 @@ in_line_argn(MACRO_PROT_ARGS) /* Close out in a consistent state. */ - if ( ! flushed && ! rew_elem(mdoc, tok)) - return(0); + if ( ! flushed) + rew_elem(mdoc, tok); if ( ! nl) return(1); return(append_delims(mdoc, line, pos, buf)); @@ -1745,15 +1738,14 @@ in_line_eoln(MACRO_PROT_ARGS) return(0); continue; } - - if ( ! rew_elem(mdoc, tok)) - return(0); + rew_elem(mdoc, tok); return(mdoc_macro(mdoc, ntok, line, la, pos, buf)); } /* Close out (no delimiters). */ - return(rew_elem(mdoc, tok)); + rew_elem(mdoc, tok); + return(1); } static int |