]> git.cameronkatri.com Git - mandoc.git/commitdiff
For -Tlint, put parser messages on stdout instead of stderr.
authorIngo Schwarze <schwarze@openbsd.org>
Thu, 20 Jul 2017 15:26:41 +0000 (15:26 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Thu, 20 Jul 2017 15:26:41 +0000 (15:26 +0000)
Originally, naddy@ requested this in 2011 (or maybe even earlier).
It was discussed with joerg@, kristaps@, naddy@, and espie@ in 2011,
and everybody agreed in principle, but it was postponed because
kristaps@ wanted to do some cleanup of the message system first.
Meanwhile, message infrastructure was improved about a dozen times...

This makes long, tedious commands like "mandoc -Tlint *.1 2>&1 | less"
unnecessary and allows simple ones like "man -l -Tlint *.1".

TODO
main.c
mandoc.1

diff --git a/TODO b/TODO
index ed71dab015b9a079ba1f9cbd64308dbe39e01e10..e23f811bba481a627a14d61b283131c64a651aa5 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,6 +1,6 @@
 ************************************************************************
 * Official mandoc TODO.
-* $Id: TODO,v 1.242 2017/07/20 12:54:02 schwarze Exp $
+* $Id: TODO,v 1.243 2017/07/20 15:26:41 schwarze Exp $
 ************************************************************************
 
 Many issues are annotated for difficulty as follows:
@@ -436,11 +436,6 @@ are mere guesses, and some may be wrong.
   Probably, this should be fixed somewhere in termp_it_pre(), not sure.
   loc *  exist **  algo **  size *  imp **
 
-- In .Bl -tag, if a tag exceeds the right margin and must be continued
-  on the next line, it must be indented by -width, not width+1;
-  see "rule block|pass" in OpenBSD ifconfig(8).
-  loc *  exist ***  algo **  size *  imp **
-
 - When the -width string contains macros, the macros must be rendered
   before measuring the width, for example
     .Bl -tag -width ".Dv message"
@@ -492,10 +487,6 @@ are mere guesses, and some may be wrong.
   but just the overall format
   loc **  exist **  algo ***  size **  imp **
 
-- -Tlint parser errors and warnings to stdout
-  to tech@mdocml, naddy@  Wed, 28 Sep 2011 11:21:46 +0200
-  wait!  kristaps@  Sun, 02 Oct 2011 17:12:52 +0200
-
 ************************************************************************
 * documentation issues
 ************************************************************************
diff --git a/main.c b/main.c
index ef051e539a4dad8569f095fdec3653e50656282d..8b600bbcefdc9143e022aa86a5b398936053569f 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/*     $Id: main.c,v 1.299 2017/07/04 14:40:38 schwarze Exp $ */
+/*     $Id: main.c,v 1.300 2017/07/20 15:26:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -111,6 +111,7 @@ static      const int sec_prios[] = {1, 4, 5, 8, 6, 3, 7, 2, 9};
 static char              help_arg[] = "help";
 static char             *help_argv[] = {help_arg, NULL};
 static enum mandoclevel  rc;
+static FILE             *mmsg_stream;
 
 
 int
@@ -190,6 +191,7 @@ main(int argc, char *argv[])
        curp.mmin = MANDOCERR_MAX;
        curp.outopts = &conf.output;
        options = MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1;
+       mmsg_stream = stderr;
 
        use_pager = 1;
        tag_files = NULL;
@@ -994,6 +996,7 @@ toptions(struct curparse *curp, char *arg)
        else if (0 == strcmp(arg, "lint")) {
                curp->outtype = OUTT_LINT;
                curp->mmin = MANDOCERR_BASE;
+               mmsg_stream = stdout;
        } else if (0 == strcmp(arg, "tree"))
                curp->outtype = OUTT_TREE;
        else if (0 == strcmp(arg, "man"))
@@ -1083,21 +1086,21 @@ mmsg(enum mandocerr t, enum mandoclevel lvl,
 {
        const char      *mparse_msg;
 
-       fprintf(stderr, "%s: %s:", getprogname(),
+       fprintf(mmsg_stream, "%s: %s:", getprogname(),
            file == NULL ? "<stdin>" : file);
 
        if (line)
-               fprintf(stderr, "%d:%d:", line, col + 1);
+               fprintf(mmsg_stream, "%d:%d:", line, col + 1);
 
-       fprintf(stderr, " %s", mparse_strlevel(lvl));
+       fprintf(mmsg_stream, " %s", mparse_strlevel(lvl));
 
        if ((mparse_msg = mparse_strerror(t)) != NULL)
-               fprintf(stderr, ": %s", mparse_msg);
+               fprintf(mmsg_stream, ": %s", mparse_msg);
 
        if (msg)
-               fprintf(stderr, ": %s", msg);
+               fprintf(mmsg_stream, ": %s", msg);
 
-       fputc('\n', stderr);
+       fputc('\n', mmsg_stream);
 }
 
 static pid_t
index 88ea880f4a45186323b6de1bc191fdf19a3d9fee..1db4d3251f45791e99ec85f53d926f4e8a0e05ff 100644 (file)
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,4 +1,4 @@
-.\"    $Id: mandoc.1,v 1.216 2017/07/07 16:20:30 schwarze Exp $
+.\"    $Id: mandoc.1,v 1.217 2017/07/20 15:26:41 schwarze Exp $
 .\"
 .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 .\" Copyright (c) 2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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: July 7 2017 $
+.Dd $Mdocdate: July 20 2017 $
 .Dt MANDOC 1
 .Os
 .Sh NAME
@@ -238,7 +238,9 @@ See
 .It Fl T Cm lint
 Parse only: produce no output.
 Implies
-.Fl W Cm all .
+.Fl W Cm all
+and redirects parser messages, which usually appear
+on standard error output, to standard output.
 .It Fl T Cm locale
 Encode output using the current locale.
 This is the default.