summaryrefslogtreecommitdiffstats
path: root/mdoc_macro.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdoc_macro.c')
-rw-r--r--mdoc_macro.c96
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