]> git.cameronkatri.com Git - mandoc.git/commitdiff
LIBRARY can also occur in section 9.
authorKristaps Dzonsons <kristaps@bsd.lv>
Sat, 15 May 2010 16:24:37 +0000 (16:24 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Sat, 15 May 2010 16:24:37 +0000 (16:24 +0000)
All manual sections (unknown, 3p, 3f, etc.) correctly handled by -mdoc.
Useful warning printed if unknown manual section.
Checking for manual sections (e.g., LIBRARY) checks only first character, so 3p, 3f, etc. are free.

libmdoc.h
mdoc.7
mdoc.c
mdoc.h
mdoc.template
mdoc_action.c
mdoc_html.c
mdoc_term.c
mdoc_validate.c

index af18b8708935a90813c7add39afb35c7fd1d59db..f9e8cc943c176340cf557737ed3dcd72688a4a4f 100644 (file)
--- a/libmdoc.h
+++ b/libmdoc.h
@@ -1,4 +1,4 @@
-/*     $Id: libmdoc.h,v 1.46 2010/05/15 08:54:04 schwarze Exp $ */
+/*     $Id: libmdoc.h,v 1.47 2010/05/15 16:24:37 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -80,7 +80,7 @@ enum  merr {
        ENOLINE,
        EPROLOOO,
        EPROLREP,
-       EBADSEC,
+       EBADMSEC,
        EFONT,
        EBADDATE,
        ENUMFMT,
diff --git a/mdoc.7 b/mdoc.7
index d318dc42ad04ca90404f66b8874b37af931e77c2..f7bda9e3fa979623830a2745d3c08eb9cba0d38e 100644 (file)
--- a/mdoc.7
+++ b/mdoc.7
@@ -1,4 +1,4 @@
-.\"    $Id: mdoc.7,v 1.107 2010/05/15 07:01:51 kristaps Exp $
+.\"    $Id: mdoc.7,v 1.108 2010/05/15 16:24:37 kristaps Exp $
 .\"
 .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
 .\"
@@ -347,7 +347,7 @@ file:
 \&.Sh NAME
 \&.Nm foo
 \&.Nd a description goes here
-\&.\e\*q The next is for sections 2 & 3 only.
+\&.\e\*q The next is for sections 2, 3, & 9 only.
 \&.\e\*q .Sh LIBRARY
 \&.
 \&.Sh SYNOPSIS
@@ -409,7 +409,7 @@ and
 .Sx \&Nd .
 .It Em LIBRARY
 The name of the library containing the documented material, which is
-assumed to be a function in a section 2 or 3 manual.
+assumed to be a function in a section 2, 3, or 9 manual.
 The syntax for this is as follows:
 .Bd -literal -offset indent
 \&.Lb libarm
diff --git a/mdoc.c b/mdoc.c
index bc9ec4826a0dde311fa9cd7ce019e26a360f5c18..9ef84d58f7ba0dbafe2acba1088ac40bd01dfe72 100644 (file)
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,4 +1,4 @@
-/*     $Id: mdoc.c,v 1.132 2010/05/15 06:48:13 kristaps Exp $ */
+/*     $Id: mdoc.c,v 1.133 2010/05/15 16:24:37 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -68,7 +68,7 @@ const char *const __mdoc_merrnames[MERRMAX] = {
        "line arguments discouraged", /* ENOLINE */
        "prologue macro out of conventional order", /* EPROLOOO */
        "prologue macro repeated", /* EPROLREP */
-       "invalid section", /* EBADSEC */
+       "invalid manual section", /* EBADMSEC */
        "invalid font mode", /* EFONT */
        "invalid date syntax", /* EBADDATE */
        "invalid number format", /* ENUMFMT */
@@ -190,6 +190,8 @@ mdoc_free1(struct mdoc *mdoc)
                free(mdoc->meta.arch);
        if (mdoc->meta.vol)
                free(mdoc->meta.vol);
+       if (mdoc->meta.msec)
+               free(mdoc->meta.msec);
 }
 
 
