discuss@mandoc.bsd.lv
 help / color / mirror / Atom feed
* Clarification needed in regards to "WARNING: blank line in fill mode, using .sp"
@ 2021-09-28  0:20 Raf Czlonka
  2021-09-28 15:10 ` Ingo Schwarze
  0 siblings, 1 reply; 4+ messages in thread
From: Raf Czlonka @ 2021-09-28  0:20 UTC (permalink / raw)
  To: discuss

Hello,

While linting mdoc(7)-formatted manual pages, blank lines in them
generate the below warning message:

	mandoc: foo.1:20:1: WARNING: blank line in fill mode, using .sp

'.sp' is obviously a roff(7) request and the above, if not explicitly,
does seem to suggest using it is the "proper" way to fix the manual
page's formatting, at least implicitly.

This seem to be contrary to what the mdoc(7) manual page says:

	Many aspects of the basic syntax of the mdoc language are
	based on the roff(7) language; see the LANGUAGE SYNTAX and
	MACRO SYNTAX sections in the roff(7) manual for details,
	in particular regarding comments, escape sequences, whitespace,
	and quoting.  However, using roff(7) requests in mdoc
	documents is discouraged; mandoc(1) supports some of them
	merely for backward compatibility.

I'm obviously talking about the "discouraged" here as there's no
backward compatibility to speak of - as mentioned earlier, this is
an mdoc(7)-formatted manual page.

Given that '.sp' is nowhere to be found in mdoc(7) and is only
present in roff(7), perhaps the warning should mention '.Pp' macro
instead?

Without knowing any of the above, one might simply take the warning
at a face value and replace the blank line with roff(7)'s '.sp'.

What do others think? What should the linter say in order to aid
new authors in producing better-formatted mdoc(7) manual pages?

Regards,

Raf
--
 To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Clarification needed in regards to "WARNING: blank line in fill mode, using .sp"
  2021-09-28  0:20 Clarification needed in regards to "WARNING: blank line in fill mode, using .sp" Raf Czlonka
@ 2021-09-28 15:10 ` Ingo Schwarze
  2021-09-29 16:23   ` Raf Czlonka
  0 siblings, 1 reply; 4+ messages in thread
From: Ingo Schwarze @ 2021-09-28 15:10 UTC (permalink / raw)
  To: Raf Czlonka; +Cc: discuss

Hi Raf,

Raf Czlonka wrote on Tue, Sep 28, 2021 at 01:20:51AM +0100:

> While linting mdoc(7)-formatted manual pages, blank lines in them
> generate the below warning message:
> 
> 	mandoc: foo.1:20:1: WARNING: blank line in fill mode, using .sp
> 
> '.sp' is obviously a roff(7) request and the above, if not explicitly,
> does seem to suggest using it is the "proper" way to fix the manual
> page's formatting, at least implicitly.

It does absolutely not suggest that.  mandoc messages almost
never instruct the document author what to do.  Those very few
messages doing that anyway are explicit about it:

     consider using OS macro
     verbatim "--", maybe consider using \(em
     .so is fragile, better use ln(1)

Mandoc messages typically consist of of two parts: the first part states
a fact describing some problem, and the second part states what the
mandoc(1) program is doing to work around the problem, often using the
idiom "<comma> using <foobar>":

     missing manual title, using UNTITLED
     missing manual section, using ""
     missing date, using ""
     cannot parse date, using it verbatim
     date in the future, using it anyway
     missing description line, using ""
     empty argument, using 0n
     missing display type, using -ragged
     missing -width in -tag list, using 8n
     missing utility name, using ""
     missing function name, using ""
     missing argument, using next line
     missing font type, using \fR
     unknown font type, using \fR
     missing option string, using ""
     missing resource identifier, using ""
     missing eqn box, using ""
     undefined string, using ""
     missing list type, using -item
     argument is not numeric, using 1
     missing manual name, using ""
     uname(3) system call failed, using UNKNOWN

Note that most of these fallbacks have low chances of matching what
the document author actually intended; they merely allow parsing and
formatting to continue in spite of the problem.

Sometimes, the message does not specify a fallback if none is needed
for any of various reasons, for example:

     legacy man(7) date format
     useless macro
     referenced manual not found
     input text line longer than 80 bytes
     whitespace at end of input line
     prologue macros out of order
     content before first section header
     ...

Sometimes, the message *only* specifies the workaround because that
implicitly describes the problem as well:

     skipping paragraph macro
     moving paragraph macro out of list
     skipping no-space macro
     moving content out of list
     skipping empty request
     skipping empty macro
     skipping duplicate argument
     skipping duplicate display type
     skipping duplicate list type
     skipping -width argument
     skipping unknown tbl option
     ignoring excessive spacing in tbl layout
     ignoring data in spanned tbl cell
     ignoring extra tbl data cells
     skipping late title macro
     skipping bad character
     skipping unknown macro
     skipping request outside macro
     skipping insecure request
     skipping item outside list
     skipping column outside column list
     skipping end of block that is not open
     inserting missing end of block
     appending missing end of block
     skipping display without arguments
     skipping all arguments
     skipping excess arguments
     ignoring macro in table
     skipping tbl in -Tman mode
     skipping eqn in -Tman mode

If you wonder *why* the fact described by a message is problematic
and what you might do about it, please consult the mandoc(1) manual,
in this case:

  blank line in fill mode, using .sp
  (mdoc) The meaning of blank input lines is only well-defined in non-fill
  mode: In fill mode, line breaks of text input lines are not supposed to
  be significant.  However, for compatibility with groff, blank lines in
  fill mode are formatted like sp requests.  To request a paragraph break,
  use Pp instead of a blank line.

Do *not* try to guess what to do about a message from the message itself
unless you are sure you fully understand its meaning and rationale.

That said, note that this message says ", using .sp", *not* "consider
using" or "better use".

> This seem to be contrary to what the mdoc(7) manual page says:
> 
> 	Many aspects of the basic syntax of the mdoc language are
> 	based on the roff(7) language; see the LANGUAGE SYNTAX and
> 	MACRO SYNTAX sections in the roff(7) manual for details,
> 	in particular regarding comments, escape sequences, whitespace,
> 	and quoting.  However, using roff(7) requests in mdoc
> 	documents is discouraged; mandoc(1) supports some of them
> 	merely for backward compatibility.
> 
> I'm obviously talking about the "discouraged" here as there's no
> backward compatibility to speak of - as mentioned earlier, this is
> an mdoc(7)-formatted manual page.

Yes.  Using .sp in mdoc(7) - and even in man(7)! - is usually bad
style.

> Given that '.sp' is nowhere to be found in mdoc(7) and is only
> present in roff(7), perhaps the warning should mention '.Pp' macro
> instead?

Absolutely not, that would be a lie.  Wenn you do have a blank line
in fill mode, the parser uses .sp as the fallback, *not* .Pp.

> Without knowing any of the above, one might simply take the warning
> at a face value and replace the blank line with roff(7)'s '.sp'.
> 
> What do others think? What should the linter say in order to aid
> new authors in producing better-formatted mdoc(7) manual pages?

I think the existing message is accurate and concise, and the
existing documentation is probably intelligible for newbies, too.
Maybe some may not know what "fill mode" is.  Then again, searching
for "fill" in the mdoc(7) manual brings up the description
of ".Bd -filled" as the first match, and that describes quite
well what "fill mode" means in practice.  So i'm not sure what to
improve.

Giving a rigorous description of what "fill mode" means would seem
out of scope and excessively technical for mdoc(7) and mandoc(1)
because that is a low-level roff(7) feature, and explaining it in
even more detail in roff(7) than the .fi entry already explains it
would seem out of scope even there because the mandoc roff(7) page
is not intended as exhaustive ROFF documentation, but merely a list
of syntax elements with their fundamental meanings.

Yours,
  Ingo
--
 To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Clarification needed in regards to "WARNING: blank line in fill mode, using .sp"
  2021-09-28 15:10 ` Ingo Schwarze
