aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc.c
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 /mdoc.c
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
Diffstat (limited to 'mdoc.c')
-rw-r--r--mdoc.c20
1 files changed, 18 insertions, 2 deletions
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;
}