diff --git a/mdoc.h b/mdoc.h
index 00cc5f6a830765de23ee273089cf89da74d177f2..0c9408bb399fa8ff1ddca7fe5870a9b72255412d 100644 (file)
--- a/mdoc.h
+++ b/mdoc.h
@@ -1,4 +1,4 @@
-/*     $Id: mdoc.h,v 1.78 2010/05/13 06:22:11 kristaps Exp $ */
+/*     $Id: mdoc.h,v 1.79 2010/05/15 16:24:38 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -223,7 +223,7 @@ enum        mdoc_sec {
 
 /* Information from prologue. */
 struct mdoc_meta {
-       int               msec;
+       char             *msec;
        char             *vol;
        char             *arch;
        time_t            date;
index f26a83e616c7b848f4c26f5079e3308c24c4bd51..1edac2ecd383efac8e3ec414e9a72eaae39f935e 100644 (file)
@@ -14,7 +14,7 @@
 .Sh NAME
 .Nm name
 .Nd short description
-.\" The next is for sections 2 & 3 only.
+.\" The next is for sections 2, 3, & 9 only.
 .\" .Sh LIBRARY
 .Sh SYNOPSIS
 .Sh DESCRIPTION
index af689d659fc912847bcd76eaf26a41e66c1bffcd..dcc07a9ef433dff952f561324f8276727b4c3627 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_action.c,v 1.57 2010/05/14 16:02:29 kristaps Exp $ */
+/*     $Id: mdoc_action.c,v 1.58 2010/05/15 16:24:38 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -446,17 +446,14 @@ post_sh(POST_ARGS)
        case (SEC_RETURN_VALUES):
                /* FALLTHROUGH */
        case (SEC_ERRORS):
-               switch (m->meta.msec) {
-               case (2):
-                       /* FALLTHROUGH */
-               case (3):
-                       /* FALLTHROUGH */
-               case (9):
+               assert(m->meta.msec);
+               if (*m->meta.msec == '2')
                        break;
-               default:
-                       return(mdoc_nwarn(m, n, EBADSEC));
-               }
-               break;
+               if (*m->meta.msec == '3')
+                       break;
+               if (*m->meta.msec == '9')
+                       break;
+               return(mdoc_nwarn(m, n, EWRONGMSEC));
        default:
                break;
        }
@@ -473,8 +470,6 @@ post_dt(POST_ARGS)
 {
        struct mdoc_node *nn;
        const char       *cp;
-       char             *ep;
-       long              lval;
 
        if (m->meta.title)
                free(m->meta.title);
@@ -484,16 +479,16 @@ post_dt(POST_ARGS)
                free(m->meta.arch);
 
        m->meta.title = m->meta.vol = m->meta.arch = NULL;
-       m->meta.msec = 0;
-
        /* Handles: `.Dt' 
         *   --> title = unknown, volume = local, msec = 0, arch = NULL
         */
 
        if (NULL == (nn = n->child)) {
                /* XXX: make these macro values. */
+               /* FIXME: warn about missing values. */
                m->meta.title = mandoc_strdup("unknown");
                m->meta.vol = mandoc_strdup("local");
+               m->meta.msec = mandoc_strdup("1");
                return(post_prol(m, n));
        }
 
@@ -504,8 +499,10 @@ post_dt(POST_ARGS)
        m->meta.title = mandoc_strdup(nn->string);
 
        if (NULL == (nn = nn->next)) {
+               /* FIXME: warn about missing msec. */
                /* XXX: make this a macro value. */
                m->meta.vol = mandoc_strdup("local");
+               m->meta.msec = mandoc_strdup("1");
                return(post_prol(m, n));
        }
 
@@ -518,13 +515,13 @@ post_dt(POST_ARGS)
 
        cp = mdoc_a2msec(nn->string);
        if (cp) {
-               /* FIXME: where is strtonum!? */
                m->meta.vol = mandoc_strdup(cp);
-               lval = strtol(nn->string, &ep, 10);
-               if (nn->string[0] != '\0' && *ep == '\0')
-                       m->meta.msec = (int)lval;
-       } else 
+               m->meta.msec = mandoc_strdup(nn->string);
+       } else if (mdoc_nwarn(m, n, EBADMSEC)) {
                m->meta.vol = mandoc_strdup(nn->string);
+               m->meta.msec = mandoc_strdup(nn->string);
+       } else
+               return(0);
 
        if (NULL == (nn = nn->next))
                return(post_prol(m, n));
