texlive[55297] trunk: fontools (27may20)

commits+karl at tug.org commits+karl at tug.org
Wed May 27 23:40:38 CEST 2020


Revision: 55297
          http://tug.org/svn/texlive?view=revision&revision=55297
Author:   karl
Date:     2020-05-27 23:40:38 +0200 (Wed, 27 May 2020)
Log Message:
-----------
fontools (27may20)

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

Added Paths:
-----------
    trunk/Master/texmf-dist/fonts/enc/dvips/fontools/fontools_oml.enc

Modified: trunk/Build/source/texk/texlive/linked_scripts/fontools/afm2afm
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/fontools/afm2afm	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Build/source/texk/texlive/linked_scripts/fontools/afm2afm	2020-05-27 21:40:38 UTC (rev 55297)
@@ -37,7 +37,7 @@
 use Getopt::Long;
 use Pod::Usage;
 
-my $VERSION = "20200511";
+my $VERSION = "20200527";
 
 parse_commandline();
 
@@ -421,7 +421,7 @@
 
 =head1 VERSION
 
-This document describes B<afm2afm> version 20200511.
+This document describes B<afm2afm> version 20200527.
 
 
 =head1 RECENT CHANGES

Modified: trunk/Build/source/texk/texlive/linked_scripts/fontools/autoinst
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/fontools/autoinst	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Build/source/texk/texlive/linked_scripts/fontools/autoinst	2020-05-27 21:40:38 UTC (rev 55297)
@@ -40,7 +40,7 @@
 use Pod::Usage ();
 use POSIX ();
 
-my $VERSION = '20200511';
+my $VERSION = '20200527';
 
 my ($d, $m, $y) = (localtime time)[3 .. 5];
 my $TODAY = sprintf "%04d/%02d/%02d", $y + 1900, $m + 1, $d;
@@ -48,7 +48,7 @@
 my $RUNNING_AS_MAIN = (__PACKAGE__ eq 'main');
 
 
-=begin Architecture
+=begin Comment
 
 ----------------------------------------------------------------------------
 
@@ -86,7 +86,7 @@
 
 ----------------------------------------------------------------------------
 
-=end Architecture
+=end Comment
 
 =cut
 
@@ -156,8 +156,8 @@
     my $basicinfo = Font::Raw::get_basicinfo($filename);
     $info->process_basicinfo($basicinfo);
 
-    my $os2_table = Font::Raw::get_os2_table($filename);
-    $info->process_os2_table($os2_table);
+    my $os2_table = Font::Raw::get_classdata($filename);
+    $info->process_classdata($os2_table);
 
     my $featuredata = Font::Raw::get_featuredata($filename);
     $info->process_featuredata($featuredata);
@@ -182,6 +182,7 @@
             Width:      %s
             Shape:      %s
             Size:       %s-%s
+            Smallcaps:  %s
 
 END_ERR_DETAIL
 
@@ -359,15 +360,19 @@
         $self->{family} = $1;
         $self->{shape}  = NFSS::unabbreviate(lc($2));
     }
-    # Ditto for the smallcaps shape; here we have to test both 'family'
-    # and 'name' for hints that this is a small caps font, as some fonts
-    # (e.g., Dolly) only mention this in their name.
+    # Ditto for the smallcaps shape; here we have to test both 'family',
+    # 'subfamily' and 'name' for hints that this is a small caps font,
+    # as some fonts (e.g., Dolly) only mention this in their name.
     $shapes = join '|', Util::sort_desc_length(qw(smallcaps sc smcp caps));
-    if ($self->{family} =~ m/(.+?) -? (?: $shapes) \z/xmsi) {
+    if ($self->{family} =~ m/(.+?) (?: $shapes) \z/xmsi) {
         $self->{family}       = $1;
         $self->{is_smallcaps} = 1;
     }
-    if ($self->{name} =~ m/(.+?) -? (?: $shapes) \z/xmsi) {
+    if ($self->{subfamily} =~ m/(.+?) (?: $shapes) \z/xmsi) {
+        $self->{subfamily}         = $1;
+        $self->{is_smallcaps} = 1;
+    }
+    if ($self->{name} =~ m/(.+?) (?: $shapes) \z/xmsi) {
         $self->{name}         = $1;
         $self->{is_smallcaps} = 1;
     }
@@ -417,12 +422,13 @@
 
 
 # --------------------------------------------------------------------------
-#   Extracts usWeightClass and usWidthClass from the OS/2 table.
+#   Processes the usWeightClass and usWidthClass data.
 # --------------------------------------------------------------------------
-sub process_os2_table {
-    my ($self, $os2_table) = @_;
+sub process_classdata {
+    my ($self, $classdata) = @_;
 
-    @{$self}{qw(weight_class width_class)} = unpack '@4n @6n', $os2_table;
+    $self->{weight_class} = $classdata->{weight_class};
+    $self->{width_class}  = $classdata->{width_class};
 
     return;
 }
@@ -444,35 +450,33 @@
 #   Extracts 'minsize' and 'maxsize' from the optical design size info.
 # --------------------------------------------------------------------------
 sub process_sizedata {
-    my ($self, $data) = @_;
+    my ($self, $sizedata) = @_;
 
-    if (my ($minsize, $maxsize)
-            = $data =~ m/[(] ([\d.]+) \s* pt, \s*
-                             ([\d.]+) \s* pt  \s* [)]]/xms) {
+    my ($minsize, $maxsize) = @$sizedata;
+
     # fix some known bugs
-        if ($self->{name} eq 'GaramondPremrPro-It'
-            && $minsize == 6 && $maxsize == 8.9) {
-            ($minsize, $maxsize) = (8.9, 14.9);
-        }
-        elsif ($self->{family} eq 'KeplerStd'
-            && $self->{subfamily} =~ m/Caption/xms
-            && $minsize == 8.9 && $maxsize == 13.9) {
-            ($minsize, $maxsize) = (6, 8.9);
-        }
-        elsif ($self->{family} eq 'KeplerStd'
-            && $self->{subfamily} =~ m/Subhead/xms
-            && $minsize == 8.9 && $maxsize == 13.9) {
-            ($minsize, $maxsize) = (13.9, 23);
-        }
-        elsif ($self->{family} eq 'KeplerStd'
-            && $self->{subfamily} =~ m/Display/xms
-            && $minsize == 8.9 && $maxsize == 13.9) {
-            ($minsize, $maxsize) = (23, 72);
-        }
-
-        @{$self}{qw(minsize maxsize)} = ($minsize, $maxsize);
+    if ($self->{name} eq 'GaramondPremrPro-It'
+        && $minsize == 6 && $maxsize == 8.9) {
+        ($minsize, $maxsize) = (8.9, 14.9);
     }
+    elsif ($self->{family} eq 'KeplerStd'
+        && $self->{subfamily} =~ m/Caption/xms
+        && $minsize == 8.9 && $maxsize == 13.9) {
+        ($minsize, $maxsize) = (6, 8.9);
+    }
+    elsif ($self->{family} eq 'KeplerStd'
+        && $self->{subfamily} =~ m/Subhead/xms
+        && $minsize == 8.9 && $maxsize == 13.9) {
+        ($minsize, $maxsize) = (13.9, 23);
+    }
+    elsif ($self->{family} eq 'KeplerStd'
+        && $self->{subfamily} =~ m/Display/xms
+        && $minsize == 8.9 && $maxsize == 13.9) {
+        ($minsize, $maxsize) = (23, 72);
+    }
 
+    @{$self}{qw(minsize maxsize)} = ($minsize, $maxsize);
+
     return;
 }
 
@@ -517,9 +521,9 @@
 
 
 # --------------------------------------------------------------------------
-#   Returns the font's OS/2 table.
+#   Returns usWeightClass and usWidthClass from the OS/2 table.
 # --------------------------------------------------------------------------
-sub get_os2_table {
+sub get_classdata {
     my $filename = shift;
 
     my $os2_table;
@@ -532,7 +536,12 @@
             or die "'$cmd' failed";
     } or warn "[WARNING]   $@";
 
-    return $os2_table;
+    my ($weight_class, $width_class) = unpack '@4n @6n', $os2_table;
+
+    return {
+        weight_class => $weight_class,
+        width_class  => $width_class,
+    };
 }
 
 
@@ -579,7 +588,13 @@
     close $otfinfo
         or die "[ERROR]     '$cmd' failed.";
 
-    return $data;
+    my ($minsize, $maxsize)
+        = $data =~ m/[(] ([\d.]+) \s* pt, \s*
+                         ([\d.]+) \s* pt  \s* [])]/xms;
+
+    $minsize //= 0;
+    $maxsize //= 0;
+    return [ $minsize, $maxsize ];
 }
 
 
@@ -638,7 +653,7 @@
              [ $minsize, $maxsize, $workitem->{fontname} ];
     }
 
