texlive[76095] trunk: fontools (19aug25)

commits+karl at tug.org commits+karl at tug.org
Tue Aug 19 21:50:41 CEST 2025


Revision: 76095
          https://tug.org/svn/texlive?view=revision&revision=76095
Author:   karl
Date:     2025-08-19 21:50:41 +0200 (Tue, 19 Aug 2025)
Log Message:
-----------
fontools (19aug25)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/fontools/afm2afm
    trunk/Build/source/texk/texlive/linked_scripts/fontools/autoinst
    trunk/Build/source/texk/texlive/linked_scripts/fontools/ot2kpx
    trunk/Master/texmf-dist/doc/man/man1/afm2afm.1
    trunk/Master/texmf-dist/doc/man/man1/afm2afm.man1.pdf
    trunk/Master/texmf-dist/doc/man/man1/autoinst.1
    trunk/Master/texmf-dist/doc/man/man1/autoinst.man1.pdf
    trunk/Master/texmf-dist/doc/man/man1/ot2kpx.1
    trunk/Master/texmf-dist/doc/man/man1/ot2kpx.man1.pdf
    trunk/Master/texmf-dist/doc/support/fontools/splitttc
    trunk/Master/texmf-dist/scripts/fontools/afm2afm
    trunk/Master/texmf-dist/scripts/fontools/autoinst
    trunk/Master/texmf-dist/scripts/fontools/ot2kpx

Modified: trunk/Build/source/texk/texlive/linked_scripts/fontools/afm2afm
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/fontools/afm2afm	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Build/source/texk/texlive/linked_scripts/fontools/afm2afm	2025-08-19 19:50:41 UTC (rev 76095)
@@ -37,7 +37,7 @@
 use Getopt::Long;
 use Pod::Usage;
 
-my $VERSION = "20250107";
+my $VERSION = "20250819";
 
 parse_commandline();
 
@@ -421,7 +421,7 @@
 
 =head1 VERSION
 
-This document describes B<afm2afm> version 20250107.
+This document describes B<afm2afm> version 20250819.
 
 
 =head1 RECENT CHANGES

Modified: trunk/Build/source/texk/texlive/linked_scripts/fontools/autoinst
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/fontools/autoinst	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Build/source/texk/texlive/linked_scripts/fontools/autoinst	2025-08-19 19:50:41 UTC (rev 76095)
@@ -41,7 +41,7 @@
 use Pod::Usage ();
 use POSIX ();
 
-my $VERSION = '20250107';
+my $VERSION = '20250819';
 
 my ($d, $m, $y) = (localtime time)[3 .. 5];
 my $TODAY = sprintf "%04d/%02d/%02d", $y + 1900, $m + 1, $d;
@@ -284,7 +284,7 @@
     c   =>  [ qw( condensed ) ],
     sc  =>  [ qw( semicondensed narrow ) ],
     ''  =>  [ qw( regular ) ],
-    sx  =>  [ qw( semiextended semiexpanded wide) ],
+    sx  =>  [ qw( semiextended semiexpanded wide ) ],
     x   =>  [ qw( extended expanded ) ],
     ex  =>  [],
     ux  =>  [],
@@ -809,13 +809,16 @@
         $data->{subfamily} =~ s/\A (?: ST | T | SD | D)//xms;
     }
 
-    # Adobe's Source Serif 4 family name contains the name of the optical master;
-    # we don't want this, as all these fonts should be part of the same family,
+    # Some extended font families, especially from Adobe,
+    # include the optical master in the family name.
+    # We don't want this, as all these fonts should be part of the same family,
     # with different values for the optical size range.
     # We therefore move the optical master name from the family to the subfamily.
     # We don't discard this information entirely, since we need it later on
     # in _parse_sizedata().
