]> git.cameronkatri.com Git - mandoc.git/commitdiff
Even on macro lines, \} must not cause whitespace.
authorIngo Schwarze <schwarze@openbsd.org>
Fri, 7 Mar 2014 18:30:11 +0000 (18:30 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Fri, 7 Mar 2014 18:30:11 +0000 (18:30 +0000)
roff.c

diff --git a/roff.c b/roff.c
index 0772d8ab9d28287cea7652ed40d8fbd7cfc4cda8..9cf39dbfb736d370f3bf5145e1d7d8c10e945e07 100644 (file)
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/*     $Id: roff.c,v 1.195 2014/03/07 02:22:05 schwarze Exp $ */
+/*     $Id: roff.c,v 1.196 2014/03/07 18:30:11 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -1070,25 +1070,21 @@ roff_cond_sub(ROFF_ARGS)
                                        ln, ppos, pos, offs));
        }
 
+       /*
+        * If `\}' occurs on a macro line without a preceding macro,
+        * drop the line completely.
+        */
+
+       ep = *bufp + pos;
+       if ('\\' == ep[0] && '}' == ep[1])
+               rr = ROFFRULE_DENY;
+
        /* Always check for the closing delimiter `\}'. */
 
-       ep = &(*bufp)[pos];
        while (NULL != (ep = strchr(ep, '\\'))) {
                if ('}' != *(++ep))
                        continue;
-
-               /*
-                * If we're at the end of line, then just chop
-                * off the \} and resize the buffer.
-                * If we aren't, then convert it to spaces.
-                */
-
-               if ('\0' == *(ep + 1)) {
-                       *--ep = '\0';
-                       *szp -= 2;
-               } else
-                       *(ep - 1) = *ep = ' ';
-
+               *ep = '&';
                roff_ccond(r, ln, pos);
        }
        return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);