diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2017-01-28 23:30:08 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2017-01-28 23:30:08 +0000 |
commit | 5a526843b7a81102e56a684b368893853ed01ee7 (patch) | |
tree | a3053105d9025b04fa81459d08c12a275c0f98c2 /mdoc.c | |
parent | 0ead4d49fc7173eede03a8a404e8a08c88072f08 (diff) | |
download | mandoc-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.c | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -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; } |