Update of bug #66392 (group groff):

                  Status:             In Progress => Invalid                
             Open/Closed:                    Open => Closed                 

    _______________________________________________________

Follow-up Comment #4:

Fair point, Dave.

I managed to muddle this issue by reporting it while I had changes pending
that I have now pushed.

Here's the problem.


$ cat EXPERIMENTS/buggy-hla.groff 
.tm .hla=\n[.hla], .hy=\n[.hy]
.ev italian
.mso it.tmac
.tm .hla=\n[.hla], .hy=\n[.hy]
.ev
.tm .hla=\n[.hla], .hy=\n[.hy]
$ ~/groff-stable/bin/groff EXPERIMENTS/buggy-hla.groff
.hla=en, .hy=4
.hla=it, .hy=1
.hla=it, .hy=4
$ ./build/test-groff EXPERIMENTS/buggy-hla.groff
.hla=en, .hy=4
.hla=it, .hy=1
.hla=en, .hy=4


In other words, bug #66387.

*However*, our _me_ and _ms_ implementations both assume the erstwhile
behavior of the formatter.  So lines hyphenate and break differently with the
fix to bug #66387 applied--not globally across the document, but in certain
environments.

Does this break backward compatibility?

With AT&T _troff_, no, or the question isn't even well-posed.  That formatter
had no concept of a hyphenation language since the only hyphenation rules it
ever applies were those for English (and as you've noticed, some subtle
differences exist even between AT&T and GNU handling of hyphenation
exceptions, such that GNU _troff_ does not assume English's most common
pluralization rule).

With GNU _troff_, the answer is yes.  I got pretty far along with a change to
_me_(7), but then decided a better approach would be to simply do stuff behind
the scenes inside the package and the localization files to essentially copy
environment 0's hyphenation language to environments 1 and 2.  A bit of a
dance will have to be done since since a default hyphenation language can come
from 3 places: (a) the formatter; (b) a localization macro file that is loaded
*after* the full-service package itself (necessitating a degree of
re-initialization); and (c) from the document.

I aim to do something similar for _ms_.

Anywhere, here's the approach I abandoned with _me_.


