[latex3-commits] [git/LaTeX3-latex3-luaotfload] 3.12-20200126: add temporarly fontspec files for travis tests (dc63d42)

Ulrike Fischer fischer at troubleshooting-tex.de
Mon Feb 3 14:57:34 CET 2020


Repository : https://github.com/latex3/luaotfload
On branch  : 3.12-20200126
Link       : https://github.com/latex3/luaotfload/commit/dc63d4273a01b971d4a84699956c40bce5519896

>---------------------------------------------------------------

commit dc63d4273a01b971d4a84699956c40bce5519896
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date:   Mon Feb 3 14:57:34 2020 +0100

    add temporarly fontspec files for travis tests


>---------------------------------------------------------------

dc63d4273a01b971d4a84699956c40bce5519896
 .../{fontspec-xetex.sty => fontspec-luatex.sty}    | 511 +++++----------------
 supporttexmf/tex/latex/fontspec/fontspec.lua       |  83 ++++
 supporttexmf/tex/latex/fontspec/fontspec.sty       |  45 ++
 3 files changed, 254 insertions(+), 385 deletions(-)

diff --git a/supporttexmf/tex/latex/fontspec/fontspec-xetex.sty b/supporttexmf/tex/latex/fontspec/fontspec-luatex.sty
similarity index 88%
copy from supporttexmf/tex/latex/fontspec/fontspec-xetex.sty
copy to supporttexmf/tex/latex/fontspec/fontspec-luatex.sty
index 5e73cd2..a688056 100644
--- a/supporttexmf/tex/latex/fontspec/fontspec-xetex.sty
+++ b/supporttexmf/tex/latex/fontspec/fontspec-luatex.sty
@@ -1,30 +1,30 @@
 %%
-%% This is file `fontspec-xetex.sty',
+%% This is file `fontspec-luatex.sty',
 %% generated with the docstrip utility.
 %%
 %% The original source files were:
 %%
