-/* $Id: mdoc_macro.c,v 1.195 2015/04/23 15:35:59 schwarze Exp $ */
+/* $Id: mdoc_macro.c,v 1.200 2015/05/01 16:58:33 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
static void
rew_last(struct roff_man *mdoc, const struct roff_node *to)
{
- struct roff_node *n, *np;
+ struct roff_node *np;
if (to->flags & MDOC_VALID)
return;
- mdoc->next = ROFF_NEXT_SIBLING;
while (mdoc->last != to) {
/*
* Save the parent here, because we may delete the
*/
np = mdoc->last->parent;
mdoc_valid_post(mdoc);
- n = mdoc->last;
mdoc->last = np;
assert(mdoc->last);
- mdoc->last->last = n;
}
+ mdoc->next = ROFF_NEXT_SIBLING;
mdoc_valid_post(mdoc);
}
if (body == NULL) {
mandoc_msg(MANDOCERR_BLK_NOTOPEN, mdoc->parse,
line, ppos, mdoc_macronames[tok]);
+ if (later != NULL)
+ later->flags &= ~MDOC_BROKEN;
if (maxargs && endbody == NULL) {
/*
* Stray .Ec without previous .Eo:
if (endbody != NULL)
n = endbody;
+
+ ntok = TOKEN_NONE;
for (j = 0; ; j++) {
lastarg = *pos;
}
if (n != NULL) {
- if (n != mdoc->last && n->flags & MDOC_BROKEN) {
+ if (ntok != TOKEN_NONE && n->flags & MDOC_BROKEN) {
target = n;
do
target = target->parent;
if (mdoc->next == ROFF_NEXT_SIBLING)
n = n->parent;
if (n->tok == MDOC_Nm)
- rew_last(mdoc, mdoc->last->parent);
+ rew_last(mdoc, n->parent);
}
if (buf[*pos] == '\0' &&