]> git.cameronkatri.com Git - mandoc.git/commitdiff
provide a STYLE message when mandoc knows the file name and the extension
authorIngo Schwarze <schwarze@openbsd.org>
Fri, 24 Apr 2020 12:02:33 +0000 (12:02 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Fri, 24 Apr 2020 12:02:33 +0000 (12:02 +0000)
disagrees with the section number given in the .Dt or .TH macro;
feature suggested and patch tested by jmc@

man_validate.c
mandoc.1
mandoc.h
mandoc_msg.c
mdoc_validate.c
read.c
roff_int.h

index 84fc442429831dcd50c467c3d407dff156d11bbf..2069fadc55131c20068c8327ef6e07f98c71b08d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: man_validate.c,v 1.153 2020/04/18 20:40:10 schwarze Exp $ */
+/* $Id: man_validate.c,v 1.154 2020/04/24 12:02:33 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2012-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -510,9 +510,14 @@ post_TH(CHKARGS)
 
        if (n != NULL)
                n = n->next;
-       if (n != NULL && n->string != NULL)
+       if (n != NULL && n->string != NULL) {
                man->meta.msec = mandoc_strdup(n->string);
-       else {
+               if (man->filesec != '\0' &&
+                   man->filesec != *n->string &&
+                   *n->string >= '1' && *n->string <= '9')
+                       mandoc_msg(MANDOCERR_MSEC_FILE, n->line, n->pos,
+                           "*.%c vs TH ... %c", man->filesec, *n->string);
+       } else {
                man->meta.msec = mandoc_strdup("");
                mandoc_msg(MANDOCERR_MSEC_MISSING,
                    nb->line, nb->pos, "TH %s", man->meta.title);
index da1da14068d02bd73fb74b0f899ab85caf3e8e7f..883f12af78df2ea5235ac28bb648d217e9f48b9e 100644 (file)
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,7 +1,7 @@
-.\"    $Id: mandoc.1,v 1.242 2020/02/15 15:28:13 schwarze Exp $
+.\" $OpenBSD: mandoc.1,v 1.166 2020/02/15 15:28:01 schwarze Exp $
 .\"
-.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 .\" Copyright (c) 2012, 2014-2020 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 .\"
 .\" Permission to use, copy, modify, and distribute this software for any
 .\" purpose with or without fee is hereby granted, provided that the above
@@ -15,7 +15,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: February 15 2020 $
+.Dd $Mdocdate: April 24 2020 $
 .Dt MANDOC 1
 .Os
 .Sh NAME
@@ -1078,6 +1078,20 @@ macro lacks the mandatory section argument.
 The section number in a
 .Ic \&Dt
 line is invalid, but still used.
+.It Sy "filename/section mismatch"
+.Pq mdoc , man
+The name of the input file being processed is known and its file
+name extension starts with a non-zero digit, but the
+.Ic \&Dt
+or
+.Ic \&TH
+macro contains a
+.Ar section
+argument that starts with a different non-zero digit.
+The
+.Ar section
+argument is used as provided anyway.
+Consider checking whether the file name or the argument need a correction.
 .It Sy "missing date, using \(dq\(dq"
 .Pq mdoc, man
 The document was parsed as
index d37b964009256418742f128d1af538dd081f6c2b..1c00bf437b3d763e967ab7110b68f67e0462b824 100644 (file)
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.267 2020/04/03 11:35:01 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.268 2020/04/24 12:02:33 schwarze Exp $ */
 /*
  * Copyright (c) 2012-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -84,6 +84,7 @@ enum  mandocerr {
        MANDOCERR_TH_NOTITLE, /* missing manual title, using "": [macro] */
        MANDOCERR_MSEC_MISSING, /* missing manual section, using "": macro */
        MANDOCERR_MSEC_BAD, /* unknown manual section: Dt ... section */
+       MANDOCERR_MSEC_FILE, /* filename/section mismatch: ... */
        MANDOCERR_DATE_MISSING, /* missing date, using "": [macro] */
        MANDOCERR_DATE_BAD, /* cannot parse date, using it verbatim: date */
        MANDOCERR_DATE_FUTURE, /* date in the future, using it anyway: date */
index 4a3e5203b338c9c4fb034b5c956ab441d1ddb3d1..318a219e601b5946112b81cd9c29344343569398 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: mandoc_msg.c,v 1.10 2020/01/19 18:02:00 schwarze Exp $ */
+/* $OpenBSD: mandoc_msg.c,v 1.8 2020/01/19 17:59:01 schwarze Exp $ */
 /*
- * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014-2020 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -14,6 +14,8 @@
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Implementation of warning and error messages for mandoc(1).
  */
 #include "config.h"
 
@@ -83,6 +85,7 @@ static        const char *const type_message[MANDOCERR_MAX] = {
        "missing manual title, using \"\"",
        "missing manual section, using \"\"",
        "unknown manual section",
+       "filename/section mismatch",
        "missing date, using \"\"",
        "cannot parse date, using it verbatim",
        "date in the future, using it anyway",
index 129e4730afb48295aad2a3b6d5a5d0c43023bc63..39c66b1f14eef37e2a751e6b33600429d0c36a2d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mdoc_validate.c,v 1.385 2020/04/18 20:40:10 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.386 2020/04/24 12:02:33 schwarze Exp $ */
 /*
  * Copyright (c) 2010-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -2765,8 +2765,14 @@ post_dt(POST_ARGS)
                mandoc_msg(MANDOCERR_MSEC_BAD,
                    nn->line, nn->pos, "Dt ... %s", nn->string);
                mdoc->meta.vol = mandoc_strdup(nn->string);
-       } else
+       } else {
                mdoc->meta.vol = mandoc_strdup(cp);
+               if (mdoc->filesec != '\0' &&
+                   mdoc->filesec != *nn->string &&
+                   *nn->string >= '1' && *nn->string <= '9')
+                       mandoc_msg(MANDOCERR_MSEC_FILE, nn->line, nn->pos,
+                           "*.%c vs Dt ... %c", mdoc->filesec, *nn->string);
+       }
 
        /* Optional third argument: architecture. */
 
diff --git a/read.c b/read.c
index 920459649eb01fb3f5f62a6bd900374ffb71fd50..03a71c33e5a574ee05b0d8eea30a5e91c060e113 100644 (file)
--- a/read.c
+++ b/read.c
@@ -1,4 +1,4 @@
-/* $Id: read.c,v 1.218 2020/04/18 20:40:10 schwarze Exp $ */
+/* $Id: read.c,v 1.219 2020/04/24 12:02:33 schwarze Exp $ */
 /*
  * Copyright (c) 2010-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -554,7 +554,7 @@ mparse_readfd(struct mparse *curp, int fd, const char *filename)
 
        struct buf       blk;
        struct buf      *save_primary;
-       const char      *save_filename;
+       const char      *save_filename, *cp;
        size_t           offset;
        int              save_filenc, save_lineno;
        int              with_mmap;
@@ -562,7 +562,13 @@ mparse_readfd(struct mparse *curp, int fd, const char *filename)
        if (recursion_depth > 64) {
                mandoc_msg(MANDOCERR_ROFFLOOP, curp->line, 0, NULL);
                return;
-       }
+       } else if (recursion_depth == 0 &&
+           (cp = strrchr(filename, '.')) != NULL &&
+            cp[1] >= '1' && cp[1] <= '9')
+                curp->man->filesec = cp[1];
+        else
+                curp->man->filesec = '\0';
+
        if (read_whole_file(curp, fd, &blk, &with_mmap) == -1)
                return;
 
index d033f86aceec42e7b2f53f563d714422d0125884..e0700a742910bff59c71a5a5da19d4eb361a7d40 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: roff_int.h,v 1.16 2019/01/05 00:36:50 schwarze Exp $       */
+/* $OpenBSD: roff_int.h,v 1.16 2019/01/05 00:36:46 schwarze Exp $      */
 /*
+ * Copyright (c) 2013-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013-2015, 2017-2019 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -59,6 +59,7 @@ struct        roff_man {
        enum roff_sec     lastsec; /* Last section seen. */
        enum roff_sec     lastnamed; /* Last standard section seen. */
        enum roff_next    next;    /* Where to put the next node. */
+       char              filesec; /* Section digit in the file name. */
 };