-    create_stylefile($family, \%fddata);
+    create_stylefile($nfss_mapping, $family, \%fddata);
     while (my ($enc, $encdata) = each %fddata) {
         while (my ($sty, $stydata) = each %$encdata) {
             create_fdfile($nfss_mapping, $family, $enc, $sty, $stydata);
@@ -662,8 +677,23 @@
 #   Creates a LaTeX style file.
 # --------------------------------------------------------------------------
 sub create_stylefile {
-    my ($fam, $data) = @_;
+    my ($nfss_mapping, $fam, $data) = @_;
 
+    my $testfont;
+    eval {
+        my $testenc  = $ARGV{encoding}[0];
+        my $testfig  = ( grep { exists $data->{$testenc}{$_} }
+            qw(OsF LF TOsF TLF) )[0] or die;
+        my $testweight = $nfss_mapping->{weight}{""}[0] or die;
+        my $testshape
+            = ( grep { exists $data->{$testenc}{$testfig}{$testweight}{$_} }
+                     qw(n it sl sc)
+              )[0] or die;
+        $testfont
+            = $data->{$testenc}{$testfig}{$testweight}{$testshape}[0][2]
+                or die;
+    };
+
     my %seen = %{Util::get_keys($data)};
 
     my $fn = sprintf "%s.sty", $fam;
@@ -687,6 +717,7 @@
 
     print {$STY} "\\RequirePackage{fontenc}\n";
     print {$STY} "\\RequirePackage{textcomp}\n" if $seen{TS1};
+    print {$STY} "\\RequirePackage{ifthen}\n";
 
     print {$STY} <<'END_STY_FONTAXES_START';
 \IfFileExists{mweights.sty}{\RequirePackage{mweights}}{}
@@ -709,10 +740,12 @@
         print {$STY} <<'END_STY_FONTAXES_SUP';
     \fa at naming@exception{figures}{{superior}{proportional}}{Sup}
     \fa at naming@exception{figures}{{superior}{tabular}}{Sup}
-    \def\sufigures{\@nomath\sufigures
+    \def\supfigures{\@nomath\supfigures
         \fontfigurestyle{superior}\selectfont}
-    \DeclareTextFontCommand{\textsu}{\sufigures}
-    \let\textsuperior\textsu
+    \let\sufigures\supfigures
+    \DeclareTextFontCommand{\textsup}{\supfigures}
+    \let\textsu\textsup
+    \let\textsuperior\textsup
 
 END_STY_FONTAXES_SUP
     }
@@ -721,10 +754,12 @@
         print {$STY} <<'END_STY_FONTAXES_INF';
     \fa at naming@exception{figures}{{inferior}{proportional}}{Inf}
     \fa at naming@exception{figures}{{inferior}{tabular}}{Inf}
-    \def\infigures{\@nomath\infigures
+    \def\inffigures{\@nomath\inffigures
         \fontfigurestyle{inferior}\selectfont}
-    \DeclareTextFontCommand{\textin}{\infigures}
-    \let\textinferior\textin
+    \let\infigures\inffigures
+    \DeclareTextFontCommand{\textinf}{\inffigures}
+    \let\textin\textinf
+    \let\textinferior\textinf
 
 END_STY_FONTAXES_INF
     }
@@ -771,16 +806,10 @@
     print {$STY} "}{}\n\n";
 
     print {$STY} <<"END_STY_XKEYVAL";
-\\IfFileExists{xkeyval.sty}{
-    \\newcommand*{\\$fam\@scale}{1}
-    \\RequirePackage{xkeyval}
-    \\DeclareOptionX{scale}{\\renewcommand*{\\$fam\@scale}{##1}}
-    \\DeclareOptionX{scaled}{\\renewcommand*{\\$fam\@scale}{##1}}
-}{
-    \\let\\DeclareOptionX\\DeclareOption
-    \\let\\ExecuteOptionsX\\ExecuteOptions
-    \\let\\ProcessOptionsX\\ProcessOptions
-}
+\\RequirePackage{xkeyval}
+\\newcommand*{\\$fam\@scale}{1}
+\\DeclareOptionX{scale}{\\renewcommand*{\\$fam\@scale}{#1}}
+\\DeclareOptionX{scaled}{\\renewcommand*{\\$fam\@scale}{#1}}
 
 END_STY_XKEYVAL
 
@@ -807,12 +836,51 @@
 }
 END_STY_MAINFONT
 
+    if ($ARGV{math}) {
+        print {$STY} <<"END_STY_MATHOPTION";
+\\newif\\if$fam\@math\\$fam\@mathfalse
+\\DeclareOptionX{math}{\\$fam\@mathtrue}
+
+\\newcommand*{\\$fam\@mathstyle}{TeX}
+\\DeclareOptionX{math-style}{\\renewcommand*{\\$fam\@mathstyle}{#1}}
+
+END_STY_MATHOPTION
+
+        if ($seen{LF} or $seen{TLF}) {
+            print {$STY} "\\newcommand*{\\$fam\@mathfigurestyle}{LF}\n";
+        }
+        elsif ($seen{OsF} or $seen{TOsF}) {
+            print {$STY} "\\newcommand*{\\$fam\@mathfigurestyle}{OsF}\n";
+        }
+
+        if ($seen{OsF} or $seen{TOsF}) {
+            print {$STY}
+                "\\DeclareOptionX{matholdstyle}\n",
+                "    {\\renewcommand*{\\$fam\@mathfigurestyle}{OsF}}\n";
+        }
+        if ($seen{LF} or $seen{TLF}) {
+            print {$STY}
+                "\\DeclareOptionX{mathlining}",
+                "    {\\renewcommand{\\$fam\@mathfigurestyle}{LF}}\n";
+        }
+        print {$STY} "\n";
+
+        if ($seen{sw}) {
+            print {$STY} <<"END_STY_MATHCALOPTION";
+\\newif\\if$fam\@mathcal\\$fam\@mathcalfalse
+\\DeclareOptionX{mathcal}{\\$fam\@mathcaltrue}
+
+END_STY_MATHCALOPTION
+        }
+    }
+
     my $defaults
         = $seen{OsF}  ? 'oldstyle,proportional'
         : $seen{TOsF} ? 'oldstyle,tabular'
         : $seen{LF}   ? 'lining,proportional'
         : $seen{TLF}  ? 'lining,tabular'
-        :               die "[ERROR]     Internal bug, please report!";
+        :               die "[ERROR]     Internal bug, please report!"
+        ;
 
     my $default_bold;
     for my $series (qw(heavy black extrabold demibold semibold bold)) {
@@ -836,17 +904,367 @@
     }
     $defaults .= ",$default_regular" if $default_regular;
 
-    print {$STY} <<"END_STYLE_REST";
+    print {$STY} <<"END_STY_PROCESSOPTIONS";
 \\ExecuteOptionsX{$defaults}
 \\ProcessOptionsX\\relax
 
+END_STY_PROCESSOPTIONS
+
+    if (defined $testfont) {
+        print {$STY} <<"END_STY_MATCHLOWERCASE";
+\\ifthenelse{\\equal{\\$fam\@scale}{MatchLowercase}}
+    {\\newlength{\\$fam\@defaultx}
+     \\settoheight{\\$fam\@defaultx}{x}
+     \\newlength{\\$fam\@xheight}
+     \\settoheight{\\$fam\@xheight}
+        {{\\font\\testfont=$testfont at \\f\@size pt\\testfont x}}
+     \\renewcommand*{\\$fam\@scale}
+        {\\strip\@pt\\dimexpr\\number\\numexpr\\number\\dimexpr\\$fam\@defaultx\\relax*65536/\\number\\dimexpr\\$fam\@xheight\\relax\\relax sp\\relax}
+    }
+    {}
+
+END_STY_MATCHLOWERCASE
+    }
+
+    print {$STY} <<"END_STYLE_REST";
 \\renewcommand*
     {\\$ARGV{nfss}default}
     {$fam-\\$fam\@figurealign\\$fam\@figurestyle}
 
-\\endinput
 END_STYLE_REST
 
+    if ($ARGV{math}) {
+        print {$STY} <<"END_STY_MATH";
+\\newif\\if$fam\@mathLATINup\\$fam\@mathLATINupfalse
+\\newif\\if$fam\@mathlatinup\\$fam\@mathlatinupfalse
+\\newif\\if$fam\@mathGREEKup\\$fam\@mathGREEKupfalse
+\\newif\\if$fam\@mathgreekup\\$fam\@mathgreekupfalse
+
+\\if$fam\@math
+    \\DeclareSymbolFont{newoperators}  {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n}
+    \\SetSymbolFont{newoperators}{bold}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+    \\DeclareSymbolFont{newletters}  {OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{it}
+    \\SetSymbolFont{newletters}{bold}{OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{it}
+
+    \\DeclareSymbolFontAlphabet{\\mathrm}{newoperators}
+    \\DeclareSymbolFontAlphabet{\\mathnormal}{newletters}
+
+    \\def\\operator\@font{\\mathgroup\\symnewoperators}
+    \\SetMathAlphabet{\\mathit}{normal}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{it}
+    \\SetMathAlphabet{\\mathit}{bold}  {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{it}
+
+    \\SetMathAlphabet{\\mathbf}{normal}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+    \\SetMathAlphabet{\\mathbf}{bold}  {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+    \\def\\re\@DeclareMathSymbol#1#2#3#4{%
+        \\if\\relax\\noexpand#1\\let#1=\\undefined\\fi
+        \\DeclareMathSymbol{#1}{#2}{#3}{#4}}
+
+    \\def\\re\@DeclareMathDelimiter#1#2#3#4#5#6{%
+        \\let#1=\\undefined
+        \\DeclareMathDelimiter{#1}{#2}{#3}{#4}{#5}{#6}}
+
+    \\def\\re\@DeclareMathAccent#1#2#3#4{%
+        \\let#1=\\undefined
+        \\DeclareMathAccent{#1}{#2}{#3}{#4}}
+
+    \\re\@DeclareMathSymbol{0}{\\mathalpha}{newoperators}{`0}
+    \\re\@DeclareMathSymbol{1}{\\mathalpha}{newoperators}{`1}
+    \\re\@DeclareMathSymbol{2}{\\mathalpha}{newoperators}{`2}
+    \\re\@DeclareMathSymbol{3}{\\mathalpha}{newoperators}{`3}
+    \\re\@DeclareMathSymbol{4}{\\mathalpha}{newoperators}{`4}
+    \\re\@DeclareMathSymbol{5}{\\mathalpha}{newoperators}{`5}
+    \\re\@DeclareMathSymbol{6}{\\mathalpha}{newoperators}{`6}
+    \\re\@DeclareMathSymbol{7}{\\mathalpha}{newoperators}{`7}
+    \\re\@DeclareMathSymbol{8}{\\mathalpha}{newoperators}{`8}
+    \\re\@DeclareMathSymbol{9}{\\mathalpha}{newoperators}{`9}
+
+    \\re\@DeclareMathSymbol{a}{\\mathalpha}{newletters}{`a}
+    \\re\@DeclareMathSymbol{b}{\\mathalpha}{newletters}{`b}
+    \\re\@DeclareMathSymbol{c}{\\mathalpha}{newletters}{`c}
+    \\re\@DeclareMathSymbol{d}{\\mathalpha}{newletters}{`d}
+    \\re\@DeclareMathSymbol{e}{\\mathalpha}{newletters}{`e}
+    \\re\@DeclareMathSymbol{f}{\\mathalpha}{newletters}{`f}
+    \\re\@DeclareMathSymbol{g}{\\mathalpha}{newletters}{`g}
+    \\re\@DeclareMathSymbol{h}{\\mathalpha}{newletters}{`h}
+    \\re\@DeclareMathSymbol{i}{\\mathalpha}{newletters}{`i}
+    \\re\@DeclareMathSymbol{j}{\\mathalpha}{newletters}{`j}
+    \\re\@DeclareMathSymbol{k}{\\mathalpha}{newletters}{`k}
+    \\re\@DeclareMathSymbol{l}{\\mathalpha}{newletters}{`l}
+    \\re\@DeclareMathSymbol{m}{\\mathalpha}{newletters}{`m}
+    \\re\@DeclareMathSymbol{n}{\\mathalpha}{newletters}{`n}
+    \\re\@DeclareMathSymbol{o}{\\mathalpha}{newletters}{`o}
+    \\re\@DeclareMathSymbol{p}{\\mathalpha}{newletters}{`p}
+    \\re\@DeclareMathSymbol{q}{\\mathalpha}{newletters}{`q}
+    \\re\@DeclareMathSymbol{r}{\\mathalpha}{newletters}{`r}
+    \\re\@DeclareMathSymbol{s}{\\mathalpha}{newletters}{`s}
+    \\re\@DeclareMathSymbol{t}{\\mathalpha}{newletters}{`t}
+    \\re\@DeclareMathSymbol{u}{\\mathalpha}{newletters}{`u}
+    \\re\@DeclareMathSymbol{v}{\\mathalpha}{newletters}{`v}
+    \\re\@DeclareMathSymbol{w}{\\mathalpha}{newletters}{`w}
+    \\re\@DeclareMathSymbol{x}{\\mathalpha}{newletters}{`x}
+    \\re\@DeclareMathSymbol{y}{\\mathalpha}{newletters}{`y}
+    \\re\@DeclareMathSymbol{z}{\\mathalpha}{newletters}{`z}
+
+    \\re\@DeclareMathSymbol{A}{\\mathalpha}{newletters}{`A}
+    \\re\@DeclareMathSymbol{B}{\\mathalpha}{newletters}{`B}
+    \\re\@DeclareMathSymbol{C}{\\mathalpha}{newletters}{`C}
+    \\re\@DeclareMathSymbol{D}{\\mathalpha}{newletters}{`D}
+    \\re\@DeclareMathSymbol{E}{\\mathalpha}{newletters}{`E}
+    \\re\@DeclareMathSymbol{F}{\\mathalpha}{newletters}{`F}
+    \\re\@DeclareMathSymbol{G}{\\mathalpha}{newletters}{`G}
+    \\re\@DeclareMathSymbol{H}{\\mathalpha}{newletters}{`H}
+    \\re\@DeclareMathSymbol{I}{\\mathalpha}{newletters}{`I}
+    \\re\@DeclareMathSymbol{J}{\\mathalpha}{newletters}{`J}
+    \\re\@DeclareMathSymbol{K}{\\mathalpha}{newletters}{`K}
+    \\re\@DeclareMathSymbol{L}{\\mathalpha}{newletters}{`L}
+    \\re\@DeclareMathSymbol{M}{\\mathalpha}{newletters}{`M}
+    \\re\@DeclareMathSymbol{N}{\\mathalpha}{newletters}{`N}
+    \\re\@DeclareMathSymbol{O}{\\mathalpha}{newletters}{`O}
+    \\re\@DeclareMathSymbol{P}{\\mathalpha}{newletters}{`P}
+    \\re\@DeclareMathSymbol{Q}{\\mathalpha}{newletters}{`Q}
+    \\re\@DeclareMathSymbol{R}{\\mathalpha}{newletters}{`R}
+    \\re\@DeclareMathSymbol{S}{\\mathalpha}{newletters}{`S}
+    \\re\@DeclareMathSymbol{T}{\\mathalpha}{newletters}{`T}
+    \\re\@DeclareMathSymbol{U}{\\mathalpha}{newletters}{`U}
+    \\re\@DeclareMathSymbol{V}{\\mathalpha}{newletters}{`V}
+    \\re\@DeclareMathSymbol{W}{\\mathalpha}{newletters}{`W}
+    \\re\@DeclareMathSymbol{X}{\\mathalpha}{newletters}{`X}
+    \\re\@DeclareMathSymbol{Y}{\\mathalpha}{newletters}{`Y}
+    \\re\@DeclareMathSymbol{Z}{\\mathalpha}{newletters}{`Z}
+
+    \\re\@DeclareMathSymbol{\\imath}{\\mathord}{newletters}{"7B}
+    \\re\@DeclareMathSymbol{\\jmath}{\\mathord}{newletters}{"7C}
+
+    %
+    %   A number of math symbol declarations have been commented out,
+    %   since these characters generally do not work very well when
+    %   typesetting maths (either because of spacing issues or because
+    %   they don't mix with others symbols).
+    %   The commented-out declarations have been left in this style file
+    %   in case the user does want to re-activate those characters.
+    %
+
+    \\re\@DeclareMathSymbol{!}{\\mathclose}{newoperators}{"21}
+  % \\re\@DeclareMathSymbol{+}{\\mathbin}  {newoperators}{"2B}
+    \\re\@DeclareMathSymbol{:}{\\mathrel}  {newoperators}{"3A}
+    \\re\@DeclareMathSymbol{;}{\\mathpunct}{newoperators}{"3B}
+  % \\re\@DeclareMathSymbol{=}{\\mathrel}  {newoperators}{"3D}
+    \\re\@DeclareMathSymbol{?}{\\mathclose}{newoperators}{"3F}
+
+    \\re\@DeclareMathSymbol{.}{\\mathord}  {newletters}{"3A}
+    \\re\@DeclareMathSymbol{,}{\\mathpunct}{newletters}{"3B}
+  % \\re\@DeclareMathSymbol{<}{\\mathrel}  {newletters}{"3C}
+  % \\re\@DeclareMathSymbol{/}{\\mathord}  {newletters}{"3D}
+  % \\re\@DeclareMathSymbol{>}{\\mathrel}  {newletters}{"3E}
+
+    \\re\@DeclareMathSymbol{\\mathdollar}{\\mathord}  {newoperators}{"24}
+    \\re\@DeclareMathSymbol{\\colon}     {\\mathpunct}{newoperators}{"3A}
+
+  % \\DeclareMathDelimiter{(}{\\mathopen} {newoperators}{"28}{largesymbols}{"00}
+  % \\DeclareMathDelimiter{)}{\\mathclose}{newoperators}{"29}{largesymbols}{"01}
+  % \\DeclareMathDelimiter{[}{\\mathopen} {newoperators}{"5B}{largesymbols}{"02}
+  % \\DeclareMathDelimiter{]}{\\mathclose}{newoperators}{"5D}{largesymbols}{"03}
+  % \\DeclareMathDelimiter{/}{\\mathord}  {newoperators}{"2F}{largesymbols}{"0E}
+
+    \\re\@DeclareMathAccent{\\grave}   {\\mathalpha}{newoperators}{"12}
+    \\re\@DeclareMathAccent{\\acute}   {\\mathalpha}{newoperators}{"13}
+    \\re\@DeclareMathAccent{\\check}   {\\mathalpha}{newoperators}{"14}
+    \\re\@DeclareMathAccent{\\breve}   {\\mathalpha}{newoperators}{"15}
+    \\re\@DeclareMathAccent{\\bar}     {\\mathalpha}{newoperators}{"16}
+    \\re\@DeclareMathAccent{\\mathring}{\\mathalpha}{newoperators}{"17}
+    \\re\@DeclareMathAccent{\\hat}     {\\mathalpha}{newoperators}{"5E}
+    \\re\@DeclareMathAccent{\\dot}     {\\mathalpha}{newoperators}{"5F}
+    \\re\@DeclareMathAccent{\\tilde}   {\\mathalpha}{newoperators}{"7E}
+    \\re\@DeclareMathAccent{\\ddot}    {\\mathalpha}{newoperators}{"7F}
+
+    \\re\@DeclareMathSymbol{\\Gamma}  {\\mathalpha}{newoperators}{"00}
+    \\re\@DeclareMathSymbol{\\Delta}  {\\mathalpha}{newoperators}{"01}
+    \\re\@DeclareMathSymbol{\\Theta}  {\\mathalpha}{newoperators}{"02}
+    \\re\@DeclareMathSymbol{\\Lambda} {\\mathalpha}{newoperators}{"03}
+    \\re\@DeclareMathSymbol{\\Xi}     {\\mathalpha}{newoperators}{"04}
+    \\re\@DeclareMathSymbol{\\Pi}     {\\mathalpha}{newoperators}{"05}
+    \\re\@DeclareMathSymbol{\\Sigma}  {\\mathalpha}{newoperators}{"06}
+    \\re\@DeclareMathSymbol{\\Upsilon}{\\mathalpha}{newoperators}{"07}
+    \\re\@DeclareMathSymbol{\\Phi}    {\\mathalpha}{newoperators}{"08}
+    \\re\@DeclareMathSymbol{\\Psi}    {\\mathalpha}{newoperators}{"09}
+    \\re\@DeclareMathSymbol{\\Omega}  {\\mathalpha}{newoperators}{"0A}
+
+    \\re\@DeclareMathSymbol{\\alpha}     {\\mathord}{newletters}{"0B}
+    \\re\@DeclareMathSymbol{\\beta}      {\\mathord}{newletters}{"0C}
+    \\re\@DeclareMathSymbol{\\gamma}     {\\mathord}{newletters}{"0D}
+    \\re\@DeclareMathSymbol{\\delta}     {\\mathord}{newletters}{"0E}
+    \\re\@DeclareMathSymbol{\\epsilon}   {\\mathord}{newletters}{"0F}
+    \\re\@DeclareMathSymbol{\\zeta}      {\\mathord}{newletters}{"10}
+    \\re\@DeclareMathSymbol{\\eta}       {\\mathord}{newletters}{"11}
+    \\re\@DeclareMathSymbol{\\theta}     {\\mathord}{newletters}{"12}
+    \\re\@DeclareMathSymbol{\\iota}      {\\mathord}{newletters}{"13}
+    \\re\@DeclareMathSymbol{\\kappa}     {\\mathord}{newletters}{"14}
+    \\re\@DeclareMathSymbol{\\lambda}    {\\mathord}{newletters}{"15}
+    \\re\@DeclareMathSymbol{\\mu}        {\\mathord}{newletters}{"16}
+    \\re\@DeclareMathSymbol{\\nu}        {\\mathord}{newletters}{"17}
+    \\re\@DeclareMathSymbol{\\xi}        {\\mathord}{newletters}{"18}
+    \\re\@DeclareMathSymbol{\\pi}        {\\mathord}{newletters}{"19}
+    \\re\@DeclareMathSymbol{\\rho}       {\\mathord}{newletters}{"1A}
+    \\re\@DeclareMathSymbol{\\sigma}     {\\mathord}{newletters}{"1B}
+    \\re\@DeclareMathSymbol{\\tau}       {\\mathord}{newletters}{"1C}
+    \\re\@DeclareMathSymbol{\\upsilon}   {\\mathord}{newletters}{"1D}
+    \\re\@DeclareMathSymbol{\\phi}       {\\mathord}{newletters}{"1E}
+    \\re\@DeclareMathSymbol{\\chi}       {\\mathord}{newletters}{"1F}
+    \\re\@DeclareMathSymbol{\\psi}       {\\mathord}{newletters}{"20}
+    \\re\@DeclareMathSymbol{\\omega}     {\\mathord}{newletters}{"21}
+    \\re\@DeclareMathSymbol{\\varepsilon}{\\mathord}{newletters}{"22}
+    \\re\@DeclareMathSymbol{\\vartheta}  {\\mathord}{newletters}{"23}
+    \\re\@DeclareMathSymbol{\\varpi}     {\\mathord}{newletters}{"24}
+    \\re\@DeclareMathSymbol{\\varrho}    {\\mathord}{newletters}{"25}
+    \\re\@DeclareMathSymbol{\\varsigma}  {\\mathord}{newletters}{"26}
+    \\re\@DeclareMathSymbol{\\varphi}    {\\mathord}{newletters}{"27}
+
+    \\ifthenelse{\\equal{\\$fam\@mathstyle}{TeX}}
+        {\\$fam\@mathGREEKuptrue}
+        {}
+    \\ifthenelse{\\equal{\\$fam\@mathstyle}{french}}
+        {\\$fam\@mathLATINuptrue
+         \\$fam\@mathGREEKuptrue
+         \\$fam\@mathgreekuptrue}
+        {}
+    \\ifthenelse{\\equal{\\$fam\@mathstyle}{upright}}
+        {\\$fam\@mathLATINuptrue
+         \\$fam\@mathlatinuptrue
+         \\$fam\@mathGREEKuptrue
+         \\$fam\@mathgreekuptrue}
+        {}
+
+    \\if$fam\@mathLATINup
+        \\re\@DeclareMathSymbol{A}{\\mathalpha}{newoperators}{`A}
+        \\re\@DeclareMathSymbol{B}{\\mathalpha}{newoperators}{`B}
+        \\re\@DeclareMathSymbol{C}{\\mathalpha}{newoperators}{`C}
+        \\re\@DeclareMathSymbol{D}{\\mathalpha}{newoperators}{`D}
+        \\re\@DeclareMathSymbol{E}{\\mathalpha}{newoperators}{`E}
+        \\re\@DeclareMathSymbol{F}{\\mathalpha}{newoperators}{`F}
+        \\re\@DeclareMathSymbol{G}{\\mathalpha}{newoperators}{`G}
+        \\re\@DeclareMathSymbol{H}{\\mathalpha}{newoperators}{`H}
+        \\re\@DeclareMathSymbol{I}{\\mathalpha}{newoperators}{`I}
+        \\re\@DeclareMathSymbol{J}{\\mathalpha}{newoperators}{`J}
+        \\re\@DeclareMathSymbol{K}{\\mathalpha}{newoperators}{`K}
+        \\re\@DeclareMathSymbol{L}{\\mathalpha}{newoperators}{`L}
+        \\re\@DeclareMathSymbol{M}{\\mathalpha}{newoperators}{`M}
+        \\re\@DeclareMathSymbol{N}{\\mathalpha}{newoperators}{`N}
+        \\re\@DeclareMathSymbol{O}{\\mathalpha}{newoperators}{`O}
+        \\re\@DeclareMathSymbol{P}{\\mathalpha}{newoperators}{`P}
+        \\re\@DeclareMathSymbol{Q}{\\mathalpha}{newoperators}{`Q}
+        \\re\@DeclareMathSymbol{R}{\\mathalpha}{newoperators}{`R}
+        \\re\@DeclareMathSymbol{S}{\\mathalpha}{newoperators}{`S}
+        \\re\@DeclareMathSymbol{T}{\\mathalpha}{newoperators}{`T}
+        \\re\@DeclareMathSymbol{U}{\\mathalpha}{newoperators}{`U}
+        \\re\@DeclareMathSymbol{V}{\\mathalpha}{newoperators}{`V}
+        \\re\@DeclareMathSymbol{W}{\\mathalpha}{newoperators}{`W}
+        \\re\@DeclareMathSymbol{X}{\\mathalpha}{newoperators}{`X}
+        \\re\@DeclareMathSymbol{Y}{\\mathalpha}{newoperators}{`Y}
+        \\re\@DeclareMathSymbol{Z}{\\mathalpha}{newoperators}{`Z}
+    \\fi
+
+    \\if$fam\@mathlatinup
+        \\DeclareSymbolFont{upletters}  {OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n}
+        \\SetSymbolFont{upletters}{bold}{OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+        \\re\@DeclareMathSymbol{a}{\\mathord}{upletters}{`a}
+        \\re\@DeclareMathSymbol{b}{\\mathord}{upletters}{`b}
+        \\re\@DeclareMathSymbol{c}{\\mathord}{upletters}{`c}
+        \\re\@DeclareMathSymbol{d}{\\mathord}{upletters}{`d}
+        \\re\@DeclareMathSymbol{e}{\\mathord}{upletters}{`e}
+        \\re\@DeclareMathSymbol{f}{\\mathord}{upletters}{`f}
+        \\re\@DeclareMathSymbol{g}{\\mathord}{upletters}{`g}
+        \\re\@DeclareMathSymbol{h}{\\mathord}{upletters}{`h}
+        \\re\@DeclareMathSymbol{i}{\\mathord}{upletters}{`i}
+        \\re\@DeclareMathSymbol{j}{\\mathord}{upletters}{`j}
+        \\re\@DeclareMathSymbol{k}{\\mathord}{upletters}{`k}
+        \\re\@DeclareMathSymbol{l}{\\mathord}{upletters}{`l}
+        \\re\@DeclareMathSymbol{m}{\\mathord}{upletters}{`m}
+        \\re\@DeclareMathSymbol{n}{\\mathord}{upletters}{`n}
+        \\re\@DeclareMathSymbol{o}{\\mathord}{upletters}{`o}
+        \\re\@DeclareMathSymbol{p}{\\mathord}{upletters}{`p}
+        \\re\@DeclareMathSymbol{q}{\\mathord}{upletters}{`q}
+        \\re\@DeclareMathSymbol{r}{\\mathord}{upletters}{`r}
+        \\re\@DeclareMathSymbol{s}{\\mathord}{upletters}{`s}
+        \\re\@DeclareMathSymbol{t}{\\mathord}{upletters}{`t}
+        \\re\@DeclareMathSymbol{u}{\\mathord}{upletters}{`u}
+        \\re\@DeclareMathSymbol{v}{\\mathord}{upletters}{`v}
+        \\re\@DeclareMathSymbol{w}{\\mathord}{upletters}{`w}
+        \\re\@DeclareMathSymbol{x}{\\mathord}{upletters}{`x}
+        \\re\@DeclareMathSymbol{y}{\\mathord}{upletters}{`y}
+        \\re\@DeclareMathSymbol{z}{\\mathord}{upletters}{`z}
+
+        \\re\@DeclareMathSymbol{\\imath}{\\mathord}{upletters}{"7B}
+        \\re\@DeclareMathSymbol{\\jmath}{\\mathord}{upletters}{"7C}
+    \\fi
+
+    \\if$fam\@mathGREEKup
+    \\else
+        \\re\@DeclareMathSymbol{\\Gamma}  {\\mathalpha}{newletters}{"00}
+        \\re\@DeclareMathSymbol{\\Delta}  {\\mathalpha}{newletters}{"01}
+        \\re\@DeclareMathSymbol{\\Theta}  {\\mathalpha}{newletters}{"02}
+        \\re\@DeclareMathSymbol{\\Lambda} {\\mathalpha}{newletters}{"03}
+        \\re\@DeclareMathSymbol{\\Xi}     {\\mathalpha}{newletters}{"04}
+        \\re\@DeclareMathSymbol{\\Pi}     {\\mathalpha}{newletters}{"05}
+        \\re\@DeclareMathSymbol{\\Sigma}  {\\mathalpha}{newletters}{"06}
+        \\re\@DeclareMathSymbol{\\Upsilon}{\\mathalpha}{newletters}{"07}
+        \\re\@DeclareMathSymbol{\\Phi}    {\\mathalpha}{newletters}{"08}
+        \\re\@DeclareMathSymbol{\\Psi}    {\\mathalpha}{newletters}{"09}
+        \\re\@DeclareMathSymbol{\\Omega}  {\\mathalpha}{newletters}{"0A}
+    \\fi
+
+    \\if$fam\@mathgreekup
+        \\DeclareSymbolFont{upletters}  {OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n}
+        \\SetSymbolFont{upletters}{bold}{OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+        \\re\@DeclareMathSymbol{\\alpha}     {\\mathord}{upletters}{"0B}
+        \\re\@DeclareMathSymbol{\\beta}      {\\mathord}{upletters}{"0C}
+        \\re\@DeclareMathSymbol{\\gamma}     {\\mathord}{upletters}{"0D}
+        \\re\@DeclareMathSymbol{\\delta}     {\\mathord}{upletters}{"0E}
+        \\re\@DeclareMathSymbol{\\epsilon}   {\\mathord}{upletters}{"0F}
+        \\re\@DeclareMathSymbol{\\zeta}      {\\mathord}{upletters}{"10}
+        \\re\@DeclareMathSymbol{\\eta}       {\\mathord}{upletters}{"11}
+        \\re\@DeclareMathSymbol{\\theta}     {\\mathord}{upletters}{"12}
+        \\re\@DeclareMathSymbol{\\iota}      {\\mathord}{upletters}{"13}
+        \\re\@DeclareMathSymbol{\\kappa}     {\\mathord}{upletters}{"14}
+        \\re\@DeclareMathSymbol{\\lambda}    {\\mathord}{upletters}{"15}
+        \\re\@DeclareMathSymbol{\\mu}        {\\mathord}{upletters}{"16}
+        \\re\@DeclareMathSymbol{\\nu}        {\\mathord}{upletters}{"17}
+        \\re\@DeclareMathSymbol{\\xi}        {\\mathord}{upletters}{"18}
+        \\re\@DeclareMathSymbol{\\pi}        {\\mathord}{upletters}{"19}
+        \\re\@DeclareMathSymbol{\\rho}       {\\mathord}{upletters}{"1A}
+        \\re\@DeclareMathSymbol{\\sigma}     {\\mathord}{upletters}{"1B}
+        \\re\@DeclareMathSymbol{\\tau}       {\\mathord}{upletters}{"1C}
+        \\re\@DeclareMathSymbol{\\upsilon}   {\\mathord}{upletters}{"1D}
+        \\re\@DeclareMathSymbol{\\phi}       {\\mathord}{upletters}{"1E}
+        \\re\@DeclareMathSymbol{\\chi}       {\\mathord}{upletters}{"1F}
+        \\re\@DeclareMathSymbol{\\psi}       {\\mathord}{upletters}{"20}
+        \\re\@DeclareMathSymbol{\\omega}     {\\mathord}{upletters}{"21}
+        \\re\@DeclareMathSymbol{\\varepsilon}{\\mathord}{upletters}{"22}
+        \\re\@DeclareMathSymbol{\\vartheta}  {\\mathord}{upletters}{"23}
+        \\re\@DeclareMathSymbol{\\varpi}     {\\mathord}{upletters}{"24}
+        \\re\@DeclareMathSymbol{\\varrho}    {\\mathord}{upletters}{"25}
+        \\re\@DeclareMathSymbol{\\varsigma}  {\\mathord}{upletters}{"26}
+        \\re\@DeclareMathSymbol{\\varphi}    {\\mathord}{upletters}{"27}
+    \\fi
+\\fi
+
+END_STY_MATH
+
+        if ($seen{sw}) {
+            print {$STY} <<"END_STY_MATHCAL";
+\\if$fam\@mathcal
+    \\SetMathAlphabet{\\mathcal}{normal}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{sw}
+    \\SetMathAlphabet{\\mathcal}{bold}  {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{sw}
+\\fi
+
+END_STY_MATHCAL
+        }
+    }
+
+    print {$STY} "\\endinput\n";
     close $STY;
 
     return;
@@ -889,7 +1307,9 @@
 \\fi
 
 \\DeclareFontFamily{$enc}{$fam-$sty}{@{[
-    $ARGV{nfss} eq 'tt' ? '\hyphenchar\font=-1' : ""
+    $ARGV{nfss} eq 'tt' ? '\hyphenchar\font=-1'
+    : $enc eq 'OML'     ? '\skewchar\font=127'
+    :                     q{}
 ]}}
 
 END_FD_HEADER
@@ -1076,6 +1496,9 @@
     nfssweight:         @{[ join q{, }, @{$ARGV{nfssweight}} ]}
     nfsswidth:          @{[ join q{, }, @{$ARGV{nfsswidth}}  ]}
 
+    math:               @{[ $ARGV{math}         ? 'yes'     : 'no'     ]}
+    mathspacing:        $ARGV{mathspacing}
+
 END_ARGUMENTS
 
     if ($ARGV{fig_height} or $ARGV{fig_width}) {
@@ -1182,7 +1605,7 @@
                        $workitem->{encoding},
                        $workitem->{figurestyle},
                        $workitem->{fdshape},
-                       join(q(, ), @{$workitem->{features}});
+                       join(q{, }, @{$workitem->{features}});
         $prevfn  = $workitem->{font}{filename};
     }
 
@@ -1317,8 +1740,8 @@
     c   =>  [ qw( condensed ) ],
     sc  =>  [ qw( semicondensed narrow ) ],
     ''  =>  [ qw( regular ) ],
-    sx  =>  [ qw( semiextended semiexpanded ) ],
-    x   =>  [ qw( extended expanded wide ) ],
+    sx  =>  [ qw( semiextended semiexpanded wide ) ],
+    x   =>  [ qw( extended expanded ) ],
     ex  =>  [],
     ux  =>  [],
 );
@@ -1645,7 +2068,7 @@
     -defaulttabular             considered 'default' for this font; see docs
     -defaultproportional
 
-    -extra="TEXT"           Add TEXT to the command for 'otftotfm'
+    -extra="EXTRA"          Add EXTRA to the otftotfm command for all fonts
     -target="DIRECTORY"     Install files into specified TEXMF tree
     -vendor="VENDOR"        Only used for naming directories
     -typeface="TYPEFACE"    Only used for naming directories
@@ -1664,6 +2087,9 @@
     -verbose                Print more data to log file
     -version                Print version number and exit
 
+    -math                   Generate basic math fonts
+    -mathspacing=AMOUNT     Letterspace the math fonts by AMOUNT/1000 em
+
     font[s]                 The fonts (.otf or .ttf format) to install.
 
 Please report any bugs or suggestions to <marcpenninga at gmail.com>.
@@ -1700,6 +2126,8 @@
     verbose         => 0,
     nfsswidth       => [],
     nfssweight      => [],
+    math            => 0,
+    mathspacing     => 0,
 );
 
 
@@ -1765,12 +2193,14 @@
                                      NFSS::set_widths($key, @values);
                                      $ARGV{$key} = 'user-defined';
                                  },
+        'math!'               => \$ARGV{math},
+        'mathspacing=i'       => \$ARGV{mathspacing},
     )
     or die "$USAGE";
 
     if (!@ARGV) {
         Pod::Usage::pod2usage(
-            -msg => '[ERROR] No font files given, nothing to do!',
+            -msg => '[ERROR]     No font files given, nothing to do!',
             -verbose => 1);
     }
 
@@ -1827,6 +2257,7 @@
 # The official names for various coding schemes.
 my %SCHEME = (
     OT1 => 'TEX TEXT',
+    OML => 'TEX MATH ITALIC',
     T1  => 'EXTENDED TEX FONT ENCODING - LATIN',
     TS1 => 'TEX TEXT COMPANION SYMBOLS 1---TS1',
     LY1 => 'TEX TYPEWRITER AND WINDOWS ANSI',
@@ -1988,6 +2419,13 @@
         extra => '',
         name  => '',
     },
+    math => {
+        code  => { n => 'n', it => 'it', sl => 'sl' },
+        reqd  => [],
+        nice  => [ 'onum' ],
+        extra => '--math-spacing=127',
+        name  => '',
+    },
 );
 
 =begin Comment
@@ -2024,25 +2462,25 @@
         reqd   => [],
         nice   => [ 'kern', 'liga' ],
         extra  => '',
-        styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+        styles => [ qw(normal smallcaps swash textcomp math) ],
     },
     LF => {
         reqd   => [],
         nice   => [ 'kern', 'liga' ],
         extra  => '',
-        styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+        styles => [ qw(normal smallcaps swash textcomp math) ],
     },
     TOsF => {
         reqd   => [],
         nice   => [ 'kern', 'liga' ],
         extra  => '',
-        styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+        styles => [ qw(normal smallcaps swash textcomp math) ],
     },
     OsF => {
         reqd   => [],
         nice   => [ 'kern', 'liga' ],
         extra  => '',
-        styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+        styles => [ qw(normal smallcaps swash textcomp math) ],
     },
     Sup => {
         reqd   => [ 'sups' ],
@@ -2097,9 +2535,8 @@
 sub get_styles {
     my $figurestyle = shift;
 
-    my $result = $FIGURESTYLE{$figurestyle}{styles} // [];
-
-    return @{$result};
+    return grep { defined $STYLE{$_} }
+                @{$FIGURESTYLE{$figurestyle}{styles}};
 }
 
 
@@ -2286,6 +2723,21 @@
         delete $STYLE{textcomp};
     }
 
+    if ($ARGV{math}) {
+        if (!( grep { $_ eq 'OT1' } @{$ARGV{encoding}} )) {
+            $ARGV{encoding} = [ 'OT1', @{$ARGV{encoding}} ];
+        }
+    }
+    else {
+        delete $STYLE{math}
+    }
+
+    if ($ARGV{mathspacing}) {
+        if (defined $STYLE{math}{extra}) {
+            $STYLE{math}{extra} .= " --letterspacing=$ARGV{mathspacing}";
+        }
+    }
+
     return;
 }
 
@@ -2566,6 +3018,7 @@
         = @{$workitem}{qw(font figurestyle style)};
     my @encodings = $style eq 'textcomp'  ? qw(ts1)
                   : $figurestyle eq 'Orn' ? qw(ly1)
+                  : $style eq 'math'      ? qw(oml)
                   :                         @{$ARGV{encoding}}
                   ;
 
@@ -2600,8 +3053,12 @@
         }
     }
 
-    # Look up the NFSS code for this font's shape.
+    # Look up the NFSS code for this font's shape...
     $workitem->{fdshape} = Tables::get_fdshape($style, $font->{basicshape});
+    # ... but drop this workitem if we shouldn't generate this shape.
+    if (!defined $workitem->{fdshape}) {
+        return;
+    }
 
     # Figure out which encoding file to use for this font.
     my $try = Cwd::abs_path($workitem->{encoding});
@@ -2611,7 +3068,8 @@
     }
     else {
         ($workitem->{enc_file} = $workitem->{encoding})
-            =~ s/\A(OT1|T1|TS1|LY1|LGR|T2[ABC]|T3|TS3)\z/fontools_\L$1\E/xmsi;
+            =~ s{ \A (OT1|OML|T1|TS1|LY1|LGR|T2[ABC]|T3|TS3) \z }
+                {fontools_\L$1\E}xmsi;
     }
 
     # Ornaments have no text encoding, and don't need kerning and ligatures.
@@ -2631,9 +3089,9 @@
     # Don't create ligatures if the user doesn't want them.
     delete $feature{liga} if !$ARGV{ligatures};
 
-    # Don't create kerns and ligatures for TS* fonts.
+    # Don't create kerns and ligatures for symbol or math fonts.
     delete @feature{qw(kern liga)}
-        if $workitem->{encoding} =~ m/\A TS\d \z/xmsi;
+        if $workitem->{encoding} =~ m/\A ( TS\d | OML ) \z/xmsi;
 
     $workitem->{features} = [ sort keys %feature ];
 
@@ -2668,7 +3126,7 @@
 
     To create the documentation:
 
-    pod2man --center="Marc Penninga" --release="fontools" --section=1 \
+    pod2man --center='Marc Penninga' --release='fontools' --section=1 \
         autoinst - | groff -Tps -man - | ps2pdf - autoinst.pdf
 
 
@@ -2734,7 +3192,7 @@
 
 =item I<nw>
 
-"Upright swash"
+`Upright swash'
 
 =back
 
@@ -2752,11 +3210,11 @@
 
 =item -
 
-Families with "Titling" characters;
-these "... replace the default glyphs
+Families with `Titling' characters;
+these `... replace the default glyphs
 with corresponding forms designed specifically for titling.
 These may be all-capital and/or larger on the body,
-and adjusted for viewing at larger sizes"
+and adjusted for viewing at larger sizes'
 (according to the OpenType Specification).
 
 =item -
@@ -2770,7 +3228,7 @@
 Of course, if your fonts don't 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 L</"COMMAND-LINE OPTIONS"> below).
+by the user (see L</COMMAND-LINE OPTIONS> below).
 
 These families use the I<FontPro> project's naming scheme:
 I<< <FontFamily>-<Suffix> >>, where I<< <Suffix> >> is:
@@ -2806,7 +3264,7 @@
 
 =item I<Titl>
 
-Titling characters; see above.
+Titling characters; see above
 
 =item I<Orn>
 
@@ -2824,55 +3282,11 @@
 
 The individual fonts are named I<< <FontName>-<suffix>-<shape>-<enc> >>,
 where I<< <suffix> >> is the same as above (but in lowercase),
-I<< <shape> >> is either empty, "sc" or "swash",
+I<< <shape> >> is either empty, `sc' or `swash',
 and I<< <enc> >> is the encoding (also in lowercase).
-A typical name in this scheme would be "FiraSans-Light-osf-sc-ly1".
+A typical name in this scheme would be `FiraSans-Light-osf-sc-ly1'.
 
 
-=head2 About the log file
-
-B<autoinst> writes some info about what it thinks it's doing to a log file.
-By default this is called F<< <fontfamily>.log >>,
-but this choice can be overridden by the user;
-see the I<-logfile> command-line option in L</"COMMAND-LINE OPTIONS"> below.
-If this log file already exists, B<autoinst> will append its data to the end
-rather than overwrite it.
-Use the I<-verbose> command-line option to ask for more detailed info.
-
-
-=head2 A note for MiKTeX users
-
-Automatically installing the fonts into a suitable TEXMF tree
-(as B<autoinst> tries to do by default) only works for TeX-installations
-that use the F<kpathsea> library; with TeX distributions that implement
-their own directory searching (such as MiKTeX), B<autoinst> will complain
-that it cannot find the F<kpsewhich> program and move all generated files
-into a subdirectory C<./autoinst_output/> 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 I<-target> option
-(see L</"COMMAND-LINE OPTIONS"> below) to manually specify a TEXMF tree.
-
-Also, some OpenType fonts contain so many kerning pairs that the resulting
-F<pl> and F<vpl> files are too big for MiKTeX's F<pltotf> and F<vptovf>;
-the versions that come with W32TeX (F<http://www.w32tex.org>)
-and TeXLive (F<http://tug.org/texlive>) don't seem to have this problem.
-
-
-=head2 A note for MacTeX users
-
-By default, B<autoinst> will try to install all generated files into
-the $TEXMFLOCAL tree; when this directory isn't user-writable,
-it will use the $TEXMFHOME tree instead.  Unfortunately, MacTeX's version
-of C<updmap-sys> (which is called behind the scenes) doesn't search
-in $TEXMFHOME, and hence MacTeX will not find the new fonts.
-
-To remedy this, either run B<autoinst> as root (so that it can install
-everything into $TEXMFLOCAL) or manually run C<updmap -user> to tell
-TeX about the files in $TEXMFHOME.
-The latter option does, however, have some caveats;
-see F<https://tug.org/texlive/scripts-sys-user.html>.
-
-
 =head2 Using the fonts in your LaTeX documents
 
 B<autoinst> generates a style file for using the fonts in LaTeX documents,
@@ -2897,30 +3311,32 @@
 =item C<lining>, C<oldstyle>, C<tabular>, C<proportional>
 
 Choose which figure style to use.
-The defaults are "oldstyle" and "proportional" (if available).
+The defaults are `oldstyle' and `proportional' (if available).
 
-=item C<<< scale=I<< <number> >> >>>
+=item C<<< scale=I<< <number> >> >>>, C<scale=MatchLowercase>
 
 Scale the font by a factor of I<< <number> >>.
 E.g., to increase the size of the font by 5%, use
 C<<< \usepackage[scale=1.05]{I<< <FontFamily> >>} >>>.
-May also be spelled C<scaled>.
+The special value C<MatchLowercase> may be used to scale the font
+so that its x-height matches that of the previously active font
+(which is usually Computer Modern, unless you have loaded another
+font package before this one).
+The name C<scaled> may be used as a synonym for C<scale>.
 
-This option is only available when you have the F<xkeyval> package installed.
-
 =item C<medium>, C<book>, C<text>, C<regular>
 
-Select the weight that LaTeX will use as the "regular" weight;
+Select the weight that LaTeX will use as the `regular' weight;
 the default is C<regular>.
 
 =item C<heavy>, C<black>, C<extrabold>, C<demibold>, C<semibold>, C<bold>
 
-Select the weight that LaTeX will use as the "bold" weight;
+Select the weight that LaTeX will use as the `bold' weight;
 the default is C<bold>.
 
 =back
 
-The previous two groups of options will only work if
+The last two groups of options will only work if
 you have the F<mweights> package installed.
 
 The style file will also try to load the F<fontaxes> package
@@ -2935,8 +3351,8 @@
     DECLARATION     COMMAND         SHORT FORM OF COMMAND
 
     \tlshape        \texttitling    \texttl
-    \sufigures      \textsuperior   \textsu
-    \infigures      \textinferior   \textin
+    \supfigures     \textsuperior   \textsup, \textsu
+    \inffigures     \textinferior   \textinf, \textin
 
 
 In addition, the C<\swshape> and C<\textsw> commands are redefined to place
@@ -2958,40 +3374,75 @@
 By default, B<autoinst> 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 I<-encoding> option
-(see L</"COMMAND-LINE OPTIONS"> below).
+(see L</COMMAND-LINE OPTIONS> below).
 
 
-=head3 Ornaments
+=head2 Maths
 
-Ornament fonts are regular LY1-encoded fonts, with a number of
-'regular' characters replaced by ornament glyphs.
-The OpenType specification says that fonts should only put their
-ornaments in place of the lowercase ASCII letters or the 'bullet'
-character, but some fonts put them in other positions (such as those
-of the digits) as well.
+This is an experimental feature; B<USE AT YOUR OWN RISK!>
+Test the results thoroughly before using them in real documents,
+and be warned that future versions of B<autoinst> may introduce
+incompatible changes.
 
-Ornament glyphs can be accessed like C<{\ornaments abc}> and
-C<{\ornaments\char"61}>, or equivalently
-C<\textornaments{abc}> and C<\textornaments{\char"61}>.
-To see which ornaments a font contains (and at which positions),
-run LaTeX on the file F<nfssfont.tex> (which is included in any
-standard LaTeX installation), supply the name of the ornament font
-(i.e., C<GaramondLibre-Regular-orn-u>) and say C<\table\bye>;
-this will create a table of all glyphs in that font.
+The I<-math> option tells B<autoinst> to generate basic math fonts.
+When enabled, the generated style file defines a few extra options
+to access these math fonts:
 
-Note that versions of B<autoinst> up to 20200428 handled ornaments
-differently, and fonts and style files generated by those versions
-are not compatible with files generated by newer versions.
+=over 4
 
+=item C<math>
 
+Use these fonts for the maths in your document.
+
+=item C<mathlining>, C<matholdstyle>
+
+Choose which figure style to use in maths.
+The default is `mathlining'.
+
+=item C<mathcal>
+
+Use the swash characters from your fonts as the C<\mathcal> alphabet.
+(This option only exists if your fonts actually contain swash characters
+and a C<swsh> feature to access them).
+
+=item C<<< math-style=I<< <style> >> >>>
+
+Choose the `math style' to use.
+With C<math-style=ISO>, all latin and greek letters in math are italic;
+with C<math-style=TeX> (the default), uppercase greek is upright;
+with C<math-style=french>, all greek as well as uppercase latin is upright;
+and with C<math-style=upright> all letters are upright.
+
+=back
+
+Note that this `math' option only changes 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,
+load another math package (such as F<mathdesign> or F<newtxmath>)
+before loading the B<autoinst>-generated style file.
+
+Finally, note that B<autoinst> doesn't 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 contain greek, characters such as C<\varepsilon>
+may be missing.
+You may also find that some glyphs I<are> present in your fonts,
+but don't work well in equations or don't match with other symbols;
+edit the generated style file to remove the declarations of
+these offending characters.
+Once again: test the results before using them!
+If the characters themselves are fine but spaced too tightly,
+you may try increasing the side bearings in math fonts with
+the I<-mathspacing> option (see below), e.g. C<-mathspacing=100>.
+
+
 =head2 NFSS codes
 
 LaTeX's New Font Selection System (NFSS)
 identifies fonts by a combination of family,
 series (the concatenation of weight and width), shape and size.
-B<autoinst> parses the font's metadata
-(more precisely: the output of C<otfinfo --info>)
-to determine these parameters.
+B<autoinst> parses the font's metadata to determine these parameters.
 When this fails (usually because the font family contains uncommon weights,
 widths or shapes),
 B<autoinst> ends up with different fonts having the I<same> values
@@ -3013,16 +3464,16 @@
     Oblique, Slant(ed), Incline(d)      sl
 
 (I<Exception:> Adobe Silentium Pro contains two Roman shapes;
-we map the first of these to "n", for the second one we (ab)use the "it" code
+we map the first of these to `n', for the second one we (ab)use the `it' code
 as this family doesn't contain an Italic shape.)
 
 The mapping of weights and widths to NFSS codes is a more complex,
 two-step proces.
-In the first step, all fonts are assigned a "series" name that is simply
+In the first step, all fonts are assigned a `series' name that is simply
 the concatenation of its weight and width
 (after expanding any abbreviations and converting to lowercase).
-A font with "Cond" width and "Ultra" weight will then be known
-as "ultrablackcondensed".
+A font with `Cond' width and `Ultra' weight will then be known
+as `ultrablackcondensed'.
 
 In the second step, B<autoinst> tries to map all combinations of NFSS codes
 (ul, el, l, sl, m, sb, b, eb and ub for weights;
@@ -3033,11 +3484,11 @@
 a unique code in a sane way (especially for the weights, some font families
 offer more choices or finer granularity than NFSS's codes can handle;
 e.g., Fira Sans contains fifteen(!) different weights,
-including an additional "Medium" weight between Regular and Semibold).
+including an additional `Medium' weight between Regular and Semibold).
 
 B<autoinst> tries hard to ensure that the most common NFSS codes
 (and high-level commands such as C<\bfseries>,
-which are built on top of those codes) will "just work".
+which are built on top of those codes) will `just work'.
 
 To see exactly which NFSS codes map to which fonts, see the log file
 (pro tip: run B<autoinst> with the I<-dryrun> option
@@ -3050,6 +3501,28 @@
 (i.e., C<\fontseries{demibold}\selectfont>).
 
 
+=head2 Ornaments
+
+Ornament fonts are regular LY1-encoded fonts, with a number of
+`regular' characters replaced by ornament glyphs.
+The OpenType specification says that fonts should only put their
+ornaments in place of the lowercase ASCII letters, but some fonts
+put them in other positions (such as those of the digits) as well.
+
+Ornaments can be accessed like C<{\ornaments a}> and
+C<{\ornaments\char"61}>, or equivalently
+C<\textornaments{a}> and C<\textornaments{\char"61}>.
+To see which ornaments a font contains (and at which positions),
+run LaTeX on the file F<nfssfont.tex> (which is included in any
+standard LaTeX installation), supply the name of the ornament font
+(i.e., C<GaramondLibre-Regular-orn-u>) and give the command C<\table\bye>;
+this will create a table of all glyphs in that font.
+
+Note that versions of B<autoinst> up to 20200428 handled ornaments
+differently, and fonts and style files generated by those versions
+are not compatible with files generated by newer versions.
+
+
 =head1 COMMAND-LINE OPTIONS
 
 B<autoinst> tries hard to do The Right Thing (TM) by default,
@@ -3091,7 +3564,7 @@
 
 Generate the specified encoding(s) for the text fonts.
 Multiple encodings may be specified as a comma-separated list
-(without spaces!); the default choice of encodings is "OT1,LY1,T1".
+(without spaces!); the default choice of encodings is `OT1,LY1,T1'.
 
 For each specified encoding XYZ, B<autoinst> will first see if there is
 an encoding file F<XYZ.enc> in the current directory, and if found it will
@@ -3099,7 +3572,7 @@
 Currently B<autoinst> comes with support for the OT1, T1/TS1, LY1, LGR,
 T2A/B/C and T3/TS3 encodings.
 (These files are called F<fontools_ot1.enc> etc. to avoid name clashes
-with other packages; the "fontools_" prefix may be omitted.)
+with other packages; the `fontools_' prefix may be omitted.)
 
 =item B<-ts1>/B<-nots1>
 
@@ -3118,15 +3591,15 @@
 it will - by default - turn off the use of f-ligatures
 (though this can be overridden with the I<-ligatures> option),
 and it will disable hyphenation for this font.
-This latter effect cannot be disabled in B<autoinst>;
+This latter effect cannot be re-enabled in B<autoinst>;
 if you want typewriter text to be hyphenated, use the F<hyphenat> package.
 
 If none of these options is specified, B<autoinst> tries to guess:
-if the font's filename contains the string "mono"
+if the font's filename contains the string `mono'
 or if the field C<isFixedPitch> in the font's I<post> table is True,
 it will select B<-typewriter>;
-else if the filename contains "sans" it selects B<-sanserif>;
-and otherwise it will opt for B<-serif>.
+else if the filename contains `sans' it will select B<-sanserif>;
+otherwise it will opt for B<-serif>.
 
 =item B<-lining>/B<-nolining>
 
@@ -3171,12 +3644,12 @@
 =item B<-inferiors> [= B<none> | B<auto> | B<subs> | B<sinf> | B<dnom> ]
 
 The OpenType standard defines several kinds of digits that might be used
-as inferiors or subscripts: "Subscripts" (OpenType feature "subs"),
-"Scientific Inferiors" ("sinf"), and "Denominators" ("dnom").
+as inferiors or subscripts: `Subscripts' (OpenType feature `subs'),
+`Scientific Inferiors' ('sinf'), and `Denominators' ('dnom').
 This option allows the user to determine which of these styles B<autoinst>
 should use for the inferior characters.
-Alternatively, the value "auto" tells B<autoinst> to use the first value
-in "sinf", "subs" or "dnom" that is supported by the font.
+Alternatively, the value `auto' tells B<autoinst> to use the first value
+in `sinf', `subs' or `dnom' that is supported by the font.
 Saying just B<-inferiors> is equivalent to B<-inferiors=auto>;
 otherwise the default is B<-noinferiors>.
 
@@ -3196,7 +3669,7 @@
 =item B<-ligatures>/B<-noligatures>
 
 Some fonts create glyphs for the standard f-ligatures (ff, fi, fl, ffi, ffl),
-but don't provide a "liga" feature to access these.
+but don't provide a `liga' feature to access these.
 This option tells B<autoinst> to add extra C<LIGKERN> rules to
 the generated fonts to enable the use of these ligatures.
 The default is B<-ligatures>,
@@ -3203,8 +3676,19 @@
 unless the user specified the I<-typewriter> option.
 
 Specify B<-noligatures> to disable the generation of ligatures even for fonts
-that do contain a "liga" feature.
+that do contain a `liga' feature.
 
+=item B<-math>
+
+Tells B<autoinst> to create basic math fonts (see above).
+
+=item B<-mathspacing>=I<amount>
+
+Letterspace each character in the math fonts by I<amount> units,
+where 1000 units equal one em.
+In my opinion, many text fonts benefit from letterspacing by 50 to 100 units
+when used in maths; some fonts need even more. Use your own judgement!
+
 =item B<-defaultlining>/B<-defaultoldstyle>
 
 =item B<-defaulttabular>/B<-defaultproportional>
@@ -3228,21 +3712,23 @@
 Note that this option leads to very long commands (it adds
 one hundred I< --ligkern> options), which may cause problems on some systems.
 
-=item B<-nfssweight>=I<code>=I<weight>, B<-nfsswidth>=I<code>=I<width>
+=item B<-nfssweight>=I<code>=I<weight>
 
+=item B<-nfsswidth>=I<code>=I<width>
+
 Map the NFSS code I<code> to the given weight or width,
 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 "ul" code to the "Thin" weight,
+Example: to map the `ul' code to the `Thin' weight,
 use C<-nfssweight=ul=thin>.
-To inhibit the use of the "ul" code completely,
+To inhibit the use of the `ul' code completely,
 use C<-nfssweight=ul=>.
 
-=item B<-extra>=I<text>
+=item B<-extra>=I<extra>
 
-Append I<text> as extra options to the command lines for I<otftotfm>.
-To prevent I<text> from accidentily being interpreted as options
+Append I<extra> as extra options to the command lines for I<otftotfm>.
+To prevent I<extra> from accidentily being interpreted as options
 to B<autoinst>, it should be properly quoted.
 
 =item B<-manual>
@@ -3301,9 +3787,9 @@
 =item B<-typeface>=I<TYPEFACE>
 
 These options are equivalent to F<otftotfm>'s I< --vendor> and I< --typeface>
-options: they change the "vendor" and "typeface" parts of the names of the
+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's FontFamily name.
 
 Note that these options change I<only> directory names,
 not the names of any generated files.
@@ -3316,6 +3802,39 @@
 =back
 
 
+=head2 A note for MiKTeX users
+
+Automatically installing the fonts into a suitable TEXMF tree
+(as B<autoinst> tries to do by default) only works for TeX-installations
+that use the F<kpathsea> library; with TeX distributions that implement
+their own directory searching (such as MiKTeX), B<autoinst> will complain
+that it cannot find the F<kpsewhich> program and move all generated files
+into a subdirectory C<./autoinst_output/> 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 I<-target> option
+(see L</COMMAND-LINE OPTIONS> below) to manually specify a TEXMF tree.
+
+Also, some OpenType fonts contain so many kerning pairs that the resulting
+F<pl> and F<vpl> files are too big for MiKTeX's F<pltotf> and F<vptovf>;
+the versions that come with W32TeX (F<http://www.w32tex.org>)
+and TeXLive (F<http://tug.org/texlive>) don't seem to have this problem.
+
+
+=head2 A note for MacTeX users
+
+By default, B<autoinst> will try to install all generated files into
+the $TEXMFLOCAL tree; when this directory isn't user-writable,
+it will use the $TEXMFHOME tree instead.  Unfortunately, MacTeX's version
+of C<updmap-sys> (which is called behind the scenes) doesn't search
+in $TEXMFHOME, and hence MacTeX will not find the new fonts.
+
+To remedy this, either run B<autoinst> as root (so that it can install
+everything into $TEXMFLOCAL) or manually run C<updmap -user> to tell
+TeX about the files in $TEXMFHOME.
+The latter option does, however, have some caveats;
+see F<https://tug.org/texlive/scripts-sys-user.html>.
+
+
 =head1 SEE ALSO
 
 Eddie Kohler's B<TypeTools> (F<http://www.lcdf.org/type>).
@@ -3371,7 +3890,7 @@
 
 =head1 VERSION
 
-This document describes B<autoinst> version 20200511.
+This document describes B<autoinst> version 20200527.
 
 
 =head1 RECENT CHANGES
@@ -3380,6 +3899,18 @@
 
 =over 12
 
+=item I<2020-05-27>
+
+Added basic (and still somewhat experimental) math support.
+Implemented the C<scale=MatchLowercase> option value
+in the generated style files.
+`Wide' fonts are mapped to the `sx' NFSS code instead of `x',
+to cater for League Mono Variable's Wide and Extended widths.
+The generated style files now use C<\textsup> and C<\textinf>
+instead of the more cryptic C<\textsu> and C<\textin> to access
+superior and inferior characters
+(though the old forms are retained for backwards compatibility).
+
 =item I<2020-05-11>
 
 When present, use encoding files in the current working directory
@@ -3479,13 +4010,13 @@
 =item I<2019-05-17>
 
 Changed the way the F<-ligatures> option works:
-F<-ligatures> enables f-ligatures (even without a "liga" feature),
-F<-noligatures> now disables f-ligatures (overriding a "liga" feature).
+F<-ligatures> enables f-ligatures (even without a `liga' feature),
+F<-noligatures> now disables f-ligatures (overriding a `liga' feature).
 
 =item I<2019-05-11>
 
 Separate small caps families are now also recognised when the family name
-ends with "SC" (previously B<autoinst> only looked for "SmallCaps").
+ends with `SC' (previously B<autoinst> only looked for `SmallCaps').
 
 =item I<2019-04-22>
 
@@ -3500,7 +4031,7 @@
 Added the <-mergesmallcaps> option, to handle cases where
 the small caps fonts are in separate font families.
 Titling shape is now treated as a separate family instead of a distinct shape;
-it is generated only for fonts with the 'titl' feature.
+it is generated only for fonts with the `titl' feature.
 Only add f-ligatures to fonts when explicitly asked to (I<-ligatures>).
 
 =item I<2019-04-11>
@@ -3522,7 +4053,7 @@
 put all generated files into a subdirectory C<./autoinst_output/>
 instead of all over the current working directory.
 
-Added "auto" value to the I<inferiors> option,
+Added `auto' value to the I<inferiors> option,
 to tell B<autoinst> to use whatever inferior characters are available.
 
 =item I<2019-03-14>
@@ -3530,9 +4061,9 @@
 Overhauled the mapping of fonts (more specifically of weights and widths;
 the mapping of shapes didn't change) to NFSS codes.
 Instead of inventing our own codes to deal with every possible weight
-and width out there, we now create "long" codes based on the names
+and width out there, we now create `long' codes based on the names
 in the font metadata.
-Then we add "ssub" rules to the F<fd> files to map the standard NFSS codes
+Then we add `ssub' rules to the F<fd> files to map the standard NFSS codes
 to our fancy names (see the section B<NFSS codes>;
 based on discussions with Frank Mittelbach and Bob Tennent).
 
@@ -3553,26 +4084,26 @@
 
 =item I<2018-03-26>
 
-Added the "Text" weight and the I<-(no)mergewidths> option.
-Changed the NFSS codes for "Thin" and "Book" to "i" and "o", respectively.
+Added the `Text' weight and the I<-(no)mergewidths> option.
+Changed the NFSS codes for `Thin' and `Book' to `i' and `o', respectively.
 Tried to improve the documentation.
 
 =item I<2018-01-09>
 
-Added the "sl" weight for font families (such as Fira Sans) that contain both
-"Book" and "Regular" weights (reported by Bob Tennent).
-Added the "Two", "Four", "Eight" and "Hair" weights (for Fira Sans).
+Added the `sl' weight for font families (such as Fira Sans) that contain both
+`Book' and `Regular' weights (reported by Bob Tennent).
+Added the `Two', `Four', `Eight' and `Hair' weights (for Fira Sans).
 
 =item I<2017-06-16>
 
 Changed the I<-inferiors> option from a binary yes-or-no choice to allow
-the user to choose one of the "subs", "sinf" and "dnom" features.
+the user to choose one of the `subs', `sinf' and `dnom' features.
 B<autoinst> now always creates a log file.
 
 =item I<2017-03-21>
 
-Updated the F<fontools_ot1.enc> encoding file to include the "Lslash"
-and "lslash" glyphs (thanks to Bob Tennent).
+Updated the F<fontools_ot1.enc> encoding file to include the `Lslash'
+and `lslash' glyphs (thanks to Bob Tennent).
 
 =item I<2015-11-22>
 
@@ -3588,8 +4119,8 @@
 
 =item I<2014-01-21>
 
-"Oblique" or "slanted" fonts are now mapped to NFSS code "sl" instead
-of "it"; added "ssub" rules to the F<fd> files to substitute slanted fonts
+`Oblique' or `slanted' fonts are now mapped to NFSS code `sl' instead
+of `it'; added `ssub' rules to the F<fd> files to substitute slanted fonts
 for italic ones if the latter are missing. Fixed a few bugs.
 
 =item I<2014-01-03>
@@ -3618,16 +4149,16 @@
 =item I<2013-02-06>
 
 Bugfix: the directory names for map and encoding files contained
-the "vendor" instead of the "typeface".
+the `vendor' instead of the `typeface'.
 
 =item I<2013-01-03>
 
-Added extra "ssub" rules to the F<fd> files that substitute "b" for "bx".
+Added extra `ssub' rules to the F<fd> files that substitute `b' for `bx'.
 Verbose mode now also prints all generated commands before they're executed.
 
 =item I<2012-10-25>
 
-Added extra "ssub" rules to the F<fd> files that substitute italic
+Added extra `ssub' rules to the F<fd> files that substitute italic
 shapes for slanted ones.
 
 =item I<2012-09-25>
@@ -3640,7 +4171,7 @@
 
 =item I<2012-03-06>
 
-Implemented the "splitting the font family into multiple subfamilies"
+Implemented the `splitting the font family into multiple subfamilies'
 emergency strategy when font info parsing fails.
 Added recognition for a number of unusual widths, weights and shapes.
 
@@ -3648,8 +4179,8 @@
 
 Fixed a bug in the font parsing code,
 where possible widths, weights and shapes where tested in the wrong order;
-this led to "ExtraLight" fonts being recognised as "Light".
-Added recognition for "Narrow" and "Wide" widths.
+this led to `ExtraLight' fonts being recognised as `Light'.
+Added recognition for `Narrow' and `Wide' widths.
 Also added the I<-(no)figurekern> command-line option.
 
 =item I<2012-02-01>
@@ -3665,7 +4196,7 @@
 =item I<2011-06-15>
 
 Fixed the font info parsing code for some fonts that are
-too lazy to spell out "Italic" in full.
+too lazy to spell out `Italic' in full.
 
 =item I<2010-04-29>
 
@@ -3711,13 +4242,13 @@
 weight and width were mapped to the same series.
 Added a work-around for incorrect size info in some Kepler fonts.
 Fixed a small bug in the generated commands for otftotfm
-(sometimes, the "onum" feature was included twice).
+(sometimes, the `onum' feature was included twice).
 Added encoding file for OT1 to the I<fontools> collection.
 
 =item I<2007-07-27>
 
 Two bugfixes: a closing brace was missing in the generated style file,
-and the NFSS series was formed as "width plus weight" instead of the reverse.
+and the NFSS series was formed as `width plus weight' instead of the reverse.
 
 =item I<2007-06-10>
 
@@ -3732,7 +4263,7 @@
 families (suggested by Steven E. Harris).
 Tweaked the font info parsing to work around a bug in the naming of
 some FontFont fonts, where every font is in a family of its own.
-Added the "scaled" option (including the loading of F<xkeyval>)
+Added the `scaled' option (including the loading of F<xkeyval>)
 to the generated style file.
 Extended the output of the I<-verbose> option.
 
@@ -3753,7 +4284,7 @@
 
 =item I<2006-08-31>
 
-Made the generated style files try to include "fontaxes.sty";
+Made the generated style files try to include `fontaxes.sty';
 changed the names of the generated fonts and families
 (to make the previous change possible);
 added command-line options for most font styles and shapes;
@@ -3760,7 +4291,7 @@
 tweaked the filename parsing code for Cronos Pro and Gill Sans Pro;
 added runtime generation of encoding vectors for ornament fonts
 (because GaramondPremier's ornament names differ from other fonts);
-changed the NFSS-code for italic small caps and titling to "scit" and "tlit"
+changed the NFSS-code for italic small caps and titling to `scit' and `tlit'
 (to work with F<fontaxes>);
 and edited (and hopefully improved) the documentation.
 
@@ -3792,14 +4323,14 @@
 The generated commands weren't actually executed, only printed...
 Also added a small hack to cater for fonts
 (such as some recent versions of MinionPro)
-that contain swash characters but don't provide a "swsh" feature.
+that contain swash characters but don't provide a `swsh' feature.
 
 =item I<2005-08-10>
 
-Dropped the "fontname" scheme in favor of a more verbose naming scheme,
+Dropped the `fontname' scheme in favor of a more verbose naming scheme,
 since many filenames were still more than eight characters long anyway.
 Added F<nfssext.sty>-like commands to the generated style file.
-Changed the default encoding to LY1 and added the "inferior" shape.
+Changed the default encoding to LY1 and added the `inferior' shape.
 
 =item I<2005-08-01>
 
@@ -3806,11 +4337,11 @@
 Rewrote (and hopefully improved) the user interface;
 changed the program to by default execute the generated F<otftotfm> command
 lines rather than writing them to a file;
-added automatic determination of the "fontname" code for the font family;
-changed the NFSS code for italic small caps to "si"; added titling shapes;
+added automatic determination of the `fontname' code for the font family;
+changed the NFSS code for italic small caps to `si'; added titling shapes;
 changed the generated style
 file to include an interface for the ornaments and to load Lehman's NFSS
-extensions F<nfssext.sty> if this is installed; corrected the "fontname" codes
+extensions F<nfssext.sty> if this is installed; corrected the `fontname' codes
 for OT1, T1, LY1 and user-specific encodings; extended the output generated by
 the I<-verbose> option; and rewrote and extended the documentation.
 

Modified: trunk/Build/source/texk/texlive/linked_scripts/fontools/ot2kpx
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/fontools/ot2kpx	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Build/source/texk/texlive/linked_scripts/fontools/ot2kpx	2020-05-27 21:40:38 UTC (rev 55297)
@@ -38,7 +38,7 @@
 use List::Util @List::Util::EXPORT_OK;
 use Pod::Usage;
 
-my $VERSION = "20200511";
+my $VERSION = "20200527";
 
 our ($NUM_GLYPHS, $UNITS_PER_EM, %kern);
 
@@ -858,7 +858,7 @@
 
 =head1 VERSION
 
-This document describes B<ot2kpx> version 20200511.
+This document describes B<ot2kpx> version 20200527.
 
 
 =head1 RECENT CHANGES

Modified: trunk/Master/texmf-dist/doc/man/man1/afm2afm.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/afm2afm.1	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Master/texmf-dist/doc/man/man1/afm2afm.1	2020-05-27 21:40:38 UTC (rev 55297)
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "AFM2AFM 1"
-.TH AFM2AFM 1 "2020-05-11" "fontools" "Marc Penninga"
+.TH AFM2AFM 1 "2020-05-27" "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
@@ -223,7 +223,7 @@
 See the \s-1GNU\s0 General Public License for more details.
 .SH "VERSION"
 .IX Header "VERSION"
-This document describes \fBafm2afm\fR version 20200511.
+This document describes \fBafm2afm\fR version 20200527.
 .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	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Master/texmf-dist/doc/man/man1/autoinst.1	2020-05-27 21:40:38 UTC (rev 55297)
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "AUTOINST 1"
-.TH AUTOINST 1 "2020-05-11" "fontools" "Marc Penninga"
+.TH AUTOINST 1 "2020-05-27" "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
@@ -180,7 +180,7 @@
 Swash
 .IP "\fInw\fR" 8
 .IX Item "nw"
-\&\*(L"Upright swash\*(R"
+`Upright swash'
 .RE
 .RS 2
 .RE
@@ -194,11 +194,11 @@
 Families with superiors, inferiors, numerators and denominators,
 in roman, italic and slanted shapes.
 .IP "\-" 3
-Families with \*(L"Titling\*(R" characters;
-these \*(L"... replace the default glyphs
+Families with `Titling' characters;
+these `... replace the default glyphs
 with corresponding forms designed specifically for titling.
 These may be all-capital and/or larger on the body,
-and adjusted for viewing at larger sizes\*(R"
+and adjusted for viewing at larger sizes'
 (according to the OpenType Specification).
 .IP "\-" 3
 An ornament family, also in roman, italic and slanted shapes.
@@ -236,7 +236,7 @@
 normal forms for other characters
 .IP "\fITitl\fR" 8
 .IX Item "Titl"
-Titling characters; see above.
+Titling characters; see above
 .IP "\fIOrn\fR" 8
 .IX Item "Orn"
 ornaments
@@ -249,47 +249,9 @@
 .PP
 The individual fonts are named \fI<FontName>\-<suffix>\-<shape>\-<enc>\fR,
 where \fI<suffix>\fR is the same as above (but in lowercase),
-\&\fI<shape>\fR is either empty, \*(L"sc\*(R" or \*(L"swash\*(R",
+\&\fI<shape>\fR is either empty, `sc' or `swash',
 and \fI<enc>\fR is the encoding (also in lowercase).
-A typical name in this scheme would be \*(L"FiraSans\-Light\-osf\-sc\-ly1\*(R".
-.SS "About the log file"
-.IX Subsection "About the log file"
-\&\fBautoinst\fR writes some info about what it thinks it's doing to a log file.
-By default this is called \fI<fontfamily>.log\fR,
-but this choice can be overridden by the user;
-see the \fI\-logfile\fR command-line option in \*(L"COMMAND-LINE \s-1OPTIONS\*(R"\s0 below.
-If this log file already exists, \fBautoinst\fR will append its data to the end
-rather than overwrite it.
-Use the \fI\-verbose\fR command-line option to ask for more detailed info.
-.SS "A note for MiKTeX users"
-.IX Subsection "A note for MiKTeX users"
-Automatically installing the fonts into a suitable \s-1TEXMF\s0 tree
-(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
-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 \*(L"COMMAND-LINE \s-1OPTIONS\*(R"\s0 below) to manually specify a \s-1TEXMF\s0 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;
-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.
-.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 (which is called behind the scenes) doesn't 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
-everything into \f(CW$TEXMFLOCAL\fR) or manually run \f(CW\*(C`updmap \-user\*(C'\fR to tell
-TeX about the files in \f(CW$TEXMFHOME\fR.
-The latter option does, however, have some caveats;
-see \fIhttps://tug.org/texlive/scripts\-sys\-user.html\fR.
+A typical name in this scheme would be `FiraSans\-Light\-osf\-sc\-ly1'.
 .SS "Using the fonts in your LaTeX documents"
 .IX Subsection "Using the fonts in your LaTeX documents"
 \&\fBautoinst\fR generates a style file for using the fonts in LaTeX documents,
@@ -312,28 +274,30 @@
 .el .IP "\f(CWlining\fR, \f(CWoldstyle\fR, \f(CWtabular\fR, \f(CWproportional\fR" 4
 .IX Item "lining, oldstyle, tabular, proportional"
 Choose which figure style to use.
-The defaults are \*(L"oldstyle\*(R" and \*(L"proportional\*(R" (if available).
-.ie n .IP """scale=\fI<number>\fP""" 4
-.el .IP "\f(CWscale=\f(CI<number>\f(CW\fR" 4
-.IX Item "scale=<number>"
+The defaults are `oldstyle' and `proportional' (if available).
+.ie n .IP """scale=\fI<number>\fP"", ""scale=MatchLowercase""" 4
+.el .IP "\f(CWscale=\f(CI<number>\f(CW\fR, \f(CWscale=MatchLowercase\fR" 4
+.IX Item "scale=<number>, scale=MatchLowercase"
 Scale the font by a factor of \fI<number>\fR.
 E.g., to increase the size of the font by 5%, use
 \&\f(CW\*(C`\eusepackage[scale=1.05]{\f(CI<FontFamily>\f(CW}\*(C'\fR.
-May also be spelled \f(CW\*(C`scaled\*(C'\fR.
-.Sp
-This option is only available when you have the \fIxkeyval\fR package installed.
+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 previously active font
+(which is usually Computer Modern, unless you have loaded another
+font package before this one).
+The name \f(CW\*(C`scaled\*(C'\fR may be used as a synonym for \f(CW\*(C`scale\*(C'\fR.
 .ie n .IP """medium"", ""book"", ""text"", ""regular""" 4
 .el .IP "\f(CWmedium\fR, \f(CWbook\fR, \f(CWtext\fR, \f(CWregular\fR" 4
 .IX Item "medium, book, text, regular"
-Select the weight that LaTeX will use as the \*(L"regular\*(R" weight;
+Select the weight that LaTeX will use as the `regular' weight;
 the default is \f(CW\*(C`regular\*(C'\fR.
 .ie n .IP """heavy"", ""black"", ""extrabold"", ""demibold"", ""semibold"", ""bold""" 4
 .el .IP "\f(CWheavy\fR, \f(CWblack\fR, \f(CWextrabold\fR, \f(CWdemibold\fR, \f(CWsemibold\fR, \f(CWbold\fR" 4
 .IX Item "heavy, black, extrabold, demibold, semibold, bold"
-Select the weight that LaTeX will use as the \*(L"bold\*(R" weight;
+Select the weight that LaTeX will use as the `bold' weight;
 the default is \f(CW\*(C`bold\*(C'\fR.
 .PP
-The previous two groups of options will only work if
+The last two groups of options will only work if
 you have the \fImweights\fR package installed.
 .PP
 The style file will also try to load the \fIfontaxes\fR package
@@ -348,8 +312,8 @@
 \&    DECLARATION     COMMAND         SHORT FORM OF COMMAND
 \&
 \&    \etlshape        \etexttitling    \etexttl
-\&    \esufigures      \etextsuperior   \etextsu
-\&    \einfigures      \etextinferior   \etextin
+\&    \esupfigures     \etextsuperior   \etextsup, \etextsu
+\&    \einffigures     \etextinferior   \etextinf, \etextin
 .Ve
 .PP
 In addition, the \f(CW\*(C`\eswshape\*(C'\fR and \f(CW\*(C`\etextsw\*(C'\fR commands are redefined to place
@@ -372,37 +336,66 @@
 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 \*(L"COMMAND-LINE \s-1OPTIONS\*(R"\s0 below).
+.SS "Maths"
+.IX Subsection "Maths"
+This is an experimental feature; \fB\s-1USE AT YOUR OWN RISK\s0!\fR
+Test the results thoroughly before using them in real documents,
+and be warned that future versions of \fBautoinst\fR may introduce
+incompatible changes.
 .PP
-\fIOrnaments\fR
-.IX Subsection "Ornaments"
+The \fI\-math\fR option tells \fBautoinst\fR to generate basic math fonts.
+When enabled, the generated style file defines a few extra options
+to access these math fonts:
+.ie n .IP """math""" 4
+.el .IP "\f(CWmath\fR" 4
+.IX Item "math"
+Use these fonts for the maths in your document.
+.ie n .IP """mathlining"", ""matholdstyle""" 4
+.el .IP "\f(CWmathlining\fR, \f(CWmatholdstyle\fR" 4
+.IX Item "mathlining, matholdstyle"
+Choose which figure style to use in maths.
+The default is `mathlining'.
+.ie n .IP """mathcal""" 4
+.el .IP "\f(CWmathcal\fR" 4
+.IX Item "mathcal"
+Use the swash characters from your fonts as the \f(CW\*(C`\emathcal\*(C'\fR alphabet.
+(This option only exists if your fonts actually contain swash characters
+and a \f(CW\*(C`swsh\*(C'\fR feature to access them).
+.ie n .IP """math\-style=\fI<style>\fP""" 4
+.el .IP "\f(CWmath\-style=\f(CI<style>\f(CW\fR" 4
+.IX Item "math-style=<style>"
+Choose the `math style' to use.
+With \f(CW\*(C`math\-style=ISO\*(C'\fR, all latin and greek letters in math are italic;
+with \f(CW\*(C`math\-style=TeX\*(C'\fR (the default), uppercase greek is upright;
+with \f(CW\*(C`math\-style=french\*(C'\fR, all greek as well as uppercase latin is upright;
+and with \f(CW\*(C`math\-style=upright\*(C'\fR all letters are upright.
 .PP
-Ornament fonts are regular LY1\-encoded fonts, with a number of
-\&'regular' characters replaced by ornament glyphs.
-The OpenType specification says that fonts should only put their
-ornaments in place of the lowercase \s-1ASCII\s0 letters or the 'bullet'
-character, but some fonts put them in other positions (such as those
-of the digits) as well.
+Note that this `math' option only changes 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,
+load another math package (such as \fImathdesign\fR or \fInewtxmath\fR)
+before loading the \fBautoinst\fR\-generated style file.
 .PP
-Ornament glyphs can be accessed like \f(CW\*(C`{\eornaments abc}\*(C'\fR and
-\&\f(CW\*(C`{\eornaments\echar"61}\*(C'\fR, or equivalently
-\&\f(CW\*(C`\etextornaments{abc}\*(C'\fR and \f(CW\*(C`\etextornaments{\echar"61}\*(C'\fR.
-To see which ornaments a font contains (and at which positions),
-run LaTeX on the file \fInfssfont.tex\fR (which is included in any
-standard LaTeX installation), supply the name of the ornament font
-(i.e., \f(CW\*(C`GaramondLibre\-Regular\-orn\-u\*(C'\fR) and say \f(CW\*(C`\etable\ebye\*(C'\fR;
-this will create a table of all glyphs in that font.
-.PP
-Note that versions of \fBautoinst\fR up to 20200428 handled ornaments
-differently, and fonts and style files generated by those versions
-are not compatible with files generated by newer versions.
+Finally, note that \fBautoinst\fR doesn't 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 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 with other symbols;
+edit the generated style file to remove the declarations of
+these offending characters.
+Once again: test the results before using them!
+If the characters themselves are fine but spaced too tightly,
+you may try increasing the side bearings in math fonts with
+the \fI\-mathspacing\fR option (see below), e.g. \f(CW\*(C`\-mathspacing=100\*(C'\fR.
 .SS "\s-1NFSS\s0 codes"
 .IX Subsection "NFSS codes"
 LaTeX's New Font Selection System (\s-1NFSS\s0)
 identifies fonts by a combination of family,
 series (the concatenation of weight and width), shape and size.
-\&\fBautoinst\fR parses the font's metadata
-(more precisely: the output of \f(CW\*(C`otfinfo \-\-info\*(C'\fR)
-to determine these parameters.
+\&\fBautoinst\fR parses the font's metadata to determine these parameters.
 When this fails (usually because the font family contains uncommon weights,
 widths or shapes),
 \&\fBautoinst\fR ends up with different fonts having the \fIsame\fR values
@@ -426,16 +419,16 @@
 .Ve
 .PP
 (\fIException:\fR Adobe Silentium Pro contains two Roman shapes;
-we map the first of these to \*(L"n\*(R", for the second one we (ab)use the \*(L"it\*(R" code
+we map the first of these to `n', for the second one we (ab)use the `it' code
 as this family doesn't contain an Italic shape.)
 .PP
 The mapping of weights and widths to \s-1NFSS\s0 codes is a more complex,
 two-step proces.
-In the first step, all fonts are assigned a \*(L"series\*(R" name that is simply
+In the first step, all fonts are assigned a `series' name that is simply
 the concatenation of its weight and width
 (after expanding any abbreviations and converting to lowercase).
-A font with \*(L"Cond\*(R" width and \*(L"Ultra\*(R" weight will then be known
-as \*(L"ultrablackcondensed\*(R".
+A font with `Cond' width and `Ultra' weight will then be known
+as `ultrablackcondensed'.
 .PP
 In the second step, \fBautoinst\fR tries to map all combinations of \s-1NFSS\s0 codes
 (ul, el, l, sl, m, sb, b, eb and ub for weights;
@@ -446,11 +439,11 @@
 a unique code in a sane way (especially for the weights, some font families
 offer more choices or finer granularity than \s-1NFSS\s0's codes can handle;
 e.g., Fira Sans contains fifteen(!) different weights,
-including an additional \*(L"Medium\*(R" weight between Regular and Semibold).
+including an additional `Medium' weight between Regular and Semibold).
 .PP
 \&\fBautoinst\fR tries hard to ensure that the most common \s-1NFSS\s0 codes
 (and high-level commands such as \f(CW\*(C`\ebfseries\*(C'\fR,
-which are built on top of those codes) will \*(L"just work\*(R".
+which are built on top of those codes) will `just work'.
 .PP
 To see exactly which \s-1NFSS\s0 codes map to which fonts, see the log file
 (pro tip: run \fBautoinst\fR with the \fI\-dryrun\fR option
@@ -461,6 +454,26 @@
 To access specific weights or widths,
 one can always use the \f(CW\*(C`\efontseries\*(C'\fR command with the full series name
 (i.e., \f(CW\*(C`\efontseries{demibold}\eselectfont\*(C'\fR).
+.SS "Ornaments"
+.IX Subsection "Ornaments"
+Ornament fonts are regular LY1\-encoded fonts, with a number of
+`regular' characters replaced by ornament glyphs.
+The OpenType specification says that fonts should only put their
+ornaments in place of the lowercase \s-1ASCII\s0 letters, but some fonts
+put them in other positions (such as those of the digits) as well.
+.PP
+Ornaments can be accessed like \f(CW\*(C`{\eornaments a}\*(C'\fR and
+\&\f(CW\*(C`{\eornaments\echar"61}\*(C'\fR, or equivalently
+\&\f(CW\*(C`\etextornaments{a}\*(C'\fR and \f(CW\*(C`\etextornaments{\echar"61}\*(C'\fR.
+To see which ornaments a font contains (and at which positions),
+run LaTeX on the file \fInfssfont.tex\fR (which is included in any
+standard LaTeX installation), supply the name of the ornament font
+(i.e., \f(CW\*(C`GaramondLibre\-Regular\-orn\-u\*(C'\fR) and give the command \f(CW\*(C`\etable\ebye\*(C'\fR;
+this will create a table of all glyphs in that font.
+.PP
+Note that versions of \fBautoinst\fR up to 20200428 handled ornaments
+differently, and fonts and style files generated by those versions
+are not compatible with files generated by newer versions.
 .SH "COMMAND-LINE OPTIONS"
 .IX Header "COMMAND-LINE OPTIONS"
 \&\fBautoinst\fR tries hard to do The Right Thing (\s-1TM\s0) by default,
@@ -493,7 +506,7 @@
 .IX Item "-encoding=encoding[,encoding]"
 Generate the specified encoding(s) for the text fonts.
 Multiple encodings may be specified as a comma-separated list
-(without spaces!); the default choice of encodings is \*(L"\s-1OT1,LY1,T1\*(R".\s0
+(without spaces!); the default choice of encodings is `\s-1OT1,LY1,T1\s0'.
 .Sp
 For each specified encoding \s-1XYZ,\s0 \fBautoinst\fR will first see if there is
 an encoding file \fI\s-1XYZ\s0.enc\fR in the current directory, and if found it will
@@ -501,7 +514,7 @@
 Currently \fBautoinst\fR comes with support for the \s-1OT1, T1/TS1, LY1, LGR,
 T2A/B/C\s0 and T3/TS3 encodings.
 (These files are called \fIfontools_ot1.enc\fR etc. to avoid name clashes
-with other packages; the \*(L"fontools_\*(R" prefix may be omitted.)
+with other packages; the `fontools_' 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
@@ -518,15 +531,15 @@
 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 disabled 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 \*(L"mono\*(R"
+if the font's filename contains the string `mono'
 or if the field \f(CW\*(C`isFixedPitch\*(C'\fR in the font's \fIpost\fR table is True,
 it will select \fB\-typewriter\fR;
-else if the filename contains \*(L"sans\*(R" it selects \fB\-sanserif\fR;
-and otherwise it will opt for \fB\-serif\fR.
+else if the filename contains `sans' it will select \fB\-sanserif\fR;
+otherwise it will opt for \fB\-serif\fR.
 .IP "\fB\-lining\fR/\fB\-nolining\fR" 4
 .IX Item "-lining/-nolining"
 Control the creation of fonts with lining figures. The default is
@@ -564,12 +577,12 @@
 .IX Item "-inferiors [= none | auto | subs | sinf | dnom ]"
 .PD
 The OpenType standard defines several kinds of digits that might be used
-as inferiors or subscripts: \*(L"Subscripts\*(R" (OpenType feature \*(L"subs\*(R"),
-\&\*(L"Scientific Inferiors\*(R" (\*(L"sinf\*(R"), and \*(L"Denominators\*(R" (\*(L"dnom\*(R").
+as inferiors or subscripts: `Subscripts' (OpenType feature `subs'),
+`Scientific Inferiors' ('sinf'), and `Denominators' ('dnom').
 This option allows the user to determine which of these styles \fBautoinst\fR
 should use for the inferior characters.
-Alternatively, the value \*(L"auto\*(R" tells \fBautoinst\fR to use the first value
-in \*(L"sinf\*(R", \*(L"subs\*(R" or \*(L"dnom\*(R" that is supported by the font.
+Alternatively, the value `auto' tells \fBautoinst\fR to use the first value
+in `sinf', `subs' or `dnom' that is supported by the font.
 Saying just \fB\-inferiors\fR is equivalent to \fB\-inferiors=auto\fR;
 otherwise the default is \fB\-noinferiors\fR.
 .Sp
@@ -586,7 +599,7 @@
 .IP "\fB\-ligatures\fR/\fB\-noligatures\fR" 4
 .IX Item "-ligatures/-noligatures"
 Some fonts create glyphs for the standard f\-ligatures (ff, fi, fl, ffi, ffl),
-but don't provide a \*(L"liga\*(R" feature to access these.
+but don't provide a `liga' 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,
@@ -593,7 +606,16 @@
 unless the user specified the \fI\-typewriter\fR option.
 .Sp
 Specify \fB\-noligatures\fR to disable the generation of ligatures even for fonts
-that do contain a \*(L"liga\*(R" feature.
+that do contain a `liga' feature.
+.IP "\fB\-math\fR" 4
+.IX Item "-math"
+Tells \fBautoinst\fR to create basic math fonts (see above).
+.IP "\fB\-mathspacing\fR=\fIamount\fR" 4
+.IX Item "-mathspacing=amount"
+Letterspace each character in the math fonts by \fIamount\fR units,
+where 1000 units equal one em.
+In my opinion, many text fonts benefit from letterspacing by 50 to 100 units
+when used in maths; some fonts need even more. Use your own judgement!
 .IP "\fB\-defaultlining\fR/\fB\-defaultoldstyle\fR" 4
 .IX Item "-defaultlining/-defaultoldstyle"
 .PD 0
@@ -617,20 +639,24 @@
 to the commands for \fIotftotfm\fR to suppress such kerns.
 Note that this option leads to very long commands (it adds
 one hundred \fI \-\-ligkern\fR options), which may cause problems on some systems.
-.IP "\fB\-nfssweight\fR=\fIcode\fR=\fIweight\fR, \fB\-nfsswidth\fR=\fIcode\fR=\fIwidth\fR" 4
-.IX Item "-nfssweight=code=weight, -nfsswidth=code=width"
+.IP "\fB\-nfssweight\fR=\fIcode\fR=\fIweight\fR" 4
+.IX Item "-nfssweight=code=weight"
+.PD 0
+.IP "\fB\-nfsswidth\fR=\fIcode\fR=\fIwidth\fR" 4
+.IX Item "-nfsswidth=code=width"
+.PD
 Map the \s-1NFSS\s0 code \fIcode\fR to the given weight or width,
 overriding the built-in tables.
 Each of these options may be given multiple times,
 to override more than one \s-1NFSS\s0 code.
-Example: to map the \*(L"ul\*(R" code to the \*(L"Thin\*(R" weight,
+Example: to map the `ul' code to the `Thin' weight,
 use \f(CW\*(C`\-nfssweight=ul=thin\*(C'\fR.
-To inhibit the use of the \*(L"ul\*(R" code completely,
+To inhibit the use of the `ul' code completely,
 use \f(CW\*(C`\-nfssweight=ul=\*(C'\fR.
-.IP "\fB\-extra\fR=\fItext\fR" 4
-.IX Item "-extra=text"
-Append \fItext\fR as extra options to the command lines for \fIotftotfm\fR.
-To prevent \fItext\fR from accidentily being interpreted as options
+.IP "\fB\-extra\fR=\fIextra\fR" 4
+.IX Item "-extra=extra"
+Append \fIextra\fR as extra options to the command lines for \fIotftotfm\fR.
+To prevent \fIextra\fR from accidentily being interpreted as options
 to \fBautoinst\fR, it should be properly quoted.
 .IP "\fB\-manual\fR" 4
 .IX Item "-manual"
@@ -688,9 +714,9 @@
 .IX Item "-typeface=TYPEFACE"
 .PD
 These options are equivalent to \fIotftotfm\fR's \fI \-\-vendor\fR and \fI \-\-typeface\fR
-options: they change the \*(L"vendor\*(R" and \*(L"typeface\*(R" parts of the names of the
+options: they change the `vendor' and `typeface' parts of the names of the
 subdirectories in the \s-1TEXMF\s0 tree where generated files will be stored.
-The default values are \*(L"lcdftools\*(R" and the font's FontFamily name.
+The default values are `lcdftools' and the font's FontFamily name.
 .Sp
 Note that these options change \fIonly\fR directory names,
 not the names of any generated files.
@@ -698,6 +724,35 @@
 .IX Item "-updmap/-noupdmap"
 Control whether or not \fIupdmap\fR is called after the last call to \fIotftotfm\fR.
 The default is \fB\-updmap\fR.
+.SS "A note for MiKTeX users"
+.IX Subsection "A note for MiKTeX users"
+Automatically installing the fonts into a suitable \s-1TEXMF\s0 tree
+(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
+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 \*(L"COMMAND-LINE \s-1OPTIONS\*(R"\s0 below) to manually specify a \s-1TEXMF\s0 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;
+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.
+.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 (which is called behind the scenes) doesn't 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
+everything into \f(CW$TEXMFLOCAL\fR) or manually run \f(CW\*(C`updmap \-user\*(C'\fR to tell
+TeX about the files in \f(CW$TEXMFHOME\fR.
+The latter option does, however, have some caveats;
+see \fIhttps://tug.org/texlive/scripts\-sys\-user.html\fR.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
 Eddie Kohler's \fBTypeTools\fR (\fIhttp://www.lcdf.org/type\fR).
@@ -743,10 +798,21 @@
 \&\s-1GNU\s0 General Public License for more details.
 .SH "VERSION"
 .IX Header "VERSION"
-This document describes \fBautoinst\fR version 20200511.
+This document describes \fBautoinst\fR version 20200527.
 .SH "RECENT CHANGES"
 .IX Header "RECENT CHANGES"
 (See the source for the full story, all the way back to 2005.)
+.IP "\fI2020\-05\-27\fR" 12
+.IX Item "2020-05-27"
+Added basic (and still somewhat experimental) math support.
+Implemented the \f(CW\*(C`scale=MatchLowercase\*(C'\fR option value
+in the generated style files.
+`Wide' fonts are mapped to the `sx' \s-1NFSS\s0 code instead of `x',
+to cater for League Mono Variable's Wide and Extended widths.
+The generated style files now use \f(CW\*(C`\etextsup\*(C'\fR and \f(CW\*(C`\etextinf\*(C'\fR
+instead of the more cryptic \f(CW\*(C`\etextsu\*(C'\fR and \f(CW\*(C`\etextin\*(C'\fR to access
+superior and inferior characters
+(though the old forms are retained for backwards compatibility).
 .IP "\fI2020\-05\-11\fR" 12
 .IX Item "2020-05-11"
 When present, use encoding files in the current working directory
@@ -823,12 +889,12 @@
 .IP "\fI2019\-05\-17\fR" 12
 .IX Item "2019-05-17"
 Changed the way the \fI\-ligatures\fR option works:
-\&\fI\-ligatures\fR enables f\-ligatures (even without a \*(L"liga\*(R" feature),
-\&\fI\-noligatures\fR now disables f\-ligatures (overriding a \*(L"liga\*(R" feature).
+\&\fI\-ligatures\fR enables f\-ligatures (even without a `liga' feature),
+\&\fI\-noligatures\fR now disables f\-ligatures (overriding a `liga' feature).
 .IP "\fI2019\-05\-11\fR" 12
 .IX Item "2019-05-11"
 Separate small caps families are now also recognised when the family name
-ends with \*(L"\s-1SC\*(R"\s0 (previously \fBautoinst\fR only looked for \*(L"SmallCaps\*(R").
+ends with `\s-1SC\s0' (previously \fBautoinst\fR only looked for `SmallCaps').
 .IP "\fI2019\-04\-22\fR" 12
 .IX Item "2019-04-22"
 Fixed a bug in the generation of swash shapes.
@@ -840,7 +906,7 @@
 Added the <\-mergesmallcaps> option, to handle cases where
 the small caps fonts are in separate font families.
 Titling shape is now treated as a separate family instead of a distinct shape;
-it is generated only for fonts with the 'titl' feature.
+it is generated only for fonts with the `titl' feature.
 Only add f\-ligatures to fonts when explicitly asked to (\fI\-ligatures\fR).
 .IP "\fI2019\-04\-11\fR" 12
 .IX Item "2019-04-11"
@@ -860,7 +926,7 @@
 put all generated files into a subdirectory \f(CW\*(C`./autoinst_output/\*(C'\fR
 instead of all over the current working directory.
 .Sp
-Added \*(L"auto\*(R" value to the \fIinferiors\fR option,
+Added `auto' value to the \fIinferiors\fR option,
 to tell \fBautoinst\fR to use whatever inferior characters are available.
 .IP "\fI2019\-03\-14\fR" 12
 .IX Item "2019-03-14"
@@ -867,8 +933,8 @@
 Overhauled the mapping of fonts (more specifically of weights and widths;
 the mapping of shapes didn't change) to \s-1NFSS\s0 codes.
 Instead of inventing our own codes to deal with every possible weight
-and width out there, we now create \*(L"long\*(R" codes based on the names
+and width out there, we now create `long' codes based on the names
 in the font metadata.
-Then we add \*(L"ssub\*(R" rules to the \fIfd\fR files to map the standard \s-1NFSS\s0 codes
+Then we add `ssub' rules to the \fIfd\fR files to map the standard \s-1NFSS\s0 codes
 to our fancy names (see the section \fB\s-1NFSS\s0 codes\fR;
 based on discussions with Frank Mittelbach and Bob Tennent).

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	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Master/texmf-dist/doc/man/man1/ot2kpx.1	2020-05-27 21:40:38 UTC (rev 55297)
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "OT2KPX 1"
-.TH OT2KPX 1 "2020-05-11" "fontools" "Marc Penninga"
+.TH OT2KPX 1 "2020-05-27" "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
@@ -228,7 +228,7 @@
 See the \s-1GNU\s0 General Public License for more details.
 .SH "VERSION"
 .IX Header "VERSION"
-This document describes \fBot2kpx\fR version 20200511.
+This document describes \fBot2kpx\fR version 20200527.
 .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/ot2kpx.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/fontools/splitttc
===================================================================
--- trunk/Master/texmf-dist/doc/support/fontools/splitttc	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Master/texmf-dist/doc/support/fontools/splitttc	2020-05-27 21:40:38 UTC (rev 55297)
@@ -38,7 +38,7 @@
 use Getopt::Long;
 use Pod::Usage;
 
-my $VERSION = "20200511";
+my $VERSION = "20200527";
 
 parse_commandline();
 
@@ -303,7 +303,7 @@
 
 =head1 VERSION
 
-This document describes B<splitttc> version 20200511.
+This document describes B<splitttc> version 20200527.
 
 
 =head1 RECENT CHANGES

Added: trunk/Master/texmf-dist/fonts/enc/dvips/fontools/fontools_oml.enc
===================================================================
--- trunk/Master/texmf-dist/fonts/enc/dvips/fontools/fontools_oml.enc	                        (rev 0)
+++ trunk/Master/texmf-dist/fonts/enc/dvips/fontools/fontools_oml.enc	2020-05-27 21:40:38 UTC (rev 55297)
@@ -0,0 +1,292 @@
+% A version of the OML encoding, intended for use with otftotfm.
+% CODINGSCHEME TEX MATH ITALIC
+/otftotfmOMLEncoding [
+% 0x00
+/Gamma
+/Delta
+/Theta
+/Lambda
+/Xi
+/Pi
+/Sigma
+/Upsilon
+% 0x08
+/Phi
+/Psi
+/Omega
+/alpha
+/beta
+/gamma
+/delta
+/epsilon1
+% 0x10
+/zeta
+/eta
+/theta
+/iota
+/kappa
+/lambda
+/mu
+/nu
+% 0x18
+/xi
+/pi
+/rho
+/sigma
+/tau
+/upsilon
+/phi
+/chi
+% 0x20
+/psi
+/omega
+/epsilon
+/theta1
+/pi1
+/rho1
+/sigma1
+/phi1
+% 0x28
+/harpoonleftup
+/harpoonleftdown
+/harpoonrightup
+/harpoonrightdown
+/hookrightchar
+/hookleftchar
+/triangleright
+/triangleleft
+% 0x30
+/zero
+/one
+/two
+/three
+/four
+/five
+/six
+/seven
+% 0x38
+/eight
+/nine
+/period
+/comma
+/less
+/slash
+/greater
+/star
+% 0x40
+/partialdiff
+/A
+/B
+/C
+/D
+/E
+/F
+/G
+% 0x48
+/H
+/I
+/J
+/K
+/L
+/M
+/N
+/O
+% 0x50
+/P
+/Q
+/R
+/S
+/T
+/U
+/V
+/W
+% 0x58
+/X
+/Y
+/Z
+/flat
+/natural
+/sharp
+/slurbelow
+/slurabove
+% 0x60
+/lscript
+/a
+/b
+/c
+/d
+/e
+/f
+/g
+% 0x68
+/h
+/i
+/j
+/k
+/l
+/m
+/n
+/o
+% 0x70
+/p
+/q
+/r
+/s
+/t
+/u
+/v
+/w
+% 0x78
+/x
+/y
+/z
+/dotlessi
+/dotlessj
+/weierstrass
+/vector
+/tie
+% 0x80
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0x88
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0x90
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0x98
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xA0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xA8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xB0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xB8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xC0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xC8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xD0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xD8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xE0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xE8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xF0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xF8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def


Property changes on: trunk/Master/texmf-dist/fonts/enc/dvips/fontools/fontools_oml.enc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/scripts/fontools/afm2afm
===================================================================
--- trunk/Master/texmf-dist/scripts/fontools/afm2afm	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Master/texmf-dist/scripts/fontools/afm2afm	2020-05-27 21:40:38 UTC (rev 55297)
@@ -37,7 +37,7 @@
 use Getopt::Long;
 use Pod::Usage;
 
-my $VERSION = "20200511";
+my $VERSION = "20200527";
 
 parse_commandline();
 
@@ -421,7 +421,7 @@
 
 =head1 VERSION
 
-This document describes B<afm2afm> version 20200511.
+This document describes B<afm2afm> version 20200527.
 
 
 =head1 RECENT CHANGES

Modified: trunk/Master/texmf-dist/scripts/fontools/autoinst
===================================================================
--- trunk/Master/texmf-dist/scripts/fontools/autoinst	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Master/texmf-dist/scripts/fontools/autoinst	2020-05-27 21:40:38 UTC (rev 55297)
@@ -40,7 +40,7 @@
 use Pod::Usage ();
 use POSIX ();
 
-my $VERSION = '20200511';
+my $VERSION = '20200527';
 
 my ($d, $m, $y) = (localtime time)[3 .. 5];
 my $TODAY = sprintf "%04d/%02d/%02d", $y + 1900, $m + 1, $d;
@@ -48,7 +48,7 @@
 my $RUNNING_AS_MAIN = (__PACKAGE__ eq 'main');
 
 
-=begin Architecture
+=begin Comment
 
 ----------------------------------------------------------------------------
 
@@ -86,7 +86,7 @@
 
 ----------------------------------------------------------------------------
 
-=end Architecture
+=end Comment
 
 =cut
 
@@ -156,8 +156,8 @@
     my $basicinfo = Font::Raw::get_basicinfo($filename);
     $info->process_basicinfo($basicinfo);
 
-    my $os2_table = Font::Raw::get_os2_table($filename);
-    $info->process_os2_table($os2_table);
+    my $os2_table = Font::Raw::get_classdata($filename);
+    $info->process_classdata($os2_table);
 
     my $featuredata = Font::Raw::get_featuredata($filename);
     $info->process_featuredata($featuredata);
@@ -182,6 +182,7 @@
             Width:      %s
             Shape:      %s
             Size:       %s-%s
+            Smallcaps:  %s
 
 END_ERR_DETAIL
 
@@ -359,15 +360,19 @@
         $self->{family} = $1;
         $self->{shape}  = NFSS::unabbreviate(lc($2));
     }
-    # Ditto for the smallcaps shape; here we have to test both 'family'
-    # and 'name' for hints that this is a small caps font, as some fonts
-    # (e.g., Dolly) only mention this in their name.
+    # Ditto for the smallcaps shape; here we have to test both 'family',
+    # 'subfamily' and 'name' for hints that this is a small caps font,
+    # as some fonts (e.g., Dolly) only mention this in their name.
     $shapes = join '|', Util::sort_desc_length(qw(smallcaps sc smcp caps));
-    if ($self->{family} =~ m/(.+?) -? (?: $shapes) \z/xmsi) {
+    if ($self->{family} =~ m/(.+?) (?: $shapes) \z/xmsi) {
         $self->{family}       = $1;
         $self->{is_smallcaps} = 1;
     }
-    if ($self->{name} =~ m/(.+?) -? (?: $shapes) \z/xmsi) {
+    if ($self->{subfamily} =~ m/(.+?) (?: $shapes) \z/xmsi) {
+        $self->{subfamily}         = $1;
+        $self->{is_smallcaps} = 1;
+    }
+    if ($self->{name} =~ m/(.+?) (?: $shapes) \z/xmsi) {
         $self->{name}         = $1;
         $self->{is_smallcaps} = 1;
     }
@@ -417,12 +422,13 @@
 
 
 # --------------------------------------------------------------------------
-#   Extracts usWeightClass and usWidthClass from the OS/2 table.
+#   Processes the usWeightClass and usWidthClass data.
 # --------------------------------------------------------------------------
-sub process_os2_table {
-    my ($self, $os2_table) = @_;
+sub process_classdata {
+    my ($self, $classdata) = @_;
 
-    @{$self}{qw(weight_class width_class)} = unpack '@4n @6n', $os2_table;
+    $self->{weight_class} = $classdata->{weight_class};
+    $self->{width_class}  = $classdata->{width_class};
 
     return;
 }
@@ -444,35 +450,33 @@
 #   Extracts 'minsize' and 'maxsize' from the optical design size info.
 # --------------------------------------------------------------------------
 sub process_sizedata {
-    my ($self, $data) = @_;
+    my ($self, $sizedata) = @_;
 
-    if (my ($minsize, $maxsize)
-            = $data =~ m/[(] ([\d.]+) \s* pt, \s*
-                             ([\d.]+) \s* pt  \s* [)]]/xms) {
+    my ($minsize, $maxsize) = @$sizedata;
+
     # fix some known bugs
-        if ($self->{name} eq 'GaramondPremrPro-It'
-            && $minsize == 6 && $maxsize == 8.9) {
-            ($minsize, $maxsize) = (8.9, 14.9);
-        }
-        elsif ($self->{family} eq 'KeplerStd'
-            && $self->{subfamily} =~ m/Caption/xms
-            && $minsize == 8.9 && $maxsize == 13.9) {
-            ($minsize, $maxsize) = (6, 8.9);
-        }
-        elsif ($self->{family} eq 'KeplerStd'
-            && $self->{subfamily} =~ m/Subhead/xms
-            && $minsize == 8.9 && $maxsize == 13.9) {
-            ($minsize, $maxsize) = (13.9, 23);
-        }
-        elsif ($self->{family} eq 'KeplerStd'
-            && $self->{subfamily} =~ m/Display/xms
-            && $minsize == 8.9 && $maxsize == 13.9) {
-            ($minsize, $maxsize) = (23, 72);
-        }
-
-        @{$self}{qw(minsize maxsize)} = ($minsize, $maxsize);
+    if ($self->{name} eq 'GaramondPremrPro-It'
+        && $minsize == 6 && $maxsize == 8.9) {
+        ($minsize, $maxsize) = (8.9, 14.9);
     }
+    elsif ($self->{family} eq 'KeplerStd'
+        && $self->{subfamily} =~ m/Caption/xms
+        && $minsize == 8.9 && $maxsize == 13.9) {
+        ($minsize, $maxsize) = (6, 8.9);
+    }
+    elsif ($self->{family} eq 'KeplerStd'
+        && $self->{subfamily} =~ m/Subhead/xms
+        && $minsize == 8.9 && $maxsize == 13.9) {
+        ($minsize, $maxsize) = (13.9, 23);
+    }
+    elsif ($self->{family} eq 'KeplerStd'
+        && $self->{subfamily} =~ m/Display/xms
+        && $minsize == 8.9 && $maxsize == 13.9) {
+        ($minsize, $maxsize) = (23, 72);
+    }
 
+    @{$self}{qw(minsize maxsize)} = ($minsize, $maxsize);
+
     return;
 }
 
@@ -517,9 +521,9 @@
 
 
 # --------------------------------------------------------------------------
-#   Returns the font's OS/2 table.
+#   Returns usWeightClass and usWidthClass from the OS/2 table.
 # --------------------------------------------------------------------------
-sub get_os2_table {
+sub get_classdata {
     my $filename = shift;
 
     my $os2_table;
@@ -532,7 +536,12 @@
             or die "'$cmd' failed";
     } or warn "[WARNING]   $@";
 
-    return $os2_table;
+    my ($weight_class, $width_class) = unpack '@4n @6n', $os2_table;
+
+    return {
+        weight_class => $weight_class,
+        width_class  => $width_class,
+    };
 }
 
 
@@ -579,7 +588,13 @@
     close $otfinfo
         or die "[ERROR]     '$cmd' failed.";
 
-    return $data;
+    my ($minsize, $maxsize)
+        = $data =~ m/[(] ([\d.]+) \s* pt, \s*
+                         ([\d.]+) \s* pt  \s* [])]/xms;
+
+    $minsize //= 0;
+    $maxsize //= 0;
+    return [ $minsize, $maxsize ];
 }
 
 
@@ -638,7 +653,7 @@
              [ $minsize, $maxsize, $workitem->{fontname} ];
     }
 
-    create_stylefile($family, \%fddata);
+    create_stylefile($nfss_mapping, $family, \%fddata);
     while (my ($enc, $encdata) = each %fddata) {
         while (my ($sty, $stydata) = each %$encdata) {
             create_fdfile($nfss_mapping, $family, $enc, $sty, $stydata);
@@ -662,8 +677,23 @@
 #   Creates a LaTeX style file.
 # --------------------------------------------------------------------------
 sub create_stylefile {
-    my ($fam, $data) = @_;
+    my ($nfss_mapping, $fam, $data) = @_;
 
+    my $testfont;
+    eval {
+        my $testenc  = $ARGV{encoding}[0];
+        my $testfig  = ( grep { exists $data->{$testenc}{$_} }
+            qw(OsF LF TOsF TLF) )[0] or die;
+        my $testweight = $nfss_mapping->{weight}{""}[0] or die;
+        my $testshape
+            = ( grep { exists $data->{$testenc}{$testfig}{$testweight}{$_} }
+                     qw(n it sl sc)
+              )[0] or die;
+        $testfont
+            = $data->{$testenc}{$testfig}{$testweight}{$testshape}[0][2]
+                or die;
+    };
+
     my %seen = %{Util::get_keys($data)};
 
     my $fn = sprintf "%s.sty", $fam;
@@ -687,6 +717,7 @@
 
     print {$STY} "\\RequirePackage{fontenc}\n";
     print {$STY} "\\RequirePackage{textcomp}\n" if $seen{TS1};
+    print {$STY} "\\RequirePackage{ifthen}\n";
 
     print {$STY} <<'END_STY_FONTAXES_START';
 \IfFileExists{mweights.sty}{\RequirePackage{mweights}}{}
@@ -709,10 +740,12 @@
         print {$STY} <<'END_STY_FONTAXES_SUP';
     \fa at naming@exception{figures}{{superior}{proportional}}{Sup}
     \fa at naming@exception{figures}{{superior}{tabular}}{Sup}
-    \def\sufigures{\@nomath\sufigures
+    \def\supfigures{\@nomath\supfigures
         \fontfigurestyle{superior}\selectfont}
-    \DeclareTextFontCommand{\textsu}{\sufigures}
-    \let\textsuperior\textsu
+    \let\sufigures\supfigures
+    \DeclareTextFontCommand{\textsup}{\supfigures}
+    \let\textsu\textsup
+    \let\textsuperior\textsup
 
 END_STY_FONTAXES_SUP
     }
@@ -721,10 +754,12 @@
         print {$STY} <<'END_STY_FONTAXES_INF';
     \fa at naming@exception{figures}{{inferior}{proportional}}{Inf}
     \fa at naming@exception{figures}{{inferior}{tabular}}{Inf}
-    \def\infigures{\@nomath\infigures
+    \def\inffigures{\@nomath\inffigures
         \fontfigurestyle{inferior}\selectfont}
-    \DeclareTextFontCommand{\textin}{\infigures}
-    \let\textinferior\textin
+    \let\infigures\inffigures
+    \DeclareTextFontCommand{\textinf}{\inffigures}
+    \let\textin\textinf
+    \let\textinferior\textinf
 
 END_STY_FONTAXES_INF
     }
@@ -771,16 +806,10 @@
     print {$STY} "}{}\n\n";
 
     print {$STY} <<"END_STY_XKEYVAL";
-\\IfFileExists{xkeyval.sty}{
-    \\newcommand*{\\$fam\@scale}{1}
-    \\RequirePackage{xkeyval}
-    \\DeclareOptionX{scale}{\\renewcommand*{\\$fam\@scale}{##1}}
-    \\DeclareOptionX{scaled}{\\renewcommand*{\\$fam\@scale}{##1}}
-}{
-    \\let\\DeclareOptionX\\DeclareOption
-    \\let\\ExecuteOptionsX\\ExecuteOptions
-    \\let\\ProcessOptionsX\\ProcessOptions
-}
+\\RequirePackage{xkeyval}
+\\newcommand*{\\$fam\@scale}{1}
+\\DeclareOptionX{scale}{\\renewcommand*{\\$fam\@scale}{#1}}
+\\DeclareOptionX{scaled}{\\renewcommand*{\\$fam\@scale}{#1}}
 
 END_STY_XKEYVAL
 
@@ -807,12 +836,51 @@
 }
 END_STY_MAINFONT
 
+    if ($ARGV{math}) {
+        print {$STY} <<"END_STY_MATHOPTION";
+\\newif\\if$fam\@math\\$fam\@mathfalse
+\\DeclareOptionX{math}{\\$fam\@mathtrue}
+
+\\newcommand*{\\$fam\@mathstyle}{TeX}
+\\DeclareOptionX{math-style}{\\renewcommand*{\\$fam\@mathstyle}{#1}}
+
+END_STY_MATHOPTION
+
+        if ($seen{LF} or $seen{TLF}) {
+            print {$STY} "\\newcommand*{\\$fam\@mathfigurestyle}{LF}\n";
+        }
+        elsif ($seen{OsF} or $seen{TOsF}) {
+            print {$STY} "\\newcommand*{\\$fam\@mathfigurestyle}{OsF}\n";
+        }
+
+        if ($seen{OsF} or $seen{TOsF}) {
+            print {$STY}
+                "\\DeclareOptionX{matholdstyle}\n",
+                "    {\\renewcommand*{\\$fam\@mathfigurestyle}{OsF}}\n";
+        }
+        if ($seen{LF} or $seen{TLF}) {
+            print {$STY}
+                "\\DeclareOptionX{mathlining}",
+                "    {\\renewcommand{\\$fam\@mathfigurestyle}{LF}}\n";
+        }
+        print {$STY} "\n";
+
+        if ($seen{sw}) {
+            print {$STY} <<"END_STY_MATHCALOPTION";
+\\newif\\if$fam\@mathcal\\$fam\@mathcalfalse
+\\DeclareOptionX{mathcal}{\\$fam\@mathcaltrue}
+
+END_STY_MATHCALOPTION
+        }
+    }
+
     my $defaults
         = $seen{OsF}  ? 'oldstyle,proportional'
         : $seen{TOsF} ? 'oldstyle,tabular'
         : $seen{LF}   ? 'lining,proportional'
         : $seen{TLF}  ? 'lining,tabular'
-        :               die "[ERROR]     Internal bug, please report!";
+        :               die "[ERROR]     Internal bug, please report!"
+        ;
 
     my $default_bold;
     for my $series (qw(heavy black extrabold demibold semibold bold)) {
@@ -836,17 +904,367 @@
     }
     $defaults .= ",$default_regular" if $default_regular;
 
-    print {$STY} <<"END_STYLE_REST";
+    print {$STY} <<"END_STY_PROCESSOPTIONS";
 \\ExecuteOptionsX{$defaults}
 \\ProcessOptionsX\\relax
 
+END_STY_PROCESSOPTIONS
+
+    if (defined $testfont) {
+        print {$STY} <<"END_STY_MATCHLOWERCASE";
+\\ifthenelse{\\equal{\\$fam\@scale}{MatchLowercase}}
+    {\\newlength{\\$fam\@defaultx}
+     \\settoheight{\\$fam\@defaultx}{x}
+     \\newlength{\\$fam\@xheight}
+     \\settoheight{\\$fam\@xheight}
+        {{\\font\\testfont=$testfont at \\f\@size pt\\testfont x}}
+     \\renewcommand*{\\$fam\@scale}
+        {\\strip\@pt\\dimexpr\\number\\numexpr\\number\\dimexpr\\$fam\@defaultx\\relax*65536/\\number\\dimexpr\\$fam\@xheight\\relax\\relax sp\\relax}
+    }
+    {}
+
+END_STY_MATCHLOWERCASE
+    }
+
+    print {$STY} <<"END_STYLE_REST";
 \\renewcommand*
     {\\$ARGV{nfss}default}
     {$fam-\\$fam\@figurealign\\$fam\@figurestyle}
 
-\\endinput
 END_STYLE_REST
 
+    if ($ARGV{math}) {
+        print {$STY} <<"END_STY_MATH";
+\\newif\\if$fam\@mathLATINup\\$fam\@mathLATINupfalse
+\\newif\\if$fam\@mathlatinup\\$fam\@mathlatinupfalse
+\\newif\\if$fam\@mathGREEKup\\$fam\@mathGREEKupfalse
+\\newif\\if$fam\@mathgreekup\\$fam\@mathgreekupfalse
+
+\\if$fam\@math
+    \\DeclareSymbolFont{newoperators}  {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n}
+    \\SetSymbolFont{newoperators}{bold}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+    \\DeclareSymbolFont{newletters}  {OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{it}
+    \\SetSymbolFont{newletters}{bold}{OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{it}
+
+    \\DeclareSymbolFontAlphabet{\\mathrm}{newoperators}
+    \\DeclareSymbolFontAlphabet{\\mathnormal}{newletters}
+
+    \\def\\operator\@font{\\mathgroup\\symnewoperators}
+    \\SetMathAlphabet{\\mathit}{normal}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{it}
+    \\SetMathAlphabet{\\mathit}{bold}  {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{it}
+
+    \\SetMathAlphabet{\\mathbf}{normal}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+    \\SetMathAlphabet{\\mathbf}{bold}  {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+    \\def\\re\@DeclareMathSymbol#1#2#3#4{%
+        \\if\\relax\\noexpand#1\\let#1=\\undefined\\fi
+        \\DeclareMathSymbol{#1}{#2}{#3}{#4}}
+
+    \\def\\re\@DeclareMathDelimiter#1#2#3#4#5#6{%
+        \\let#1=\\undefined
+        \\DeclareMathDelimiter{#1}{#2}{#3}{#4}{#5}{#6}}
+
+    \\def\\re\@DeclareMathAccent#1#2#3#4{%
+        \\let#1=\\undefined
+        \\DeclareMathAccent{#1}{#2}{#3}{#4}}
+
+    \\re\@DeclareMathSymbol{0}{\\mathalpha}{newoperators}{`0}
+    \\re\@DeclareMathSymbol{1}{\\mathalpha}{newoperators}{`1}
+    \\re\@DeclareMathSymbol{2}{\\mathalpha}{newoperators}{`2}
+    \\re\@DeclareMathSymbol{3}{\\mathalpha}{newoperators}{`3}
+    \\re\@DeclareMathSymbol{4}{\\mathalpha}{newoperators}{`4}
+    \\re\@DeclareMathSymbol{5}{\\mathalpha}{newoperators}{`5}
+    \\re\@DeclareMathSymbol{6}{\\mathalpha}{newoperators}{`6}
+    \\re\@DeclareMathSymbol{7}{\\mathalpha}{newoperators}{`7}
+    \\re\@DeclareMathSymbol{8}{\\mathalpha}{newoperators}{`8}
+    \\re\@DeclareMathSymbol{9}{\\mathalpha}{newoperators}{`9}
+
+    \\re\@DeclareMathSymbol{a}{\\mathalpha}{newletters}{`a}
+    \\re\@DeclareMathSymbol{b}{\\mathalpha}{newletters}{`b}
+    \\re\@DeclareMathSymbol{c}{\\mathalpha}{newletters}{`c}
+    \\re\@DeclareMathSymbol{d}{\\mathalpha}{newletters}{`d}
+    \\re\@DeclareMathSymbol{e}{\\mathalpha}{newletters}{`e}
+    \\re\@DeclareMathSymbol{f}{\\mathalpha}{newletters}{`f}
+    \\re\@DeclareMathSymbol{g}{\\mathalpha}{newletters}{`g}
+    \\re\@DeclareMathSymbol{h}{\\mathalpha}{newletters}{`h}
+    \\re\@DeclareMathSymbol{i}{\\mathalpha}{newletters}{`i}
+    \\re\@DeclareMathSymbol{j}{\\mathalpha}{newletters}{`j}
+    \\re\@DeclareMathSymbol{k}{\\mathalpha}{newletters}{`k}
+    \\re\@DeclareMathSymbol{l}{\\mathalpha}{newletters}{`l}
+    \\re\@DeclareMathSymbol{m}{\\mathalpha}{newletters}{`m}
+    \\re\@DeclareMathSymbol{n}{\\mathalpha}{newletters}{`n}
+    \\re\@DeclareMathSymbol{o}{\\mathalpha}{newletters}{`o}
+    \\re\@DeclareMathSymbol{p}{\\mathalpha}{newletters}{`p}
+    \\re\@DeclareMathSymbol{q}{\\mathalpha}{newletters}{`q}
+    \\re\@DeclareMathSymbol{r}{\\mathalpha}{newletters}{`r}
+    \\re\@DeclareMathSymbol{s}{\\mathalpha}{newletters}{`s}
+    \\re\@DeclareMathSymbol{t}{\\mathalpha}{newletters}{`t}
+    \\re\@DeclareMathSymbol{u}{\\mathalpha}{newletters}{`u}
+    \\re\@DeclareMathSymbol{v}{\\mathalpha}{newletters}{`v}
+    \\re\@DeclareMathSymbol{w}{\\mathalpha}{newletters}{`w}
+    \\re\@DeclareMathSymbol{x}{\\mathalpha}{newletters}{`x}
+    \\re\@DeclareMathSymbol{y}{\\mathalpha}{newletters}{`y}
+    \\re\@DeclareMathSymbol{z}{\\mathalpha}{newletters}{`z}
+
+    \\re\@DeclareMathSymbol{A}{\\mathalpha}{newletters}{`A}
+    \\re\@DeclareMathSymbol{B}{\\mathalpha}{newletters}{`B}
+    \\re\@DeclareMathSymbol{C}{\\mathalpha}{newletters}{`C}
+    \\re\@DeclareMathSymbol{D}{\\mathalpha}{newletters}{`D}
+    \\re\@DeclareMathSymbol{E}{\\mathalpha}{newletters}{`E}
+    \\re\@DeclareMathSymbol{F}{\\mathalpha}{newletters}{`F}
+    \\re\@DeclareMathSymbol{G}{\\mathalpha}{newletters}{`G}
+    \\re\@DeclareMathSymbol{H}{\\mathalpha}{newletters}{`H}
+    \\re\@DeclareMathSymbol{I}{\\mathalpha}{newletters}{`I}
+    \\re\@DeclareMathSymbol{J}{\\mathalpha}{newletters}{`J}
+    \\re\@DeclareMathSymbol{K}{\\mathalpha}{newletters}{`K}
+    \\re\@DeclareMathSymbol{L}{\\mathalpha}{newletters}{`L}
+    \\re\@DeclareMathSymbol{M}{\\mathalpha}{newletters}{`M}
+    \\re\@DeclareMathSymbol{N}{\\mathalpha}{newletters}{`N}
+    \\re\@DeclareMathSymbol{O}{\\mathalpha}{newletters}{`O}
+    \\re\@DeclareMathSymbol{P}{\\mathalpha}{newletters}{`P}
+    \\re\@DeclareMathSymbol{Q}{\\mathalpha}{newletters}{`Q}
+    \\re\@DeclareMathSymbol{R}{\\mathalpha}{newletters}{`R}
+    \\re\@DeclareMathSymbol{S}{\\mathalpha}{newletters}{`S}
+    \\re\@DeclareMathSymbol{T}{\\mathalpha}{newletters}{`T}
+    \\re\@DeclareMathSymbol{U}{\\mathalpha}{newletters}{`U}
+    \\re\@DeclareMathSymbol{V}{\\mathalpha}{newletters}{`V}
+    \\re\@DeclareMathSymbol{W}{\\mathalpha}{newletters}{`W}
+    \\re\@DeclareMathSymbol{X}{\\mathalpha}{newletters}{`X}
+    \\re\@DeclareMathSymbol{Y}{\\mathalpha}{newletters}{`Y}
+    \\re\@DeclareMathSymbol{Z}{\\mathalpha}{newletters}{`Z}
+
+    \\re\@DeclareMathSymbol{\\imath}{\\mathord}{newletters}{"7B}
+    \\re\@DeclareMathSymbol{\\jmath}{\\mathord}{newletters}{"7C}
+
+    %
+    %   A number of math symbol declarations have been commented out,
+    %   since these characters generally do not work very well when
+    %   typesetting maths (either because of spacing issues or because
+    %   they don't mix with others symbols).
+    %   The commented-out declarations have been left in this style file
+    %   in case the user does want to re-activate those characters.
+    %
+
+    \\re\@DeclareMathSymbol{!}{\\mathclose}{newoperators}{"21}
+  % \\re\@DeclareMathSymbol{+}{\\mathbin}  {newoperators}{"2B}
+    \\re\@DeclareMathSymbol{:}{\\mathrel}  {newoperators}{"3A}
+    \\re\@DeclareMathSymbol{;}{\\mathpunct}{newoperators}{"3B}
+  % \\re\@DeclareMathSymbol{=}{\\mathrel}  {newoperators}{"3D}
+    \\re\@DeclareMathSymbol{?}{\\mathclose}{newoperators}{"3F}
+
+    \\re\@DeclareMathSymbol{.}{\\mathord}  {newletters}{"3A}
+    \\re\@DeclareMathSymbol{,}{\\mathpunct}{newletters}{"3B}
+  % \\re\@DeclareMathSymbol{<}{\\mathrel}  {newletters}{"3C}
+  % \\re\@DeclareMathSymbol{/}{\\mathord}  {newletters}{"3D}
+  % \\re\@DeclareMathSymbol{>}{\\mathrel}  {newletters}{"3E}
+
+    \\re\@DeclareMathSymbol{\\mathdollar}{\\mathord}  {newoperators}{"24}
+    \\re\@DeclareMathSymbol{\\colon}     {\\mathpunct}{newoperators}{"3A}
+
+  % \\DeclareMathDelimiter{(}{\\mathopen} {newoperators}{"28}{largesymbols}{"00}
+  % \\DeclareMathDelimiter{)}{\\mathclose}{newoperators}{"29}{largesymbols}{"01}
+  % \\DeclareMathDelimiter{[}{\\mathopen} {newoperators}{"5B}{largesymbols}{"02}
+  % \\DeclareMathDelimiter{]}{\\mathclose}{newoperators}{"5D}{largesymbols}{"03}
+  % \\DeclareMathDelimiter{/}{\\mathord}  {newoperators}{"2F}{largesymbols}{"0E}
+
+    \\re\@DeclareMathAccent{\\grave}   {\\mathalpha}{newoperators}{"12}
+    \\re\@DeclareMathAccent{\\acute}   {\\mathalpha}{newoperators}{"13}
+    \\re\@DeclareMathAccent{\\check}   {\\mathalpha}{newoperators}{"14}
+    \\re\@DeclareMathAccent{\\breve}   {\\mathalpha}{newoperators}{"15}
+    \\re\@DeclareMathAccent{\\bar}     {\\mathalpha}{newoperators}{"16}
+    \\re\@DeclareMathAccent{\\mathring}{\\mathalpha}{newoperators}{"17}
+    \\re\@DeclareMathAccent{\\hat}     {\\mathalpha}{newoperators}{"5E}
+    \\re\@DeclareMathAccent{\\dot}     {\\mathalpha}{newoperators}{"5F}
+    \\re\@DeclareMathAccent{\\tilde}   {\\mathalpha}{newoperators}{"7E}
+    \\re\@DeclareMathAccent{\\ddot}    {\\mathalpha}{newoperators}{"7F}
+
+    \\re\@DeclareMathSymbol{\\Gamma}  {\\mathalpha}{newoperators}{"00}
+    \\re\@DeclareMathSymbol{\\Delta}  {\\mathalpha}{newoperators}{"01}
+    \\re\@DeclareMathSymbol{\\Theta}  {\\mathalpha}{newoperators}{"02}
+    \\re\@DeclareMathSymbol{\\Lambda} {\\mathalpha}{newoperators}{"03}
+    \\re\@DeclareMathSymbol{\\Xi}     {\\mathalpha}{newoperators}{"04}
+    \\re\@DeclareMathSymbol{\\Pi}     {\\mathalpha}{newoperators}{"05}
+    \\re\@DeclareMathSymbol{\\Sigma}  {\\mathalpha}{newoperators}{"06}
+    \\re\@DeclareMathSymbol{\\Upsilon}{\\mathalpha}{newoperators}{"07}
+    \\re\@DeclareMathSymbol{\\Phi}    {\\mathalpha}{newoperators}{"08}
+    \\re\@DeclareMathSymbol{\\Psi}    {\\mathalpha}{newoperators}{"09}
+    \\re\@DeclareMathSymbol{\\Omega}  {\\mathalpha}{newoperators}{"0A}
+
+    \\re\@DeclareMathSymbol{\\alpha}     {\\mathord}{newletters}{"0B}
+    \\re\@DeclareMathSymbol{\\beta}      {\\mathord}{newletters}{"0C}
+    \\re\@DeclareMathSymbol{\\gamma}     {\\mathord}{newletters}{"0D}
+    \\re\@DeclareMathSymbol{\\delta}     {\\mathord}{newletters}{"0E}
+    \\re\@DeclareMathSymbol{\\epsilon}   {\\mathord}{newletters}{"0F}
+    \\re\@DeclareMathSymbol{\\zeta}      {\\mathord}{newletters}{"10}
+    \\re\@DeclareMathSymbol{\\eta}       {\\mathord}{newletters}{"11}
+    \\re\@DeclareMathSymbol{\\theta}     {\\mathord}{newletters}{"12}
+    \\re\@DeclareMathSymbol{\\iota}      {\\mathord}{newletters}{"13}
+    \\re\@DeclareMathSymbol{\\kappa}     {\\mathord}{newletters}{"14}
+    \\re\@DeclareMathSymbol{\\lambda}    {\\mathord}{newletters}{"15}
+    \\re\@DeclareMathSymbol{\\mu}        {\\mathord}{newletters}{"16}
+    \\re\@DeclareMathSymbol{\\nu}        {\\mathord}{newletters}{"17}
+    \\re\@DeclareMathSymbol{\\xi}        {\\mathord}{newletters}{"18}
+    \\re\@DeclareMathSymbol{\\pi}        {\\mathord}{newletters}{"19}
+    \\re\@DeclareMathSymbol{\\rho}       {\\mathord}{newletters}{"1A}
+    \\re\@DeclareMathSymbol{\\sigma}     {\\mathord}{newletters}{"1B}
+    \\re\@DeclareMathSymbol{\\tau}       {\\mathord}{newletters}{"1C}
+    \\re\@DeclareMathSymbol{\\upsilon}   {\\mathord}{newletters}{"1D}
+    \\re\@DeclareMathSymbol{\\phi}       {\\mathord}{newletters}{"1E}
+    \\re\@DeclareMathSymbol{\\chi}       {\\mathord}{newletters}{"1F}
+    \\re\@DeclareMathSymbol{\\psi}       {\\mathord}{newletters}{"20}
+    \\re\@DeclareMathSymbol{\\omega}     {\\mathord}{newletters}{"21}
+    \\re\@DeclareMathSymbol{\\varepsilon}{\\mathord}{newletters}{"22}
+    \\re\@DeclareMathSymbol{\\vartheta}  {\\mathord}{newletters}{"23}
+    \\re\@DeclareMathSymbol{\\varpi}     {\\mathord}{newletters}{"24}
+    \\re\@DeclareMathSymbol{\\varrho}    {\\mathord}{newletters}{"25}
+    \\re\@DeclareMathSymbol{\\varsigma}  {\\mathord}{newletters}{"26}
+    \\re\@DeclareMathSymbol{\\varphi}    {\\mathord}{newletters}{"27}
+
+    \\ifthenelse{\\equal{\\$fam\@mathstyle}{TeX}}
+        {\\$fam\@mathGREEKuptrue}
+        {}
+    \\ifthenelse{\\equal{\\$fam\@mathstyle}{french}}
+        {\\$fam\@mathLATINuptrue
+         \\$fam\@mathGREEKuptrue
+         \\$fam\@mathgreekuptrue}
+        {}
+    \\ifthenelse{\\equal{\\$fam\@mathstyle}{upright}}
+        {\\$fam\@mathLATINuptrue
+         \\$fam\@mathlatinuptrue
+         \\$fam\@mathGREEKuptrue
+         \\$fam\@mathgreekuptrue}
+        {}
+
+    \\if$fam\@mathLATINup
+        \\re\@DeclareMathSymbol{A}{\\mathalpha}{newoperators}{`A}
+        \\re\@DeclareMathSymbol{B}{\\mathalpha}{newoperators}{`B}
+        \\re\@DeclareMathSymbol{C}{\\mathalpha}{newoperators}{`C}
+        \\re\@DeclareMathSymbol{D}{\\mathalpha}{newoperators}{`D}
+        \\re\@DeclareMathSymbol{E}{\\mathalpha}{newoperators}{`E}
+        \\re\@DeclareMathSymbol{F}{\\mathalpha}{newoperators}{`F}
+        \\re\@DeclareMathSymbol{G}{\\mathalpha}{newoperators}{`G}
+        \\re\@DeclareMathSymbol{H}{\\mathalpha}{newoperators}{`H}
+        \\re\@DeclareMathSymbol{I}{\\mathalpha}{newoperators}{`I}
+        \\re\@DeclareMathSymbol{J}{\\mathalpha}{newoperators}{`J}
+        \\re\@DeclareMathSymbol{K}{\\mathalpha}{newoperators}{`K}
+        \\re\@DeclareMathSymbol{L}{\\mathalpha}{newoperators}{`L}
+        \\re\@DeclareMathSymbol{M}{\\mathalpha}{newoperators}{`M}
+        \\re\@DeclareMathSymbol{N}{\\mathalpha}{newoperators}{`N}
+        \\re\@DeclareMathSymbol{O}{\\mathalpha}{newoperators}{`O}
+        \\re\@DeclareMathSymbol{P}{\\mathalpha}{newoperators}{`P}
+        \\re\@DeclareMathSymbol{Q}{\\mathalpha}{newoperators}{`Q}
+        \\re\@DeclareMathSymbol{R}{\\mathalpha}{newoperators}{`R}
+        \\re\@DeclareMathSymbol{S}{\\mathalpha}{newoperators}{`S}
+        \\re\@DeclareMathSymbol{T}{\\mathalpha}{newoperators}{`T}
+        \\re\@DeclareMathSymbol{U}{\\mathalpha}{newoperators}{`U}
+        \\re\@DeclareMathSymbol{V}{\\mathalpha}{newoperators}{`V}
+        \\re\@DeclareMathSymbol{W}{\\mathalpha}{newoperators}{`W}
+        \\re\@DeclareMathSymbol{X}{\\mathalpha}{newoperators}{`X}
+        \\re\@DeclareMathSymbol{Y}{\\mathalpha}{newoperators}{`Y}
+        \\re\@DeclareMathSymbol{Z}{\\mathalpha}{newoperators}{`Z}
+    \\fi
+
+    \\if$fam\@mathlatinup
+        \\DeclareSymbolFont{upletters}  {OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n}
+        \\SetSymbolFont{upletters}{bold}{OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+        \\re\@DeclareMathSymbol{a}{\\mathord}{upletters}{`a}
+        \\re\@DeclareMathSymbol{b}{\\mathord}{upletters}{`b}
+        \\re\@DeclareMathSymbol{c}{\\mathord}{upletters}{`c}
+        \\re\@DeclareMathSymbol{d}{\\mathord}{upletters}{`d}
+        \\re\@DeclareMathSymbol{e}{\\mathord}{upletters}{`e}
+        \\re\@DeclareMathSymbol{f}{\\mathord}{upletters}{`f}
+        \\re\@DeclareMathSymbol{g}{\\mathord}{upletters}{`g}
+        \\re\@DeclareMathSymbol{h}{\\mathord}{upletters}{`h}
+        \\re\@DeclareMathSymbol{i}{\\mathord}{upletters}{`i}
+        \\re\@DeclareMathSymbol{j}{\\mathord}{upletters}{`j}
+        \\re\@DeclareMathSymbol{k}{\\mathord}{upletters}{`k}
+        \\re\@DeclareMathSymbol{l}{\\mathord}{upletters}{`l}
+        \\re\@DeclareMathSymbol{m}{\\mathord}{upletters}{`m}
+        \\re\@DeclareMathSymbol{n}{\\mathord}{upletters}{`n}
+        \\re\@DeclareMathSymbol{o}{\\mathord}{upletters}{`o}
+        \\re\@DeclareMathSymbol{p}{\\mathord}{upletters}{`p}
+        \\re\@DeclareMathSymbol{q}{\\mathord}{upletters}{`q}
+        \\re\@DeclareMathSymbol{r}{\\mathord}{upletters}{`r}
+        \\re\@DeclareMathSymbol{s}{\\mathord}{upletters}{`s}
+        \\re\@DeclareMathSymbol{t}{\\mathord}{upletters}{`t}
+        \\re\@DeclareMathSymbol{u}{\\mathord}{upletters}{`u}
+        \\re\@DeclareMathSymbol{v}{\\mathord}{upletters}{`v}
+        \\re\@DeclareMathSymbol{w}{\\mathord}{upletters}{`w}
+        \\re\@DeclareMathSymbol{x}{\\mathord}{upletters}{`x}
+        \\re\@DeclareMathSymbol{y}{\\mathord}{upletters}{`y}
+        \\re\@DeclareMathSymbol{z}{\\mathord}{upletters}{`z}
+
+        \\re\@DeclareMathSymbol{\\imath}{\\mathord}{upletters}{"7B}
+        \\re\@DeclareMathSymbol{\\jmath}{\\mathord}{upletters}{"7C}
+    \\fi
+
+    \\if$fam\@mathGREEKup
+    \\else
+        \\re\@DeclareMathSymbol{\\Gamma}  {\\mathalpha}{newletters}{"00}
+        \\re\@DeclareMathSymbol{\\Delta}  {\\mathalpha}{newletters}{"01}
+        \\re\@DeclareMathSymbol{\\Theta}  {\\mathalpha}{newletters}{"02}
+        \\re\@DeclareMathSymbol{\\Lambda} {\\mathalpha}{newletters}{"03}
+        \\re\@DeclareMathSymbol{\\Xi}     {\\mathalpha}{newletters}{"04}
+        \\re\@DeclareMathSymbol{\\Pi}     {\\mathalpha}{newletters}{"05}
+        \\re\@DeclareMathSymbol{\\Sigma}  {\\mathalpha}{newletters}{"06}
+        \\re\@DeclareMathSymbol{\\Upsilon}{\\mathalpha}{newletters}{"07}
+        \\re\@DeclareMathSymbol{\\Phi}    {\\mathalpha}{newletters}{"08}
+        \\re\@DeclareMathSymbol{\\Psi}    {\\mathalpha}{newletters}{"09}
+        \\re\@DeclareMathSymbol{\\Omega}  {\\mathalpha}{newletters}{"0A}
+    \\fi
+
+    \\if$fam\@mathgreekup
+        \\DeclareSymbolFont{upletters}  {OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n}
+        \\SetSymbolFont{upletters}{bold}{OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+        \\re\@DeclareMathSymbol{\\alpha}     {\\mathord}{upletters}{"0B}
+        \\re\@DeclareMathSymbol{\\beta}      {\\mathord}{upletters}{"0C}
+        \\re\@DeclareMathSymbol{\\gamma}     {\\mathord}{upletters}{"0D}
+        \\re\@DeclareMathSymbol{\\delta}     {\\mathord}{upletters}{"0E}
+        \\re\@DeclareMathSymbol{\\epsilon}   {\\mathord}{upletters}{"0F}
+        \\re\@DeclareMathSymbol{\\zeta}      {\\mathord}{upletters}{"10}
+        \\re\@DeclareMathSymbol{\\eta}       {\\mathord}{upletters}{"11}
+        \\re\@DeclareMathSymbol{\\theta}     {\\mathord}{upletters}{"12}
+        \\re\@DeclareMathSymbol{\\iota}      {\\mathord}{upletters}{"13}
+        \\re\@DeclareMathSymbol{\\kappa}     {\\mathord}{upletters}{"14}
+        \\re\@DeclareMathSymbol{\\lambda}    {\\mathord}{upletters}{"15}
+        \\re\@DeclareMathSymbol{\\mu}        {\\mathord}{upletters}{"16}
+        \\re\@DeclareMathSymbol{\\nu}        {\\mathord}{upletters}{"17}
+        \\re\@DeclareMathSymbol{\\xi}        {\\mathord}{upletters}{"18}
+        \\re\@DeclareMathSymbol{\\pi}        {\\mathord}{upletters}{"19}
+        \\re\@DeclareMathSymbol{\\rho}       {\\mathord}{upletters}{"1A}
+        \\re\@DeclareMathSymbol{\\sigma}     {\\mathord}{upletters}{"1B}
+        \\re\@DeclareMathSymbol{\\tau}       {\\mathord}{upletters}{"1C}
+        \\re\@DeclareMathSymbol{\\upsilon}   {\\mathord}{upletters}{"1D}
+        \\re\@DeclareMathSymbol{\\phi}       {\\mathord}{upletters}{"1E}
+        \\re\@DeclareMathSymbol{\\chi}       {\\mathord}{upletters}{"1F}
+        \\re\@DeclareMathSymbol{\\psi}       {\\mathord}{upletters}{"20}
+        \\re\@DeclareMathSymbol{\\omega}     {\\mathord}{upletters}{"21}
+        \\re\@DeclareMathSymbol{\\varepsilon}{\\mathord}{upletters}{"22}
+        \\re\@DeclareMathSymbol{\\vartheta}  {\\mathord}{upletters}{"23}
+        \\re\@DeclareMathSymbol{\\varpi}     {\\mathord}{upletters}{"24}
+        \\re\@DeclareMathSymbol{\\varrho}    {\\mathord}{upletters}{"25}
+        \\re\@DeclareMathSymbol{\\varsigma}  {\\mathord}{upletters}{"26}
+        \\re\@DeclareMathSymbol{\\varphi}    {\\mathord}{upletters}{"27}
+    \\fi
+\\fi
+
+END_STY_MATH
+
+        if ($seen{sw}) {
+            print {$STY} <<"END_STY_MATHCAL";
+\\if$fam\@mathcal
+    \\SetMathAlphabet{\\mathcal}{normal}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{sw}
+    \\SetMathAlphabet{\\mathcal}{bold}  {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{sw}
+\\fi
+
+END_STY_MATHCAL
+        }
+    }
+
+    print {$STY} "\\endinput\n";
     close $STY;
 
     return;
@@ -889,7 +1307,9 @@
 \\fi
 
 \\DeclareFontFamily{$enc}{$fam-$sty}{@{[
-    $ARGV{nfss} eq 'tt' ? '\hyphenchar\font=-1' : ""
+    $ARGV{nfss} eq 'tt' ? '\hyphenchar\font=-1'
+    : $enc eq 'OML'     ? '\skewchar\font=127'
+    :                     q{}
 ]}}
 
 END_FD_HEADER
@@ -1076,6 +1496,9 @@
     nfssweight:         @{[ join q{, }, @{$ARGV{nfssweight}} ]}
     nfsswidth:          @{[ join q{, }, @{$ARGV{nfsswidth}}  ]}
 
+    math:               @{[ $ARGV{math}         ? 'yes'     : 'no'     ]}
+    mathspacing:        $ARGV{mathspacing}
+
 END_ARGUMENTS
 
     if ($ARGV{fig_height} or $ARGV{fig_width}) {
@@ -1182,7 +1605,7 @@
                        $workitem->{encoding},
                        $workitem->{figurestyle},
                        $workitem->{fdshape},
-                       join(q(, ), @{$workitem->{features}});
+                       join(q{, }, @{$workitem->{features}});
         $prevfn  = $workitem->{font}{filename};
     }
 
@@ -1317,8 +1740,8 @@
     c   =>  [ qw( condensed ) ],
     sc  =>  [ qw( semicondensed narrow ) ],
     ''  =>  [ qw( regular ) ],
-    sx  =>  [ qw( semiextended semiexpanded ) ],
-    x   =>  [ qw( extended expanded wide ) ],
+    sx  =>  [ qw( semiextended semiexpanded wide ) ],
+    x   =>  [ qw( extended expanded ) ],
     ex  =>  [],
     ux  =>  [],
 );
@@ -1645,7 +2068,7 @@
     -defaulttabular             considered 'default' for this font; see docs
     -defaultproportional
 
-    -extra="TEXT"           Add TEXT to the command for 'otftotfm'
+    -extra="EXTRA"          Add EXTRA to the otftotfm command for all fonts
     -target="DIRECTORY"     Install files into specified TEXMF tree
     -vendor="VENDOR"        Only used for naming directories
     -typeface="TYPEFACE"    Only used for naming directories
@@ -1664,6 +2087,9 @@
     -verbose                Print more data to log file
     -version                Print version number and exit
 
+    -math                   Generate basic math fonts
+    -mathspacing=AMOUNT     Letterspace the math fonts by AMOUNT/1000 em
+
     font[s]                 The fonts (.otf or .ttf format) to install.
 
 Please report any bugs or suggestions to <marcpenninga at gmail.com>.
@@ -1700,6 +2126,8 @@
     verbose         => 0,
     nfsswidth       => [],
     nfssweight      => [],
+    math            => 0,
+    mathspacing     => 0,
 );
 
 
@@ -1765,12 +2193,14 @@
                                      NFSS::set_widths($key, @values);
                                      $ARGV{$key} = 'user-defined';
                                  },
+        'math!'               => \$ARGV{math},
+        'mathspacing=i'       => \$ARGV{mathspacing},
     )
     or die "$USAGE";
 
     if (!@ARGV) {
         Pod::Usage::pod2usage(
-            -msg => '[ERROR] No font files given, nothing to do!',
+            -msg => '[ERROR]     No font files given, nothing to do!',
             -verbose => 1);
     }
 
@@ -1827,6 +2257,7 @@
 # The official names for various coding schemes.
 my %SCHEME = (
     OT1 => 'TEX TEXT',
+    OML => 'TEX MATH ITALIC',
     T1  => 'EXTENDED TEX FONT ENCODING - LATIN',
     TS1 => 'TEX TEXT COMPANION SYMBOLS 1---TS1',
     LY1 => 'TEX TYPEWRITER AND WINDOWS ANSI',
@@ -1988,6 +2419,13 @@
         extra => '',
         name  => '',
     },
+    math => {
+        code  => { n => 'n', it => 'it', sl => 'sl' },
+        reqd  => [],
+        nice  => [ 'onum' ],
+        extra => '--math-spacing=127',
+        name  => '',
+    },
 );
 
 =begin Comment
@@ -2024,25 +2462,25 @@
         reqd   => [],
         nice   => [ 'kern', 'liga' ],
         extra  => '',
-        styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+        styles => [ qw(normal smallcaps swash textcomp math) ],
     },
     LF => {
         reqd   => [],
         nice   => [ 'kern', 'liga' ],
         extra  => '',
-        styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+        styles => [ qw(normal smallcaps swash textcomp math) ],
     },
     TOsF => {
         reqd   => [],
         nice   => [ 'kern', 'liga' ],
         extra  => '',
-        styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+        styles => [ qw(normal smallcaps swash textcomp math) ],
     },
     OsF => {
         reqd   => [],
         nice   => [ 'kern', 'liga' ],
         extra  => '',
-        styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+        styles => [ qw(normal smallcaps swash textcomp math) ],
     },
     Sup => {
         reqd   => [ 'sups' ],
@@ -2097,9 +2535,8 @@
 sub get_styles {
     my $figurestyle = shift;
 
-    my $result = $FIGURESTYLE{$figurestyle}{styles} // [];
-
-    return @{$result};
+    return grep { defined $STYLE{$_} }
+                @{$FIGURESTYLE{$figurestyle}{styles}};
 }
 
 
@@ -2286,6 +2723,21 @@
         delete $STYLE{textcomp};
     }
 
+    if ($ARGV{math}) {
+        if (!( grep { $_ eq 'OT1' } @{$ARGV{encoding}} )) {
+            $ARGV{encoding} = [ 'OT1', @{$ARGV{encoding}} ];
+        }
+    }
+    else {
+        delete $STYLE{math}
+    }
+
+    if ($ARGV{mathspacing}) {
+        if (defined $STYLE{math}{extra}) {
+            $STYLE{math}{extra} .= " --letterspacing=$ARGV{mathspacing}";
+        }
+    }
+
     return;
 }
 
@@ -2566,6 +3018,7 @@
         = @{$workitem}{qw(font figurestyle style)};
     my @encodings = $style eq 'textcomp'  ? qw(ts1)
                   : $figurestyle eq 'Orn' ? qw(ly1)
+                  : $style eq 'math'      ? qw(oml)
                   :                         @{$ARGV{encoding}}
                   ;
 
@@ -2600,8 +3053,12 @@
         }
     }
 
-    # Look up the NFSS code for this font's shape.
+    # Look up the NFSS code for this font's shape...
     $workitem->{fdshape} = Tables::get_fdshape($style, $font->{basicshape});
+    # ... but drop this workitem if we shouldn't generate this shape.
+    if (!defined $workitem->{fdshape}) {
+        return;
+    }
 
     # Figure out which encoding file to use for this font.
     my $try = Cwd::abs_path($workitem->{encoding});
@@ -2611,7 +3068,8 @@
     }
     else {
         ($workitem->{enc_file} = $workitem->{encoding})
-            =~ s/\A(OT1|T1|TS1|LY1|LGR|T2[ABC]|T3|TS3)\z/fontools_\L$1\E/xmsi;
+            =~ s{ \A (OT1|OML|T1|TS1|LY1|LGR|T2[ABC]|T3|TS3) \z }
+                {fontools_\L$1\E}xmsi;
     }
 
     # Ornaments have no text encoding, and don't need kerning and ligatures.
@@ -2631,9 +3089,9 @@
     # Don't create ligatures if the user doesn't want them.
     delete $feature{liga} if !$ARGV{ligatures};
 
-    # Don't create kerns and ligatures for TS* fonts.
+    # Don't create kerns and ligatures for symbol or math fonts.
     delete @feature{qw(kern liga)}
-        if $workitem->{encoding} =~ m/\A TS\d \z/xmsi;
+        if $workitem->{encoding} =~ m/\A ( TS\d | OML ) \z/xmsi;
 
     $workitem->{features} = [ sort keys %feature ];
 
@@ -2668,7 +3126,7 @@
 
     To create the documentation:
 
-    pod2man --center="Marc Penninga" --release="fontools" --section=1 \
+    pod2man --center='Marc Penninga' --release='fontools' --section=1 \
         autoinst - | groff -Tps -man - | ps2pdf - autoinst.pdf
 
 
@@ -2734,7 +3192,7 @@
 
 =item I<nw>
 
-"Upright swash"
+`Upright swash'
 
 =back
 
@@ -2752,11 +3210,11 @@
 
 =item -
 
-Families with "Titling" characters;
-these "... replace the default glyphs
+Families with `Titling' characters;
+these `... replace the default glyphs
 with corresponding forms designed specifically for titling.
 These may be all-capital and/or larger on the body,
-and adjusted for viewing at larger sizes"
+and adjusted for viewing at larger sizes'
 (according to the OpenType Specification).
 
 =item -
@@ -2770,7 +3228,7 @@
 Of course, if your fonts don't 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 L</"COMMAND-LINE OPTIONS"> below).
+by the user (see L</COMMAND-LINE OPTIONS> below).
 
 These families use the I<FontPro> project's naming scheme:
 I<< <FontFamily>-<Suffix> >>, where I<< <Suffix> >> is:
@@ -2806,7 +3264,7 @@
 
 =item I<Titl>
 
-Titling characters; see above.
+Titling characters; see above
 
 =item I<Orn>
 
@@ -2824,55 +3282,11 @@
 
 The individual fonts are named I<< <FontName>-<suffix>-<shape>-<enc> >>,
 where I<< <suffix> >> is the same as above (but in lowercase),
-I<< <shape> >> is either empty, "sc" or "swash",
+I<< <shape> >> is either empty, `sc' or `swash',
 and I<< <enc> >> is the encoding (also in lowercase).
-A typical name in this scheme would be "FiraSans-Light-osf-sc-ly1".
+A typical name in this scheme would be `FiraSans-Light-osf-sc-ly1'.
 
 
-=head2 About the log file
-
-B<autoinst> writes some info about what it thinks it's doing to a log file.
-By default this is called F<< <fontfamily>.log >>,
-but this choice can be overridden by the user;
-see the I<-logfile> command-line option in L</"COMMAND-LINE OPTIONS"> below.
-If this log file already exists, B<autoinst> will append its data to the end
-rather than overwrite it.
-Use the I<-verbose> command-line option to ask for more detailed info.
-
-
-=head2 A note for MiKTeX users
-
-Automatically installing the fonts into a suitable TEXMF tree
-(as B<autoinst> tries to do by default) only works for TeX-installations
-that use the F<kpathsea> library; with TeX distributions that implement
-their own directory searching (such as MiKTeX), B<autoinst> will complain
-that it cannot find the F<kpsewhich> program and move all generated files
-into a subdirectory C<./autoinst_output/> 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 I<-target> option
-(see L</"COMMAND-LINE OPTIONS"> below) to manually specify a TEXMF tree.
-
-Also, some OpenType fonts contain so many kerning pairs that the resulting
-F<pl> and F<vpl> files are too big for MiKTeX's F<pltotf> and F<vptovf>;
-the versions that come with W32TeX (F<http://www.w32tex.org>)
-and TeXLive (F<http://tug.org/texlive>) don't seem to have this problem.
-
-
-=head2 A note for MacTeX users
-
-By default, B<autoinst> will try to install all generated files into
-the $TEXMFLOCAL tree; when this directory isn't user-writable,
-it will use the $TEXMFHOME tree instead.  Unfortunately, MacTeX's version
-of C<updmap-sys> (which is called behind the scenes) doesn't search
-in $TEXMFHOME, and hence MacTeX will not find the new fonts.
-
-To remedy this, either run B<autoinst> as root (so that it can install
-everything into $TEXMFLOCAL) or manually run C<updmap -user> to tell
-TeX about the files in $TEXMFHOME.
-The latter option does, however, have some caveats;
-see F<https://tug.org/texlive/scripts-sys-user.html>.
-
-
 =head2 Using the fonts in your LaTeX documents
 
 B<autoinst> generates a style file for using the fonts in LaTeX documents,
@@ -2897,30 +3311,32 @@
 =item C<lining>, C<oldstyle>, C<tabular>, C<proportional>
 
 Choose which figure style to use.
-The defaults are "oldstyle" and "proportional" (if available).
+The defaults are `oldstyle' and `proportional' (if available).
 
-=item C<<< scale=I<< <number> >> >>>
+=item C<<< scale=I<< <number> >> >>>, C<scale=MatchLowercase>
 
 Scale the font by a factor of I<< <number> >>.
 E.g., to increase the size of the font by 5%, use
 C<<< \usepackage[scale=1.05]{I<< <FontFamily> >>} >>>.
-May also be spelled C<scaled>.
+The special value C<MatchLowercase> may be used to scale the font
+so that its x-height matches that of the previously active font
+(which is usually Computer Modern, unless you have loaded another
+font package before this one).
+The name C<scaled> may be used as a synonym for C<scale>.
 
-This option is only available when you have the F<xkeyval> package installed.
-
 =item C<medium>, C<book>, C<text>, C<regular>
 
-Select the weight that LaTeX will use as the "regular" weight;
+Select the weight that LaTeX will use as the `regular' weight;
 the default is C<regular>.
 
 =item C<heavy>, C<black>, C<extrabold>, C<demibold>, C<semibold>, C<bold>
 
-Select the weight that LaTeX will use as the "bold" weight;
+Select the weight that LaTeX will use as the `bold' weight;
 the default is C<bold>.
 
 =back
 
-The previous two groups of options will only work if
+The last two groups of options will only work if
 you have the F<mweights> package installed.
 
 The style file will also try to load the F<fontaxes> package
@@ -2935,8 +3351,8 @@
     DECLARATION     COMMAND         SHORT FORM OF COMMAND
 
     \tlshape        \texttitling    \texttl
-    \sufigures      \textsuperior   \textsu
-    \infigures      \textinferior   \textin
+    \supfigures     \textsuperior   \textsup, \textsu
+    \inffigures     \textinferior   \textinf, \textin
 
 
 In addition, the C<\swshape> and C<\textsw> commands are redefined to place
@@ -2958,40 +3374,75 @@
 By default, B<autoinst> 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 I<-encoding> option
-(see L</"COMMAND-LINE OPTIONS"> below).
+(see L</COMMAND-LINE OPTIONS> below).
 
 
-=head3 Ornaments
+=head2 Maths
 
-Ornament fonts are regular LY1-encoded fonts, with a number of
-'regular' characters replaced by ornament glyphs.
-The OpenType specification says that fonts should only put their
-ornaments in place of the lowercase ASCII letters or the 'bullet'
-character, but some fonts put them in other positions (such as those
-of the digits) as well.
+This is an experimental feature; B<USE AT YOUR OWN RISK!>
+Test the results thoroughly before using them in real documents,
+and be warned that future versions of B<autoinst> may introduce
+incompatible changes.
 
-Ornament glyphs can be accessed like C<{\ornaments abc}> and
-C<{\ornaments\char"61}>, or equivalently
-C<\textornaments{abc}> and C<\textornaments{\char"61}>.
-To see which ornaments a font contains (and at which positions),
-run LaTeX on the file F<nfssfont.tex> (which is included in any
-standard LaTeX installation), supply the name of the ornament font
-(i.e., C<GaramondLibre-Regular-orn-u>) and say C<\table\bye>;
-this will create a table of all glyphs in that font.
+The I<-math> option tells B<autoinst> to generate basic math fonts.
+When enabled, the generated style file defines a few extra options
+to access these math fonts:
 
-Note that versions of B<autoinst> up to 20200428 handled ornaments
-differently, and fonts and style files generated by those versions
-are not compatible with files generated by newer versions.
+=over 4
 
+=item C<math>
 
+Use these fonts for the maths in your document.
+
+=item C<mathlining>, C<matholdstyle>
+
+Choose which figure style to use in maths.
+The default is `mathlining'.
+
+=item C<mathcal>
+
+Use the swash characters from your fonts as the C<\mathcal> alphabet.
+(This option only exists if your fonts actually contain swash characters
+and a C<swsh> feature to access them).
+
+=item C<<< math-style=I<< <style> >> >>>
+
+Choose the `math style' to use.
+With C<math-style=ISO>, all latin and greek letters in math are italic;
+with C<math-style=TeX> (the default), uppercase greek is upright;
+with C<math-style=french>, all greek as well as uppercase latin is upright;
+and with C<math-style=upright> all letters are upright.
+
+=back
+
+Note that this `math' option only changes 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,
+load another math package (such as F<mathdesign> or F<newtxmath>)
+before loading the B<autoinst>-generated style file.
+
+Finally, note that B<autoinst> doesn't 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 contain greek, characters such as C<\varepsilon>
+may be missing.
+You may also find that some glyphs I<are> present in your fonts,
+but don't work well in equations or don't match with other symbols;
+edit the generated style file to remove the declarations of
+these offending characters.
+Once again: test the results before using them!
+If the characters themselves are fine but spaced too tightly,
+you may try increasing the side bearings in math fonts with
+the I<-mathspacing> option (see below), e.g. C<-mathspacing=100>.
+
+
 =head2 NFSS codes
 
 LaTeX's New Font Selection System (NFSS)
 identifies fonts by a combination of family,
 series (the concatenation of weight and width), shape and size.
-B<autoinst> parses the font's metadata
-(more precisely: the output of C<otfinfo --info>)
-to determine these parameters.
+B<autoinst> parses the font's metadata to determine these parameters.
 When this fails (usually because the font family contains uncommon weights,
 widths or shapes),
 B<autoinst> ends up with different fonts having the I<same> values
@@ -3013,16 +3464,16 @@
     Oblique, Slant(ed), Incline(d)      sl
 
 (I<Exception:> Adobe Silentium Pro contains two Roman shapes;
-we map the first of these to "n", for the second one we (ab)use the "it" code
+we map the first of these to `n', for the second one we (ab)use the `it' code
 as this family doesn't contain an Italic shape.)
 
 The mapping of weights and widths to NFSS codes is a more complex,
 two-step proces.
-In the first step, all fonts are assigned a "series" name that is simply
+In the first step, all fonts are assigned a `series' name that is simply
 the concatenation of its weight and width
 (after expanding any abbreviations and converting to lowercase).
-A font with "Cond" width and "Ultra" weight will then be known
-as "ultrablackcondensed".
+A font with `Cond' width and `Ultra' weight will then be known
+as `ultrablackcondensed'.
 
 In the second step, B<autoinst> tries to map all combinations of NFSS codes
 (ul, el, l, sl, m, sb, b, eb and ub for weights;
@@ -3033,11 +3484,11 @@
 a unique code in a sane way (especially for the weights, some font families
 offer more choices or finer granularity than NFSS's codes can handle;
 e.g., Fira Sans contains fifteen(!) different weights,
-including an additional "Medium" weight between Regular and Semibold).
+including an additional `Medium' weight between Regular and Semibold).
 
 B<autoinst> tries hard to ensure that the most common NFSS codes
 (and high-level commands such as C<\bfseries>,
-which are built on top of those codes) will "just work".
+which are built on top of those codes) will `just work'.
 
 To see exactly which NFSS codes map to which fonts, see the log file
 (pro tip: run B<autoinst> with the I<-dryrun> option
@@ -3050,6 +3501,28 @@
 (i.e., C<\fontseries{demibold}\selectfont>).
 
 
+=head2 Ornaments
+
+Ornament fonts are regular LY1-encoded fonts, with a number of
+`regular' characters replaced by ornament glyphs.
+The OpenType specification says that fonts should only put their
+ornaments in place of the lowercase ASCII letters, but some fonts
+put them in other positions (such as those of the digits) as well.
+
+Ornaments can be accessed like C<{\ornaments a}> and
+C<{\ornaments\char"61}>, or equivalently
+C<\textornaments{a}> and C<\textornaments{\char"61}>.
+To see which ornaments a font contains (and at which positions),
+run LaTeX on the file F<nfssfont.tex> (which is included in any
+standard LaTeX installation), supply the name of the ornament font
+(i.e., C<GaramondLibre-Regular-orn-u>) and give the command C<\table\bye>;
+this will create a table of all glyphs in that font.
+
+Note that versions of B<autoinst> up to 20200428 handled ornaments
+differently, and fonts and style files generated by those versions
+are not compatible with files generated by newer versions.
+
+
 =head1 COMMAND-LINE OPTIONS
 
 B<autoinst> tries hard to do The Right Thing (TM) by default,
@@ -3091,7 +3564,7 @@
 
 Generate the specified encoding(s) for the text fonts.
 Multiple encodings may be specified as a comma-separated list
-(without spaces!); the default choice of encodings is "OT1,LY1,T1".
+(without spaces!); the default choice of encodings is `OT1,LY1,T1'.
 
 For each specified encoding XYZ, B<autoinst> will first see if there is
 an encoding file F<XYZ.enc> in the current directory, and if found it will
@@ -3099,7 +3572,7 @@
 Currently B<autoinst> comes with support for the OT1, T1/TS1, LY1, LGR,
 T2A/B/C and T3/TS3 encodings.
 (These files are called F<fontools_ot1.enc> etc. to avoid name clashes
-with other packages; the "fontools_" prefix may be omitted.)
+with other packages; the `fontools_' prefix may be omitted.)
 
 =item B<-ts1>/B<-nots1>
 
@@ -3118,15 +3591,15 @@
 it will - by default - turn off the use of f-ligatures
 (though this can be overridden with the I<-ligatures> option),
 and it will disable hyphenation for this font.
-This latter effect cannot be disabled in B<autoinst>;
+This latter effect cannot be re-enabled in B<autoinst>;
 if you want typewriter text to be hyphenated, use the F<hyphenat> package.
 
 If none of these options is specified, B<autoinst> tries to guess:
-if the font's filename contains the string "mono"
+if the font's filename contains the string `mono'
 or if the field C<isFixedPitch> in the font's I<post> table is True,
 it will select B<-typewriter>;
-else if the filename contains "sans" it selects B<-sanserif>;
-and otherwise it will opt for B<-serif>.
+else if the filename contains `sans' it will select B<-sanserif>;
+otherwise it will opt for B<-serif>.
 
 =item B<-lining>/B<-nolining>
 
@@ -3171,12 +3644,12 @@
 =item B<-inferiors> [= B<none> | B<auto> | B<subs> | B<sinf> | B<dnom> ]
 
 The OpenType standard defines several kinds of digits that might be used
-as inferiors or subscripts: "Subscripts" (OpenType feature "subs"),
-"Scientific Inferiors" ("sinf"), and "Denominators" ("dnom").
+as inferiors or subscripts: `Subscripts' (OpenType feature `subs'),
+`Scientific Inferiors' ('sinf'), and `Denominators' ('dnom').
 This option allows the user to determine which of these styles B<autoinst>
 should use for the inferior characters.
-Alternatively, the value "auto" tells B<autoinst> to use the first value
-in "sinf", "subs" or "dnom" that is supported by the font.
+Alternatively, the value `auto' tells B<autoinst> to use the first value
+in `sinf', `subs' or `dnom' that is supported by the font.
 Saying just B<-inferiors> is equivalent to B<-inferiors=auto>;
 otherwise the default is B<-noinferiors>.
 
@@ -3196,7 +3669,7 @@
 =item B<-ligatures>/B<-noligatures>
 
 Some fonts create glyphs for the standard f-ligatures (ff, fi, fl, ffi, ffl),
-but don't provide a "liga" feature to access these.
+but don't provide a `liga' feature to access these.
 This option tells B<autoinst> to add extra C<LIGKERN> rules to
 the generated fonts to enable the use of these ligatures.
 The default is B<-ligatures>,
@@ -3203,8 +3676,19 @@
 unless the user specified the I<-typewriter> option.
 
 Specify B<-noligatures> to disable the generation of ligatures even for fonts
-that do contain a "liga" feature.
+that do contain a `liga' feature.
 
+=item B<-math>
+
+Tells B<autoinst> to create basic math fonts (see above).
+
+=item B<-mathspacing>=I<amount>
+
+Letterspace each character in the math fonts by I<amount> units,
+where 1000 units equal one em.
+In my opinion, many text fonts benefit from letterspacing by 50 to 100 units
+when used in maths; some fonts need even more. Use your own judgement!
+
 =item B<-defaultlining>/B<-defaultoldstyle>
 
 =item B<-defaulttabular>/B<-defaultproportional>
@@ -3228,21 +3712,23 @@
 Note that this option leads to very long commands (it adds
 one hundred I< --ligkern> options), which may cause problems on some systems.
 
-=item B<-nfssweight>=I<code>=I<weight>, B<-nfsswidth>=I<code>=I<width>
+=item B<-nfssweight>=I<code>=I<weight>
 
+=item B<-nfsswidth>=I<code>=I<width>
+
 Map the NFSS code I<code> to the given weight or width,
 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 "ul" code to the "Thin" weight,
+Example: to map the `ul' code to the `Thin' weight,
 use C<-nfssweight=ul=thin>.
-To inhibit the use of the "ul" code completely,
+To inhibit the use of the `ul' code completely,
 use C<-nfssweight=ul=>.
 
-=item B<-extra>=I<text>
+=item B<-extra>=I<extra>
 
-Append I<text> as extra options to the command lines for I<otftotfm>.
-To prevent I<text> from accidentily being interpreted as options
+Append I<extra> as extra options to the command lines for I<otftotfm>.
+To prevent I<extra> from accidentily being interpreted as options
 to B<autoinst>, it should be properly quoted.
 
 =item B<-manual>
@@ -3301,9 +3787,9 @@
 =item B<-typeface>=I<TYPEFACE>
 
 These options are equivalent to F<otftotfm>'s I< --vendor> and I< --typeface>
-options: they change the "vendor" and "typeface" parts of the names of the
+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's FontFamily name.
 
 Note that these options change I<only> directory names,
 not the names of any generated files.
@@ -3316,6 +3802,39 @@
 =back
 
 
+=head2 A note for MiKTeX users
+
+Automatically installing the fonts into a suitable TEXMF tree
+(as B<autoinst> tries to do by default) only works for TeX-installations
+that use the F<kpathsea> library; with TeX distributions that implement
+their own directory searching (such as MiKTeX), B<autoinst> will complain
+that it cannot find the F<kpsewhich> program and move all generated files
+into a subdirectory C<./autoinst_output/> 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 I<-target> option
+(see L</COMMAND-LINE OPTIONS> below) to manually specify a TEXMF tree.
+
+Also, some OpenType fonts contain so many kerning pairs that the resulting
+F<pl> and F<vpl> files are too big for MiKTeX's F<pltotf> and F<vptovf>;
+the versions that come with W32TeX (F<http://www.w32tex.org>)
+and TeXLive (F<http://tug.org/texlive>) don't seem to have this problem.
+
+
+=head2 A note for MacTeX users
+
+By default, B<autoinst> will try to install all generated files into
+the $TEXMFLOCAL tree; when this directory isn't user-writable,
+it will use the $TEXMFHOME tree instead.  Unfortunately, MacTeX's version
+of C<updmap-sys> (which is called behind the scenes) doesn't search
+in $TEXMFHOME, and hence MacTeX will not find the new fonts.
+
+To remedy this, either run B<autoinst> as root (so that it can install
+everything into $TEXMFLOCAL) or manually run C<updmap -user> to tell
+TeX about the files in $TEXMFHOME.
+The latter option does, however, have some caveats;
+see F<https://tug.org/texlive/scripts-sys-user.html>.
+
+
 =head1 SEE ALSO
 
 Eddie Kohler's B<TypeTools> (F<http://www.lcdf.org/type>).
@@ -3371,7 +3890,7 @@
 
 =head1 VERSION
 
-This document describes B<autoinst> version 20200511.
+This document describes B<autoinst> version 20200527.
 
 
 =head1 RECENT CHANGES
@@ -3380,6 +3899,18 @@
 
 =over 12
 
+=item I<2020-05-27>
+
+Added basic (and still somewhat experimental) math support.
+Implemented the C<scale=MatchLowercase> option value
+in the generated style files.
+`Wide' fonts are mapped to the `sx' NFSS code instead of `x',
+to cater for League Mono Variable's Wide and Extended widths.
+The generated style files now use C<\textsup> and C<\textinf>
+instead of the more cryptic C<\textsu> and C<\textin> to access
+superior and inferior characters
+(though the old forms are retained for backwards compatibility).
+
 =item I<2020-05-11>
 
 When present, use encoding files in the current working directory
@@ -3479,13 +4010,13 @@
 =item I<2019-05-17>
 
 Changed the way the F<-ligatures> option works:
-F<-ligatures> enables f-ligatures (even without a "liga" feature),
-F<-noligatures> now disables f-ligatures (overriding a "liga" feature).
+F<-ligatures> enables f-ligatures (even without a `liga' feature),
+F<-noligatures> now disables f-ligatures (overriding a `liga' feature).
 
 =item I<2019-05-11>
 
 Separate small caps families are now also recognised when the family name
-ends with "SC" (previously B<autoinst> only looked for "SmallCaps").
+ends with `SC' (previously B<autoinst> only looked for `SmallCaps').
 
 =item I<2019-04-22>
 
@@ -3500,7 +4031,7 @@
 Added the <-mergesmallcaps> option, to handle cases where
 the small caps fonts are in separate font families.
 Titling shape is now treated as a separate family instead of a distinct shape;
-it is generated only for fonts with the 'titl' feature.
+it is generated only for fonts with the `titl' feature.
 Only add f-ligatures to fonts when explicitly asked to (I<-ligatures>).
 
 =item I<2019-04-11>
@@ -3522,7 +4053,7 @@
 put all generated files into a subdirectory C<./autoinst_output/>
 instead of all over the current working directory.
 
-Added "auto" value to the I<inferiors> option,
+Added `auto' value to the I<inferiors> option,
 to tell B<autoinst> to use whatever inferior characters are available.
 
 =item I<2019-03-14>
@@ -3530,9 +4061,9 @@
 Overhauled the mapping of fonts (more specifically of weights and widths;
 the mapping of shapes didn't change) to NFSS codes.
 Instead of inventing our own codes to deal with every possible weight
-and width out there, we now create "long" codes based on the names
+and width out there, we now create `long' codes based on the names
 in the font metadata.
-Then we add "ssub" rules to the F<fd> files to map the standard NFSS codes
+Then we add `ssub' rules to the F<fd> files to map the standard NFSS codes
 to our fancy names (see the section B<NFSS codes>;
 based on discussions with Frank Mittelbach and Bob Tennent).
 
@@ -3553,26 +4084,26 @@
 
 =item I<2018-03-26>
 
-Added the "Text" weight and the I<-(no)mergewidths> option.
-Changed the NFSS codes for "Thin" and "Book" to "i" and "o", respectively.
+Added the `Text' weight and the I<-(no)mergewidths> option.
+Changed the NFSS codes for `Thin' and `Book' to `i' and `o', respectively.
 Tried to improve the documentation.
 
 =item I<2018-01-09>
 
-Added the "sl" weight for font families (such as Fira Sans) that contain both
-"Book" and "Regular" weights (reported by Bob Tennent).
-Added the "Two", "Four", "Eight" and "Hair" weights (for Fira Sans).
+Added the `sl' weight for font families (such as Fira Sans) that contain both
+`Book' and `Regular' weights (reported by Bob Tennent).
+Added the `Two', `Four', `Eight' and `Hair' weights (for Fira Sans).
 
 =item I<2017-06-16>
 
 Changed the I<-inferiors> option from a binary yes-or-no choice to allow
-the user to choose one of the "subs", "sinf" and "dnom" features.
+the user to choose one of the `subs', `sinf' and `dnom' features.
 B<autoinst> now always creates a log file.
 
 =item I<2017-03-21>
 
-Updated the F<fontools_ot1.enc> encoding file to include the "Lslash"
-and "lslash" glyphs (thanks to Bob Tennent).
+Updated the F<fontools_ot1.enc> encoding file to include the `Lslash'
+and `lslash' glyphs (thanks to Bob Tennent).
 
 =item I<2015-11-22>
 
@@ -3588,8 +4119,8 @@
 
 =item I<2014-01-21>
 
-"Oblique" or "slanted" fonts are now mapped to NFSS code "sl" instead
-of "it"; added "ssub" rules to the F<fd> files to substitute slanted fonts
+`Oblique' or `slanted' fonts are now mapped to NFSS code `sl' instead
+of `it'; added `ssub' rules to the F<fd> files to substitute slanted fonts
 for italic ones if the latter are missing. Fixed a few bugs.
 
 =item I<2014-01-03>
@@ -3618,16 +4149,16 @@
 =item I<2013-02-06>
 
 Bugfix: the directory names for map and encoding files contained
-the "vendor" instead of the "typeface".
+the `vendor' instead of the `typeface'.
 
 =item I<2013-01-03>
 
-Added extra "ssub" rules to the F<fd> files that substitute "b" for "bx".
+Added extra `ssub' rules to the F<fd> files that substitute `b' for `bx'.
 Verbose mode now also prints all generated commands before they're executed.
 
 =item I<2012-10-25>
 
-Added extra "ssub" rules to the F<fd> files that substitute italic
+Added extra `ssub' rules to the F<fd> files that substitute italic
 shapes for slanted ones.
 
 =item I<2012-09-25>
@@ -3640,7 +4171,7 @@
 
 =item I<2012-03-06>
 
-Implemented the "splitting the font family into multiple subfamilies"
+Implemented the `splitting the font family into multiple subfamilies'
 emergency strategy when font info parsing fails.
 Added recognition for a number of unusual widths, weights and shapes.
 
@@ -3648,8 +4179,8 @@
 
 Fixed a bug in the font parsing code,
 where possible widths, weights and shapes where tested in the wrong order;
-this led to "ExtraLight" fonts being recognised as "Light".
-Added recognition for "Narrow" and "Wide" widths.
+this led to `ExtraLight' fonts being recognised as `Light'.
+Added recognition for `Narrow' and `Wide' widths.
 Also added the I<-(no)figurekern> command-line option.
 
 =item I<2012-02-01>
@@ -3665,7 +4196,7 @@
 =item I<2011-06-15>
 
 Fixed the font info parsing code for some fonts that are
-too lazy to spell out "Italic" in full.
+too lazy to spell out `Italic' in full.
 
 =item I<2010-04-29>
 
@@ -3711,13 +4242,13 @@
 weight and width were mapped to the same series.
 Added a work-around for incorrect size info in some Kepler fonts.
 Fixed a small bug in the generated commands for otftotfm
-(sometimes, the "onum" feature was included twice).
+(sometimes, the `onum' feature was included twice).
 Added encoding file for OT1 to the I<fontools> collection.
 
 =item I<2007-07-27>
 
 Two bugfixes: a closing brace was missing in the generated style file,
-and the NFSS series was formed as "width plus weight" instead of the reverse.
+and the NFSS series was formed as `width plus weight' instead of the reverse.
 
 =item I<2007-06-10>
 
@@ -3732,7 +4263,7 @@
 families (suggested by Steven E. Harris).
 Tweaked the font info parsing to work around a bug in the naming of
 some FontFont fonts, where every font is in a family of its own.
-Added the "scaled" option (including the loading of F<xkeyval>)
+Added the `scaled' option (including the loading of F<xkeyval>)
 to the generated style file.
 Extended the output of the I<-verbose> option.
 
@@ -3753,7 +4284,7 @@
 
 =item I<2006-08-31>
 
-Made the generated style files try to include "fontaxes.sty";
+Made the generated style files try to include `fontaxes.sty';
 changed the names of the generated fonts and families
 (to make the previous change possible);
 added command-line options for most font styles and shapes;
@@ -3760,7 +4291,7 @@
 tweaked the filename parsing code for Cronos Pro and Gill Sans Pro;
 added runtime generation of encoding vectors for ornament fonts
 (because GaramondPremier's ornament names differ from other fonts);
-changed the NFSS-code for italic small caps and titling to "scit" and "tlit"
+changed the NFSS-code for italic small caps and titling to `scit' and `tlit'
 (to work with F<fontaxes>);
 and edited (and hopefully improved) the documentation.
 
@@ -3792,14 +4323,14 @@
 The generated commands weren't actually executed, only printed...
 Also added a small hack to cater for fonts
 (such as some recent versions of MinionPro)
-that contain swash characters but don't provide a "swsh" feature.
+that contain swash characters but don't provide a `swsh' feature.
 
 =item I<2005-08-10>
 
-Dropped the "fontname" scheme in favor of a more verbose naming scheme,
+Dropped the `fontname' scheme in favor of a more verbose naming scheme,
 since many filenames were still more than eight characters long anyway.
 Added F<nfssext.sty>-like commands to the generated style file.
-Changed the default encoding to LY1 and added the "inferior" shape.
+Changed the default encoding to LY1 and added the `inferior' shape.
 
 =item I<2005-08-01>
 
@@ -3806,11 +4337,11 @@
 Rewrote (and hopefully improved) the user interface;
 changed the program to by default execute the generated F<otftotfm> command
 lines rather than writing them to a file;
-added automatic determination of the "fontname" code for the font family;
-changed the NFSS code for italic small caps to "si"; added titling shapes;
+added automatic determination of the `fontname' code for the font family;
+changed the NFSS code for italic small caps to `si'; added titling shapes;
 changed the generated style
 file to include an interface for the ornaments and to load Lehman's NFSS
-extensions F<nfssext.sty> if this is installed; corrected the "fontname" codes
+extensions F<nfssext.sty> if this is installed; corrected the `fontname' codes
 for OT1, T1, LY1 and user-specific encodings; extended the output generated by
 the I<-verbose> option; and rewrote and extended the documentation.
 

Modified: trunk/Master/texmf-dist/scripts/fontools/ot2kpx
===================================================================
--- trunk/Master/texmf-dist/scripts/fontools/ot2kpx	2020-05-27 21:40:08 UTC (rev 55296)
+++ trunk/Master/texmf-dist/scripts/fontools/ot2kpx	2020-05-27 21:40:38 UTC (rev 55297)
@@ -38,7 +38,7 @@
 use List::Util @List::Util::EXPORT_OK;
 use Pod::Usage;
 
-my $VERSION = "20200511";
+my $VERSION = "20200527";
 
 our ($NUM_GLYPHS, $UNITS_PER_EM, %kern);
 
@@ -858,7 +858,7 @@
 
 =head1 VERSION
 
-This document describes B<ot2kpx> version 20200511.
+This document describes B<ot2kpx> version 20200527.
 
 
 =head1 RECENT CHANGES



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