]> git.cameronkatri.com Git - mandoc.git/blobdiff - man.c
Final (?) fix to issue pointed out by Sascha Wildner: roff instructions clobbering...
[mandoc.git] / man.c
diff --git a/man.c b/man.c
index 1d258836eaee191b1f9d81afe1fcdd9bfa582132..b1853d1a08d6acb7ae85e4d28620bacc82cb8584 100644 (file)
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/*     $Id: man.c,v 1.58 2010/03/29 04:52:14 kristaps Exp $ */
+/*     $Id: man.c,v 1.59 2010/03/29 10:10:35 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -485,9 +485,6 @@ man_pmacro(struct man *m, int ln, char *buf)
 
        /* Comments and empties are quickly ignored. */
 
-       if (MAN_BLINE & m->flags)
-               m->flags |= MAN_BPLINE;
-
        if ('\0' == buf[1])
                return(1);
 
@@ -555,6 +552,9 @@ man_pmacro(struct man *m, int ln, char *buf)
         * Remove prior ELINE macro, as it's being clobbering by a new
         * macro.  Note that NSCOPED macros do not close out ELINE
         * macros---they don't print text---so we let those slip by.
+        * NOTE: we don't allow roff blocks (NOCLOSE) to be embedded
+        * here because that would stipulate blocks as children of
+        * elements!
         */
 
        if ( ! (MAN_NSCOPED & man_macros[tok].flags) &&
@@ -586,10 +586,18 @@ man_pmacro(struct man *m, int ln, char *buf)
                m->flags &= ~MAN_ELINE;
        }
 
-       /* Begin recursive parse sequence. */
+       /*
+        * Save the fact that we're in the next-line for a block.  In
+        * this way, embedded roff instructions can "remember" state
+        * when they exit.
+        */
+
+       if (MAN_BLINE & m->flags)
+               m->flags |= MAN_BPLINE;
 
-       assert(man_macros[tok].fp);
+       /* Call to handler... */
 
+       assert(man_macros[tok].fp);
        if ( ! (*man_macros[tok].fp)(m, tok, ln, ppos, &i, buf))
                goto err;
 
@@ -597,9 +605,6 @@ out:
        /* 
         * We weren't in a block-line scope when entering the
         * above-parsed macro, so return.
-        *
-        * FIXME: this prohibits the nesting of blocks (e.g., `de' and
-        * family) within BLINE or ELINE systems.  This is annoying.
         */
 
        if ( ! (MAN_BPLINE & m->flags)) {