Hi Russ,

At 2025-08-24T15:21:23-0700, Russ Allbery wrote:
> "G. Branden Robinson" <g.branden.robin...@gmail.com> writes:
> 
> > No--if you mean the two examples I think you do, I was illustrating
> > how things go wrong if the amount of supplemental inter-sentence
> > space is _not_ the formatter-plus-English-"groff locale"'s default.
> 
> Ah! Thank you, now I think I understand.
> 
> The thing that I had misunderstood was that I thought the change would
> cause groff to force the spacing after " to the intersentence spacing,
> and what I am understanding now is that the change would cause groff
> to preserve the existing spacing after " instead of adjusting it to
> the intersentence spacing. Do I now have this correct?

I believe that is a correct statement.

> If that's the case, then I'm less concerned about that change since it
> sticks a bit closer to the spacing on the input. I think the main
> place where it might result in unwanted output is the case where
> regular text ends with `."` at the end of a line. Currently, when
> reflowing that text, I believe nroff would add two spaces after `."`,
> and I think under your proposal it would instead add one space, and
> thus would be inconsistent with the default intersentence spacing?

Yes, that would be another expected[1] consequence of this change.

$ cat ATTIC/double-quoted-sentence-ends-input-line.man
.TH foo 1 2025-08-24 "groff test suite"
.SH Name
foo \- frobnicate a bar
.SH Description
Some shifty hacker once said,
"Let's learn how to use
.MR find 1
effectively."
in a dubious effort to make some other point entirely.

Rendered, with a short line length and adjustment disabled to ensure
visibility of inter-sentence spacing...

$ nroff -d AD=l -r LL=65n -man ATTIC/double-quoted-sentence-ends-input-line.man
foo(1)               General Commands Manual               foo(1)

Name
     foo - frobnicate a bar

Description
     Some shifty hacker once said, "Let’s learn how to use
     find(1) effectively."  in a dubious effort to make some
     other point entirely.

groff test suite            2025‐08‐24                     foo(1)

Now simulate the proposed change...

$ diff -u ATTIC/double-quoted-sentence-ends-input-line.man 
ATTIC/double-quoted-sentence-ends-input-line-with-cflags-request.man
--- ATTIC/double-quoted-sentence-ends-input-line.man    2025-08-24 
17:32:57.531260467 -0500
+++ ATTIC/double-quoted-sentence-ends-input-line-with-cflags-request.man        
2025-08-24 17:32:48.563301165 -0500
@@ -1,4 +1,5 @@
 .TH foo 1 2025-08-24 "groff test suite"
+.cflags 0 "
 .SH Name
 foo \- frobnicate a bar
 .SH Description

...and render the altered document.

$ nroff -d AD=l -r LL=65n -man 
ATTIC/double-quoted-sentence-ends-input-line-with-cflags-request.man
foo(1)               General Commands Manual               foo(1)

Name
     foo - frobnicate a bar

Description
     Some shifty hacker once said, "Let’s learn how to use
     find(1) effectively." in a dubious effort to make some other
     point entirely.

groff test suite            2025‐08‐24                     foo(1)

Regards,
Branden

Under this proposal, the neutral double quote (a literal U+002D) loses
its transparency-at-the-end-of-a-sentence mojo.  It becomes like `#`,
`$`, `@`, or `1`--it's a full-blown sentential character and cancels any
pending end-of-sentence state.[2]

That's not a severable consequence of this proposal, but at the core of
the meaning of the `TRANSPARENT` property implemented in the formatter.

https://cgit.git.savannah.gnu.org/cgit/groff.git/tree/src/roff/troff/input.cpp?h=1.23.0#n6960

I furthermore note that if one used idiomatic groff(7) or even
historical man(7) quotation facilities, the exhibit would render
correctly whether this proposed change is made or not.

$ diff -u ATTIC/double-quoted-sentence-ends-input-line-with-cflags-request.man 
ATTIC/properly-double-quoted-sentence-ends-input-line-with-cflags-request.man 
--- ATTIC/double-quoted-sentence-ends-input-line-with-cflags-request.man        
2025-08-24 17:32:48.563301165 -0500
+++ 
ATTIC/properly-double-quoted-sentence-ends-input-line-with-cflags-request.man   
     2025-08-24 17:51:06.701726344 -0500
@@ -4,7 +4,8 @@
 foo \- frobnicate a bar
 .SH Description
 Some shifty hacker once said,
-"Let's learn how to use
+.\" Use ultra-portable quotation facility.  Only Plan 9 troff lacks it.
+\*(lqLet's learn how to use
 .MR find 1
-effectively."
+effectively.\*(rq
 in a dubious effort to make some other point entirely.
$ nroff -d AD=l -r LL=65n -man 
ATTIC/properly-double-quoted-sentence-ends-input-line-with-cflags-request.man
foo(1)               General Commands Manual               foo(1)

Name
     foo - frobnicate a bar

Description
     Some shifty hacker once said, “Let’s learn how to use
     find(1) effectively.”  in a dubious effort to make some
     other point entirely.

groff test suite            2025‐08‐24                     foo(1)

Even formatted as ASCII it's correct, because input characters are not
output characters.  (I have seen people struggle with this distinction.)

$ nroff -d AD=l -r LL=65n -man -T ascii 
ATTIC/properly-double-quoted-sentence-ends-input-line-with-cflags-request.man
foo(1)               General Commands Manual               foo(1)

Name
     foo - frobnicate a bar

Description
     Some shifty hacker once said, "Let's learn how to use
     find(1) effectively."  in a dubious effort to make some
     other point entirely.

groff test suite            2025-08-24                     foo(1)

As noted, only Plan 9 troff lacks resort to these `lq` and `rq` strings.
It's magnificently portable.[3]  Today, when not composing emails, I've
been working on patches to Plan 9 from User Space to submit as a GitHub
pull request.

Regards,
Branden

[1] if you're a *roff nerd

[2] I don't use letters as examples here, even if they technically
    qualify, because letters are also candidates for adjacent
    hyphenation breaks whereas most punctuation characters are not, and
    I didn't want to drag in other formatting issues.

    Also, I acknowledge that I must put a coin in the "nonce terminology
    swear jar" for "sentential character".  :-|

[3] https://savannah.gnu.org/bugs/?67448#comment5

Attachment: signature.asc
Description: PGP signature

Reply via email to