]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_macro.c
If we have to reparse the text line because we spring an input line trap,
[mandoc.git] / mdoc_macro.c
index 3e5667de5aa325b1b82c5fc1cd4ff75200668a9b..04ea94238df96a4721a41ee497d6a686e91dda17 100644 (file)
@@ -1,4 +1,4 @@
-/*     $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>
@@ -258,12 +258,11 @@ 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 *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
@@ -273,11 +272,10 @@ rew_last(struct roff_man *mdoc, const struct roff_node *to)
                 */
                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);
 }
 
@@ -644,6 +642,8 @@ blk_exp_close(MACRO_PROT_ARGS)
        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:
@@ -671,6 +671,8 @@ blk_exp_close(MACRO_PROT_ARGS)
 
        if (endbody != NULL)
                n = endbody;
+
+       ntok = TOKEN_NONE;
        for (j = 0; ; j++) {
                lastarg = *pos;
 
@@ -698,7 +700,7 @@ blk_exp_close(MACRO_PROT_ARGS)
        }
 
        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;
@@ -1395,7 +1397,7 @@ in_line_eoln(MACRO_PROT_ARGS)
                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' &&