]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_strings.c
Back out OpenBSD special case (ok Ingo Schwarze).
[mandoc.git] / mdoc_strings.c
index e9e0b4094c4d6dda75625bdd3743179c5ef3e1b6..33f5da15f207b641954fb1457e6ffaa99c82351e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_strings.c,v 1.7 2009/06/17 10:53:32 kristaps Exp $ */
+/*     $Id: mdoc_strings.c,v 1.18 2010/05/09 21:06:50 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <sys/types.h>
 
 #include <assert.h>
 #include <sys/types.h>
 
 #include <assert.h>
-#include <ctype.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <time.h>
 
 #include "libmdoc.h"
 
 
 #include "libmdoc.h"
 
@@ -31,7 +35,7 @@ struct mdoc_secname {
        enum mdoc_sec    sec;   /* Corresponding section. */
 };
 
        enum mdoc_sec    sec;   /* Corresponding section. */
 };
 
-#define        SECNAME_MAX     (18)
+#define        SECNAME_MAX     (20)
 
 static const struct mdoc_secname secnames[SECNAME_MAX] = {
        { "NAME", SEC_NAME },
 
 static const struct mdoc_secname secnames[SECNAME_MAX] = {
        { "NAME", SEC_NAME },
@@ -39,6 +43,7 @@ static        const struct mdoc_secname secnames[SECNAME_MAX] = {
        { "SYNOPSIS", SEC_SYNOPSIS },
        { "DESCRIPTION", SEC_DESCRIPTION },
        { "IMPLEMENTATION NOTES", SEC_IMPLEMENTATION },
        { "SYNOPSIS", SEC_SYNOPSIS },
        { "DESCRIPTION", SEC_DESCRIPTION },
        { "IMPLEMENTATION NOTES", SEC_IMPLEMENTATION },
+       { "EXIT STATUS", SEC_EXIT_STATUS },
        { "RETURN VALUES", SEC_RETURN_VALUES },
        { "ENVIRONMENT", SEC_ENVIRONMENT },
        { "FILES", SEC_FILES },
        { "RETURN VALUES", SEC_RETURN_VALUES },
        { "ENVIRONMENT", SEC_ENVIRONMENT },
        { "FILES", SEC_FILES },
@@ -52,89 +57,14 @@ static      const struct mdoc_secname secnames[SECNAME_MAX] = {
        { "AUTHORS", SEC_AUTHORS },
        { "CAVEATS", SEC_CAVEATS },
        { "BUGS", SEC_BUGS },
        { "AUTHORS", SEC_AUTHORS },
        { "CAVEATS", SEC_CAVEATS },
        { "BUGS", SEC_BUGS },
+       { "SECURITY CONSIDERATIONS", SEC_SECURITY }
 };
 
 };
 
-#ifdef __linux__
-extern char            *strptime(const char *, const char *, struct tm *);
-#endif
-
-
-size_t
-mdoc_isescape(const char *p)
-{
-       size_t           c;
-       
-       if ('\\' != *p++)
-               return(0);
-
-       switch (*p) {
-       case ('\\'):
-               /* FALLTHROUGH */
-       case ('\''):
-               /* FALLTHROUGH */
-       case ('`'):
-               /* FALLTHROUGH */
-       case ('q'):
-               /* FALLTHROUGH */
-       case ('-'):
-               /* FALLTHROUGH */
-       case ('~'):
-               /* FALLTHROUGH */
-       case ('^'):
-               /* FALLTHROUGH */
-       case ('%'):
-               /* FALLTHROUGH */
-       case ('0'):
-               /* FALLTHROUGH */
-       case (' '):
-               /* FALLTHROUGH */
-       case ('|'):
-               /* FALLTHROUGH */
-       case ('&'):
-               /* FALLTHROUGH */
-       case ('.'):
-               /* FALLTHROUGH */
-       case (':'):
-               /* FALLTHROUGH */
-       case ('e'):
-               return(2);
-       case ('*'):
-               if (0 == *++p || ! isgraph((u_char)*p))
-                       return(0);
-               switch (*p) {
-               case ('('):
-                       if (0 == *++p || ! isgraph((u_char)*p))
-                               return(0);
-                       return(4);
-               case ('['):
-                       for (c = 3, p++; *p && ']' != *p; p++, c++)
-                               if ( ! isgraph((u_char)*p))
-                                       break;
-                       return(*p == ']' ? c : 0);
-               default:
-                       break;
-               }
-               return(3);
-       case ('('):
-               if (0 == *++p || ! isgraph((u_char)*p))
-                       return(0);
-               if (0 == *++p || ! isgraph((u_char)*p))
-                       return(0);
-               return(4);
-       case ('['):
-               break;
-       default:
-               return(0);
-       }
-
-       for (c = 3, p++; *p && ']' != *p; p++, c++)
-               if ( ! isgraph((u_char)*p))
-                       break;
-
-       return(*p == ']' ? c : 0);
-}
-
 
 
+/* 
+ * FIXME: this is repeated in print_text() (html.c) and term_word()
+ * (term.c).
+ */
 int
 mdoc_iscdelim(char p)
 {
 int
 mdoc_iscdelim(char p)
 {
@@ -142,6 +72,10 @@ mdoc_iscdelim(char p)
        switch (p) {
        case('|'):
                /* FALLTHROUGH */
        switch (p) {
        case('|'):
                /* FALLTHROUGH */
+       case('('):
+               /* FALLTHROUGH */
+       case('['):
+               return(1);
        case('.'):
                /* FALLTHROUGH */
        case(','):
        case('.'):
                /* FALLTHROUGH */
        case(','):
@@ -154,18 +88,10 @@ mdoc_iscdelim(char p)
                /* FALLTHROUGH */
        case('!'):
                /* FALLTHROUGH */
                /* FALLTHROUGH */
        case('!'):
                /* FALLTHROUGH */
-       case('('):
-               /* FALLTHROUGH */
        case(')'):
                /* FALLTHROUGH */
        case(')'):
                /* FALLTHROUGH */
-       case('['):
-               /* FALLTHROUGH */
        case(']'):
        case(']'):
-               /* FALLTHROUGH */
-       case('{'):
-               /* FALLTHROUGH */
-       case('}'):
-               return(1);
+               return(2);
        default:
                break;
        }
        default:
                break;
        }
@@ -178,11 +104,17 @@ int
 mdoc_isdelim(const char *p)
 {
 
 mdoc_isdelim(const char *p)
 {
 
-       if (0 == *p)
-               return(0);
-       if (0 != *(p + 1))
+       if ('\0' == p[0])
                return(0);
                return(0);
-       return(mdoc_iscdelim(*p));
+       if ('\0' == p[1])
+               return(mdoc_iscdelim(p[0]));
+
+       /*
+        * XXX; account for groff bubu where the \*(Ba reserved string
+        * is treated in exactly the same way as the vertical bar.  This
+        * is the only function that checks for this.
+        */
+       return(0 == strcmp(p, "\\*(Ba"));
 }
 
 
 }
 
 
@@ -199,30 +131,9 @@ mdoc_atosec(const char *p)
 }
 
 
 }
 
 
-time_t
-mdoc_atotime(const char *p)
-{
-       struct tm        tm;
-       char            *pp;
-
-       bzero(&tm, sizeof(struct tm));
-
-       if (0 == strcmp(p, "$" "Mdocdate$"))
-               return(time(NULL));
-       if ((pp = strptime(p, "$" "Mdocdate: %b %d %Y $", &tm)) && 0 == *pp)
-               return(mktime(&tm));
-       /* XXX - this matches "June 1999", which is wrong. */
-       if ((pp = strptime(p, "%b %d %Y", &tm)) && 0 == *pp)
-               return(mktime(&tm));
-       if ((pp = strptime(p, "%b %d, %Y", &tm)) && 0 == *pp)
-               return(mktime(&tm));
-
-       return(0);
-}
-
-
+/* FIXME: move this into an editable .in file. */
 size_t
 size_t
-mdoc_macro2len(int macro)
+mdoc_macro2len(enum mdoct macro)
 {
 
        switch (macro) {
 {
 
        switch (macro) {
@@ -255,7 +166,7 @@ mdoc_macro2len(int macro)
        case(MDOC_Em):
                return(10);
        case(MDOC_Er):
        case(MDOC_Em):
                return(10);
        case(MDOC_Er):
-               return(12);
+               return(17);
        case(MDOC_Ev):
                return(15);
        case(MDOC_Fa):
        case(MDOC_Ev):
                return(15);
        case(MDOC_Fa):