]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandoc.c
Re-admit the simple case of `.ig' that works with groff's stranger invocations.
[mandoc.git] / mandoc.c
index 5eefbbf41c4e4fc07b37e9573e87aa856d71657d..3ade07877ac1153edd0d083c674688bb074f0771 100644 (file)
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/*     $Id: mandoc.c,v 1.8 2009/11/05 10:16:01 kristaps Exp $ */
+/*     $Id: mandoc.c,v 1.15 2010/05/15 07:01:51 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -14,8 +14,8 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-#if defined(__linux__) || defined(__MINT__)
-# define _GNU_SOURCE /* strptime() */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
 #endif
 
 #include <sys/types.h>
@@ -43,8 +43,6 @@ mandoc_special(const char *p)
                return(0);
 
        switch (*p) {
-       case ('\\'):
-               /* FALLTHROUGH */
        case ('\''):
                /* FALLTHROUGH */
        case ('`'):
@@ -75,10 +73,6 @@ mandoc_special(const char *p)
                return(2);
        case ('e'):
                return(2);
-       case ('f'):
-               if ('\0' == *++p || ! isgraph((u_char)*p))
-                       return(0);
-               return(3);
        case ('s'):
                if ('\0' == *++p)
                        return(2);
@@ -154,6 +148,10 @@ mandoc_special(const char *p)
                }
 
                return(c);
+       case ('f'):
+               /* FALLTHROUGH */
+       case ('F'):
+               /* FALLTHROUGH */
        case ('*'):
                if (0 == *++p || ! isgraph((u_char)*p))
                        return(0);
@@ -302,3 +300,43 @@ mandoc_a2time(int flags, const char *p)
        return(0);
 }
 
+
+int
+mandoc_eos(const char *p, size_t sz)
+{
+
+       if (0 == sz)
+               return(0);
+
+       /*
+        * End-of-sentence recognition must include situations where
+        * some symbols, such as `)', allow prior EOS punctuation to
+        * propogate outward.
+        */
+
+       for ( ; sz; sz--) {
+               switch (p[(int)sz - 1]) {
+               case ('\"'):
+                       /* FALLTHROUGH */
+               case ('\''):
+                       /* FALLTHROUGH */
+               case (']'):
+                       /* FALLTHROUGH */
+               case (')'):
+                       break;
+               case ('.'):
+                       /* Escaped periods. */
+                       if (sz > 1 && '\\' == p[(int)sz - 2])
+                               return(0);
+                       /* FALLTHROUGH */
+               case ('!'):
+                       /* FALLTHROUGH */
+               case ('?'):
+                       return(1);
+               default:
+                       return(0);
+               }
+       }
+
+       return(0);
+}