mit bdfbc2f61fd758fcd68e1ae2c5aa435dcc4ea0d1
Author: G. Branden Robinson <g.branden.robin...@gmail.com>
Date:   Thu Oct 31 04:46:31 2024 -0500

    [me]: Fix Savannah #66392.
    
    * tmac/e.tmac: Improve handling of hyphenation in environments 1
      (blocks, lists, keeps) and 2 (headers, footers, footnotes).
      Historically, these used hyphenation mode 1, which is incorrect with
      groff's hyphenation patterns for English and French (for example).
      Wrap the `hy` request with a macro.  New internal register `_h` stores
      the hyphenation mode set by the new `hy` macro.
    
      (xh): Renames `hy` formatter request.
    
      (hy): If the formatter claims groff compatibility, store the
      hyphenation language code in new string `_H` and copy it to the
      traditional three environments.  If given no argument, restore the
      previous hyphenation mode given to this macro (or 0 if there was no
      previous call).  This is not how AT&T troff worked (it supported only
      English anyway), but it's what most users expected (see Savannah
      #63635).
    
      (ld): Set the hyphenation mode to 6 only if the formatter does not
      claim groff compatibility.
    
    * doc/meref.me.in (Miscellaneous) <xh, hy>
      (Summary):
    * tmac/groff_me.7.man (Description, Macros): Document it.
    
    * NEWS: Add item.
    
    Fixes <https://savannah.gnu.org/bugs/?66392>.  Between this change and
    the fix for Savannah #66387, the "meintro_fr.me" document now hyphenates
    words in its blocks, lists, and keeps as a French speaker would expect.
    (...assuming a French *roff user who knows what automatic hyphenation
    mode "14", set by the document, means--among other things, "don't
    hyphenate a word prior to the third letter".)

diff --git a/ChangeLog b/ChangeLog
index e500abecd..3ffd5b815 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,37 @@
+2024-11-01  G. Branden Robinson <g.branden.robin...@gmail.com>
+
+       * tmac/e.tmac: Improve handling of hyphenation in environments 1
+       {blocks, lists, keeps} and 2 {headers, footers, footnotes}.
+       Historically, these used hyphenation mode 1, which is incorrect
+       with groff's hyphenation patterns for English and French (for
+       example).  Wrap the `hy` request with a macro.  New internal
+       register `_h` stores the hyphenation mode set by the new `hy`
+       macro.
+       (xh): Renames `hy` formatter request.
+       (hy): If the formatter claims groff compatibility, store the
+       hyphenation language code in new string `_H` and copy it to the
+       traditional three environments.  If given no argument, restore
+       the previous hyphenation mode given to this macro (or 0 if there
+       was no previous call).  This is not how AT&T troff worked (it
+       supported only English anyway), but it's what most users
+       expected (see Savannah #63635).
+       (ld): Set the hyphenation mode to 6 only if the formatter does
+       not claim groff compatibility.
+
+       * doc/meref.me.in (Miscellaneous) <xh, hy>
+       (Summary):
+       * tmac/groff_me.7.man (Description, Macros): Document it.
+
+       * NEWS: Add item.
+
+       Fixes <https://savannah.gnu.org/bugs/?66392>.  Between this
+       change and the fix for Savannah #66387, the "meintro_fr.me"
+       document now hyphenates words in its blocks, lists, and keeps
+       as a French speaker would expect.  (...assuming a French *roff
+       user who knows what automatic hyphenation mode "14", set by the
+       document, means--among other things, "don't hyphenate a word
+       prior to the third letter".)
+
 2024-10-31  G. Branden Robinson <g.branden.robin...@gmail.com>
 
        [troff]: Couple the current hyphenation language more tightly
diff --git a/NEWS b/NEWS
index e578dc8a7..b47abaded 100644
--- a/NEWS
+++ b/NEWS
@@ -398,6 +398,16 @@ Macro packages
 *  The doc (mdoc) macro package now honors the `U` register and `MF`
    string as the an (man) package does.
 
+*  The e (me) macro package now supports a new macro `xh` that
+   configures the hyphenation mode in the current environment only; `hy`
+   now applies the hyphenation mode to all of the environments the
+   package uses by default (the three traditional ones of AT&T troff).
+   If called without an argument, `hy` restores the hyphenation mode
+   specified in the previous `hy` call.  If there was none, the default
+   hyphenation mode is as configured by a groff localization file, or
+   "6" (groff me's traditional value) if the formatter does not claim
+   groff compatibility.
+
 *  The new macro file "koi8-r.tmac" supports the KOI8-R character
    encoding, which supports the new Russian locale for groff.
 
diff --git a/doc/meref.me.in b/doc/meref.me.in
index 61d04c2e2..75bb11431 100644
--- a/doc/meref.me.in
+++ b/doc/meref.me.in
@@ -1700,6 +1700,35 @@ This hook can be used to insert chapter titles
 into a table of contents.
 .sh 1 "Miscellaneous"
 .TL
+.b .xh
+.i n
+.DE
+Set automatic hyphenation mode to
+.i n
+only in the current environment.
+.TL
+.b .hy
+.i n
+.DE
+Set automatic hyphenation mode to
+.i n
+[6]\**
+.(f
+\**
+or as configured by a \*G localization macro file;
+see
+.i groff_tmac (5)
+.)f
+in all environments used by \*(ME.\**
+.(f
+\**
+\*(ME uses only the three environments of AT&T \*T,
+but in GNU \*T,
+the user can create additional ones.
+.)f
+Without an argument,
+restore previously selected hyphenation mode.
+.TL
 .b .ld
 .DE
 Update the
@@ -2346,7 +2375,9 @@ and a square \(sq labels \*G extensions.
 \&.hl  M       draw horizontal line
 \en(hm R       header margin
 \&.hx  M       suppress next page's headers/footers
-\&.hy  M\(sc   set automatic hyphenation mode
+.ie \n($m=1 .ds EV env't\"
+.el         .ds EV environment\"
+\&.hy  M       set hyphenation mode in \fIme\fP \*(EVs
 \&.i   M       italicize argument
 \&.ie  M\(sc   conditional with \fB.el\fP
 \&.if  M\(sc   conditional
@@ -2441,6 +2472,8 @@ and a square \(sq labels \*G extensions.
 \ew\(aq\fI\,S\/\fP\(aq F\(sc   interpolate formatted width of \fIS\fP
 \e*(wa S\(sq   term for \(lqappendix\(rq used by \fB.$c\fP
 \e*(wc S\(sq   term for \(lqchapter\(rq used by \fB.$c\fP
+\&.xh  M\(sq   set hyphenation mode (current \*(EV)
+.rm EV
 \&.xl  M       set line length (current environment)
 \&.xp  M       output index
 \en(xs R       index entry prespace
diff --git a/tmac/e.tmac b/tmac/e.tmac
index c2b532ce6..fe82ee5ea 100644
--- a/tmac/e.tmac
+++ b/tmac/e.tmac
@@ -537,6 +537,35 @@ .de bp                     \" *** begin new page
(overrides columns)
 .wh 0 @h                       \" reset header
 ..
 .
+.nr _h 0\"                     \" previous hyphenation mode
+.rn hy xh                      \" *** special hyphenation mode (local)
+.de hy
+.if \n(.g .do ds _H \\n[.hla]\"        \" hyphenation language code (groff)
+.ie '\\$1'' .nr __ \\n(_h
+.el \
+\{\
+.      if \n(.g .if !\B'\\$1' \
+.              do @err invalid nonnegative numeric argument to 'hy': \
+'\\$1'
+.      nr _h \\$1
+.      nr __ \\$1
+.\}
+.nr hy \\n(_h                  \" *** hypenation mode (evs 0-2)
+.ev 0
+.xh \\n(__
+.if \\n(.g .hla \\*(_H
+.ev
+.ev 1
+.xh \\n(__
+.if \\n(.g .hla \\*(_H
+.ev
+.ev 2
+.xh \\n(__
+.if \\n(.g .hla \\*(_H
+.ev
+.rr __
+..
+.
 .rn ll xl              \" *** special line length (local)
 .de ll
 .xl \\$1
@@ -2037,11 +2066,14 @@ .de ld                  \" *** (re-)initialize date
and localization
 .do ds mo \\*[_mo\\n(mo]
 .do ds td \\*[_td_format]
 .
-.\" Set package default hyphenation mode, but override it with groff's
-.\" localized value if available.
-.hy 6
-.do if r \\*[locale]*hyphenation-mode-trap \
-.  do hy \\n[\\*[locale]*hyphenation-mode-trap]
+.\" Set package default hyphenation mode, using groff's localized value
+.\" if available.
+.ie \n(.g \
+\{\
+.      do if r \\*[locale]*hyphenation-mode-trap \
+.              do hy \\n[\\*[locale]*hyphenation-mode-trap]
+.\}
+.el .hy 6
 ..
 .
 .ld
diff --git a/tmac/groff_me.7.man b/tmac/groff_me.7.man
index 9df93c274..0955ce2e4 100644
--- a/tmac/groff_me.7.man
+++ b/tmac/groff_me.7.man
@@ -153,7 +153,6 @@ .SH Description
 fc     c d     set field delimiter \fIc\fP and padding glyph \fId
 fi     \&      enable filling
 hc     c       set hyphenation character to \fIc
-hy     m       set automatic hyphenation mode to \fIm
 ie     p t     as \fBif\fP, but enable interpretation of later \fBel
 if     p t     if condition \fIp\/\fP, interpret rest of line \fIt
 in     h       set indentation to distance \fIh\fP
@@ -314,6 +313,7 @@ .SS Macros
 he     set header
 hl     draw horizontal line
 hx     suppress next page's headers/footers
+hy     set automatic hyphenation mode
 i      italicize argument
 ip     begin indented paragraph
 ld     reset localization and date registers and strings\fB*
@@ -334,6 +334,7 @@ .SS Macros
 tp     begin title page
 u      underline argument
 uh     begin unnumbered section
+xh     set automatic hyphenation mode (current environment only)\fB*
 xl     set line length (current environment only)
 xp     output index
 .TE




    _______________________________________________________

Reply to this item at:

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

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

Attachment: signature.asc
Description: PGP signature

Reply via email to