-    if ($data->{family} =~ m/SourceSerifFour/xmsi) {
+    # This hack causes problems with Libertinus Serif Display,
+    # so we skip it for that font.
+    if ($data->{family} !~ m/Libertinus/xmsi) {
         for my $optical (qw(Caption SmText SmallText Subhead Display)) {
             if ($data->{family} =~ s/$optical\z//xms) {
                 $data->{subfamily} .= $optical;
@@ -831,6 +834,10 @@
     # remove Adobe's SmallText size, to avoid mistaking it for Text weight
     $fullinfo =~ s/(?: SmallText | SmText )//gxmsi;
 
+    # remove the word 'TypeWriter' from the info, to avoid it matching
+    # against the "It" shape
+    $fullinfo =~ s/typewriter//gxmsi;
+
     # We need to be careful when parsing the font info; in particular
     # we must parse strings like 'UltraCondensed' as 'Regular' weight
     # and 'UltraCondensed' width, not as 'Ultra' weight and 'Condensed' width.
@@ -1067,10 +1074,10 @@
         && $minsize == 8.9 && $maxsize == 13.9) {
         ($minsize, $maxsize) = (23, 72);
     }
-    # Adobe's Source Serif 4 follows the latest version of the OpenType
-    # spec and keeps its optical size info in the STAT (Style Attributes)
-    # table rather than in the OS/2 table. This isn't (yet?) supported
-    # by otfinfo, so we add the missing size info here.
+    # Adobe's Source Serif 4 follows a recent version of the OpenType
+    # spec and keeps its optical size info as a `size` feature rather
+    #  than in the OS/2 table. This isn't (yet?) supported by otfinfo,
+    #  so we add the missing size info here.
     elsif ($self->{family} eq 'SourceSerifFour'
         && $minsize == 0 && $maxsize == 0) {
         if ($self->{subfamily} eq 'Caption') {
@@ -1277,7 +1284,7 @@
     binmode $STY;
 
     print {$STY} <<"END_STY_HEADER";
-\\NeedsTeXFormat{LaTeX2e}
+\\NeedsTeXFormat{LaTeX2e}[2020/02/02]
 \\ProvidesPackage{$fam}
     [$TODAY (autoinst)  Style file for $fam fonts.]
 
@@ -1398,9 +1405,13 @@
     print {$STY} "\\RequirePackage[@{[ join ',', grep { $_ ne 'OT1' } @{$ARGV{encoding}} ]}]{fontenc}\n";
     print {$STY} "\\RequirePackage{textcomp}\n" if $seen{TS1};
     print {$STY} "\\RequirePackage{ifthen}\n";
-    print {$STY} "\\RequirePackage{mweights}\n";
     print {$STY} "\n";
 
+    ##  TODO:
+    #   remove `fontaxes` package, rewrite the following bits using
+    #   LaTeX kernel functionality (i.e., \DeclareFontShapeChangeRule)
+    #   and the `figureversions` package.
+
     print {$STY} <<'END_STY_FONTAXES_START';
 \IfFileExists{fontaxes.sty}{
     \RequirePackage{fontaxes}
@@ -1534,7 +1545,7 @@
         \\settoheight{\\$fam\@xheight}
             {{\\font\\testfont=$testfont at \\f\@size pt\\testfont x}}
         \\renewcommand*{\\$fam\@scale}
-            {\\strip\@pt\\dimexpr\\number\\numexpr\\number\\dimexpr\\$fam\@currentx\\relax*65536/\\number\\dimexpr\\$fam\@xheight\\relax\\relax sp\\relax}}
+            {\\fpeval{\\$fam\@currentx / \\$fam\@xheight}}}
     {}
 
 END_STY_MATCHLOWERCASE
@@ -3418,20 +3429,24 @@
     # Don't create ligatures if the user doesn't want them.
     delete $feature{liga} if !$ARGV{ligatures};
 
-    # Don't create kerns and ligatures for symbol or math fonts.
+    # Don't create kerns and ligatures for symbol or otherwise "unencoded" fonts.
     delete @feature{qw(kern liga)}
-        if $workitem->{encoding} =~ m/\A ( TS\d | OML ) \z/xmsi;
+        if $workitem->{encoding} =~ m/\A ( TS\d | OM[LS] ) \z | \A U_ /xmsi;
 
     $workitem->{features} = [ sort keys %feature ];
 
     # Generate a unique name for this font.
+    (my $encoding = lc $workitem->{encoding}) =~ s/\A u_ //xms;
     $workitem->{fontname}
             = join '-', grep { $_ } $font->{name},
                                     lc $figurestyle,
                                     lc Tables::get_name($style),
-                                    lc $workitem->{encoding};
+                                    $encoding;
 
     $workitem->{encoding} = uc $workitem->{encoding};
+    if ($workitem->{encoding} =~ m/\A U_/xms) {
+        $workitem->{encoding} = 'U';
+    }
 
     return $workitem;
 }
@@ -3784,8 +3799,6 @@
 
 =back
 
-The last two groups of options will only work if
-you have the F<mweights> package installed.
 The default here is not to change LaTeX's default,
 i.e. use the "m" and "b" weights.
 
@@ -4101,10 +4114,19 @@
 the filename of an encoding file, and if found it will use that;
 otherwise the argument is assumed to be the name of one of
 the built-in encodings.
+If the argument is a filename,
+B<autoinst> will define the font with an NFSS encoding
+equal to the filename (minus a ".enc" extension),
+except when the filename starts with "U_";
+in that case the NFSS encoding will be "U"
+and the part after "U_" will be used as the "enc" part
+of the name of the generated font.
+
 Currently B<autoinst> comes with built-in support for the OT1, T1/TS1, LY1,
 T2A/B/C, T3/TS3, T4, T5, LGR, CS, L7X and QX encodings.
-(These files are called F<fontools_ot1.enc> etc. to avoid name clashes
-with other packages; the F<fontools_> prefix may be omitted.)
+(The corresponding files are called F<fontools_ot1.enc> etc.,
+to avoid name clashes with other packages;
+the F<fontools_> prefix may be omitted.)
 
 =item B<-ts1>/B<-nots1>
 
@@ -4409,7 +4431,7 @@
 
 =head1 VERSION
 
-This document describes B<autoinst> version 20250107.
+This document describes B<autoinst> version 20250819.
 
 
 =head1 RECENT CHANGES
@@ -4418,6 +4440,29 @@
 
 =over 12
 
+=item I<2025-08-19>
+
+Fixed a bug where any fonts with the word "Typewriter"
+in their name would be parsed as "Italic".
+
+=item I<2025-07-02>
+
+The hack in font metadata parsing for Source Serif 4
+(See 2025-01-07) is also needed for other fonts;
+at least for Arno Pro, maybe some other Adobe fonts as well.
+So we changed the test again: we apply this hack by default,
+except for Libertinus.
+
+=item I<2025-06-23>
+
+Introduced the "U_" rule for encoding file names.
+
+=item I<2025-04-16>
+
+Don't load the I<mweights> package, as its functionality
+is now part of the LaTeX kernel
+(and, in fact, has been for a while ...).
+
 =item I<2025-01-07>
 
 The 'fix' in font metadata parsing that we introduced

Modified: trunk/Build/source/texk/texlive/linked_scripts/fontools/ot2kpx
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/fontools/ot2kpx	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Build/source/texk/texlive/linked_scripts/fontools/ot2kpx	2025-08-19 19:50:41 UTC (rev 76095)
@@ -38,7 +38,7 @@
 use List::Util @List::Util::EXPORT_OK;
 use Pod::Usage;
 
-my $VERSION = "20250107";
+my $VERSION = "20250819";
 
 our ($NUM_GLYPHS, $UNITS_PER_EM, %kern);
 
@@ -858,7 +858,7 @@
 
 =head1 VERSION
 
-This document describes B<ot2kpx> version 20250107.
+This document describes B<ot2kpx> version 20250819.
 
 
 =head1 RECENT CHANGES

Modified: trunk/Master/texmf-dist/doc/man/man1/afm2afm.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/afm2afm.1	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Master/texmf-dist/doc/man/man1/afm2afm.1	2025-08-19 19:50:41 UTC (rev 76095)
@@ -1,5 +1,5 @@
 .\" -*- mode: troff; coding: utf-8 -*-
-.\" Automatically generated by Pod::Man 5.0102 (Pod::Simple 3.45)
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -52,10 +52,13 @@
 .    \}
 .\}
 .rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
 .\" ========================================================================
 .\"
 .IX Title "AFM2AFM 1"
-.TH AFM2AFM 1 2025-01-07 fontools "Marc Penninga"
+.TH AFM2AFM 1 2025-08-19 fontools "Marc Penninga"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -74,7 +77,7 @@
 \&\fB<afmfile>\fR
 .SH DESCRIPTION
 .IX Header "DESCRIPTION"
-\&\fBafm2afm\fR re-encodes an \fIafm\fR file.
+\&\fBafm2afm\fR re\-encodes an \fIafm\fR file.
 .PP
 Metrics (including kerning data) for characters not present in the
 chosen encoding are excluded from the output, which resuls in
@@ -81,12 +84,12 @@
 (potentially much) smaller files.
 .PP
 Additional kerning pairs can be added to the output file.
-If you don't specify an encoding file,
-the \fIafm\fR file isn't re-encoded;
+If you don\*(Aqt specify an encoding file,
+the \fIafm\fR file isn\*(Aqt re\-encoded;
 however, all unused (unencoded) data is still pruned.
 .PP
 The program also generates an entry for a \fIdvips\fR\-style map file,
-but only if the \fIafm\fR file has been re-encoded and
+but only if the \fIafm\fR file has been re\-encoded and
 the output was written to file
 (i.e., if both the \fI\-encoding\fR and \fI\-output\fR options were specified).
 .SH "OPTIONS AND ARGUMENTS"
@@ -99,7 +102,7 @@
 Print version number and exit
 .IP \fB\-encoding\fR=\fI<encodingfile>\fR 4
 .IX Item "-encoding=<encodingfile>"
-Re-encode to the enconding in \fI<encodingfile>\fR
+Re\-encode to the enconding in \fI<encodingfile>\fR
 .IP \fB\-kpx\fR=\fI<kpxfile>\fR 4
 .IX Item "-kpx=<kpxfile>"
 Read additional kerning pairs from \fI<kpxfile>\fR and add these to the output.
@@ -119,7 +122,7 @@
 Write the result to \fI<outputfile>\fR instead of \f(CW\*(C`stdout\*(C'\fR.
 .IP \fB<afmfile>\fR 4
 .IX Item "<afmfile>"
-The \fIafm\fR file to be re-encoded.
+The \fIafm\fR file to be re\-encoded.
 .PP
 You may use either one or two dashes before options,
 and option names may be shortened to a unique prefix.
@@ -145,7 +148,7 @@
 See the GNU General Public License for more details.
 .SH VERSION
 .IX Header "VERSION"
-This document describes \fBafm2afm\fR version 20250107.
+This document describes \fBafm2afm\fR version 20250819.
 .SH "RECENT CHANGES"
 .IX Header "RECENT CHANGES"
 (See the source code for the rest of the story.)

Modified: trunk/Master/texmf-dist/doc/man/man1/afm2afm.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/man/man1/autoinst.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/autoinst.1	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Master/texmf-dist/doc/man/man1/autoinst.1	2025-08-19 19:50:41 UTC (rev 76095)
@@ -1,5 +1,5 @@
 .\" -*- mode: troff; coding: utf-8 -*-
-.\" Automatically generated by Pod::Man 5.0102 (Pod::Simple 3.45)
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -52,10 +52,13 @@
 .    \}
 .\}
 .rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
 .\" ========================================================================
 .\"
 .IX Title "AUTOINST 1"
-.TH AUTOINST 1 2025-01-07 fontools "Marc Penninga"
+.TH AUTOINST 1 2025-08-19 fontools "Marc Penninga"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -70,10 +73,10 @@
 \&\fBautoinst\fR [\fIoptions\fR] \fBfont(s)\fR
 .SH DESCRIPTION
 .IX Header "DESCRIPTION"
-Eddie Kohler's \fILCDF TypeTools\fR are superb tools for installing
+Eddie Kohler\*(Aqs \fILCDF TypeTools\fR are superb tools for installing
 OpenType fonts in LaTeX, but they can be hard to use:
 they need many, often long, command lines
-and don't generate the \fIfd\fR and \fIsty\fR files LaTeX needs.
+and don\*(Aqt generate the \fIfd\fR and \fIsty\fR files LaTeX needs.
 \&\fBautoinst\fR simplifies the use of the \fITypeTools\fR for font installation
 by generating and executing all commands for \fIotftotfm\fR,
 and by creating and installing all necessary \fIfd\fR and \fIsty\fR files.
@@ -121,7 +124,7 @@
 Families with "Titling" characters;
 these \fI"... replace the default glyphs
 with corresponding forms designed specifically for titling.
-These may be all-capital and/or larger on the body,
+These may be all\-capital and/or larger on the body,
 and adjusted for viewing at larger sizes"\fR
 (according to the OpenType Specification).
 .IP \- 3
@@ -130,12 +133,12 @@
 .RS 2
 .RE
 .PP
-Of course, if your fonts don't contain italics, oldstyle digits, small caps
+Of course, if your fonts don\*(Aqt contain italics, oldstyle digits, small caps
 etc., the corresponding shapes and families are not created.
 In addition, the creation of most families and shapes can be controlled
-by the user (see "COMMAND-LINE OPTIONS" below).
+by the user (see "COMMAND\-LINE OPTIONS" below).
 .PP
-These families use the \fIFontPro\fR project's naming scheme:
+These families use the \fIFontPro\fR project\*(Aqs naming scheme:
 \&\fI<FontFamily>\-<Suffix>\fR, where \fI<Suffix>\fR is:
 .IP \fILF\fR 8
 .IX Item "LF"
@@ -187,7 +190,7 @@
 .IX Item "mainfont"
 Redefine \f(CW\*(C`\efamilydefault\*(C'\fR to make this font the main font
 for the document.
-This is a no-op if the font is installed as a serif font;
+This is a no\-op if the font is installed as a serif font;
 but if the font is installed as a sanserif or typewriter font,
 this option saves you from having to redefine \f(CW\*(C`\efamilydefault\*(C'\fR
 yourself.
@@ -201,7 +204,7 @@
 .IX Item "scale=<factor>, scale=MatchLowercase"
 Scale the font by \fI<factor>\fR;
 as an example, \f(CW\*(C`\eusepackage[scale=1.05]{\fR\f(CI<FontFamily>\fR\f(CW}\*(C'\fR
-will increase the font's size by 5%.
+will increase the font\*(Aqs size by 5%.
 The special value \f(CW\*(C`MatchLowercase\*(C'\fR may be used to scale the font
 so that its x\-height matches that of the current main font
 (which is usually Computer Modern Roman, unless you have loaded
@@ -216,9 +219,7 @@
 .IX Item "heavy, black, extrabold, demibold, semibold, bold"
 Select the weight that LaTeX will use as the "bold" weight.
 .PP
-The last two groups of options will only work if
-you have the \fImweights\fR package installed.
-The default here is not to change LaTeX's default,
+The default here is not to change LaTeX\*(Aqs default,
 i.e. use the "m" and "b" weights.
 .PP
 The style file will also try to load the \fIfontaxes\fR package
@@ -225,7 +226,7 @@
 (on CTAN), which gives easy access to various font shapes and styles.
 Using the machinery set up by \fIfontaxes\fR, the generated style file
 defines a number of commands (which take the text to be typeset as argument)
-and declarations (which don't take arguments, but affect all text up to
+and declarations (which don\*(Aqt take arguments, but affect all text up to
 the end of the current group) to access titling, superior and inferior
 characters:
 .PP
@@ -238,31 +239,31 @@
 .Ve
 .PP
 In addition, the existing \f(CW\*(C`\eswshape\*(C'\fR and \f(CW\*(C`\etextsw\*(C'\fR commands are redefined
-to place swash on \fIfontaxes\fR' secondary shape axis (\fIfontaxes\fR places it
+to place swash on \fIfontaxes\fR\*(Aq secondary shape axis (\fIfontaxes\fR places it
 on the primary shape axis) to make them behave properly when nested, so that
 \&\f(CW\*(C`\eswshape\eupshape\*(C'\fR will give upright swash.
 .PP
-Finally, the style file redefines Latex's \f(CW\*(C`\etextsuperscript\*(C'\fR and
-\&\f(CW\*(C`\etextsubscript\*(C'\fR commands to use the fonts' superior and inferior figures,
-and modifies Latex's footnote mechanism to use \f(CW\*(C`\etextsuperscript\*(C'\fR
-instead of reduced-size numerals from the regular text font.
+Finally, the style file redefines Latex\*(Aqs \f(CW\*(C`\etextsuperscript\*(C'\fR and
+\&\f(CW\*(C`\etextsubscript\*(C'\fR commands to use the fonts\*(Aq superior and inferior figures,
+and modifies Latex\*(Aqs footnote mechanism to use \f(CW\*(C`\etextsuperscript\*(C'\fR
+instead of reduced\-size numerals from the regular text font.
 The old versions of these commands are still available as
 \&\f(CW\*(C`\etextsuperscript*\*(C'\fR and \f(CW\*(C`\etextsubscript*\*(C'\fR.
 .PP
 There are no commands for accessing the numerator and denominator
-fonts; these can be selected using \fIfontaxes\fR' standard commands,
+fonts; these can be selected using \fIfontaxes\fR\*(Aq standard commands,
 e.g., \f(CW\*(C`\efontfigurestyle{numerator}\eselectfont\*(C'\fR.
 .PP
 Once again: all these commands are only generated for existing shapes and number styles;
 no commands are generated for shapes and styles that are missing from your fonts.
 Note that all these commands are built on top of \fIfontaxes\fR; if that package
-cannot be found, you're limited to using lower-level commands from
+cannot be found, you\*(Aqre limited to using lower\-level commands from
 standard NFSS (\f(CW\*(C`\efontfamily\*(C'\fR, \f(CW\*(C`\efontseries\*(C'\fR, \f(CW\*(C`\efontshape\*(C'\fR etc.).
 .PP
 By default, \fBautoinst\fR generates text fonts with OT1, LY1 and T1
 encodings, and the generated style files use T1 as the default text encoding.
 Other encodings can be chosen using the \fI\-encoding\fR option
-(see "COMMAND-LINE OPTIONS" below).
+(see "COMMAND\-LINE OPTIONS" below).
 .SS Maths
 .IX Subsection "Maths"
 This is an experimental feature; \fBUSE AT YOUR OWN RISK!\fR
@@ -291,7 +292,7 @@
 .ie n .IP """nomathgreek""" 4
 .el .IP \f(CWnomathgreek\fR 4
 .IX Item "nomathgreek"
-Don't redeclare greek letters in math.
+Don\*(Aqt redeclare greek letters in math.
 .ie n .IP """math\-style=\fI<style>\fR""" 4
 .el .IP \f(CWmath\-style=\fR\f(CI<style>\fR\f(CW\fR 4
 .IX Item "math-style=<style>"
@@ -308,17 +309,17 @@
 Note that this \f(CW\*(C`math\*(C'\fR option only affects digits, latin and greek letters,
 plus a few basic punctuation characters; all other mathematical symbols,
 operators, delimiters etc. are left as they were before.
-If you don't want to use TeX's default versions of those symbols,
+If you don\*(Aqt want to use TeX\*(Aqs default versions of those symbols,
 load another math package (such as \fImathdesign\fR or \fInewtxmath\fR)
 before loading the \fBautoinst\fR\-generated style file.
 .PP
-Finally, note that \fBautoinst\fR doesn't check if your fonts actually contains
+Finally, note that \fBautoinst\fR doesn\*(Aqt check if your fonts actually contains
 all of the required characters;
 it just assumes that they do and sets up the style file accordingly.
 Even if your fonts do contain greek, characters such as \f(CW\*(C`\evarepsilon\*(C'\fR
 may be missing.
 You may also find that some glyphs \fIare\fR present in your fonts,
-but don't work well in equations or don't match other symbols;
+but don\*(Aqt work well in equations or don\*(Aqt match other symbols;
 edit the generated style file to remove the declarations of
 these offending characters.
 Once again: test the results before using them!
@@ -327,15 +328,15 @@
 the \fI\-mathspacing\fR option (see below), e.g. \f(CW\*(C`\-mathspacing=50\*(C'\fR.
 .SS "NFSS codes"
 .IX Subsection "NFSS codes"
-LaTeX's New Font Selection System (NFSS)
+LaTeX\*(Aqs New Font Selection System (NFSS)
 identifies fonts by a combination of family,
 series (the concatenation of weight and width), shape and size.
-\&\fBautoinst\fR parses the font's metadata to determine these parameters.
+\&\fBautoinst\fR parses the font\*(Aqs metadata to determine these parameters.
 When this fails (usually because the font family contains uncommon weights,
 widths or shapes),
 \&\fBautoinst\fR ends up with multiple fonts having the same values
 for these font parameters; such fonts cannot be used in NFSS,
-since there's no way distinguish them.
+since there\*(Aqs no way distinguish them.
 When \fBautoinst\fR detects such a situation, it will print an error message
 and abort.
 If that happens, either rerun \fBautoinst\fR on a smaller set of fonts,
@@ -355,7 +356,7 @@
 .PP
 (\fIException:\fR Adobe Silentium Pro contains two Roman shapes;
 we map the first of these to \f(CW\*(C`n\*(C'\fR, for the second one we (ab)use the \f(CW\*(C`it\*(C'\fR code
-as this family doesn't contain an Italic shape.)
+as this family doesn\*(Aqt contain an Italic shape.)
 .PP
 For weights and widths, \fBautoinst\fR tries to the standard NFSS codes
 (ul, el, l, sl, m, sb, b, eb and ub for weights;
@@ -365,7 +366,7 @@
 to existing fonts;
 and conversely it may not be possible to assign every existing font
 a unique code in a sane way (especially for the weights,
-some font families offer more variants than NFSS's codes can handle;
+some font families offer more variants than NFSS\*(Aqs codes can handle;
 e.g., Fira Sans contains fifteen different weights!).
 Therefore every font is also assigned a "series" name that is
 the concatenation of its weight and width,
@@ -377,7 +378,7 @@
 in the generated \fIfd\fR files and in the log file
 (you may want to run \fBautoinst\fR with the \fI\-dryrun\fR option
 to check the chosen mapping beforehand).
-The \fI\-nfssweight\fR and \fI\-nfsswidth\fR command-line options can be used
+The \fI\-nfssweight\fR and \fI\-nfsswidth\fR command\-line options can be used
 to finetune the mapping between NFSS codes and fonts.
 .PP
 To access specific weights or widths,
@@ -407,31 +408,31 @@
 .IX Header "WARNINGS AND CAVEATS"
 .SS "OpenType fonts and licensing issues"
 .IX Subsection "OpenType fonts and licensing issues"
-Since \fIpdfTeX\fR cannot subset otf-flavoured OpenType fonts,
+Since \fIpdfTeX\fR cannot subset otf\-flavoured OpenType fonts,
 \&\fIotftotfm\fR will convert such fonts to Type1 (pfb) format.
 However, many fonts (at least those licensed under the SIL Open Font License)
 do not allow redistributing such converted versions under their original name.
 .PP
 In order to try to meet such licensing requirements, \fBautoinst\fR provides
-a \fI\-t1suffix\fR command-line option that appends a suffix to the names
+a \fI\-t1suffix\fR command\-line option that appends a suffix to the names
 (both the filename and the internal font name)
-of all generated Type1 fonts; see "COMMAND-LINE OPTIONS" below.
+of all generated Type1 fonts; see "COMMAND\-LINE OPTIONS" below.
 .PP
 Please note that I am not a lawyer and do not guarantee that
-this suffix is sufficient to meet the license's requirements.
+this suffix is sufficient to meet the license\*(Aqs requirements.
 When in doubt, consult a real lawyer!
 .SS "Sorry, LIGTABLE too long for me to handle"
 .IX Subsection "Sorry, LIGTABLE too long for me to handle"
-The LIGTABLE in TeX's \fItfm\fR files, which contains a font's ligatures
+The LIGTABLE in TeX\*(Aqs \fItfm\fR files, which contains a font\*(Aqs ligatures
 and kerning pairs, is limited to about 32,500 entries (2^15 \- 256).
 If the number of ligatures plus kerns in a font is higher than that limit,
 \&\fIpltotf\fR and \fIvptovf\fR will complain loudly and ignore the excess entries.
-This happens at least with Adobe's Source Serif 4 and Minion 3 font families.
-Even when \fIpltotf\fR and \fIvptovf\fR don't warn about the LIGTABLE's size,
+This happens at least with Adobe\*(Aqs Source Serif 4 and Minion 3 font families.
+Even when \fIpltotf\fR and \fIvptovf\fR don\*(Aqt warn about the LIGTABLE\*(Aqs size,
 you may still find that \fIpdftex\fR crashes with a
 \&\f(CW\*(C`Bad metric (TFM) file\*(C'\fR error.
-The best way to handle this situation is to use \fBautoinst\fR's \f(CW\*(C`\-extra\*(C'\fR option
-to raise \fIotftotfm\fR's value for the \f(CW\*(C`\-\-min\-kern\*(C'\fR parameter, which causes it
+The best way to handle this situation is to use \fBautoinst\fR\*(Aqs \f(CW\*(C`\-extra\*(C'\fR option
+to raise \fIotftotfm\fR\*(Aqs value for the \f(CW\*(C`\-\-min\-kern\*(C'\fR parameter, which causes it
 to ignore small kerning pairs: \f(CW\*(C`\-extra=\*(Aq\-\-min\-kern=6.0\*(Aq\*(C'\fR.
 Finding the correct value for the \f(CW\*(C`\-\-min\-kern\*(C'\fR parameter may require some
 trial and error.
@@ -438,7 +439,7 @@
 .SS "A note for MiKTeX users"
 .IX Subsection "A note for MiKTeX users"
 Automatically installing the fonts into a suitable TEXMF tree
-(as \fBautoinst\fR tries to do by default) only works for TeX-installations
+(as \fBautoinst\fR tries to do by default) only works for TeX\-installations
 that use the \fIkpathsea\fR library; with TeX distributions that implement
 their own directory searching, such as MiKTeX, \fBautoinst\fR will complain
 that it cannot find the \fIkpsewhich\fR program and move all generated files
@@ -445,18 +446,18 @@
 into a subdirectory \f(CW\*(C`autoinst_output/\*(C'\fR of the current directory.
 If you use such a TeX distribution, you should either move these files
 to their correct destinations by hand, or use the \fI\-target\fR option
-(see "COMMAND-LINE OPTIONS" below) to manually specify a TEXMF tree.
+(see "COMMAND\-LINE OPTIONS" below) to manually specify a TEXMF tree.
 .PP
 Also, some OpenType fonts contain so many kerning pairs that the resulting
-\&\fIpl\fR and \fIvpl\fR files are too big for MiKTeX's \fIpltotf\fR and \fIvptovf\fR;
+\&\fIpl\fR and \fIvpl\fR files are too big for MiKTeX\*(Aqs \fIpltotf\fR and \fIvptovf\fR;
 the versions that come with W32TeX (\fIhttp://www.w32tex.org\fR)
-and TeXLive (\fIhttp://tug.org/texlive\fR) don't seem to have this problem.
+and TeXLive (\fIhttp://tug.org/texlive\fR) don\*(Aqt seem to have this problem.
 .SS "A note for MacTeX users"
 .IX Subsection "A note for MacTeX users"
 By default, \fBautoinst\fR will try to install all generated files into
-the \f(CW$TEXMFLOCAL\fR tree; when this directory isn't user-writable,
-it will use the \f(CW$TEXMFHOME\fR tree instead.  Unfortunately, MacTeX's version
-of \f(CW\*(C`updmap\-sys\*(C'\fR doesn't search in \f(CW$TEXMFHOME\fR,
+the \f(CW$TEXMFLOCAL\fR tree; when this directory isn\*(Aqt user\-writable,
+it will use the \f(CW$TEXMFHOME\fR tree instead.  Unfortunately, MacTeX\*(Aqs version
+of \f(CW\*(C`updmap\-sys\*(C'\fR doesn\*(Aqt search in \f(CW$TEXMFHOME\fR,
 and hence MacTeX will not find the new fonts.
 .PP
 To remedy this, either run \fBautoinst\fR as root (so that it can install
@@ -464,11 +465,11 @@
 TeX about the files in \f(CW$TEXMFHOME\fR.
 This latter option does, however, come with some caveats;
 see \fIhttps://tug.org/texlive/scripts\-sys\-user.html\fR.
-.SH "COMMAND-LINE OPTIONS"
+.SH "COMMAND\-LINE OPTIONS"
 .IX Header "COMMAND-LINE OPTIONS"
 \&\fBautoinst\fR tries hard to do The Right Thing (TM) by default,
-so you usually won't need these options;
-but most aspects of its operation can be fine-tuned if you want to.
+so you usually won\*(Aqt need these options;
+but most aspects of its operation can be fine\-tuned if you want to.
 .PP
 You may use either one or two dashes before options,
 and option names may be shortened to a unique prefix
@@ -481,7 +482,7 @@
 Print a (relatively) short help text and exit.
 .IP \fB\-dryrun\fR 4
 .IX Item "-dryrun"
-Don't generate output; just parse input fonts and write
+Don\*(Aqt generate output; just parse input fonts and write
 the results to the log file.
 .IP \fB\-verbose\fR 4
 .IX Item "-verbose"
@@ -488,23 +489,32 @@
 Add more details to the log file.
 .IP \fB\-version\fR 4
 .IX Item "-version"
-Print \fBautoinst\fR's version number and exit.
+Print \fBautoinst\fR\*(Aqs version number and exit.
 .SS "Font creation options"
 .IX Subsection "Font creation options"
 .IP \fB\-encoding\fR=\fIencoding[,encoding]\fR 4
 .IX Item "-encoding=encoding[,encoding]"
 Generate the specified encoding(s) for the text fonts.
-Multiple encodings may be specified as a comma-separated list
+Multiple encodings may be specified as a comma\-separated list
 (without spaces!); the default choice of encodings is \f(CW\*(C`OT1,LY1,T1\*(C'\fR.
 .Sp
 For each encoding argument, \fBautoinst\fR will first check if it is
 the filename of an encoding file, and if found it will use that;
 otherwise the argument is assumed to be the name of one of
-the built-in encodings.
-Currently \fBautoinst\fR comes with built-in support for the OT1, T1/TS1, LY1,
+the built\-in encodings.
+If the argument is a filename,
+\&\fBautoinst\fR will define the font with an NFSS encoding
+equal to the filename (minus a ".enc" extension),
+except when the filename starts with "U_";
+in that case the NFSS encoding will be "U"
+and the part after "U_" will be used as the "enc" part
+of the name of the generated font.
+.Sp
+Currently \fBautoinst\fR comes with built\-in support for the OT1, T1/TS1, LY1,
 T2A/B/C, T3/TS3, T4, T5, LGR, CS, L7X and QX encodings.
-(These files are called \fIfontools_ot1.enc\fR etc. to avoid name clashes
-with other packages; the \fIfontools_\fR prefix may be omitted.)
+(The corresponding files are called \fIfontools_ot1.enc\fR etc.,
+to avoid name clashes with other packages;
+the \fIfontools_\fR prefix may be omitted.)
 .IP \fB\-ts1\fR/\fB\-nots1\fR 4
 .IX Item "-ts1/-nots1"
 Control the creation of TS1\-encoded fonts. The default is \fB\-ts1\fR
@@ -556,9 +566,9 @@
 Saying just \fB\-inferiors\fR is equivalent to \fB\-inferiors=auto\fR;
 otherwise the default is \fB\-noinferiors\fR.
 .Sp
-\&\fIIf you specify a style of inferiors that isn't present in the font,
+\&\fIIf you specify a style of inferiors that isn\*(Aqt present in the font,
 \&\fR\f(BIautoinst\fR\fI will fall back to its default behaviour of not creating fonts
-with inferiors at all; it won't try to substitute one of the other styles.\fR
+with inferiors at all; it won\*(Aqt try to substitute one of the other styles.\fR
 .IP \fB\-fractions\fR/\fB\-nofractions\fR 4
 .IX Item "-fractions/-nofractions"
 Control the creation of fonts with numerators and denominators.
@@ -566,7 +576,7 @@
 .IP \fB\-ligatures\fR/\fB\-noligatures\fR 4
 .IX Item "-ligatures/-noligatures"
 Some fonts contain glyphs for the standard f\-ligatures (ff, fi, fl, ffi, ffl),
-but don't provide a \f(CW\*(C`liga\*(C'\fR feature to access these.
+but don\*(Aqt provide a \f(CW\*(C`liga\*(C'\fR feature to access these.
 This option tells \fBautoinst\fR to add extra \f(CW\*(C`LIGKERN\*(C'\fR rules to
 the generated fonts to enable the use of these ligatures.
 The default is \fB\-ligatures\fR, except for typewriter fonts.
@@ -587,12 +597,12 @@
 it will \- by default \- turn off the use of f\-ligatures
 (though this can be overridden with the \fI\-ligatures\fR option),
 and it will disable hyphenation for this font.
-This latter effect cannot be re-enabled in \fBautoinst\fR;
+This latter effect cannot be re\-enabled in \fBautoinst\fR;
 if you want typewriter text to be hyphenated, use the \fIhyphenat\fR package.
 .Sp
 If none of these options is specified, \fBautoinst\fR tries to guess:
-if the font's filename contains the string "mono"
-or if the field \f(CW\*(C`isFixedPitch\*(C'\fR in the font's \f(CW\*(C`post\*(C'\fR table is True,
+if the font\*(Aqs filename contains the string "mono"
+or if the field \f(CW\*(C`isFixedPitch\*(C'\fR in the font\*(Aqs \f(CW\*(C`post\*(C'\fR table is True,
 it will select \fB\-typewriter\fR;
 else if the filename contains "sans" it will select \fB\-sanserif\fR;
 otherwise it will opt for \fB\-serif\fR.
@@ -622,12 +632,12 @@
 Install all generated files into the TEXMF tree at \fIDIRECTORY\fR.
 .Sp
 By default, \fBautoinst\fR searches the \f(CW$TEXMFLOCAL\fR and \f(CW$TEXMFHOME\fR trees
-and installs all files into the first user-writable TEXMF tree it finds.
-If \fBautoinst\fR cannot find such a user-writable directory
-(which shouldn't happen, since \f(CW$TEXMFHOME\fR is supposed to be user-writable)
+and installs all files into the first user\-writable TEXMF tree it finds.
+If \fBautoinst\fR cannot find such a user\-writable directory
+(which shouldn\*(Aqt happen, since \f(CW$TEXMFHOME\fR is supposed to be user\-writable)
 it will print a warning message and put all files into the subdirectory
 \&\f(CW\*(C`autoinst_output/\*(C'\fR of the current directory.
-It's then up to the user to move the generated files to a better location
+It\*(Aqs then up to the user to move the generated files to a better location
 and update all relevant databases
 (usually by calling \fItexhash\fR and \fIupdmap\fR).
 .IP \fB\-vendor\fR=\fIVENDOR\fR 4
@@ -636,10 +646,10 @@
 .IP \fB\-typeface\fR=\fITYPEFACE\fR 4
 .IX Item "-typeface=TYPEFACE"
 .PD
-These options are equivalent to \fIotftotfm\fR's \fI \-\-vendor\fR and \fI \-\-typeface\fR
+These options are equivalent to \fIotftotfm\fR\*(Aqs \fI \-\-vendor\fR and \fI \-\-typeface\fR
 options: they change the "vendor" and "typeface" parts of the names of the
 subdirectories in the TEXMF tree where generated files will be stored.
-The default values are "lcdftools" and the font's FontFamily name.
+The default values are "lcdftools" and the font\*(Aqs FontFamily name.
 These options change \fIonly\fR directory names,
 not the names of any generated files.
 .IP \fB\-logfile\fR=\fIfilename\fR 4
@@ -646,7 +656,7 @@
 .IX Item "-logfile=filename"
 Write log data to \fIfilename\fR instead of the default \fI<fontfamily>.log\fR.
 If the file already exists, \fBautoinst\fR appends to it;
-it doesn't overwrite an existing file.
+it doesn\*(Aqt overwrite an existing file.
 .SS "Specialist options"
 .IX Subsection "Specialist options"
 .IP \fB\-defaultlining\fR/\fB\-defaultoldstyle\fR 4
@@ -655,13 +665,13 @@
 .IP \fB\-defaulttabular\fR/\fB\-defaultproportional\fR 4
 .IX Item "-defaulttabular/-defaultproportional"
 .PD
-Tell \fBautoinst\fR which figure style is the current font family's default
-(i.e., which figures you get when you don't specify any OpenType features).
+Tell \fBautoinst\fR which figure style is the current font family\*(Aqs default
+(i.e., which figures you get when you don\*(Aqt specify any OpenType features).
 .Sp
-\&\fIDon't use these options unless you are certain you need them!\fR
-They are only needed for fonts that don't provide OpenType features
+\&\fIDon\*(Aqt use these options unless you are certain you need them!\fR
+They are only needed for fonts that don\*(Aqt provide OpenType features
 for their default figure style; and even in that case,
-\&\fBautoinst\fR's default values (\fB\-defaultlining\fR and \fB\-defaulttabular\fR)
+\&\fBautoinst\fR\*(Aqs default values (\fB\-defaultlining\fR and \fB\-defaulttabular\fR)
 are usually correct.
 .IP \fB\-nfssweight\fR=\fIcode\fR=\fIweight\fR 4
 .IX Item "-nfssweight=code=weight"
@@ -670,7 +680,7 @@
 .IX Item "-nfsswidth=code=width"
 .PD
 Map the NFSS code \fIcode\fR to the given weight or width,
-overriding the built-in tables.
+overriding the built\-in tables.
 Each of these options may be given multiple times,
 to override more than one NFSS code.
 Example: to map the \f(CW\*(C`ul\*(C'\fR code to the "Thin" weight,
@@ -684,7 +694,7 @@
 options to \fBautoinst\fR, they should be properly quoted.
 .IP \fB\-manual\fR 4
 .IX Item "-manual"
-Manual mode; for users who want to post-process the generated files
+Manual mode; for users who want to post\-process the generated files
 and commands. By default, \fBautoinst\fR immediately executes all
 \&\fIotftotfm\fR commands it generates;
 in manual mode, these are instead written to a file \fIautoinst.bat\fR.
@@ -704,20 +714,20 @@
 .ie n .IP "\- tell TeX about the new \fImap\fR file (usually by running ""updmap"" or similar)." 2
 .el .IP "\- tell TeX about the new \fImap\fR file (usually by running \f(CWupdmap\fR or similar)." 2
 .IX Item "- tell TeX about the new map file (usually by running updmap or similar)."
+.PD
 .RE
 .RS 4
-.PD
 .Sp
 Note that some options (\fI\-target\fR, \fI\-vendor\fR and \fI\-typeface\fR)
 are meaningless, and hence ignored, in manual mode.
 .Sp
-Also note that font name modification doesn't happen in manual mode.
+Also note that font name modification doesn\*(Aqt happen in manual mode.
 .RE
 .IP \fB\-nofigurekern\fR 4
 .IX Item "-nofigurekern"
 Some fonts provide kerning pairs for tabular figures.
 This is very probably not what you want
-(e.g., numbers in tables won't line up exactly).
+(e.g., numbers in tables won\*(Aqt line up exactly).
 This option adds extra \fI \-\-ligkern\fR options
 to the commands for \fIotftotfm\fR to suppress such kerns.
 Note that this option leads to very long commands (it adds
@@ -725,7 +735,7 @@
 hence it is not active by default.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
-Eddie Kohler's \fBTypeTools\fR and \fBT1Utils\fR (\fIhttp://www.lcdf.org/type\fR).
+Eddie Kohler\*(Aqs \fBTypeTools\fR and \fBT1Utils\fR (\fIhttp://www.lcdf.org/type\fR).
 .PP
 \&\fBPerl\fR can be obtained from \fIhttp://www.perl.org\fR;
 it is included in most Linux distributions.
@@ -734,12 +744,12 @@
 .PP
 \&\fBLuaTeX\fR (\fIhttp://www.luatex.org\fR) and
 \&\fBXeTeX\fR (\fIhttp://www.tug.org/xetex\fR)
-are Unicode-aware TeX engines that can use OpenType fonts directly,
+are Unicode\-aware TeX engines that can use OpenType fonts directly,
 without any (La)TeX\-specific support files.
 .PP
 The \fBFontPro\fR project (\fIhttps://github.com/sebschub/FontPro\fR)
 offers very complete LaTeX support (even for typesetting maths) for
-Adobe's Minion Pro, Myriad Pro and Cronos Pro font families.
+Adobe\*(Aqs Minion Pro, Myriad Pro and Cronos Pro font families.
 .SH AUTHOR
 .IX Header "AUTHOR"
 Marc Penninga (\fImarcpenninga at gmail.com\fR)
@@ -746,9 +756,9 @@
 .PP
 When sending a bug report, please give as much relevant information as
 possible; this usually includes (but may not be limited to) the log file
-(please add the \fI\-verbose\fR command-line option, for extra info).
+(please add the \fI\-verbose\fR command\-line option, for extra info).
 If you see any error messages, please include these \fIverbatim\fR;
-don't paraphase.
+don\*(Aqt paraphase.
 .SH COPYRIGHT
 .IX Header "COPYRIGHT"
 Copyright (C) 2005\-2025 Marc Penninga.
@@ -768,13 +778,32 @@
 GNU General Public License for more details.
 .SH VERSION
 .IX Header "VERSION"
-This document describes \fBautoinst\fR version 20250107.
+This document describes \fBautoinst\fR version 20250819.
 .SH "RECENT CHANGES"
 .IX Header "RECENT CHANGES"
 (See the source for the full story, all the way back to 2005.)
+.IP \fI2025\-08\-19\fR 12
+.IX Item "2025-08-19"
+Fixed a bug where any fonts with the word "Typewriter"
+in their name would be parsed as "Italic".
+.IP \fI2025\-07\-02\fR 12
+.IX Item "2025-07-02"
+The hack in font metadata parsing for Source Serif 4
+(See 2025\-01\-07) is also needed for other fonts;
+at least for Arno Pro, maybe some other Adobe fonts as well.
+So we changed the test again: we apply this hack by default,
+except for Libertinus.
+.IP \fI2025\-06\-23\fR 12
+.IX Item "2025-06-23"
+Introduced the "U_" rule for encoding file names.
+.IP \fI2025\-04\-16\fR 12
+.IX Item "2025-04-16"
+Don\*(Aqt load the \fImweights\fR package, as its functionality
+is now part of the LaTeX kernel
+(and, in fact, has been for a while ...).
 .IP \fI2025\-01\-07\fR 12
 .IX Item "2025-01-07"
-The 'fix' in font metadata parsing that we introduced
+The \*(Aqfix\*(Aq in font metadata parsing that we introduced
 for Source Serif 4 was biting Libertinus Serif Display
 (and maybe other fonts as well),
 so we now test if the family is actually Source Serif 4
@@ -785,7 +814,7 @@
 this should work better for fonts with unusually named weights
 or widths.
 We now also warn in font metadata parsing could not find
-a 'Regular' weight or width.
+a \*(AqRegular\*(Aq weight or width.
 .IP \fI2023\-12\-30\fR 12
 .IX Item "2023-12-30"
 Bugfix: font info parsing now works for Junicode 2.
@@ -802,7 +831,7 @@
 .IX Item "2023-01-31"
 If the fonts contain superior and/or inferior figures,
 the generated style file now redefines the \f(CW\*(C`\etextsuperscript\*(C'\fR
-and \f(CW\*(C`\etextsubscript\*(C'\fR commands, and patches Latex's footnote
+and \f(CW\*(C`\etextsubscript\*(C'\fR commands, and patches Latex\*(Aqs footnote
 mechanism to use these figures
 (inspired by the \fIrealscripts\fR package).
 Fixed a few bugs in metadata parsing, style file generation

Modified: trunk/Master/texmf-dist/doc/man/man1/autoinst.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/man/man1/ot2kpx.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/ot2kpx.1	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Master/texmf-dist/doc/man/man1/ot2kpx.1	2025-08-19 19:50:41 UTC (rev 76095)
@@ -1,5 +1,5 @@
 .\" -*- mode: troff; coding: utf-8 -*-
-.\" Automatically generated by Pod::Man 5.0102 (Pod::Simple 3.45)
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -52,10 +52,13 @@
 .    \}
 .\}
 .rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
 .\" ========================================================================
 .\"
 .IX Title "OT2KPX 1"
-.TH OT2KPX 1 2025-01-07 fontools "Marc Penninga"
+.TH OT2KPX 1 2025-08-19 fontools "Marc Penninga"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -68,7 +71,7 @@
 .SH DESCRIPTION
 .IX Header "DESCRIPTION"
 \&\fBot2kpx\fR extract the kerning data from OpenType fonts and prints it
-to \f(CW\*(C`stdout\*(C'\fR, either in Adobe's KPX format (for adding to an \fIafm\fR file)
+to \f(CW\*(C`stdout\*(C'\fR, either in Adobe\*(Aqs KPX format (for adding to an \fIafm\fR file)
 or as a Luatex custom feature, for use with the \f(CW\*(C`\edirectlua\*(C'\fR command.
 .SH "OPTIONS AND ARGUMENTS"
 .IX Header "OPTIONS AND ARGUMENTS"
@@ -77,10 +80,10 @@
 Print a short help text and exit.
 .IP \fB\-version\fR 4
 .IX Item "-version"
-Print \fBot2kpx\fR's version and exit.
+Print \fBot2kpx\fR\*(Aqs version and exit.
 .IP "\fB\-afm\fR, \fB\-kpx\fR" 4
 .IX Item "-afm, -kpx"
-Output the kerning data in Adobe's KPX format, as used in \fIafm\fR files.
+Output the kerning data in Adobe\*(Aqs KPX format, as used in \fIafm\fR files.
 This is the default output format.
 .IP \fB\-lua\fR 4
 .IX Item "-lua"
@@ -93,18 +96,18 @@
 .IX Header "RESTRICTIONS"
 .IP \fB\-\fR 4
 .IX Item "-"
-\&\fBot2kpx\fR doesn't implement all of the OpenType specification.
+\&\fBot2kpx\fR doesn\*(Aqt implement all of the OpenType specification.
 Things that are missing include: support for font files containing
 multiple fonts, LookupTables with LookupTypes other than 2,
 "kern" tables with format other than 0 and ValueRecords with
 other types of data than just XAdvance data.
 .Sp
-Most of these limitations won't matter, since the missing features
-are rare (the only fonts I know of that use them are the non-western fonts
+Most of these limitations won\*(Aqt matter, since the missing features
+are rare (the only fonts I know of that use them are the non\-western fonts
 that come with Adobe Reader). Furthermore, many of these features define
-(according to the OpenType specification) \fI"subtle, device-dependent
+(according to the OpenType specification) \fI"subtle, device\-dependent
 adjustments at specific font sizes or device resolutions"\fR;
-since there's no way to express such adjustments in \fIafm\fR format,
+since there\*(Aqs no way to express such adjustments in \fIafm\fR format,
 ignoring them seems to be the only option anyway.
 .IP \fB\-\fR 4
 .IX Item "-"
@@ -114,7 +117,7 @@
 There are (or may be) several issues with this approach:
 .RS 4
 .IP \- 4
-The OpenType specification says that fonts in \fIotf\fR format shouldn't
+The OpenType specification says that fonts in \fIotf\fR format shouldn\*(Aqt
 use the "kern" table at all, just the lookups from the "GPOS" table.
 Many such fonts do, however, contain a "kern" table, but no "GPOS" table;
 so we use the "kern" table anyway.
@@ -124,7 +127,7 @@
 those values.
 However, at least in the fonts I checked, all script/language combinations
 eventually point to the \fIsame\fR "kern" LookupTables, so this approach
-wouldn't make any difference (apart from further complicating the code).
+wouldn\*(Aqt make any difference (apart from further complicating the code).
 .RE
 .RS 4
 .RE
@@ -150,7 +153,7 @@
 See the GNU General Public License for more details.
 .SH VERSION
 .IX Header "VERSION"
-This document describes \fBot2kpx\fR version 20250107.
+This document describes \fBot2kpx\fR version 20250819.
 .SH "RECENT CHANGES"
 .IX Header "RECENT CHANGES"
 (See the source code for the rest of the story.)
@@ -159,5 +162,5 @@
 Added the \fI\-version\fR option.
 .IP \fI2019\-04\-15\fR 12
 .IX Item "2019-04-15"
-Added the \fI\-lua\fR command-line option to get output in Luatex's
+Added the \fI\-lua\fR command\-line option to get output in Luatex\*(Aqs
 custom feature format.

Modified: trunk/Master/texmf-dist/doc/man/man1/ot2kpx.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/fontools/splitttc
===================================================================
--- trunk/Master/texmf-dist/doc/support/fontools/splitttc	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Master/texmf-dist/doc/support/fontools/splitttc	2025-08-19 19:50:41 UTC (rev 76095)
@@ -38,7 +38,7 @@
 use Getopt::Long;
 use Pod::Usage;
 
-my $VERSION = "20250107";
+my $VERSION = "20250819";
 
 parse_commandline();
 
@@ -303,7 +303,7 @@
 
 =head1 VERSION
 
-This document describes B<splitttc> version 20250107.
+This document describes B<splitttc> version 20250819.
 
 
 =head1 RECENT CHANGES

Modified: trunk/Master/texmf-dist/scripts/fontools/afm2afm
===================================================================
--- trunk/Master/texmf-dist/scripts/fontools/afm2afm	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Master/texmf-dist/scripts/fontools/afm2afm	2025-08-19 19:50:41 UTC (rev 76095)
@@ -37,7 +37,7 @@
 use Getopt::Long;
 use Pod::Usage;
 
-my $VERSION = "20250107";
+my $VERSION = "20250819";
 
 parse_commandline();
 
@@ -421,7 +421,7 @@
 
 =head1 VERSION
 
-This document describes B<afm2afm> version 20250107.
+This document describes B<afm2afm> version 20250819.
 
 
 =head1 RECENT CHANGES

Modified: trunk/Master/texmf-dist/scripts/fontools/autoinst
===================================================================
--- trunk/Master/texmf-dist/scripts/fontools/autoinst	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Master/texmf-dist/scripts/fontools/autoinst	2025-08-19 19:50:41 UTC (rev 76095)
@@ -41,7 +41,7 @@
 use Pod::Usage ();
 use POSIX ();
 
-my $VERSION = '20250107';
+my $VERSION = '20250819';
 
 my ($d, $m, $y) = (localtime time)[3 .. 5];
 my $TODAY = sprintf "%04d/%02d/%02d", $y + 1900, $m + 1, $d;
@@ -284,7 +284,7 @@
     c   =>  [ qw( condensed ) ],
     sc  =>  [ qw( semicondensed narrow ) ],
     ''  =>  [ qw( regular ) ],
-    sx  =>  [ qw( semiextended semiexpanded wide) ],
+    sx  =>  [ qw( semiextended semiexpanded wide ) ],
     x   =>  [ qw( extended expanded ) ],
     ex  =>  [],
     ux  =>  [],
@@ -809,13 +809,16 @@
         $data->{subfamily} =~ s/\A (?: ST | T | SD | D)//xms;
     }
 
-    # Adobe's Source Serif 4 family name contains the name of the optical master;
-    # we don't want this, as all these fonts should be part of the same family,
+    # Some extended font families, especially from Adobe,
+    # include the optical master in the family name.
+    # We don't want this, as all these fonts should be part of the same family,
     # with different values for the optical size range.
     # We therefore move the optical master name from the family to the subfamily.
     # We don't discard this information entirely, since we need it later on
     # in _parse_sizedata().
-    if ($data->{family} =~ m/SourceSerifFour/xmsi) {
+    # This hack causes problems with Libertinus Serif Display,
+    # so we skip it for that font.
+    if ($data->{family} !~ m/Libertinus/xmsi) {
         for my $optical (qw(Caption SmText SmallText Subhead Display)) {
             if ($data->{family} =~ s/$optical\z//xms) {
                 $data->{subfamily} .= $optical;
@@ -831,6 +834,10 @@
     # remove Adobe's SmallText size, to avoid mistaking it for Text weight
     $fullinfo =~ s/(?: SmallText | SmText )//gxmsi;
 
+    # remove the word 'TypeWriter' from the info, to avoid it matching
+    # against the "It" shape
+    $fullinfo =~ s/typewriter//gxmsi;
+
     # We need to be careful when parsing the font info; in particular
     # we must parse strings like 'UltraCondensed' as 'Regular' weight
     # and 'UltraCondensed' width, not as 'Ultra' weight and 'Condensed' width.
@@ -1067,10 +1074,10 @@
         && $minsize == 8.9 && $maxsize == 13.9) {
         ($minsize, $maxsize) = (23, 72);
     }
-    # Adobe's Source Serif 4 follows the latest version of the OpenType
-    # spec and keeps its optical size info in the STAT (Style Attributes)
-    # table rather than in the OS/2 table. This isn't (yet?) supported
-    # by otfinfo, so we add the missing size info here.
+    # Adobe's Source Serif 4 follows a recent version of the OpenType
+    # spec and keeps its optical size info as a `size` feature rather
+    #  than in the OS/2 table. This isn't (yet?) supported by otfinfo,
+    #  so we add the missing size info here.
     elsif ($self->{family} eq 'SourceSerifFour'
         && $minsize == 0 && $maxsize == 0) {
         if ($self->{subfamily} eq 'Caption') {
@@ -1277,7 +1284,7 @@
     binmode $STY;
 
     print {$STY} <<"END_STY_HEADER";
-\\NeedsTeXFormat{LaTeX2e}
+\\NeedsTeXFormat{LaTeX2e}[2020/02/02]
 \\ProvidesPackage{$fam}
     [$TODAY (autoinst)  Style file for $fam fonts.]
 
@@ -1398,9 +1405,13 @@
     print {$STY} "\\RequirePackage[@{[ join ',', grep { $_ ne 'OT1' } @{$ARGV{encoding}} ]}]{fontenc}\n";
     print {$STY} "\\RequirePackage{textcomp}\n" if $seen{TS1};
     print {$STY} "\\RequirePackage{ifthen}\n";
-    print {$STY} "\\RequirePackage{mweights}\n";
     print {$STY} "\n";
 
+    ##  TODO:
+    #   remove `fontaxes` package, rewrite the following bits using
+    #   LaTeX kernel functionality (i.e., \DeclareFontShapeChangeRule)
+    #   and the `figureversions` package.
+
     print {$STY} <<'END_STY_FONTAXES_START';
 \IfFileExists{fontaxes.sty}{
     \RequirePackage{fontaxes}
@@ -1534,7 +1545,7 @@
         \\settoheight{\\$fam\@xheight}
             {{\\font\\testfont=$testfont at \\f\@size pt\\testfont x}}
         \\renewcommand*{\\$fam\@scale}
-            {\\strip\@pt\\dimexpr\\number\\numexpr\\number\\dimexpr\\$fam\@currentx\\relax*65536/\\number\\dimexpr\\$fam\@xheight\\relax\\relax sp\\relax}}
+            {\\fpeval{\\$fam\@currentx / \\$fam\@xheight}}}
     {}
 
 END_STY_MATCHLOWERCASE
@@ -3418,20 +3429,24 @@
     # Don't create ligatures if the user doesn't want them.
     delete $feature{liga} if !$ARGV{ligatures};
 
-    # Don't create kerns and ligatures for symbol or math fonts.
+    # Don't create kerns and ligatures for symbol or otherwise "unencoded" fonts.
     delete @feature{qw(kern liga)}
-        if $workitem->{encoding} =~ m/\A ( TS\d | OML ) \z/xmsi;
+        if $workitem->{encoding} =~ m/\A ( TS\d | OM[LS] ) \z | \A U_ /xmsi;
 
     $workitem->{features} = [ sort keys %feature ];
 
     # Generate a unique name for this font.
+    (my $encoding = lc $workitem->{encoding}) =~ s/\A u_ //xms;
     $workitem->{fontname}
             = join '-', grep { $_ } $font->{name},
                                     lc $figurestyle,
                                     lc Tables::get_name($style),
-                                    lc $workitem->{encoding};
+                                    $encoding;
 
     $workitem->{encoding} = uc $workitem->{encoding};
+    if ($workitem->{encoding} =~ m/\A U_/xms) {
+        $workitem->{encoding} = 'U';
+    }
 
     return $workitem;
 }
@@ -3784,8 +3799,6 @@
 
 =back
 
-The last two groups of options will only work if
-you have the F<mweights> package installed.
 The default here is not to change LaTeX's default,
 i.e. use the "m" and "b" weights.
 
@@ -4101,10 +4114,19 @@
 the filename of an encoding file, and if found it will use that;
 otherwise the argument is assumed to be the name of one of
 the built-in encodings.
+If the argument is a filename,
+B<autoinst> will define the font with an NFSS encoding
+equal to the filename (minus a ".enc" extension),
+except when the filename starts with "U_";
+in that case the NFSS encoding will be "U"
+and the part after "U_" will be used as the "enc" part
+of the name of the generated font.
+
 Currently B<autoinst> comes with built-in support for the OT1, T1/TS1, LY1,
 T2A/B/C, T3/TS3, T4, T5, LGR, CS, L7X and QX encodings.
-(These files are called F<fontools_ot1.enc> etc. to avoid name clashes
-with other packages; the F<fontools_> prefix may be omitted.)
+(The corresponding files are called F<fontools_ot1.enc> etc.,
+to avoid name clashes with other packages;
+the F<fontools_> prefix may be omitted.)
 
 =item B<-ts1>/B<-nots1>
 
@@ -4409,7 +4431,7 @@
 
 =head1 VERSION
 
-This document describes B<autoinst> version 20250107.
+This document describes B<autoinst> version 20250819.
 
 
 =head1 RECENT CHANGES
@@ -4418,6 +4440,29 @@
 
 =over 12
 
+=item I<2025-08-19>
+
+Fixed a bug where any fonts with the word "Typewriter"
+in their name would be parsed as "Italic".
+
+=item I<2025-07-02>
+
+The hack in font metadata parsing for Source Serif 4
+(See 2025-01-07) is also needed for other fonts;
+at least for Arno Pro, maybe some other Adobe fonts as well.
+So we changed the test again: we apply this hack by default,
+except for Libertinus.
+
+=item I<2025-06-23>
+
+Introduced the "U_" rule for encoding file names.
+
+=item I<2025-04-16>
+
+Don't load the I<mweights> package, as its functionality
+is now part of the LaTeX kernel
+(and, in fact, has been for a while ...).
+
 =item I<2025-01-07>
 
 The 'fix' in font metadata parsing that we introduced

Modified: trunk/Master/texmf-dist/scripts/fontools/ot2kpx
===================================================================
--- trunk/Master/texmf-dist/scripts/fontools/ot2kpx	2025-08-19 19:50:15 UTC (rev 76094)
+++ trunk/Master/texmf-dist/scripts/fontools/ot2kpx	2025-08-19 19:50:41 UTC (rev 76095)
@@ -38,7 +38,7 @@
 use List::Util @List::Util::EXPORT_OK;
 use Pod::Usage;
 
-my $VERSION = "20250107";
+my $VERSION = "20250819";
 
 our ($NUM_GLYPHS, $UNITS_PER_EM, %kern);
 
@@ -858,7 +858,7 @@
 
 =head1 VERSION
 
-This document describes B<ot2kpx> version 20250107.
+This document describes B<ot2kpx> version 20250819.
 
 
 =head1 RECENT CHANGES



More information about the tex-live-commits mailing list.