]> 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.
 ************************************************************************
 * 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:
 ************************************************************************
 
 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 **
 
   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"
 - 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 **
 
   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
 ************************************************************************
 ************************************************************************
 * 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>
 /*
  * 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 char              help_arg[] = "help";
 static char             *help_argv[] = {help_arg, NULL};
 static enum mandoclevel  rc;
+static FILE             *mmsg_stream;
 
 
 int
 
 
 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;
        curp.mmin = MANDOCERR_MAX;
        curp.outopts = &conf.output;
        options = MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1;
+       mmsg_stream = stderr;
 
        use_pager = 1;
        tag_files = NULL;
 
        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;
        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"))
        } 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;
 
 {
        const char      *mparse_msg;
 
-       fprintf(stderr, "%s: %s:", getprogname(),
+       fprintf(mmsg_stream, "%s: %s:", getprogname(),
            file == NULL ? "<stdin>" : file);
 
        if (line)
            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)
 
        if ((mparse_msg = mparse_strerror(t)) != NULL)
-               fprintf(stderr, ": %s", mparse_msg);
+               fprintf(mmsg_stream, ": %s", mparse_msg);
 
        if (msg)
 
        if (msg)
-               fprintf(stderr, ": %s", msg);
+               fprintf(mmsg_stream, ": %s", msg);
 
 
-       fputc('\n', stderr);
+       fputc('\n', mmsg_stream);
 }
 
 static pid_t
 }
 
 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>
 .\"
 .\" 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.
 .\"
 .\" 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
 .Dt MANDOC 1
 .Os
 .Sh NAME
@@ -238,7 +238,9 @@ See
 .It Fl T Cm lint
 Parse only: produce no output.
 Implies
 .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.
 .It Fl T Cm locale
 Encode output using the current locale.
 This is the default.