ignore blank lines in man(7) next line scope;
authorschwarze <schwarze@openbsd.org>
Sat, 3 Jun 2017 15:54:09 +0000 (15:54 +0000)
committerschwarze <schwarze@openbsd.org>
Sat, 3 Jun 2017 15:54:09 +0000 (15:54 +0000)
strange groff edge case behaviour found in multimedia/mjpegtools

19 files changed:
regress/usr.bin/mandoc/man/B/Makefile
regress/usr.bin/mandoc/man/B/blank.in [new file with mode: 0644]
regress/usr.bin/mandoc/man/B/blank.out_ascii [new file with mode: 0644]
regress/usr.bin/mandoc/man/B/blank.out_lint [new file with mode: 0644]
regress/usr.bin/mandoc/man/SH/Makefile
regress/usr.bin/mandoc/man/SH/noarg.in
regress/usr.bin/mandoc/man/SH/noarg.out_ascii
regress/usr.bin/mandoc/man/SH/noarg.out_lint
regress/usr.bin/mandoc/man/SS/Makefile
regress/usr.bin/mandoc/man/SS/noarg.in
regress/usr.bin/mandoc/man/SS/noarg.out_ascii
regress/usr.bin/mandoc/man/SS/noarg.out_lint
regress/usr.bin/mandoc/man/TP/Makefile
regress/usr.bin/mandoc/man/TP/broken.in
regress/usr.bin/mandoc/man/TP/broken.out_ascii
regress/usr.bin/mandoc/man/TP/broken.out_lint
usr.bin/mandoc/man.c
usr.bin/mandoc/mandoc.h
usr.bin/mandoc/read.c

index 8e4d72a..ac010e1 100644 (file)
@@ -1,6 +1,10 @@
-# $OpenBSD: Makefile,v 1.1 2014/08/14 02:00:52 schwarze Exp $
+# $OpenBSD: Makefile,v 1.2 2017/06/03 15:54:09 schwarze Exp $
 
-REGRESS_TARGETS        = args
-LINT_TARGETS   = args
+REGRESS_TARGETS        = args blank
+LINT_TARGETS   = args blank
+
+# groff-1.22.3 defect:
+# - A blank line in next line scope causes a blank line.
+SKIP_GROFF     = blank
 
 .include <bsd.regress.mk>
diff --git a/regress/usr.bin/mandoc/man/B/blank.in b/regress/usr.bin/mandoc/man/B/blank.in
new file mode 100644 (file)
index 0000000..eef5126
--- /dev/null
@@ -0,0 +1,9 @@
+.TH B-BLANK 1 "June 3, 2017" OpenBSD
+.SH NAME
+B-blank \- blank line in font macro next line scope
+.SH DESCRIPTION
+A blank line in
+.B
+
+bold
+next line scope.
diff --git a/regress/usr.bin/mandoc/man/B/blank.out_ascii b/regress/usr.bin/mandoc/man/B/blank.out_ascii
new file mode 100644 (file)
index 0000000..4ecf27d
--- /dev/null
@@ -0,0 +1,13 @@
+B-BLANK(1)                  General Commands Manual                 B-BLANK(1)
+
+
+
+N\bNA\bAM\bME\bE
+       B-blank - blank line in font macro next line scope
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+       A blank line in b\bbo\bol\bld\bd next line scope.
+
+
+
+OpenBSD                          June 3, 2017                       B-BLANK(1)
diff --git a/regress/usr.bin/mandoc/man/B/blank.out_lint b/regress/usr.bin/mandoc/man/B/blank.out_lint
new file mode 100644 (file)
index 0000000..22e683e
--- /dev/null
@@ -0,0 +1 @@
+mandoc: blank.in:7:1: WARNING: skipping blank line in line scope
index f94a4ca..7fff2ef 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.4 2015/04/04 18:52:12 schwarze Exp $
+# $OpenBSD: Makefile,v 1.5 2017/06/03 15:54:09 schwarze Exp $
 
 REGRESS_TARGETS        = broken broken_eline empty_before longarg noarg
 LINT_TARGETS   = broken broken_eline empty_before noarg
@@ -10,6 +10,7 @@ LINT_TARGETS  = broken broken_eline empty_before noarg
 # - If .HP breaks .SH, a line is broken after the next input line.
 # - If .RS/RE/nf/fi breaks .SH, the next input line becomes bold.
 # - .UR does not break .SH.
+# - blank line in .SH next line scope causes blank lines and bogus indent
 
 SKIP_GROFF     = broken broken_eline noarg
 
index 58ccac7..087ac83 100644 (file)
@@ -40,3 +40,7 @@ no-fill mode
 .SH
 .fi
 back in fill mode
+.SH
+
+SEE ALSO
+broken(1)
index bc3490d..903f85d 100644 (file)
@@ -27,6 +27,9 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
 
        back in fill mode
 
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+       broken(1)
+
 
 
 OpenBSD                         March 20, 2015                     SH-NOARG(1)
index a1bb39b..3f9d130 100644 (file)
@@ -11,3 +11,4 @@ mandoc: noarg.in:31:2: WARNING: line scope broken: UR breaks SH
 mandoc: noarg.in:34:2: WARNING: line scope broken: UE breaks SH
 mandoc: noarg.in:35:2: ERROR: skipping end of block that is not open: UE
 mandoc: noarg.in:41:2: WARNING: fill mode already enabled, skipping: fi