@@ -541,6 +538,7 @@ post_dt(POST_ARGS)
                free(m->meta.vol);
                m->meta.vol = mandoc_strdup(cp);
        } else {
+               /* FIXME: warn about bad arch. */
                cp = mdoc_a2arch(nn->string);
                if (NULL == cp) {
                        free(m->meta.vol);
index 3f5d4ab6c34597bc5ca9d90dececaaa1e442eaba..5d6db95c929277aff687a2cb1526f442d2b4ddb9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_html.c,v 1.62 2010/05/13 06:22:11 kristaps Exp $ */
+/*     $Id: mdoc_html.c,v 1.63 2010/05/15 16:24:38 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -387,7 +387,7 @@ print_mdoc_head(MDOC_ARGS)
 
        print_gen_head(h);
        bufinit(h);
-       buffmt(h, "%s(%d)", m->title, m->msec);
+       buffmt(h, "%s(%s)", m->title, m->msec);
 
        if (m->arch) {
                bufcat(h, " (");
@@ -509,7 +509,7 @@ mdoc_root_pre(MDOC_ARGS)
        }
 
        (void)snprintf(title, BUFSIZ - 1, 
-                       "%s(%d)", m->title, m->msec);
+                       "%s(%s)", m->title, m->msec);
 
        /* XXX: see note in mdoc_root_post() about divs. */
 
index b3485ce0ac0665072902f3780f6664275b0c94e8..b0e3a68f3ac1e410d0ef2de636b24404f4014b7e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_term.c,v 1.123 2010/05/15 16:18:23 joerg Exp $ */
+/*     $Id: mdoc_term.c,v 1.124 2010/05/15 16:24:38 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -425,7 +425,7 @@ print_mdoc_head(DECL_ARGS)
                strlcat(buf, ")", BUFSIZ);
        }
 
-       snprintf(title, BUFSIZ, "%s(%d)", m->title, m->msec);
+       snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec);
 
        p->offset = 0;
        p->rmargin = (p->maxrmargin - strlen(buf) + 1) / 2;
index e5fdb4954f4f8e0c0d0dcd4932705252a6fbee5c..44d711852d944c2b11351307871e2511403670d5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_validate.c,v 1.77 2010/05/14 17:54:26 kristaps Exp $ */
+/*     $Id: mdoc_validate.c,v 1.78 2010/05/15 16:24:38 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -1240,20 +1240,19 @@ post_sh_head(POST_ARGS)
 
        /* 
         * Check particular section/manual conventions.  LIBRARY can
-        * only occur in msec 2, 3 (TODO: are there more of these?).
+        * only occur in manual section 2, 3, and 9.
         */
 
        switch (sec) {
        case (SEC_LIBRARY):
-               switch (mdoc->meta.msec) {
-               case (2):
-                       /* FALLTHROUGH */
-               case (3):
+               assert(mdoc->meta.msec);
+               if (*mdoc->meta.msec == '2')
                        break;
-               default:
-                       return(mdoc_nwarn(mdoc, mdoc->last, EWRONGMSEC));
-               }
-               break;
+               if (*mdoc->meta.msec == '3')
+                       break;
+               if (*mdoc->meta.msec == '9')
+                       break;
+               return(mdoc_nwarn(mdoc, mdoc->last, EWRONGMSEC));
        default:
                break;
        }