]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_macro.c
For some options that are rarely needed in apropos(1) and man(1),
[mandoc.git] / mdoc_macro.c
index a7ec6739721c9803d32729d9ab8f1f064dd14fa0..5ab9c412587bba708429013644c341193232db5b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_macro.c,v 1.216 2017/02/16 03:00:23 schwarze Exp $ */
+/*     $Id: mdoc_macro.c,v 1.217 2017/02/16 09:47:31 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -381,6 +381,10 @@ rew_elem(struct roff_man *mdoc, int tok)
 static void
 break_intermediate(struct roff_node *n, struct roff_node *breaker)
 {
+       if (n != breaker &&
+           n->type != ROFFT_BLOCK && n->type != ROFFT_HEAD &&
+           (n->type != ROFFT_BODY || n->end != ENDBODY_NOT))
+               n = n->parent;
        while (n != breaker) {
                if ( ! (n->flags & NODE_VALID))
                        n->flags |= NODE_BROKEN;
@@ -410,8 +414,7 @@ find_pending(struct roff_man *mdoc, int tok, int line, int ppos,
                if (n->type == ROFFT_BLOCK &&
                    mdoc_macros[n->tok].flags & MDOC_EXPLICIT) {
                        irc = 1;
-                       break_intermediate(mdoc->last, n);
-                       n->flags |= NODE_BROKEN;
+                       break_intermediate(mdoc->last, target);
                        if (target->type == ROFFT_HEAD)
                                target->flags |= NODE_ENDED;
                        else if ( ! (target->flags & NODE_ENDED)) {