@ 2021-09-29 16:23   ` Raf Czlonka
  2021-09-30 13:11     ` Ingo Schwarze
  0 siblings, 1 reply; 4+ messages in thread
From: Raf Czlonka @ 2021-09-29 16:23 UTC (permalink / raw)
  To: Ingo Schwarze; +Cc: discuss

Hi Ingo,

On Tue, Sep 28, 2021 at 04:10:00PM BST, Ingo Schwarze wrote:
> 
> [...]
> 
> If you wonder *why* the fact described by a message is problematic
> and what you might do about it, please consult the mandoc(1) manual,
> in this case:
> 
>   blank line in fill mode, using .sp
>   (mdoc) The meaning of blank input lines is only well-defined in non-fill
>   mode: In fill mode, line breaks of text input lines are not supposed to
>   be significant.  However, for compatibility with groff, blank lines in
>   fill mode are formatted like sp requests.  To request a paragraph break,
>   use Pp instead of a blank line.

Sure, I did read it - it was also the reason why I've mentioned Pp.

> Do *not* try to guess what to do about a message from the message itself
> unless you are sure you fully understand its meaning and rationale.
> 
> That said, note that this message says ", using .sp", *not* "consider
> using" or "better use".

I guess one might read this as "Hey! I'm using .sp, and so should you!" ;^)

