Update of bug #68256 (group groff):

                  Status:               Need Info => Confirmed
             Assigned to:                    deri => gbranden
         Planned Release:                    None => 1.25.0
                 Summary: [troff] `.bd S 3 3` doesn't work => [troff] get `bd`
request out of conditional emboldening business and make `M` its default
scaling unit

    _______________________________________________________

Follow-up Comment #24:

Given the analysis in comment #23, one might fairly wonder whether GNU _troff_
has regressed in this area.

My answer: not recently.

Using the same input exhibit as in comment #23:


$ cat EXPERIMENTS/bd-S-3-3.roff 
.if \nB .bd S B 3
.ft B
Had we world enough +\(mi\(mu\(di\(** time.\|.\|.


I observe the following:


$ ~/groff-HEAD/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-HEAD.grout
$ ~/groff-1.24.1/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1241.grout
$ ~/groff-1.24.0/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1240.grout
$ ~/groff-1.23.0/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1230.grout
$ ~/groff-1.22.4/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1224.grout
$ ~/groff-1.22.3/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1223.grout
$ diff -U0 bd-S-3-3-groff-1223.grout bd-S-3-3-groff-1224.grout && echo SAME
SAME
$ diff -U0 bd-S-3-3-groff-1224.grout bd-S-3-3-groff-1230.grout && echo SAME
SAME
$ diff -U0 bd-S-3-3-groff-1230.grout bd-S-3-3-groff-1240.grout && echo SAME
--- bd-S-3-3-groff-1230.grout   2026-07-08 01:51:07.033677293 -0500
+++ bd-S-3-3-groff-1240.grout   2026-07-08 01:50:41.653742635 -0500
@@ -8,2 +7,0 @@
-V12000
-H72000
@@ -11,0 +10,2 @@
+V12000
+H72000
$ diff -U0 bd-S-3-3-groff-1240.grout bd-S-3-3-groff-1241.grout && echo SAME
SAME
$ ^Cff -U0 bd-S-3-3-groff-1240.grout bd-S-3-3-groff-1241.grout && echo SAME
$ diff -U0 bd-S-3-3-groff-1241.grout bd-S-3-3-groff-HEAD.grout && echo SAME
SAME


The change in "grout" from 1.23.0 to 1.24.0 is immaterial to this ticket; it
is a change in sequencing of absolute motion commands.  For emboldening, we
expect to see "local" (relative) motions and additional glyph writing
commands.

What about Deri's preferred form?


$ cat EXPERIMENTS/bd-S-B-3.roff 
.if \nB .bd S B 3
.ft B
Had we world enough +\(mi\(mu\(di\(** time.\|.\|.


I observe the following:


$ ~/groff-HEAD/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-HEAD.grout
$ ~/groff-1.24.1/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-1241.grout
$ ~/groff-1.24.0/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-1240.grout
$ ~/groff-1.23.0/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-1230.grout
$ ~/groff-1.22.4/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-1224.grout
$ diff -U0 bd-S-3-3-groff-1223.grout bd-S-3-3-groff-1224.grout && echo SAME
diff -U0 bd-S-B-3-groff-1223.grout bd-S-B-3-groff-1224.grout && echo SAME
SAME
$ diff -U0 bd-S-B-3-groff-1223.grout bd-S-B-3-groff-1224.grout && echo SAME
diff -U0 bd-S-B-3-groff-1224.grout bd-S-B-3-groff-1230.grout && echo SAME
SAME
$ diff -U0 bd-S-B-3-groff-1224.grout bd-S-B-3-groff-1230.grout && echo SAME
diff -U0 bd-S-B-3-groff-1230.grout bd-S-B-3-groff-1240.grout && echo SAME
--- bd-S-B-3-groff-1230.grout   2026-07-08 02:06:24.787185386 -0500
+++ bd-S-B-3-groff-1240.grout   2026-07-08 02:06:01.179288593 -0500
@@ -8,2 +7,0 @@
-V12000
-H72000
@@ -11,0 +10,2 @@
+V12000
+H72000
$ diff -U0 bd-S-B-3-groff-1230.grout bd-S-B-3-groff-1240.grout && echo SAME
diff -U0 bd-S-B-3-groff-1240.grout bd-S-B-3-groff-1241.grout && echo SAME
SAME
$ diff -U0 bd-S-B-3-groff-1240.grout bd-S-B-3-groff-1241.grout && echo SAME
diff -U0 bd-S-B-3-groff-1241.grout bd-S-B-3-groff-HEAD.grout && echo SAME
SAME


So the answer is: no, GNU _troff_ has not changed handling 'conditional
emboldening'.  The feature doesn't work, it's probably never worked, and in
that respect it is not distinguishable from AT&T _troff_ since, probably, at
least DWB 2.0/System V _troff_ (1984/5/6), and maybe since Kernighan's
device-independent rewrite of _troff_ circa 1980.

My new plan for _groff_ 1.25 is:

1.  Simplify the `bd` request handler to support only one- and two-argument
forms.  Use my new `read_font_identifier()` function for orthogonality (and to
prompt a celebration in the Deri James household) to gather the first
argument.  (That is, either a mounting position or font name will be
accepted.)
2.  Change the `bd` request handler to use a default scaling unit of `M`.  As
this ticket has established, a default scaling unit of `u` is unportable
between devices because device resolutions vary, and a default of `u`
unnecessarily makes life harder for document authors.
3.  Document the foregoing changes to request semantics with respect to what
_is_ implemented.
4.  Document the universal yet little-noticed brokenness of conditional
emboldening, possibly in a footnote in the "Other Differences" section of our
manual.  This fact also constitutes a CSTR #54 erratum. 
5.  Spawn a new Wish/Feature Change ticket to record the desire for a properly
working conditional emboldening feature.  For now, I propose the request name
`condbd`.  The new default scaling unit should closely enough resemble the
(bizarre) semantics of Ossanna _troff_ conditional emboldening that legacy
documents using `.bd S 3 3` and `.bd S B 3` should witness a noticeable
emboldening effect.  N.B. that pixel perfection is not the goal.  _troff_s
have never shipped their own fonts, so all reconstructions of historical
documents are at the mercy of the installed font repertoire of the host
system.


    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?68256>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to