]> git.cameronkatri.com Git - mandoc.git/commitdiff
Migrate `Nm' and `Pa' handling from mdoc_action.c into mdoc_validate.c.
authorKristaps Dzonsons <kristaps@bsd.lv>
Mon, 29 Nov 2010 16:06:46 +0000 (16:06 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Mon, 29 Nov 2010 16:06:46 +0000 (16:06 +0000)
Document that `Pa' is replaced by a tilde, just like `Mt'.

mdoc.7
mdoc_action.c
mdoc_validate.c

diff --git a/mdoc.7 b/mdoc.7
index 867fdc42cb9b12c3c2c38cdd7af7c0d1c59fc6cd..cb80992d2d29a4a6d24f800748597ec995bf1647 100644 (file)
--- a/mdoc.7
+++ b/mdoc.7
@@ -1,4 +1,4 @@
-.\"    $Id: mdoc.7,v 1.164 2010/11/29 13:02:47 kristaps Exp $
+.\"    $Id: mdoc.7,v 1.165 2010/11/29 16:06:46 kristaps Exp $
 .\"
 .\" Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
 .\" Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
 .\"
 .\" Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
 .\" Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -2308,6 +2308,9 @@ and
 .Sx \&Ux .
 .Ss \&Pa
 A file-system path.
 .Sx \&Ux .
 .Ss \&Pa
 A file-system path.
+If an argument is not provided, the string
+.Dq \(ti
+is used as a default.
 .Pp
 Examples:
 .D1 \&.Pa /usr/bin/mandoc
 .Pp
 Examples:
 .D1 \&.Pa /usr/bin/mandoc
index d7d03ea962cc89c3fdfe1282b7a55666d6a45677..4bd8203a6b9c73043cf8d2e3eaa1937435a463a4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_action.c,v 1.84 2010/11/29 15:45:15 kristaps Exp $ */
+/*     $Id: mdoc_action.c,v 1.85 2010/11/29 16:06:46 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -57,9 +57,7 @@ static        int       post_bl_tagwidth(POST_ARGS);
 static int       post_bl_width(POST_ARGS);
 static int       post_dd(POST_ARGS);
 static int       post_dt(POST_ARGS);
 static int       post_bl_width(POST_ARGS);
 static int       post_dd(POST_ARGS);
 static int       post_dt(POST_ARGS);
-static int       post_nm(POST_ARGS);
 static int       post_os(POST_ARGS);
 static int       post_os(POST_ARGS);
-static int       post_pa(POST_ARGS);
 static int       post_prol(POST_ARGS);
 static int       post_std(POST_ARGS);
 
 static int       post_prol(POST_ARGS);
 static int       post_std(POST_ARGS);
 
@@ -96,10 +94,10 @@ static      const struct actions mdoc_actions[MDOC_MAX] = {
        { NULL, NULL }, /* In */ 
        { NULL, NULL }, /* Li */
        { NULL, NULL }, /* Nd */ 
        { NULL, NULL }, /* In */ 
        { NULL, NULL }, /* Li */
        { NULL, NULL }, /* Nd */ 
-       { NULL, post_nm }, /* Nm */ 
+       { NULL, NULL }, /* Nm */ 
        { NULL, NULL }, /* Op */
        { NULL, NULL }, /* Ot */
        { NULL, NULL }, /* Op */
        { NULL, NULL }, /* Ot */
-       { NULL, post_pa }, /* Pa */
+       { NULL, NULL }, /* Pa */
        { NULL, post_std }, /* Rv */
        { NULL, NULL }, /* St */
        { NULL, NULL }, /* Va */
        { NULL, post_std }, /* Rv */
        { NULL, NULL }, /* St */
        { NULL, NULL }, /* Va */
@@ -288,24 +286,6 @@ post_std(POST_ARGS)
        return(1);
 }
 
        return(1);
 }
 
-
-/*
- * The `Nm' macro's first use sets the name of the document.  See also
- * post_std(), etc.
- */
-static int
-post_nm(POST_ARGS)
-{
-       char             buf[BUFSIZ];
-
-       if (m->meta.name)
-               return(1);
-       if ( ! concat(m, buf, n->child, BUFSIZ))
-               return(0);
-       m->meta.name = mandoc_strdup(buf);
-       return(1);
-}
-
 /*
  * Parse out the contents of `Dt'.  See in-line documentation for how we
  * handle the various fields of this macro.
 /*
  * Parse out the contents of `Dt'.  See in-line documentation for how we
  * handle the various fields of this macro.
@@ -653,28 +633,6 @@ post_bl(POST_ARGS)
        return(1);
 }
 
        return(1);
 }
 
-
-/*
- * The `Pa' macro defaults to a tilde if no value is provided as an
- * argument.
- */
-static int
-post_pa(POST_ARGS)
-{
-       struct mdoc_node *np;
-
-       if (n->child)
-               return(1);
-       
-       np = n;
-       m->next = MDOC_NEXT_CHILD;
-       if ( ! mdoc_word_alloc(m, n->line, n->pos, "~"))
-               return(0);
-       m->last = np;
-       return(1);
-}
-
-
 /*
  * Parse the date field in `Dd'.
  */
 /*
  * Parse the date field in `Dd'.
  */