> > This seem to be contrary to what the mdoc(7) manual page says:
> > 
> > 	Many aspects of the basic syntax of the mdoc language are
> > 	based on the roff(7) language; see the LANGUAGE SYNTAX and
> > 	MACRO SYNTAX sections in the roff(7) manual for details,
> > 	in particular regarding comments, escape sequences, whitespace,
> > 	and quoting.  However, using roff(7) requests in mdoc
> > 	documents is discouraged; mandoc(1) supports some of them
> > 	merely for backward compatibility.
> > 
> > I'm obviously talking about the "discouraged" here as there's no
> > backward compatibility to speak of - as mentioned earlier, this is
> > an mdoc(7)-formatted manual page.
> 
> Yes.  Using .sp in mdoc(7) - and even in man(7)! - is usually bad
> style.
> 
> > Given that '.sp' is nowhere to be found in mdoc(7) and is only
> > present in roff(7), perhaps the warning should mention '.Pp' macro
> > instead?
> 
> Absolutely not, that would be a lie.  Wenn you do have a blank line
> in fill mode, the parser uses .sp as the fallback, *not* .Pp.

OK, a different, perhaps an easier, question then. In the most
obvious, nine times out of ten, scenario where a blank line separates
two sentences, shouldn't .Pp be used instead of .sp, given that
both the latter, as well as blank lines, are considered bad style?

Regards,

Raf
--
 To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Clarification needed in regards to "WARNING: blank line in fill mode, using .sp"
  2021-09-29 16:23   ` Raf Czlonka
@ 2021-09-30 13:11     ` Ingo Schwarze
  0 siblings, 0 replies; 4+ messages in thread
From: Ingo Schwarze @ 2021-09-30 13:11 UTC (permalink / raw)
  To: Raf Czlonka; +Cc: discuss

Hi Raf,

Raf Czlonka wrote on Wed, Sep 29, 2021 at 05:23:49PM +0100:
> On Tue, Sep 28, 2021 at 04:10:00PM BST, Ingo Schwarze wrote:

>> [...]
>> If you wonder *why* the fact described by a message is problematic
>> and what you might do about it, please consult the mandoc(1) manual,
>> in this case:
>> 
>>   blank line in fill mode, using .sp
>>   (mdoc) The meaning of blank input lines is only well-defined in non-fill
>>   mode: In fill mode, line breaks of text input lines are not supposed to
>>   be significant.  However, for compatibility with groff, blank lines in
>>   fill mode are formatted like sp requests.  To request a paragraph break,
>>   use Pp instead of a blank line.

