From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from localhost (fantadrom.bsd.lv [local]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id 4b8aa48b for ; Thu, 29 Jun 2017 10:22:50 -0500 (EST) Date: Thu, 29 Jun 2017 10:22:50 -0500 (EST) Message-Id: <11620843619147965765.enqueue@fantadrom.bsd.lv> X-Mailinglist: mandoc-source Reply-To: source@mandoc.bsd.lv MIME-Version: 1.0 From: schwarze@mandoc.bsd.lv To: source@mandoc.bsd.lv Subject: mandoc: warn about some non-portable idioms in .Bl -column; triggered by X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- warn about some non-portable idioms in .Bl -column; triggered by a question from Yuri Pankov (illumos) Modified Files: -------------- mandoc: mandoc.1 mandoc.h mdoc_validate.c read.c mandoc/regress/mdoc/Bl: Makefile column.in column.out_lint Added Files: ----------- mandoc/regress/mdoc/Bl: column_nogroff.in column_nogroff.out_ascii column_nogroff.out_lint column_nogroff.out_markdown Revision Data ------------- Index: read.c =================================================================== RCS file: /home/cvs/mandoc/mandoc/read.c,v retrieving revision 1.182 retrieving revision 1.183 diff -Lread.c -Lread.c -u -p -r1.182 -r1.183 --- read.c +++ read.c @@ -151,6 +151,7 @@ static const char * const mandocerrs[MAN "blocks badly nested", "nested displays are not portable", "moving content out of list", + "first macro on line", "fill mode already enabled, skipping", "fill mode already disabled, skipping", "line scope broken", @@ -169,6 +170,7 @@ static const char * const mandocerrs[MAN "missing function name, using \"\"", "empty head in list item", "empty list item", + "missing argument, using next line", "missing font type, using \\fR", "unknown font type, using \\fR", "nothing follows prefix", Index: mandoc.1 =================================================================== RCS file: /home/cvs/mandoc/mandoc/mandoc.1,v retrieving revision 1.208 retrieving revision 1.209 diff -Lmandoc.1 -Lmandoc.1 -u -p -r1.208 -r1.209 --- mandoc.1 +++ mandoc.1 @@ -1218,6 +1218,12 @@ list block contains text or macros befor .Ic \&It macro. The offending children are moved before the beginning of the list. +.It Sy "first macro on line" +Inside a +.Ic \&Bl Fl column +list, a +.Ic \&Ta +macro occurs as the first macro on a line, which is not portable. .It Sy "fill mode already enabled, skipping" .Pq man A @@ -1363,6 +1369,17 @@ list, an .Ic \&It block is empty. An empty list item is shown. +.It Sy "missing argument, using next line" +.Pq mdoc +An +.Ic \&It +macro in a +.Ic \&Bd Fl column +list has no arguments. +While +.Nm +uses the text or macros of the following line, if any, for the cell, +other formatters may misformat the list. .It Sy "missing font type, using \efR" .Pq mdoc A Index: mdoc_validate.c =================================================================== RCS file: /home/cvs/mandoc/mandoc/mdoc_validate.c,v retrieving revision 1.344 retrieving revision 1.345 diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.344 -r1.345 --- mdoc_validate.c +++ mdoc_validate.c @@ -1460,15 +1460,30 @@ post_it(POST_ARGS) assert(nit->head->child == NULL); - i = 0; - for (nch = nit->child; nch != NULL; nch = nch->next) - if (nch->type == ROFFT_BODY) - i++; + if (nit->head->next->child == NULL && + nit->head->next->next == NULL) { + mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, + nit->line, nit->pos, "It"); + roff_node_delete(mdoc, nit); + break; + } + i = 0; + for (nch = nit->child; nch != NULL; nch = nch->next) { + if (nch->type != ROFFT_BODY) + continue; + if (i++ && nch->flags & NODE_LINE) + mandoc_msg(MANDOCERR_TA_LINE, mdoc->parse, + nch->line, nch->pos, "Ta"); + } if (i < cols || i > cols + 1) mandoc_vmsg(MANDOCERR_BL_COL, mdoc->parse, nit->line, nit->pos, "%d columns, %d cells", cols, i); + else if (nit->head->next->child != NULL && + nit->head->next->child->line > nit->line) + mandoc_msg(MANDOCERR_IT_NOARG, mdoc->parse, + nit->line, nit->pos, "Bl -column It"); break; default: abort(); Index: mandoc.h =================================================================== RCS file: /home/cvs/mandoc/mandoc/mandoc.h,v retrieving revision 1.236 retrieving revision 1.237 diff -Lmandoc.h -Lmandoc.h -u -p -r1.236 -r1.237 --- mandoc.h +++ mandoc.h @@ -109,6 +109,7 @@ enum mandocerr { MANDOCERR_BLK_NEST, /* blocks badly nested: macro ... */ MANDOCERR_BD_NEST, /* nested displays are not portable: macro ... */ MANDOCERR_BL_MOVE, /* moving content out of list: macro */ + MANDOCERR_TA_LINE, /* first macro on line: Ta */ 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 */ @@ -127,6 +128,7 @@ enum mandocerr { MANDOCERR_FO_NOHEAD, /* missing function name, using "": Fo */ MANDOCERR_IT_NOHEAD, /* empty head in list item: Bl -type It */ MANDOCERR_IT_NOBODY, /* empty list item: Bl -type It */ + MANDOCERR_IT_NOARG, /* missing argument, using next line: Bl -c It */ MANDOCERR_BF_NOFONT, /* missing font type, using \fR: Bf */ MANDOCERR_BF_BADFONT, /* unknown font type, using \fR: Bf font */ MANDOCERR_PF_SKIP, /* nothing follows prefix: Pf arg */ --- /dev/null +++ regress/mdoc/Bl/column_nogroff.in @@ -0,0 +1,19 @@ +.Dd June 29, 2017 +.Dt BL-COLUMN_NOGROFF 1 +.Os OpenBSD +.Sh NAME +.Nm Bl-column_nogroff +.Nd column lists mishandled by groff +.Sh DESCRIPTION +Item macro without arguments: +.Bl -column "first column" "second column" +.It +text +.No macro Ta after tab +.El +.Pp +Tab macro at the beginning of a line: +.Bl -column "aa" "bb" +.It aa +.Ta bb +.El --- /dev/null +++ regress/mdoc/Bl/column_nogroff.out_ascii @@ -0,0 +1,15 @@ +BL-COLUMN_NOGROFF(1) General Commands Manual BL-COLUMN_NOGROFF(1) + +NNAAMMEE + BBll--ccoolluummnn__nnooggrrooffff - column lists mishandled by groff + +DDEESSCCRRIIPPTTIIOONN + Item macro without arguments: + + text macro after tab + + Tab macro at the beginning of a line: + + aa bb + +OpenBSD June 29, 2017 OpenBSD Index: column.in =================================================================== RCS file: /home/cvs/mandoc/mandoc/regress/mdoc/Bl/column.in,v retrieving revision 1.1 retrieving revision 1.2 diff -Lregress/mdoc/Bl/column.in -Lregress/mdoc/Bl/column.in -u -p -r1.1 -r1.2 --- regress/mdoc/Bl/column.in +++ regress/mdoc/Bl/column.in @@ -68,11 +68,14 @@ .El .\" Wrong number of columns. .Bl -column "a" "b" +.It .It "a" .It "a" Ta "b" +.It .It "a" Ta "b" Ta "c" .It "a" Ta "b" Ta "c" Ta "d" .It "a" Ta "b" Ta "c" Ta "d" Ta "e" +.It .El .\" Mixed tab and Ta .Bl -column a b c d --- /dev/null +++ regress/mdoc/Bl/column_nogroff.out_lint @@ -0,0 +1,5 @@ +mandoc: column_nogroff.in:3:5: BASE: operating system explicitly specified: Os OpenBSD (OpenBSD) +mandoc: column_nogroff.in:1:5: BASE: Mdocdate missing: Dd June (OpenBSD) +mandoc: column_nogroff.in:10:2: WARNING: missing argument, using next line: Bl -column It +mandoc: column_nogroff.in:18:2: WARNING: first macro on line: Ta +mandoc: column_nogroff.in: BASE: RCS id missing: (OpenBSD) --- /dev/null +++ regress/mdoc/Bl/column_nogroff.out_markdown @@ -0,0 +1,18 @@ +BL-COLUMN\_NOGROFF(1) - General Commands Manual + +# NAME + +**Bl-column\_nogroff** - column lists mishandled by groff + +# DESCRIPTION + +Item macro without arguments: + + text + macro after tab + +Tab macro at the beginning of a line: + + aa bb + +OpenBSD - June 29, 2017 Index: column.out_lint =================================================================== RCS file: /home/cvs/mandoc/mandoc/regress/mdoc/Bl/column.out_lint,v retrieving revision 1.4 retrieving revision 1.5 diff -Lregress/mdoc/Bl/column.out_lint -Lregress/mdoc/Bl/column.out_lint -u -p -r1.4 -r1.5 --- regress/mdoc/Bl/column.out_lint +++ regress/mdoc/Bl/column.out_lint @@ -1,7 +1,10 @@ mandoc: column.in:3:5: BASE: operating system explicitly specified: Os OpenBSD (OpenBSD) mandoc: column.in:1:5: BASE: Mdocdate missing: Dd October (OpenBSD) -mandoc: column.in:71:2: WARNING: wrong number of cells: 2 columns, 1 cells -mandoc: column.in:74:2: WARNING: wrong number of cells: 2 columns, 4 cells -mandoc: column.in:75:2: WARNING: wrong number of cells: 2 columns, 5 cells -mandoc: column.in:103:18: WARNING: skipping -width argument: Bl -column +mandoc: column.in:71:2: WARNING: skipping empty macro: It +mandoc: column.in:72:2: WARNING: wrong number of cells: 2 columns, 1 cells +mandoc: column.in:74:2: WARNING: skipping empty macro: It +mandoc: column.in:76:2: WARNING: wrong number of cells: 2 columns, 4 cells +mandoc: column.in:77:2: WARNING: wrong number of cells: 2 columns, 5 cells +mandoc: column.in:78:2: WARNING: skipping empty macro: It +mandoc: column.in:106:18: WARNING: skipping -width argument: Bl -column mandoc: column.in: BASE: RCS id missing: (OpenBSD) Index: Makefile =================================================================== RCS file: /home/cvs/mandoc/mandoc/regress/mdoc/Bl/Makefile,v retrieving revision 1.7 retrieving revision 1.8 diff -Lregress/mdoc/Bl/Makefile -Lregress/mdoc/Bl/Makefile -u -p -r1.7 -r1.8 --- regress/mdoc/Bl/Makefile +++ regress/mdoc/Bl/Makefile @@ -1,7 +1,8 @@ # $OpenBSD: Makefile,v 1.31 2016/10/17 19:00:16 schwarze Exp $ REGRESS_TARGETS = item inset diag ohang bullet dash enum hang tag -REGRESS_TARGETS += column colNoIt extend nested offset secstart +REGRESS_TARGETS += column column_nogroff colNoIt +REGRESS_TARGETS += extend nested offset secstart REGRESS_TARGETS += notype multitype badargs REGRESS_TARGETS += empty noIt emptyhead emptytag emptyitem multitag @@ -9,7 +10,7 @@ REGRESS_TARGETS += bareIt bareTa unclose UTF8_TARGETS = dash -LINT_TARGETS = column notype badargs tag +LINT_TARGETS = column column_nogroff notype badargs tag LINT_TARGETS += empty noIt emptyhead emptytag emptyitem LINT_TARGETS += bareIt bareTa break breakingIt broken @@ -19,6 +20,8 @@ LINT_TARGETS += bareIt bareTa break brea SKIP_GROFF ?= breakingTa # groff-1.22.3 defects: +# - column list items with no args but multiple lines cause bogus breaks +# - in column lists, the tab macro cannot be a line macro # - lists with missing or late type ruin indentation # - empty lists ruin indentation and sometimes cause empty lines # - breaking lists continue indefinitely @@ -26,7 +29,7 @@ SKIP_GROFF ?= breakingTa # - breaking a list aborts processing # - empty -tag item heads lose the blank line and the indentation -SKIP_GROFF += notype empty break breakingIt broken emptytag +SKIP_GROFF += column_nogroff notype empty emptytag break breakingIt broken SKIP_TMAN ?= column colNoIt multitype multitag bareTa break breakingTa broken @@ -38,7 +41,7 @@ SKIP_TMAN += tag # Empty heads are still mishandled by -Tman. -SKIP_TMAN += emptyhead emptytag +SKIP_TMAN += column_nogroff emptyhead emptytag # mandoc -T markdown still has issues with badly nested lists -- To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv