]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandoc.c
Clarified EXIT STATUS sections. Discussed among schwarze@, Thomas, and
[mandoc.git] / mandoc.c
index 41d4196ace16e34edae0df83e01d234054d2886a..5598ca810f72dee8f98797c86560ef0181b2ed57 100644 (file)
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/*     $Id: mandoc.c,v 1.31 2010/08/24 13:07:01 kristaps Exp $ */
+/*     $Id: mandoc.c,v 1.34 2010/08/29 11:28:09 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -59,8 +59,6 @@ mandoc_special(char *p)
                /* FALLTHROUGH */
        case ('R'):
                /* FALLTHROUGH */
-       case ('o'):
-               /* FALLTHROUGH */
        case ('N'):
                /* FALLTHROUGH */
        case ('l'):
@@ -128,6 +126,27 @@ mandoc_special(char *p)
                        p++;
                } 
                
+               /* Handle embedded numerical subexp or escape. */
+
+               if ('(' == *p) {
+                       while (*p && ')' != *p)
+                               if ('\\' == *p++) {
+                                       i = mandoc_special(--p);
+                                       if (0 == i)
+                                               return(0);
+                                       p += i;
+                               }
+
+                       if (')' == *p++)
+                               break;
+
+                       return(0);
+               } else if ('\\' == *p) {
+                       if (0 == (i = mandoc_special(p)))
+                               return(0);
+                       p += i;
+               }
+
                break;
 #if 0
        case ('Y'):
@@ -138,9 +157,9 @@ mandoc_special(char *p)
                /* FALLTHROUGH */
        case ('n'):
                /* FALLTHROUGH */
+#endif
        case ('k'):
                /* FALLTHROUGH */
-#endif
        case ('M'):
                /* FALLTHROUGH */
        case ('m'):
@@ -172,10 +191,14 @@ mandoc_special(char *p)
        case ('z'):
                len = 1;
                if ('\\' == *p) {
-                       p += mandoc_special(p);
+                       if (0 == (i = mandoc_special(p)))
+                               return(0);
+                       p += i;
                        return(*p ? (int)(p - sv) : 0);
                }
                break;
+       case ('o'):
+               /* FALLTHROUGH */
        case ('w'):
                if ('\'' == *p++) {
                        term = '\'';