> Sure, I did read it - it was also the reason why I've mentioned Pp.
 
>> Do *not* try to guess what to do about a message from the message itself
>> unless you are sure you fully understand its meaning and rationale.
>> 
>> That said, note that this message says ", using .sp", *not* "consider
>> using" or "better use".

> I guess one might read this as "Hey! I'm using .sp, and so should you!" ;^)

The message needs a prefix ("mandoc: <stdin>:1:1: WARNING: ", at least 30
bytes) and the main description ("blank line in fill mode", 23 bytes),
so we are left with about 78-30-23 = 25 bytes for describing the fallback
action taken by mandoc.  The wording ", using .sp" is accurate and
concise.  It is not possible to provide a long explanation within 25 bytes,
and when you try hard enough, you can misunderstand anything that is
expressed concisely.

Do you have a specific suggestion how to describe the fallback action
in a way that is harder to misunderstand, within 25 bytes?

Note that ".Pp" must *not* appear in the description of the fallback
action because that action is completely unrelated to .Pp.

>>> This seem to be contrary to what the mdoc(7) manual page says:
>>> 
>>> 	Many aspects of the basic syntax of the mdoc language are
>>> 	based on the roff(7) language; see the LANGUAGE SYNTAX and
>>> 	MACRO SYNTAX sections in the roff(7) manual for details,
>>> 	in particular regarding comments, escape sequences, whitespace,
>>> 	and quoting.  However, using roff(7) requests in mdoc
>>> 	documents is discouraged; mandoc(1) supports some of them
>>> 	merely for backward compatibility.
>>> 
>>> I'm obviously talking about the "discouraged" here as there's no
>>> backward compatibility to speak of - as mentioned earlier, this is
>>> an mdoc(7)-formatted manual page.

>> Yes.  Using .sp in mdoc(7) - and even in man(7)! - is usually bad
>> style.

>>> Given that '.sp' is nowhere to be found in mdoc(7) and is only
>>> present in roff(7), perhaps the warning should mention '.Pp' macro
>>> instead?

>> Absolutely not, that would be a lie.  Wenn you do have a blank line
>> in fill mode, the parser uses .sp as the fallback, *not* .Pp.

> OK, a different, perhaps an easier, question then. In the most
> obvious, nine times out of ten, scenario where a blank line separates
> two sentences, shouldn't .Pp be used instead of .sp, given that
> both the latter, as well as blank lines, are considered bad style?

Yes.  But so what?  The mandoc(1) manual page already says just that.

Or do you mean that i should change the behaviour of the mandoc(1)
program?  No, because that is dictated by compatibility with groff:

   $ printf "one\n\ntwo\n" | troff -mdoc | grep ^V
  mdoc warning: Empty input line #2
  V12000
  V36000
  V792000
   $ printf "one\n.sp\ntwo\n" | troff -mdoc | grep ^V
  V12000
  V36000
  V792000
   $ printf "one\n.Pp\ntwo\n" | troff -mdoc | grep ^V 
  V12000
  V30000
  V792000

https://www.gnu.org/software/groff/manual/html_node/Simple-Commands.html#Simple-Commands
describes what the above output means.

Pay attention to the second line of output.  A blank input line
moves down to the same position (V36000) as .sp, not to the
position that .Pp would move to (V30000).  So a blank line is *not*
a synonym for a paragraph break.  It is a synonym for a physical
downward movement.

Yours,
  Ingo
--
 To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-09-30 13:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-28  0:20 Clarification needed in regards to "WARNING: blank line in fill mode, using .sp" Raf Czlonka
2021-09-28 15:10 ` Ingo Schwarze
2021-09-29 16:23   ` Raf Czlonka
2021-09-30 13:11     ` Ingo Schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).