>> Attached are two patches that fix both issues. Note that the bug >> with no hyphenation in `@t` is at least 20 years old... > > And here's a better fix for the `@t` issue.
Aaand a hopefully final version that takes care of nesting. Werner
>From c49decc31ff2c4b97b08b01d1ad9125b3b7b2ec0 Mon Sep 17 00:00:00 2001 From: Werner Lemberg <w...@gnu.org> Date: Thu, 15 Dec 2022 18:28:00 +0100 Subject: [PATCH 1/2] texinfo.tex: Make `\nohyphenation` work as expected. After leaving a group, `\font` is usually a different font. Before this patch, the action of `\nohyphenation` was never reset in that case. --- doc/texinfo.tex | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/doc/texinfo.tex b/doc/texinfo.tex index dbd5166014..e5f6b18583 100644 --- a/doc/texinfo.tex +++ b/doc/texinfo.tex @@ -2817,12 +2817,24 @@ end % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} +\def\splitnumber#1#2#3{% + \edef\numfirst{#1}% + \edef\numsecond{#2}% + \edef\numthird{#3}} + % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } +\def\nohyphenation{% + \expandafter \splitnumber\the\hyphenchar\font \relax \relax + \hyphenchar\font = -1 + % We can't use a global macro with `\aftergroup` due to possible nesting. + \aftergroup\hyphenchar + \expandafter\aftergroup\the\font + \expandafter\aftergroup\numfirst + \expandafter\aftergroup\numsecond + \expandafter\aftergroup\numthird} \newif\iffrenchspacing \frenchspacingfalse -- 2.39.0
\input texinfo @verb{|@t|}: This is a @t{Long@-Long@-Word}; this is a @t{Long@-Long@-Word}; this is a @t{Long@-Long@-Word}; this is a @t{Long@-Long@-Word}; this is a @t{Long@-Long@-Word}; this is a @t{Long@-Long@-Word}; this is a @t{Long@-Long@-Word}; this is a @t{Long@-Long@-Word}. This is a @t{Long-Long-Word}; this is a @t{Long-Long-Word}; this is a @t{Long-Long-Word}; this is a @t{Long-Long-Word}; this is a @t{Long-Long-Word}; this is a @t{Long-Long-Word}; this is a @t{Long-Long-Word}; this is a @t{Long-Long-Word}. @sp 1 @verb{|@code|}: This is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}. This is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}. @sp1 @verb{|@code & @allowcodebreaks false|}: @allowcodebreaks false This is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}; this is a @code{Long@-Long@-Word}. This is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}; this is a @code{Long-Long-Word}. @sp1 @verb{|@t in @code & @allowcodebreaks false|}: @allowcodebreaks false This is a @code{@t{Long@-Long@-Word}}; this is a @code{@t{Long@-Long@-Word}}; this is a @code{@t{Long@-Long@-Word}}; this is a @code{@t{Long@-Long@-Word}}; this is a @code{@t{Long@-Long@-Word}}; this is a @code{@t{Long@-Long@-Word}}; this is a @code{@t{Long@-Long@-Word}}; this is a @code{@t{Long@-Long@-Word}}. This is a @code{@t{Long-Long-Word}}; this is a @code{@t{Long-Long-Word}}; this is a @code{@t{Long-Long-Word}}; this is a @code{@t{Long-Long-Word}}; this is a @code{@t{Long-Long-Word}}; this is a @code{@t{Long-Long-Word}}; this is a @code{@t{Long-Long-Word}}; this is a @code{@t{Long-Long-Word}}. @sp1 @verb{|@code in @code & @allowcodebreaks false|}: @allowcodebreaks false This is a @code{@code{Long@-Long@-Word}}; this is a @code{@code{Long@-Long@-Word}}; this is a @code{@code{Long@-Long@-Word}}; this is a @code{@code{Long@-Long@-Word}}; this is a @code{@code{Long@-Long@-Word}}; this is a @code{@code{Long@-Long@-Word}}; this is a @code{@code{Long@-Long@-Word}}; this is a @code{@code{Long@-Long@-Word}}. This is a @code{@code{Long-Long-Word}}; this is a @code{@code{Long-Long-Word}}; this is a @code{@code{Long-Long-Word}}; this is a @code{@code{Long-Long-Word}}; this is a @code{@code{Long-Long-Word}}; this is a @code{@code{Long-Long-Word}}; this is a @code{@code{Long-Long-Word}}; this is a @code{@code{Long-Long-Word}}. @bye