]> git.cameronkatri.com Git - mandoc.git/blobdiff - roff.c
add a style message about overlong text lines,
[mandoc.git] / roff.c
diff --git a/roff.c b/roff.c
index f2ed61c8b1c554c0eba5133c77b4d56fde180dfe..ed4f31b698d6779025c963ca3e6f99f3a80835d7 100644 (file)
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.375 2020/08/03 11:02:57 schwarze Exp $ */
+/* $Id: roff.c,v 1.377 2021/06/27 17:57:55 schwarze Exp $ */
 /*
  * Copyright (c) 2010-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -1823,7 +1823,7 @@ roff_parsetext(struct roff *r, struct buf *buf, int pos, int *offs)
 }
 
 int
-roff_parseln(struct roff *r, int ln, struct buf *buf, int *offs)
+roff_parseln(struct roff *r, int ln, struct buf *buf, int *offs, size_t len)
 {
        enum roff_tok    t;
        int              e;
@@ -1834,6 +1834,14 @@ roff_parseln(struct roff *r, int ln, struct buf *buf, int *offs)
 
        ppos = pos = *offs;
 
+       if (len > 80 && r->tbl == NULL && r->eqn == NULL &&
+           (r->man->flags & ROFF_NOFILL) == 0 &&
+           strchr(" .\\", buf->buf[pos]) == NULL &&
+           buf->buf[pos] != r->control &&
+           strcspn(buf->buf, " ") < 80)
+               mandoc_msg(MANDOCERR_TEXT_LONG, ln, (int)len - 1,
+                   "%.20s...", buf->buf + pos);
+
        /* Handle in-line equation delimiters. */
 
        if (r->tbl == NULL &&
@@ -2362,7 +2370,9 @@ roff_cond_checkend(ROFF_ARGS)
        while ((ep = strchr(ep, '\\')) != NULL) {
                switch (ep[1]) {
                case '}':
-                       if (rr)
+                       if (ep[2] == '\0')
+                               ep[0] = '\0';
+                       else if (rr)
                                ep[1] = '&';
                        else
                                memmove(ep, ep + 2, strlen(ep + 2) + 1);