-%% fontspec.dtx  (with options: `fontspec,XE')
-%% fontspec-code-load.dtx  (with options: `fontspec,XE')
-%% fontspec-code-vars.dtx  (with options: `fontspec,XE')
-%% fontspec-code-msg.dtx  (with options: `fontspec,XE')
-%% fontspec-code-opening.dtx  (with options: `fontspec,XE')
-%% fontspec-code-fontload.dtx  (with options: `fontspec,XE')
-%% fontspec-code-interfaces.dtx  (with options: `fontspec,XE')
-%% fontspec-code-user.dtx  (with options: `fontspec,XE')
-%% fontspec-code-api.dtx  (with options: `fontspec,XE')
-%% fontspec-code-internal.dtx  (with options: `fontspec,XE')
-%% fontspec-code-opentype.dtx  (with options: `fontspec,XE')
-%% fontspec-code-graphite.dtx  (with options: `fontspec,XE')
-%% fontspec-code-keyval.dtx  (with options: `fontspec,XE')
-%% fontspec-code-feat-opentype.dtx  (with options: `fontspec,XE')
-%% fontspec-code-scripts.dtx  (with options: `fontspec,XE')
-%% fontspec-code-lang.dtx  (with options: `fontspec,XE')
-%% fontspec-code-feat-aat.dtx  (with options: `fontspec,XE')
-%% fontspec-code-enc.dtx  (with options: `fontspec,XE')
-%% fontspec-code-math.dtx  (with options: `fontspec,XE')
-%% fontspec-code-closing.dtx  (with options: `fontspec,XE')
-%% fontspec-code-xfss.dtx  (with options: `fontspec,XE')
+%% fontspec.dtx  (with options: `fontspec,LU')
+%% fontspec-code-load.dtx  (with options: `fontspec,LU')
+%% fontspec-code-vars.dtx  (with options: `fontspec,LU')
+%% fontspec-code-msg.dtx  (with options: `fontspec,LU')
+%% fontspec-code-opening.dtx  (with options: `fontspec,LU')
+%% fontspec-code-fontload.dtx  (with options: `fontspec,LU')
+%% fontspec-code-interfaces.dtx  (with options: `fontspec,LU')
+%% fontspec-code-user.dtx  (with options: `fontspec,LU')
+%% fontspec-code-api.dtx  (with options: `fontspec,LU')
+%% fontspec-code-internal.dtx  (with options: `fontspec,LU')
+%% fontspec-code-opentype.dtx  (with options: `fontspec,LU')
+%% fontspec-code-graphite.dtx  (with options: `fontspec,LU')
+%% fontspec-code-keyval.dtx  (with options: `fontspec,LU')
+%% fontspec-code-feat-opentype.dtx  (with options: `fontspec,LU')
+%% fontspec-code-scripts.dtx  (with options: `fontspec,LU')
+%% fontspec-code-lang.dtx  (with options: `fontspec,LU')
+%% fontspec-code-feat-aat.dtx  (with options: `fontspec,LU')
+%% fontspec-code-enc.dtx  (with options: `fontspec,LU')
+%% fontspec-code-math.dtx  (with options: `fontspec,LU')
+%% fontspec-code-closing.dtx  (with options: `fontspec,LU')
+%% fontspec-code-xfss.dtx  (with options: `fontspec,LU')
 %% ------------------------------------------------
 %% The FONTSPEC package  <wspr.io/fontspec>
 %% ------------------------------------------------
@@ -39,7 +39,7 @@
 %%^^A%%  Metadata for the package, including files and versioning
 
 \RequirePackage{xparse}
-\ProvidesExplPackage{fontspec-xetex}%
+\ProvidesExplPackage{fontspec-luatex}%
   {2020/01/26}{2.7g}{Font selection for XeLaTeX and LuaLaTeX}
 
 %%^^A%%  fontspec-code-load.dtx -- part of FONTSPEC <wspr.io/fontspec>
@@ -468,7 +468,7 @@
   }
 \bool_if:NTF \g__fontspec_euenc_bool
   {
-    \tl_gset:Nn \g_fontspec_encoding_tl {EU1}
+    \tl_gset:Nn \g_fontspec_encoding_tl {EU2}
   }
   { \tl_gset:Nn \g_fontspec_encoding_tl { TU } }
 \tl_set:Nn \rmdefault {lmr}
@@ -486,7 +486,10 @@
   }
 \bool_if:NT \g__fontspec_euenc_bool
   {
+    \cs_set_eq:NN \fontspec_tmp: \XeTeXpicfile
+    \cs_set:Npn \XeTeXpicfile {}
     \RequirePackage{xunicode}
+    \cs_set_eq:NN \XeTeXpicfile \fontspec_tmp:
   }
 \cs_new:Npn \FontspecSetCheckBoolTrue  { \bool_set_true:N  \l__fontspec_check_bool }
 \cs_new:Npn \FontspecSetCheckBoolFalse { \bool_set_false:N \l__fontspec_check_bool }
@@ -499,6 +502,10 @@
   {
     \int_set:Nn #1 { \__dim_eval:w #2 #1 \__dim_eval_end: }
   }
+\cs_set:Npn \__fontspec_lua_function:ne    #1#2       { \lua_now:e { fontspec.#1 ("#2")                } }
+\cs_set:Npn \__fontspec_lua_function:nee   #1#2#3     { \lua_now:e { fontspec.#1 ("#2","#3")           } }
+\cs_set:Npn \__fontspec_lua_function:neee  #1#2#3#4   { \lua_now:e { fontspec.#1 ("#2","#3","#4")      } }
+\cs_set:Npn \__fontspec_lua_function:neeee #1#2#3#4#5 { \lua_now:e { fontspec.#1 ("#2","#3","#4","#5") } }
 \cs_generate_variant:Nn \int_set:Nn {Nv}
 \cs_generate_variant:Nn \keys_set:nn {nx}
 \cs_generate_variant:Nn \keys_set_known:nnN {nx}
@@ -777,22 +784,22 @@
   }
 \cs_new:Nn \__fontspec_main_setmathrm:nn
   {
- \fontspec_gset_family:Nnn \g__fontspec_mathrm_tl {#1} {#2}
+ \fontspec_gset_family:Nnn \g__fontspec_mathrm_tl {Renderer=Basic,#1} {#2}
     \__fontspec_setmathrm_hook:nn {#1} {#2} % for unicode-math only
   }
 \cs_new:Nn \__fontspec_main_setboldmathrm:nn
   {
- \fontspec_gset_family:Nnn \g__fontspec_bfmathrm_tl {#1} {#2}
+ \fontspec_gset_family:Nnn \g__fontspec_bfmathrm_tl {Renderer=Basic,#1} {#2}
     \__fontspec_setboldmathrm_hook:nn {#1} {#2} % for unicode-math only
   }
 \cs_new:Nn \__fontspec_main_setmathsf:nn
   {
- \fontspec_gset_family:Nnn \g__fontspec_mathsf_tl {#1} {#2}
+ \fontspec_gset_family:Nnn \g__fontspec_mathsf_tl {Renderer=Basic,#1} {#2}
     \__fontspec_setmathsf_hook:nn {#1} {#2} % for unicode-math only
   }
 \cs_new:Nn \__fontspec_main_setmathtt:nn
   {
- \fontspec_gset_family:Nnn \g__fontspec_mathtt_tl {#1} {#2}
+ \fontspec_gset_family:Nnn \g__fontspec_mathtt_tl {Renderer=Basic,#1} {#2}
     \__fontspec_setmathtt_hook:nn {#1} {#2} % for unicode-math only
   }
 \cs_set_eq:NN \__fontspec_setmainfont_hook:nn   \use_none:nn
@@ -1252,6 +1259,7 @@
 \cs_new:Nn \__fontspec_sanitise_fontname:Nn
   {
     \tl_set:Nx #1 {#2}
+  \tl_remove_all:Nn #1 {~}
     \clist_map_inline:Nn \l__fontspec_extensions_clist
       {
         \tl_if_in:NnT #1 {##1}
@@ -1350,7 +1358,7 @@
   }
 \cs_new:Nn \__fontspec_construct_font_call:nnnnnn
   {
-  " \__fontspec_fontname_wrap:n { #1 #2 #3 }
+  " \__fontspec_fontname_wrap:n { #1 #2 } #3
     #4 #5
     \str_if_eq:eeF {#6}{} {:#6} "
   }
@@ -1389,14 +1397,7 @@
     \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#1}
       \l__fontspec_keys_leftover_clist
     \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist
-    \bool_if:NTF \l__fontspec_ot_bool
-      {
-        \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist
-      }
-      {
-        \bool_if:nT { \l__fontspec_atsui_bool || \l__fontspec_graphite_bool }
-          { \keys_set:nV {fontspec-aat} \l__fontspec_keys_leftover_clist }
-      }
+    \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist
 
     \tl_if_empty:NF \l__fontspec_mapping_tl
       { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } }
@@ -1505,6 +1506,7 @@
   {
     \tl_set:Nx #1 {#2}
     \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl}
+  \tl_remove_all:Nn #1 {~}
   }
 \cs_new:Nn \__fontspec_add_nfssfont:nnnn
   {
@@ -1522,26 +1524,7 @@
   }
 \cs_new:Nn \__fontspec_set_font_type:N
   {
-\bool_set_false:N \l__fontspec_tfm_bool
-\bool_set_false:N \l__fontspec_atsui_bool
-\bool_set_false:N \l__fontspec_ot_bool
-\bool_set_false:N \l__fontspec_mm_bool
-\bool_set_false:N \l__fontspec_graphite_bool
-\ifcase\XeTeXfonttype #1
-\bool_set_true:N \l__fontspec_tfm_bool
-\or
-\bool_set_true:N \l__fontspec_atsui_bool
-\tl_if_empty:NT \l__fontspec_renderer_tl { \tl_set:Nn \l__fontspec_renderer_tl {/AAT} }
-\ifnum\XeTeXcountvariations #1 > 0\relax
-\bool_set_true:N \l__fontspec_mm_bool
-\fi
-\or
-\bool_set_true:N \l__fontspec_ot_bool
-\tl_if_empty:NT \l__fontspec_renderer_tl { \tl_set:Nn \l__fontspec_renderer_tl {/OT} }
-\or
-\bool_set_true:N \l__fontspec_graphite_bool
-\tl_if_empty:NT \l__fontspec_renderer_tl { \tl_set:Nn \l__fontspec_renderer_tl {/GR} }
-\fi
+    \bool_set_true:N \l__fontspec_ot_bool
   }
 \cs_new:Nn \__fontspec_set_autofont:Nnn
   {
@@ -1738,27 +1721,14 @@
   }
 \tl_set:Nn \l__fontspec_pre_feat_sclist
   {
-    \bool_if:NT \l__fontspec_ot_bool
-      {
-        \tl_if_empty:NF \l__fontspec_script_tl { script   = \l__fontspec_script_tl ; }
-        \tl_if_empty:NF \l__fontspec_lang_tl   { language = \l__fontspec_lang_tl   ; }
-      }
-  }
-\cs_new:Nn \__fontspec_make_ot_smallcaps:TF
-  {
-    \exp_args:No \__fontspec_check_ot_feat:NnTF \l__fontspec_fontface_cs_tl {smcp} {#1} {#2}
+    mode     = \l__fontspec_mode_tl   ;
+    \tl_if_empty:NF \l__fontspec_shaper_tl { shaper = \l__fontspec_shaper_tl   ; }
+    \tl_if_empty:NF \l__fontspec_script_tl { script   = \l__fontspec_script_tl ; }
+    \tl_if_empty:NF \l__fontspec_lang_tl   { language = \l__fontspec_lang_tl   ; }
   }
 \cs_new:Nn \__fontspec_make_smallcaps:TF
   {
-    \bool_if:NTF \l__fontspec_ot_bool
-      { \__fontspec_make_ot_smallcaps:TF {#1} {#2} }
-      {
-        \bool_if:NT \l__fontspec_atsui_bool
-          {
-            \exp_args:No \__fontspec_make_AAT_feature_string:NnnTF
-              \l__fontspec_fontface_cs_tl {3} {3} {#1} {#2}
-          }
-      }
+    \exp_args:No \__fontspec_check_ot_feat:NnTF \l__fontspec_fontface_cs_tl {smcp} {#1} {#2}
   }
 \cs_new:Nn \__fontspec_update_featstr:n
   {
@@ -1788,6 +1758,11 @@
     \tl_gclear:N \g__fontspec_defined_shapes_tl
     \tl_gclear:N \g__fontspec_curr_series_tl
     \tl_gset_eq:NN \g__fontspec_nfss_enc_tl \g_fontspec_encoding_tl
+    \tl_set:Nn \l__fontspec_mode_tl {node}
+    \int_set:Nn \prehyphenchar { `\- } % fixme
+    \int_zero:N \posthyphenchar        % fixme
+    \int_zero:N \preexhyphenchar       % fixme
+    \int_zero:N \postexhyphenchar      % fixme
   }
 \cs_new:Nn \__fontspec_init_fontface:
   {
@@ -1799,29 +1774,21 @@
     \tl_clear:N \l__fontspec_wordspace_adjust_tl
     \tl_clear:N \l__fontspec_punctspace_adjust_tl
   }
-\cs_new:Nn \__fontspec_iv_str_to_num:Nn
+\cs_new_protected:Nn \__fontspec_ot_validate_tag:n
   {
-    \__fontspec_strip_leading_sign:Nw #1#2 \q_nil
+    \__fontspec_ot_validate_tag:w #1 \q_nil
   }
-\cs_generate_variant:Nn \__fontspec_iv_str_to_num:Nn {Nx}
-\cs_set:Npn \__fontspec_strip_leading_sign:Nw #1#2#3 \q_nil
+\cs_generate_variant:Nn \__fontspec_ot_validate_tag:n {x}
+\cs_set:Npn \__fontspec_ot_validate_tag:w #1 #2 \q_nil
   {
-    \bool_if:nTF { \str_if_eq_p:nn {#2} {+} || \str_if_eq_p:nn {#2} {-} }
-      { \__fontspec_iv_str_to_num:w #1 \q_nil #3   \c_empty_tl \c_empty_tl \q_nil }
-      { \__fontspec_iv_str_to_num:w #1 \q_nil #2#3 \c_empty_tl \c_empty_tl \q_nil }
+    \bool_if:nTF { \str_if_eq_p:nn {#1} {+} || \str_if_eq_p:nn {#1} {-} }
+      { \__fontspec_ot_validate_tag_aux:w #2   \c_empty_tl \c_empty_tl \q_nil }
+      { \__fontspec_ot_validate_tag_aux:w #1#2 \c_empty_tl \c_empty_tl \q_nil }
   }
-\cs_set:Npn \__fontspec_iv_str_to_num:w #1 \q_nil #2#3#4#5#6 \q_nil
+\cs_set:Npn \__fontspec_ot_validate_tag_aux:w #1#2#3#4#5 \q_nil
   {
-    \int_compare:nT { \tl_count:n {#6} > 2 }
-      { \__fontspec_error:nx {ot-tag-too-long} {#2#3#4#5#6} }
-
-    \int_set:Nn #1
-      {
-          `#2 * "1000000
-        + `#3 * "10000
-        + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100
-        + \ifx \c_empty_tl #5 32 \else `#5 \fi
-      }
+    \int_compare:nT { \tl_count:n {#5} > 2 }
+      { \__fontspec_error:nx {ot-tag-too-long} {#1#2#3#4#5} }
   }
 
 %%^^A%%  fontspec-code-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec>
@@ -1906,20 +1873,18 @@
     \bool_if:nTF { \tl_if_empty_p:e {#2} }
       { \prg_return_false: }
       {
-        \__fontspec_iv_str_to_num:Nx \l__fontspec_strnum_int {#2}
-        \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts #1 }
-        \int_zero:N \l_tmpa_int
-        \bool_set_false:N \l__fontspec_check_bool
-        \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int }
+        \__fontspec_ot_validate_tag:x {#2}
+        \cs_if_eq:NNTF #1 \font
+          { \tl_set:Nx \l__fontspec_tmp_tl {\curr at fontshape/\f at size} }
+          { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} }
+        \lua_now:e { fontspec.check_ot_script("\l__fontspec_tmp_tl", "#2") }
+        \bool_if:NTF \l__fontspec_check_bool
           {
-            \ifnum \XeTeXOTscripttag #1 \l_tmpa_int = \l__fontspec_strnum_int
-              \bool_set_true:N \l__fontspec_check_bool
-              \int_set:Nn \l_tmpa_int {\l_tmpb_int}
-            \else
-              \int_incr:N \l_tmpa_int
-            \fi
+            \prg_return_true:
+          }
+          {
+            \prg_return_false:
           }
-        \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
       }
       }
   }
@@ -1935,26 +1900,12 @@
     \bool_if:nTF { \tl_if_empty_p:e {#3} }
       { \prg_return_false: }
       {
-        \__fontspec_iv_str_to_num:Nx \l__fontspec_strnum_int {#2}
-        \__fontspec_iv_str_to_num:Nx \l__fontspec_script_int {#3}
-        \int_set:Nn \l__fontspec_tmpb_int
-          { \XeTeXOTcountlanguages #1 \l__fontspec_script_int }
-        \int_zero:N \l__fontspec_tmpa_int
-        \bool_set_false:N \l__fontspec_check_bool
-        \bool_until_do:nn { \int_compare_p:nNn \l__fontspec_tmpa_int = \l__fontspec_tmpb_int }
-          {
-            \int_set:Nn \l__fontspec_tmpc_int
-              { \XeTeXOTlanguagetag #1 \l__fontspec_script_int \l__fontspec_tmpa_int }
-
-            \int_compare:nNnTF \l__fontspec_tmpc_int = \l__fontspec_strnum_int
-              {
-                \bool_set_true:N \l__fontspec_check_bool
-                \int_set:Nn \l__fontspec_tmpa_int {\l__fontspec_tmpb_int}
-              }
-              {
-                \int_incr:N \l__fontspec_tmpa_int
-              }
-          }
+        \__fontspec_ot_validate_tag:x {#2}
+        \__fontspec_ot_validate_tag:x {#3}
+        \cs_if_eq:NNTF #1 \font
+          { \tl_set:Nx \l__fontspec_tmp_tl {\curr at fontshape/\f at size} }
+          { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} }
+        \__fontspec_lua_function:neee {check_ot_lang} {\l__fontspec_tmp_tl} {#2} {#3}
         \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
       }
       }
@@ -1972,28 +1923,13 @@
     \bool_if:nTF { \tl_if_empty_p:e {#3} || \tl_if_empty_p:e {#4} }
       { \prg_return_false: }
       {
-        \__fontspec_iv_str_to_num:Nx \l__fontspec_strnum_int   {#2}
-
-        \str_if_eq:eeTF {#3} {dflt}
-          { \int_zero:N \l__fontspec_language_int }
-          { \__fontspec_iv_str_to_num:Nx \l__fontspec_language_int {#3} }
-        \__fontspec_iv_str_to_num:Nx \l__fontspec_script_int   {#4}
-
-        \int_set:Nn \l_tmpb_int
-          { \XeTeXOTcountfeatures #1 \l__fontspec_script_int \l__fontspec_language_int }
-
-        \int_zero:N \l_tmpa_int
-        \bool_set_false:N \l__fontspec_check_bool
-        \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int }
-          {
-            \ifnum\XeTeXOTfeaturetag #1 \l__fontspec_script_int \l__fontspec_language_int
-                \l_tmpa_int =\l__fontspec_strnum_int
-              \bool_set_true:N \l__fontspec_check_bool
-              \int_set:Nn \l_tmpa_int {\l_tmpb_int}
-            \else
-              \int_incr:N \l_tmpa_int
-            \fi
-          }
+        \__fontspec_ot_validate_tag:x {#2}
+        \__fontspec_ot_validate_tag:x {#3}
+        \__fontspec_ot_validate_tag:x {#4}
+        \cs_if_eq:NNTF #1 \font
+          { \tl_set:Nx \l__fontspec_tmp_tl {\curr at fontshape/\f at size} }
+          { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} }
+        \__fontspec_lua_function:neeee {check_ot_feat} {\l__fontspec_tmp_tl} {#2} {#3} {#4}
         \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
       }
       }
@@ -2124,65 +2060,6 @@
 %%^^A%%  fontspec-code-graphite.dtx -- part of FONTSPEC <wspr.io/fontspec>
 
 
-\cs_new:Nn \__fontspec_define_aat_feature_group:n
-  {
-    \keys_define:nn {fontspec-aat} { #1 .multichoice: }
-  }
-\cs_new:Nn \__fontspec_define_aat_feature:nnnn
-  {
-    \keys_define:nn {fontspec-aat}
-      {
-        #1/#2 .code:n = { \__fontspec_make_AAT_feature:nn {#3}{#4} }
-      }
-  }
-
-\cs_new:Nn \__fontspec_make_AAT_feature:nn
-  {
-    \tl_if_empty:nTF {#1}
-      { \__fontspec_warning:n {aat-feature-not-exist} }
-      {
-        \exp_args:No \__fontspec_make_AAT_feature_string:NnnTF \l__fontspec_fontface_cs_tl {#1} {#2}
-          {
-            \__fontspec_update_featstr:n {\l_fontspec_feature_string_tl}
-          }
-          {
-            \__fontspec_warning:nx {aat-feature-not-exist-in-font} {#1,#2}
-          }
-      }
-  }
-\prg_new_conditional:Nnn \__fontspec_make_AAT_feature_string:Nnn {TF,T,F}
-  {
-    \tl_set:Nx \l__fontspec_tmpa_tl { \XeTeXfeaturename #1 #2 }
-    \tl_if_empty:NTF \l__fontspec_tmpa_tl
-      { \prg_return_false: }
-      {
-        \int_compare:nTF { \XeTeXisexclusivefeature #1 #2 > 0 }
-          {
-            \tl_set:Nx \l__fontspec_tmpb_tl {\XeTeXselectorname #1 #2\space #3}
-          }
-          {
-            \int_if_even:nTF {#3}
-              {
-                \tl_set:Nx \l__fontspec_tmpb_tl {\XeTeXselectorname #1 #2\space #3}
-              }
-              {
-                \tl_set:Nx \l__fontspec_tmpb_tl
-                  {
-                    \XeTeXselectorname #1 #2\space \numexpr#3-1\relax
-                  }
-                \tl_if_empty:NF \l__fontspec_tmpb_tl { \tl_put_left:Nn \l__fontspec_tmpb_tl {!} }
-              }
-          }
-
-        \tl_if_empty:NTF \l__fontspec_tmpb_tl
-          { \prg_return_false: }
-          {
-            \tl_set:Nx \l_fontspec_feature_string_tl { \l__fontspec_tmpa_tl = \l__fontspec_tmpb_tl }
-            \prg_return_true:
-          }
-     }
-  }
-
 %%^^A%%  fontspec-code-keyval.dtx -- part of FONTSPEC <wspr.io/fontspec>
 
 \clist_gset:Nn \g__fontspec_all_keyval_modules_clist
@@ -2215,7 +2092,6 @@
     \bool_set_true:N \l__fontspec_external_bool
     \tl_set:Nn \l__fontspec_font_path_tl {#1}
     \__fontspec_font_is_file:
-    \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
   }
 \aliasfontfeature{Path}{ExternalLocation}
 \__fontspec_keys_define_code:nnn {fontspec} {Path} {}
@@ -2232,40 +2108,53 @@
 \keys_define:nn {fontspec-renderer}
   {
     Renderer .choices:nn =
-      {AAT,ICU,OpenType,Graphite,Full,Basic,Node,Base,HarfBuzz,Harfbuzz}
+      {Full,Node,Basic,Base,HarfBuzz,Harfbuzz,OpenType,AAT,Graphite}
       {
-        \int_compare:nTF {\l_keys_choice_int <= 4}
+        \int_compare:nT {\l_keys_choice_int >= 5} { \bool_set_true:N \l__fontspec_harfbuzz_bool }
+
+        \tl_set:Nx \l__fontspec_mode_tl
           {
-            \tl_set:Nx \l__fontspec_renderer_tl
-              {
-                \int_case:nn \l_keys_choice_int { 1 {/AAT} 2 {/OT} 3 {/OT} 4 {/GR} }
-              }
-            \tl_gset:Nx \g__fontspec_single_feat_tl { \l__fontspec_renderer_tl }
+            \int_case:nn \l_keys_choice_int { 1 {node} 2 {node} 3 {base} 4 {base} 5 {harf} 6 {harf} 7 {harf} 8 {harf} 9 {harf}}
           }
+
+        \tl_set:Nx \l__fontspec_shaper_tl
           {
-            \__fontspec_warning:nx {only-luatex-feature} {Renderer=Full/Basic/Node/Base/HarfBuzz}
+            \int_case:nn \l_keys_choice_int { 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {ot} 8 {coretext_aat} 9 {graphite2} }
           }
-      }
+
+
+        \tl_gset:Nx \g__fontspec_single_feat_tl
+          {
+            mode=\l__fontspec_mode_tl ;
+            \tl_if_empty:NF \l__fontspec_shaper_tl { shaper=\l__fontspec_shaper_tl}
+          }
+      } ,
+
+    Renderer unknown .code:n =
+      {
+        \bool_set_true:N \l__fontspec_harfbuzz_bool
+        \__fontspec_warning:nx {unknown-renderer} {#1}
+        \tl_set:Nn \l__fontspec_mode_tl {harf}
+        \tl_set:Nn \l__fontspec_shaper_tl {#1}
+      } ,
   }
 \__fontspec_keys_define_code:nnn {fontspec-preparse} {Script}
   {
-    \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
     \tl_set:Nn \l__fontspec_script_name_tl {#1}
   }
 \__fontspec_keys_define_code:nnn {fontspec-preparse} {Language}
   {
-    \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
     \tl_set:Nn \l__fontspec_lang_name_tl {#1}
   }
 \__fontspec_keys_define_code:nnn {fontspec-preparse} {FontIndex}
   {
     \str_if_eq:eeF { \str_lowercase:f {\l__fontspec_extension_tl} } {.ttc}
       { \__fontspec_warning:n {font-index-needs-ttc} }
-  \tl_set:Nn \l__fontspec_ttc_index_tl {:#1}
+  \tl_set:Nn \l__fontspec_ttc_index_tl {(#1)}
   }
 \__fontspec_keys_define_code:nnn {fontspec} {FontIndex}
   {
-  \tl_set:Nn \l__fontspec_ttc_index_tl {:#1}
+  \tl_set:Nn \l__fontspec_ttc_index_tl {(#1)}
   }
 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {UprightFont}
   {
@@ -2541,6 +2430,7 @@
           { \__fontspec_primitive_font_set_hyphenchar:Nn \font {-1} }
       }
       {
+        \__fontspec_warning:nx {only-xetex-feature} {HyphenChar}
 
         \tl_if_single:nTF {#1}
           { \tl_set:Nn \l__fontspec_hyphenchar_tl {`#1} }
@@ -2601,13 +2491,15 @@
         \int_to_hex:n { \l__fontspec_tmp_int }
       }
   }
-\__fontspec_keys_define_code:nnn {fontspec-aat} {Mapping}
-  {
-    \tl_set:Nn \l__fontspec_mapping_tl { #1 }
-  }
 \__fontspec_keys_define_code:nnn {fontspec-opentype} {Mapping}
   {
-    \tl_set:Nn \l__fontspec_mapping_tl { #1 }
+    \str_if_eq:nnTF {#1} {tex-text}
+      {
+        \__fontspec_warning:n {no-mapping-ligtex}
+        \msg_redirect_name:nnn {fontspec} {no-mapping-ligtex} {none}
+        \keys_set:nn {fontspec-opentype} { Ligatures=TeX }
+      }
+      { \__fontspec_warning:n {no-mapping} }
   }
 \__fontspec_keys_define_code:nnn {fontspec} {Weight}
   {
@@ -2619,21 +2511,7 @@
   }
 \__fontspec_keys_define_code:nnn {fontspec} {OpticalSize}
   {
-    \bool_if:NTF \l__fontspec_ot_bool
-      {
-        \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1}
-      }
-      {
-        \bool_if:NT \l__fontspec_mm_bool
-        {
-          \__fontspec_update_featstr:n { optical size = #1 }
-        }
-      }
-    \bool_if:nT { !\l__fontspec_ot_bool && !\l__fontspec_mm_bool }
-      {
-        \bool_if:NT \l__fontspec_firsttime_bool
-        { \__fontspec_warning:nx {no-opticals} {\l_fontspec_fontname_tl} }
-      }
+    \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1}
   }
 \keys_define:nn {fontspec}
   {
@@ -2723,7 +2601,7 @@
 \__fontspec_define_opentype_feature:nnnnn {Ligatures} {ResetAll} {} {}
   {
     +dlig,-dlig,+rlig,-rlig,+liga,-liga,+dlig,-dlig,+clig,-clig,+hlig,-hlig,
-  mapping = tex-text
+  +tlig,-tlig
   }
 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Required}      {rlig} {rlig} {}
 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Common}        {liga} {liga} {}
@@ -2731,12 +2609,7 @@
 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Discretionary} {dlig} {dlig} {}
 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Contextual}    {clig} {clig} {}
 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Historic}      {hlig} {hlig} {}
-\keys_define:nn {fontspec-opentype}
-  {
-    Ligatures / TeX .code:n = { \tl_set:Nn \l__fontspec_mapping_tl {tex-text} },
-    Ligatures / TeXOff .code:n = { \tl_clear:N \l__fontspec_mapping_tl },
-    Ligatures / TeXReset .code:n = { \tl_clear:N \l__fontspec_mapping_tl },
-  }
+\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {TeX} {} {tlig} {}
 \__fontspec_define_opentype_feature_group:n {Letters}
 \__fontspec_define_opentype_feature:nnnnn   {Letters} {ResetAll} {} {}
   {
@@ -2768,6 +2641,7 @@
 \aliasfontfeatureoption {Numbers} {Monospaced} {Tabular}
 \aliasfontfeatureoption {Numbers} {Lowercase}  {OldStyle}
 \aliasfontfeatureoption {Numbers} {Uppercase}  {Lining}
+  \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Arabic} {anum} {anum} {}
 \__fontspec_define_opentype_feature_group:n  {VerticalPosition}
 \__fontspec_define_opentype_feature:nnnnn    {VerticalPosition} {ResetAll} {} {}
   {
@@ -2923,6 +2797,11 @@
           { \__fontspec_make_OT_feature:nnn {salt}{ +salt = ##1 }{} }
       }
   }
+\keys_define:nn {fontspec-opentype}
+  {
+    Alternate / Random  .code:n =
+      { \__fontspec_make_OT_feature:nnn {salt}{ +salt = random }{} } ,
+  }
 \aliasfontfeature{Alternate}{StylisticAlternates}
 \__fontspec_define_opentype_feature_group:n  {Variant}
 \keys_define:nn {fontspec-opentype}
@@ -3628,144 +3507,6 @@
 %%^^A%%  fontspec-code-feat-aat.dtx -- part of FONTSPEC <wspr.io/fontspec>
 
 
-\__fontspec_define_aat_feature_group:n {Ligatures}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {Required} {1} {0}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoRequired} {1} {1}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {Common} {1} {2}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoCommon} {1} {3}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {Rare} {1} {4}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoRare} {1} {5}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {Discretionary} {1} {4}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoDiscretionary} {1} {5}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {Logos} {1} {6}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoLogos} {1} {7}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {Rebus} {1} {8}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoRebus} {1} {9}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {Diphthong} {1} {10}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoDiphthong} {1} {11}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {Squared} {1} {12}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoSquared} {1} {13}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {AbbrevSquared} {1} {14}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoAbbrevSquared} {1} {15}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {Icelandic} {1} {32}
-\__fontspec_define_aat_feature:nnnn      {Ligatures} {NoIcelandic} {1} {33}
-\keys_define:nn {fontspec-aat}
- {
-  Ligatures / TeX .code:n =
-   {
-     \tl_set:Nn \l__fontspec_mapping_tl { tex-text }
-   }
- }
-\__fontspec_define_aat_feature_group:n {Letters}
-\__fontspec_define_aat_feature:nnnn      {Letters} {Normal} {3} {0}
-\__fontspec_define_aat_feature:nnnn      {Letters} {Uppercase} {3} {1}
-\__fontspec_define_aat_feature:nnnn      {Letters} {Lowercase} {3} {2}
-\__fontspec_define_aat_feature:nnnn      {Letters} {SmallCaps} {3} {3}
-\__fontspec_define_aat_feature:nnnn      {Letters} {InitialCaps} {3} {4}
-\__fontspec_define_aat_feature_group:n {Numbers}
-\__fontspec_define_aat_feature:nnnn      {Numbers} {Monospaced} {6} {0}
-\__fontspec_define_aat_feature:nnnn      {Numbers} {Proportional} {6} {1}
-\__fontspec_define_aat_feature:nnnn      {Numbers} {Lowercase} {21} {0}
-\__fontspec_define_aat_feature:nnnn      {Numbers} {OldStyle} {21} {0}
-\__fontspec_define_aat_feature:nnnn      {Numbers} {Uppercase} {21} {1}
-\__fontspec_define_aat_feature:nnnn      {Numbers} {Lining} {21} {1}
-\__fontspec_define_aat_feature:nnnn      {Numbers} {SlashedZero} {14} {5}
-\__fontspec_define_aat_feature:nnnn      {Numbers} {NoSlashedZero} {14} {4}
-\__fontspec_define_aat_feature_group:n   {Contextuals}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {WordInitial} {8} {0}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {NoWordInitial} {8} {1}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {WordFinal} {8} {2}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {NoWordFinal} {8} {3}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {LineInitial} {8} {4}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {NoLineInitial} {8} {5}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {LineFinal} {8} {6}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {NoLineFinal} {8} {7}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {Inner} {8} {8}
-\__fontspec_define_aat_feature:nnnn      {Contextuals} {NoInner} {8} {9}
-\__fontspec_define_aat_feature_group:n {Diacritics}
-\__fontspec_define_aat_feature:nnnn      {Diacritics} {Show} {9} {0}
-\__fontspec_define_aat_feature:nnnn      {Diacritics} {Hide} {9} {1}
-\__fontspec_define_aat_feature:nnnn      {Diacritics} {Decompose} {9} {2}
-\__fontspec_define_aat_feature_group:n {VerticalPosition}
-\__fontspec_define_aat_feature:nnnn      {VerticalPosition} {Normal} {10} {0}
-\__fontspec_define_aat_feature:nnnn      {VerticalPosition} {Superior} {10} {1}
-\__fontspec_define_aat_feature:nnnn      {VerticalPosition} {Inferior} {10} {2}
-\__fontspec_define_aat_feature:nnnn      {VerticalPosition} {Ordinal} {10} {3}
-\__fontspec_define_aat_feature_group:n {Fractions}
-\__fontspec_define_aat_feature:nnnn      {Fractions} {On} {11} {1}
-\__fontspec_define_aat_feature:nnnn      {Fractions} {Off} {11} {0}
-\__fontspec_define_aat_feature:nnnn      {Fractions} {Diagonal} {11} {2}
-\__fontspec_define_aat_feature_group:n  { Alternate }
-\keys_define:nn {fontspec-aat}
-  {
-    Alternate .default:n = {0} ,
-    Alternate / unknown .code:n =
-      {
-        \clist_map_inline:nn {#1}
-          {
-            \__fontspec_make_AAT_feature:nn {17}{##1}
-          }
-      }
-  }
-\__fontspec_define_aat_feature_group:n  {Variant}
-\keys_define:nn {fontspec-aat}
-  {
-    Variant .default:n = {0} ,
-    Variant / unknown .code:n =
-      {
-        \clist_map_inline:nn {#1}
-          { \__fontspec_make_AAT_feature:nn {18}{##1} }
-      }
-  }
-\aliasfontfeature{Variant}{StylisticSet}
-\__fontspec_define_aat_feature_group:n  {Vertical}
-\keys_define:nn {fontspec-aat}
-  {
-    Vertical .choice: ,
-    Vertical / RotatedGlyphs .code:n =
-      {
-        \__fontspec_update_featstr:n {vertical}
-      }
-  }
-\__fontspec_define_aat_feature_group:n {Style}
-\__fontspec_define_aat_feature:nnnn      {Style} {Italic} {32} {2}
-\__fontspec_define_aat_feature:nnnn      {Style} {Ruby} {28} {2}
-\__fontspec_define_aat_feature:nnnn      {Style} {Display} {19} {1}
-\__fontspec_define_aat_feature:nnnn      {Style} {Engraved} {19} {2}
-\__fontspec_define_aat_feature:nnnn      {Style} {Titling} {19} {4}
-\__fontspec_define_aat_feature:nnnn      {Style} {TitlingCaps} {19} {4} % backwards compat
-\__fontspec_define_aat_feature:nnnn      {Style} {TallCaps} {19} {5}
-\__fontspec_define_aat_feature_group:n {CJKShape}
-\__fontspec_define_aat_feature:nnnn      {CJKShape} {Traditional} {20} {0}
-\__fontspec_define_aat_feature:nnnn      {CJKShape} {Simplified} {20} {1}
-\__fontspec_define_aat_feature:nnnn      {CJKShape} {JIS1978} {20} {2}
-\__fontspec_define_aat_feature:nnnn      {CJKShape} {JIS1983} {20} {3}
-\__fontspec_define_aat_feature:nnnn      {CJKShape} {JIS1990} {20} {4}
-\__fontspec_define_aat_feature:nnnn      {CJKShape} {Expert} {20} {10}
-\__fontspec_define_aat_feature:nnnn      {CJKShape} {NLC} {20} {13}
-\__fontspec_define_aat_feature_group:n {CharacterWidth}
-\__fontspec_define_aat_feature:nnnn      {CharacterWidth} {Proportional} {22} {0}
-\__fontspec_define_aat_feature:nnnn      {CharacterWidth} {Full} {22} {1}
-\__fontspec_define_aat_feature:nnnn      {CharacterWidth} {Half} {22} {2}
-\__fontspec_define_aat_feature:nnnn      {CharacterWidth} {Third} {22} {3}
-\__fontspec_define_aat_feature:nnnn      {CharacterWidth} {Quarter} {22} {4}
-\__fontspec_define_aat_feature:nnnn      {CharacterWidth} {AlternateProportional} {22} {5}
-\__fontspec_define_aat_feature:nnnn      {CharacterWidth} {AlternateHalf} {22} {6}
-\__fontspec_define_aat_feature:nnnn      {CharacterWidth} {Default} {22} {7}
-\__fontspec_define_aat_feature_group:n {Annotation}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {Off} {24} {0}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {Box} {24} {1}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {RoundedBox} {24} {2}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {Circle} {24} {3}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {BlackCircle} {24} {4}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {Parenthesis} {24} {5}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {Period} {24} {6}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {RomanNumerals} {24} {7}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {Diamond} {24} {8}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {BlackSquare} {24} {9}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {BlackRoundSquare} {24} {10}
-\__fontspec_define_aat_feature:nnnn      {Annotation} {DoubleCircle} {24} {11}
-
 %%^^A%%  fontspec-code-enc.dtx -- part of FONTSPEC <wspr.io/fontspec>
 
 \DeclareDocumentCommand \EncodingCommand { m O{} O{} m }
diff --git a/supporttexmf/tex/latex/fontspec/fontspec.lua b/supporttexmf/tex/latex/fontspec/fontspec.lua
new file mode 100644
index 0000000..8579760
--- /dev/null
+++ b/supporttexmf/tex/latex/fontspec/fontspec.lua
@@ -0,0 +1,83 @@
+-- 
+--  This is file `fontspec.lua',
+--  generated with the docstrip utility.
+-- 
+--  The original source files were:
+-- 
+--  fontspec.dtx  (with options: `lua')
+--  fontspec-lua.dtx  (with options: `lua')
+--  ------------------------------------------------
+--  The FONTSPEC package  <wspr.io/fontspec>
+--  ------------------------------------------------
+--  Copyright  2004-2017  Will Robertson, LPPL "maintainer"
+--  Copyright  2009-2013  Khaled Hosny
+--  ------------------------------------------------
+--  This package is free software and may be redistributed and/or modified under
+--  the conditions of the LaTeX Project Public License, version 1.3c or higher
+--  (your choice): <http://www.latex-project.org/lppl/>.
+--  ------------------------------------------------
+-- ^^A%%  fontspec.dtx -- part of FONTSPEC <wspr.io/fontspec>
+-- ^^A%%  Metadata for the package, including files and versioning
+
+fontspec          = fontspec or {}
+local fontspec    = fontspec
+fontspec.module   = {
+    name          = "fontspec",
+    version       = "2.7g",
+    date          = "2020/01/26",
+    description   = "Font selection for XeLaTeX and LuaLaTeX",
+    author        = "Khaled Hosny, Philipp Gesang, Will Robertson",
+    copyright     = "Khaled Hosny, Philipp Gesang, Will Robertson",
+    license       = "LPPL v1.3c"
+}
+
+-- ^^A%%  fontspec-lua.dtx -- part of FONTSPEC <wspr.io/fontspec>
+local err, warn, info, log = luatexbase.provides_module(fontspec.module)
+fontspec.log     = log  or (function (s) luatexbase.module_info("fontspec", s)    end)
+fontspec.warning = warn or (function (s) luatexbase.module_warning("fontspec", s) end)
+fontspec.error   = err  or (function (s) luatexbase.module_error("fontspec", s)   end)
+local latex
+if luatexbase.registernumber then
+    latex = luatexbase.registernumber("catcodetable at latex")
+else
+    latex = luatexbase.catcodetables.CatcodeTableLaTeX
+end
+local function tempswatrue()  tex.sprint(latex,[[\FontspecSetCheckBoolTrue ]]) end
+local function tempswafalse() tex.sprint(latex,[[\FontspecSetCheckBoolFalse]]) end
+function fontspec.check_ot_script(fnt, script)
+    if luaotfload.aux.provides_script(font.id(fnt), script) then
+        tempswatrue()
+    else
+        tempswafalse()
+    end
+end
+function fontspec.check_ot_lang(fnt, lang, script)
+    if luaotfload.aux.provides_language(font.id(fnt), script, lang) then
+        tempswatrue()
+    else
+        tempswafalse()
+    end
+end
+function fontspec.check_ot_feat(fnt, feat, lang, script)
+    for _, f in ipairs { "+trep", "+tlig", "+anum" } do
+        if feat == f then
+            tempswatrue()
+            return
+        end
+    end
+    if luaotfload.aux.provides_feature(font.id(fnt), script, lang, feat) then
+        tempswatrue()
+    else
+        tempswafalse()
+    end
+end
+function fontspec.mathfontdimen(fnt, str)
+    local mathdimens = luaotfload.aux.get_math_dimension(fnt, str)
+    if mathdimens then
+        tex.sprint(-2,mathdimens)
+        tex.sprint(-2,"sp")
+    else
+        tex.sprint(-2,"0pt")
+    end
+end
+
diff --git a/supporttexmf/tex/latex/fontspec/fontspec.sty b/supporttexmf/tex/latex/fontspec/fontspec.sty
new file mode 100644
index 0000000..325fdf2
--- /dev/null
+++ b/supporttexmf/tex/latex/fontspec/fontspec.sty
@@ -0,0 +1,45 @@
+%%
+%% This is file `fontspec.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fontspec.dtx  (with options: `fontspec,load')
+%% fontspec-code-load.dtx  (with options: `fontspec,load')
+%% ------------------------------------------------
+%% The FONTSPEC package  <wspr.io/fontspec>
+%% ------------------------------------------------
+%% Copyright  2004-2017  Will Robertson, LPPL "maintainer"
+%% Copyright  2009-2013  Khaled Hosny
+%% ------------------------------------------------
+%% This package is free software and may be redistributed and/or modified under
+%% the conditions of the LaTeX Project Public License, version 1.3c or higher
+%% (your choice): <http://www.latex-project.org/lppl/>.
+%% ------------------------------------------------
+%%^^A%%  fontspec.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%%^^A%%  Metadata for the package, including files and versioning
+
+\RequirePackage{xparse}
+\ProvidesExplPackage{fontspec}%
+  {2020/01/26}{2.7g}{Font selection for XeLaTeX and LuaLaTeX}
+
+%%^^A%%  fontspec-code-load.dtx -- part of FONTSPEC <wspr.io/fontspec>
+\sys_if_engine_luatex:T
+  {
+    \RequirePackage{luaotfload}
+    \lua_now:e{require("fontspec")}
+    \RequirePackageWithOptions{fontspec-luatex}
+    \endinput
+  }
+\sys_if_engine_xetex:T
+  {
+    \RequirePackageWithOptions{fontspec-xetex}
+    \endinput
+  }
+\msg_new:nnn {fontspec} {cannot-use-pdftex}
+  {
+    The~ fontspec~ package~ requires~ either~ XeTeX~ or~ LuaTeX.\\\\
+    You~ must~ change~ your~ typesetting~ engine~ to,~ e.g.,~
+    "xelatex"~ or~ "lualatex" instead~ of~ "latex"~ or~ "pdflatex".
+  }
+\msg_fatal:nn {fontspec} {cannot-use-pdftex}





More information about the latex3-commits mailing list.