+mandoc: noarg.in:44:1: WARNING: skipping blank line in line scope
index e76a4ee..237830e 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.2 2015/04/04 18:52:12 schwarze Exp $
+# $OpenBSD: Makefile,v 1.3 2017/06/03 15:54:09 schwarze Exp $
 
 REGRESS_TARGETS        = broken broken_eline longarg noarg
 LINT_TARGETS   = broken broken_eline noarg
@@ -10,6 +10,7 @@ LINT_TARGETS  = broken broken_eline noarg
 # - If .HP breaks .SS, a line is broken after the next input line.
 # - If .RS/RE/nf/fi breaks .SS, the next input line becomes bold.
 # - .UR does not break .SS.
+# - blank line in .SS next-line scope causes a blank line
 
 SKIP_GROFF     = broken broken_eline noarg
 
index 85470b0..a0ee105 100644 (file)
@@ -40,3 +40,7 @@ no-fill mode
 .SS
 .fi
 back in fill mode
+.SS
+
+Subsection
+with a blank line
index 60fd85f..20bafc6 100644 (file)
@@ -27,6 +27,9 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
 
        back in fill mode
 
+   S\bSu\bub\bbs\bse\bec\bct\bti\bio\bon\bn
+       with a blank line
+
 
 
 OpenBSD                         March 20, 2015                     SS-NOARG(1)
index 1715179..8af8854 100644 (file)
@@ -11,3 +11,4 @@ mandoc: noarg.in:31:2: WARNING: line scope broken: UR breaks SS
 mandoc: noarg.in:34:2: WARNING: line scope broken: UE breaks SS
 mandoc: noarg.in:35:2: ERROR: skipping end of block that is not open: UE
 mandoc: noarg.in:41:2: WARNING: fill mode already enabled, skipping: fi
+mandoc: noarg.in:44:1: WARNING: skipping blank line in line scope
index b867ba6..6c9fc6b 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.12 2015/09/21 13:24:32 schwarze Exp $
+# $OpenBSD: Makefile,v 1.13 2017/06/03 15:54:09 schwarze Exp $
 
 REGRESS_TARGETS         = badarg broken double eof fill literal longhead
 REGRESS_TARGETS        += macrotag manyargs sameline spacing width
@@ -8,6 +8,7 @@ LINT_TARGETS     = broken double eof
 # groff-1.22.3 defects:
 # - If .TP precedes .RE, the latter does not properly reset indentation.
 # - If the last line of the file is .TP, groff does not print a page footer.
+# - A blank line in .TP next line scope causes a blank line.
 
 SKIP_GROFF      = broken eof
 
index e19efdf..68fab4f 100644 (file)
@@ -10,6 +10,8 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
            indented text
        regular text
 
+       head   body
+
 
 
 OpenBSD                        December 16, 2014                  TP-BROKEN(1)
index 3a1024f..1a3a433 100644 (file)
@@ -1 +1,2 @@
 mandoc: broken.in:10:2: WARNING: line scope broken: RE breaks TP
+mandoc: broken.in:15:1: WARNING: skipping blank line in line scope
index c89fe07..ba7cdd8 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: man.c,v 1.121 2017/05/08 20:33:40 schwarze Exp $ */
+/*     $OpenBSD: man.c,v 1.122 2017/06/03 15:54:09 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -87,14 +87,15 @@ man_ptext(struct roff_man *man, int line, char *buf, int offs)
                /* Skip leading whitespace. */ ;
 
        /*
-        * Blank lines are ignored right after headings
-        * but add a single vertical space elsewhere.
+        * Blank lines are ignored in next line scope and right
+        * after headings but add a single vertical space elsewhere.
         */
 
        if (buf[i] == '\0') {
-               man_breakscope(man, ROFF_sp);
-               /* Allocate a blank entry. */
-               if (man->last->tok != MAN_SH &&
+               if (man->flags & (MAN_ELINE | MAN_BLINE))
+                       mandoc_msg(MANDOCERR_BLK_BLANK, man->parse,
+                           line, 0, NULL);
+               else if (man->last->tok != MAN_SH &&
                    man->last->tok != MAN_SS) {
                        roff_elem_alloc(man, line, offs, ROFF_sp);
                        man->next = ROFF_NEXT_SIBLING;
index 83e49f0..f6e49fd 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mandoc.h,v 1.163 2017/06/02 19:21:03 schwarze Exp $ */
+/*     $OpenBSD: mandoc.h,v 1.164 2017/06/03 15:54:09 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -97,6 +97,7 @@ enum  mandocerr {
        MANDOCERR_FI_SKIP, /* fill mode already enabled, skipping: fi */
        MANDOCERR_NF_SKIP, /* fill mode already disabled, skipping: nf */
        MANDOCERR_BLK_LINE, /* line scope broken: macro breaks macro */
+       MANDOCERR_BLK_BLANK, /* skipping blank line in line scope */
 
        /* related to missing arguments */
        MANDOCERR_REQ_EMPTY, /* skipping empty request: request */
index 6fb8c1f..6909bda 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: read.c,v 1.140 2017/06/01 15:24:41 schwarze Exp $ */
+/*     $OpenBSD: read.c,v 1.141 2017/06/03 15:54:09 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -135,6 +135,7 @@ static      const char * const      mandocerrs[MANDOCERR_MAX] = {
        "fill mode already enabled, skipping",
        "fill mode already disabled, skipping",
        "line scope broken",
+       "skipping blank line in line scope",
 
        /* related to missing macro arguments */
        "skipping empty request",