aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-01-28 23:30:08 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-01-28 23:30:08 +0000
commit5a526843b7a81102e56a684b368893853ed01ee7 (patch)
treea3053105d9025b04fa81459d08c12a275c0f98c2
parent0ead4d49fc7173eede03a8a404e8a08c88072f08 (diff)
downloadmandoc-5a526843b7a81102e56a684b368893853ed01ee7.tar.gz
mandoc-5a526843b7a81102e56a684b368893853ed01ee7.tar.zst
mandoc-5a526843b7a81102e56a684b368893853ed01ee7.zip
Add a warning "new sentence, new line".
This does not attempt to pinpoint each and every offender, but instead tries very hard to avoid false positives: Currently, there are only two false positives in the whole OpenBSD base system. Only do this in mdoc(7), not in man(7), because manuals written in man(7) typically have much worse problems than this. OK jmc@ on a previous version of the patch
-rw-r--r--mandoc.18
-rw-r--r--mandoc.h3
-rw-r--r--mdoc.c20
-rw-r--r--read.c3
4 files changed, 28 insertions, 6 deletions
diff --git a/mandoc.1 b/mandoc.1
index 946955a6..41b955f3 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,4 +1,4 @@
-.\" $Id: mandoc.1,v 1.171 2017/01/21 02:32:39 schwarze Exp $
+.\" $Id: mandoc.1,v 1.172 2017/01/28 23:30:08 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: January 21 2017 $
+.Dd $Mdocdate: January 28 2017 $
.Dt MANDOC 1
.Os
.Sh NAME
@@ -1357,6 +1357,10 @@ it is hard to predict which tab stop position the tab will advance to.
Whitespace at the end of input lines is almost never semantically
significant \(em but in the odd case where it might be, it is
extremely confusing when reviewing and maintaining documents.
+.It Sy "new sentence, new line"
+.Pq mdoc
+A new sentence starts in the middle of a text line.
+Start it on a new input line to help formatters produce correct spacing.
.It Sy "bad comment style"
.Pq roff
Comment lines start with a dot, a backslash, and a double-quote character.
diff --git a/mandoc.h b/mandoc.h
index 2ea64ea0..a80d6ae7 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.213 2017/01/09 01:37:03 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.214 2017/01/28 23:30:08 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -134,6 +134,7 @@ enum mandocerr {
MANDOCERR_FI_BLANK, /* blank line in fill mode, using .sp */
MANDOCERR_FI_TAB, /* tab in filled text */
MANDOCERR_SPACE_EOL, /* whitespace at end of input line */
+ MANDOCERR_EOS, /* new sentence, new line */
MANDOCERR_COMMENT_BAD, /* bad comment style */
MANDOCERR_ESC_BAD, /* invalid escape sequence: esc */
MANDOCERR_STR_UNDEF, /* undefined string, using "": name */
diff --git a/mdoc.c b/mdoc.c
index 00949618..7c3613f4 100644
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,7 +1,7 @@
-/* $Id: mdoc.c,v 1.258 2017/01/10 13:47:00 schwarze Exp $ */
+/* $Id: mdoc.c,v 1.259 2017/01/28 23:30:08 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010, 2012-2016 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2012-2017 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
@@ -312,6 +312,22 @@ mdoc_ptext(struct roff_man *mdoc, int line, char *buf, int offs)
if (mandoc_eos(buf+offs, (size_t)(end-buf-offs)))
mdoc->last->flags |= NODE_EOS;
+
+ for (c = buf + offs; c != NULL; c = strchr(c + 1, '.')) {
+ if (c - buf < offs + 2)
+ continue;
+ if (end - c < 4)
+ break;
+ if (isalpha((unsigned char)c[-2]) &&
+ isalpha((unsigned char)c[-1]) &&
+ c[1] == ' ' &&
+ isupper((unsigned char)(c[2] == ' ' ? c[3] : c[2])) &&
+ (c[-2] != 'n' || c[-1] != 'c') &&
+ (c[-2] != 'v' || c[-1] != 's'))
+ mandoc_msg(MANDOCERR_EOS, mdoc->parse,
+ line, (int)(c - buf), NULL);
+ }
+
return 1;
}
diff --git a/read.c b/read.c
index d20a6098..885a2746 100644
--- a/read.c
+++ b/read.c
@@ -1,4 +1,4 @@
-/* $Id: read.c,v 1.157 2017/01/09 01:37:03 schwarze Exp $ */
+/* $Id: read.c,v 1.158 2017/01/28 23:30:08 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -177,6 +177,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"blank line in fill mode, using .sp",
"tab in filled text",
"whitespace at end of input line",
+ "new sentence, new line",
"bad comment style",
"invalid escape sequence",
"undefined string, using \"\"",