index d2ef944af0f5bd1521203bea6dcd603ab41075c4..be4d747c6b3ac74066b9bc26a5a8f5baae1efeca 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_validate.c,v 1.128 2010/11/29 15:45:15 kristaps Exp $ */
+/*     $Id: mdoc_validate.c,v 1.129 2010/11/29 16:06:46 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -193,7 +193,7 @@ const       struct valids mdoc_valids[MDOC_MAX] = {
        { NULL, posts_nm },                     /* Nm */
        { NULL, posts_wline },                  /* Op */
        { NULL, NULL },                         /* Ot */
        { NULL, posts_nm },                     /* Nm */
        { NULL, posts_wline },                  /* Op */
        { NULL, NULL },                         /* Ot */
-       { NULL, NULL },                         /* Pa */
+       { NULL, posts_defaults },               /* Pa */
        { pres_rv, NULL },                      /* Rv */
        { NULL, posts_st },                     /* St */ 
        { NULL, NULL },                         /* Va */
        { pres_rv, NULL },                      /* Rv */
        { NULL, posts_st },                     /* St */ 
        { NULL, NULL },                         /* Va */
@@ -1154,12 +1154,41 @@ post_vt(POST_ARGS)
 static int
 post_nm(POST_ARGS)
 {
 static int
 post_nm(POST_ARGS)
 {
+       struct mdoc_node *nn;
+       char              buf[BUFSIZ];
 
 
-       if (mdoc->last->child)
+       /* If no child specified, make sure we have the meta name. */
+
+       if (NULL == mdoc->last->child && NULL == mdoc->meta.name) {
+               mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NONAME);
                return(1);
                return(1);
-       if (mdoc->meta.name)
+       } else if (mdoc->meta.name)
                return(1);
                return(1);
-       return(mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NONAME));
+
+       /* If no meta name, set it from the child. */
+
+       buf[0] = '\0';
+
+       for (nn = mdoc->last->child; nn; nn = nn->next) {
+               /* XXX - copied from concat(). */
+               assert(MDOC_TEXT == nn->type);
+
+               if (strlcat(buf, nn->string, BUFSIZ) >= BUFSIZ) {
+                       mdoc_nmsg(mdoc, nn, MANDOCERR_MEM);
+                       return(0);
+               }
+
+               if (NULL == nn->next)
+                       continue;
+
+               if (strlcat(buf, " ", BUFSIZ) >= BUFSIZ) {
+                       mdoc_nmsg(mdoc, nn, MANDOCERR_MEM);
+                       return(0);
+               }
+       }
+
+       mdoc->meta.name = mandoc_strdup(buf);
+       return(1);
 }
 
 static int
 }
 
 static int
@@ -1186,8 +1215,8 @@ post_defaults(POST_ARGS)
 
        /*
         * The `Ar' defaults to "file ..." if no value is provided as an
 
        /*
         * The `Ar' defaults to "file ..." if no value is provided as an
-        * argument; the `Mt' macro uses "~"; the `Li' just gets an
-        * empty string.
+        * argument; the `Mt' and `Pa' macros use "~"; the `Li' just
+        * gets an empty string.
         */
 
        if (mdoc->last->child)
         */
 
        if (mdoc->last->child)
@@ -1213,6 +1242,8 @@ post_defaults(POST_ARGS)
                if ( ! mdoc_word_alloc(mdoc, nn->line, nn->pos, ""))
                        return(0);
                break;
                if ( ! mdoc_word_alloc(mdoc, nn->line, nn->pos, ""))
                        return(0);
                break;
+       case (MDOC_Pa):
+               /* FALLTHROUGH */
        case (MDOC_Mt):
                if ( ! mdoc_word_alloc(mdoc, nn->line, nn->pos, "~"))
                        return(0);
        case (MDOC_Mt):
                if ( ! mdoc_word_alloc(mdoc, nn->line, nn->pos, "~"))
                        return(0);