texlive[71237] Master/texmf-dist: fontspec (11may24)

commits+karl at tug.org commits+karl at tug.org
Sat May 11 22:36:44 CEST 2024


Revision: 71237
          https://tug.org/svn/texlive?view=revision&revision=71237
Author:   karl
Date:     2024-05-11 22:36:43 +0200 (Sat, 11 May 2024)
Log Message:
-----------
fontspec (11may24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/fontspec/CHANGES.md
    trunk/Master/texmf-dist/doc/latex/fontspec/fontspec-code.pdf
    trunk/Master/texmf-dist/doc/latex/fontspec/fontspec.pdf
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-api.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-opentype.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx
    trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty
    trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
    trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua
    trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.sty

Modified: trunk/Master/texmf-dist/doc/latex/fontspec/CHANGES.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fontspec/CHANGES.md	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/doc/latex/fontspec/CHANGES.md	2024-05-11 20:36:43 UTC (rev 71237)
@@ -1,6 +1,19 @@
 Change history
 ==============
 
+## v2.9e (2024/05/11)
+
+  * Fix regression with automatic detection and selection of small caps when the font
+    script or language was requested but not found. (#517)
+
+  * Add additional tests to check against regressions. (#516, #518)
+  
+  * Improve message in log file when defining a font without small caps.
+  
+  * Demote warnings when Script or Language are requested but not found to the log file
+    instead of the console. (#421)
+
+
 ## v2.9d (2024/05/07)
 
   * Now that `Script` and `Language` are retained even if the font doesn't support them,

Modified: trunk/Master/texmf-dist/doc/latex/fontspec/fontspec-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/fontspec/fontspec.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-api.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-api.dtx	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-api.dtx	2024-05-11 20:36:43 UTC (rev 71237)
@@ -233,7 +233,7 @@
             \prop_get:cnN {g_@@_fontinfo_ \f at family _prop} {script-tag}  \l_@@_script_tl
             \prop_get:cnN {g_@@_fontinfo_ \f at family _prop} {lang-tag}    \l_@@_lang_tl
 
-            \@@_check_ot_feat:NnTF \font {#1} {\prg_return_true:} {\prg_return_false:}
+            \@@_check_ot_feat:NnnnTF \font {#1} {\l_@@_lang_tl} {\l_@@_script_tl} {\prg_return_true:} {\prg_return_false:}
           }
           {
             \prg_return_false:

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx	2024-05-11 20:36:43 UTC (rev 71237)
@@ -476,7 +476,7 @@
         \bool_if:NF \l_@@_scriptlang_exist_bool
           {
 %<debug>\typeout{Script~not~found!}
-            \@@_warning:nxx {no-script} {\l_fontspec_fontname_tl} {#1}
+            \@@_info:nxx {script-not-exist} {\l_fontspec_fontname_tl} {#1}
             \clist_set:Nn \l_tmpa_clist {#2}
             \clist_get:NN \l_tmpa_clist \l_@@_script_tl
             \exp_args:Noo \@@_check_script:NnF \l_@@_fontface_cs_tl \l_@@_script_tl
@@ -489,38 +489,43 @@
       }
     }
   }
-\cs_new:Nn \fontspec_default_script:nn
+%    \end{macrocode}
+% When script is not explicitly requested, use this list:
+%    \begin{macrocode}
+\clist_new:N \g_@@_default_scripts_clist
+\cs_new:Nn \fontspec_default_script:n
   {
-    \keys_define:nn {fontspec-opentype} { Script / #1 .code:n =
+    \clist_gset:Nn \g_@@_default_scripts_clist {#1}
+  }
+\fontspec_default_script:n {latn,DFLT}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\keys_define:nn {fontspec-opentype} { Script / CustomDefault .code:n =
+  {
+%<debug>\typeout{Trying~CustomDefault~Script}
+    \bool_set_false:N \l_@@_scriptlang_exist_bool
+    \clist_map_inline:Nn \g_@@_default_scripts_clist
       {
-%<debug>\typeout{Trying~[Script=#1:#2]}
-        \bool_set_false:N \l_@@_scriptlang_exist_bool
-        \clist_map_inline:nn {#2}
+        \exp_args:No \@@_check_script:NnT \l_@@_fontface_cs_tl {##1}
           {
-            \exp_args:No \@@_check_script:NnT \l_@@_fontface_cs_tl {####1}
-              {
-%<debug>\typeout{Script~tag~found:~####1}
-                \tl_set:Nn \l_@@_script_name_tl {#1}
-                \tl_set:Nn \l_@@_script_tl {####1}
-                \int_set:Nn \l_@@_script_int {\l_@@_strnum_int}
-                \bool_set_true:N \l_@@_scriptlang_exist_bool
-                \tl_gset:Nx \g_@@_single_feat_tl { script=####1 }
-                \clist_map_break:
-              }
+%<debug>\typeout{Script~tag~found:~##1}
+            \tl_set:Nn \l_@@_script_name_tl {Default (##1)}
+            \tl_set:Nn \l_@@_script_tl {##1}
+            \int_set:Nn \l_@@_script_int {\l_@@_strnum_int}
+            \bool_set_true:N \l_@@_scriptlang_exist_bool
+            \tl_gset:Nx \g_@@_single_feat_tl { script=##1 }
+            \clist_map_break:
           }
-        \bool_if:NF \l_@@_scriptlang_exist_bool
-          {
+      }
+    \bool_if:NF \l_@@_scriptlang_exist_bool
+      {
 %<debug>\typeout{Script~not~found!}
-            \tl_clear:N \l_@@_script_name_tl
-          }
+        \tl_clear:N \l_@@_script_name_tl
       }
-    }
   }
+}
 %    \end{macrocode}
-% When script is not explicitly requested, use this list:
-%    \begin{macrocode}
-\fontspec_default_script:nn {CustomDefault} {latn,DFLT}
-%    \end{macrocode}
 %
 %
 % \subsection{Language}
@@ -553,7 +558,7 @@
         \bool_if:NF \l_@@_scriptlang_exist_bool
           {
 %<debug>\typeout{Lang~not~found!}
-            \@@_warning:nx {language-not-exist} {#1}
+            \@@_info:nx {language-not-exist} {#1}
             \clist_set:Nn \l_tmpa_clist {#2}
             \clist_get:NN \l_tmpa_clist \l_@@_lang_tl
             \exp_args:Noo \@@_check_lang:NnF \l_@@_fontface_cs_tl \l_@@_lang_tl
@@ -574,6 +579,12 @@
 % language is hardcoded to have a zero value,
 % although this might be some \XeTeX-specific thing.
 %    \begin{macrocode}
+\clist_new:N \g_@@_default_langs_clist
+\cs_new:Nn \fontspec_default_lang:n
+  {
+    \clist_gset:Nn \g_@@_default_langs_clist {#1}
+  }
+\fontspec_default_lang:n {dflt}
 \@@_keys_define_code:nnn {fontspec-opentype} { Language / Default }
   {
     \tl_set:Nn \l_@@_lang_tl {dflt}

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx	2024-05-11 20:36:43 UTC (rev 71237)
@@ -787,7 +787,7 @@
 
     % "normal"
     \@@_load_fontname:Nn \l_fontspec_fontname_tl {\l_@@_sizedfont_tl}
-    \@@_setup_nfss:Nnnn \l_@@_nfss_tl {#1} {\l_@@_sizing_leftover_clist} {}
+    \@@_setup_nfss:Nn \l_@@_nfss_tl { #1 , \l_@@_sizing_leftover_clist }
 %<debug>    \typeout{===~ sized~ font:~ \l_@@_sizedfont_tl}
 
     % small caps
@@ -812,20 +812,22 @@
 
     \bool_if:NF \l_@@_nosc_bool
       {
-        \@@_setup_nfss:Nnnn \l_@@_nfss_sc_tl
-          {#1} {\l_@@_sizing_leftover_clist} {\l_@@_fontfeat_curr_clist}
+        \@@_setup_nfss:Nn \l_@@_nfss_sc_tl
+          {#1 , \l_@@_sizing_leftover_clist , \l_@@_fontfeat_curr_clist}
       }
   }
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_setup_nfss:Nnnn}
+% \begin{macro}{\@@_setup_nfss:Nn}
 %    \begin{macrocode}
-\cs_new:Nn \@@_setup_nfss:Nnnn
+\cs_new:Nn \@@_setup_nfss:Nn
   {
 %<debug>\typeout{====~Setup~NFSS~shape:~<\l_@@_size_tl>~\l_fontspec_fontname_tl}
+%<debug>\typeout{====~Requested~features:~#2}
 
-    \@@_get_features:n { #2 , #3 , #4 }
+    \@@_get_features:n { #2 }
+
 %<debug>\typeout{====~Gathered~features:~\g_@@_rawfeatures_sclist \@@_get_variations:}
 
     \tl_if_empty:NF \l_@@_scale_tl
@@ -976,22 +978,25 @@
         } (#1/#2)~
         with~ NFSS~ spec.:~
         \l_@@_nfss_tl
-        \exp_not:n { \\ }
-        -~ \exp_not:N \str_case:nn { #1 / \@@_combo_sc_shape:n {#2} }
-        {
-          {\mddefault/\scdefault} {'small~ caps'~}
-          {\bfdefault/\scdefault} {'bold~ small~ caps'~}
-          {\mddefault/\scitdefault} {'italic~ small~ caps'~}
-          {\bfdefault/\scitdefault} {'bold~ italic~ small~ caps'~}
-          {\mddefault/\scsldefault} {'slanted~ small~ caps'~}
-          {\bfdefault/\scsldefault} {'bold~ slanted~ small~ caps'~}
-        }~( #1 / \@@_combo_sc_shape:n {#2} )~
-        with~ NFSS~ spec.:~
-        \l_@@_nfss_sc_tl
-        \tl_if_empty:fF {\l_@@_postadjust_tl}
+        \tl_if_empty:NF \l_@@_nfss_sc_tl
           {
-          \exp_not:N \\ and~ font~ adjustment~ code:
-          \exp_not:N \\ \l_@@_postadjust_tl
+            \exp_not:n { \\ }
+            -~ \exp_not:N \str_case:nn { #1 / \@@_combo_sc_shape:n {#2} }
+            {
+              {\mddefault/\scdefault} {'small~ caps'~}
+              {\bfdefault/\scdefault} {'bold~ small~ caps'~}
+              {\mddefault/\scitdefault} {'italic~ small~ caps'~}
+              {\bfdefault/\scitdefault} {'bold~ italic~ small~ caps'~}
+              {\mddefault/\scsldefault} {'slanted~ small~ caps'~}
+              {\bfdefault/\scsldefault} {'bold~ slanted~ small~ caps'~}
+            }~( #1 / \@@_combo_sc_shape:n {#2} )~
+            with~ NFSS~ spec.:~
+            \l_@@_nfss_sc_tl
+            \tl_if_empty:fF {\l_@@_postadjust_tl}
+              {
+              \exp_not:N \\ and~ font~ adjustment~ code:
+              \exp_not:N \\ \l_@@_postadjust_tl
+              }
           }
       }
   }
@@ -1028,16 +1033,30 @@
 % \end{macro}
 %
 %
+% \begin{macro}{\@@_make_smallcaps:TF}
 % \begin{macro}{\@@_make_ot_smallcaps:TF}
 % \label{mac:makesmallcaps}
 % This macro checks if the font contains small caps.
 %    \begin{macrocode}
-%<LU>\cs_new:Nn \@@_make_smallcaps:TF
-%<XE>\cs_new:Nn \@@_make_ot_smallcaps:TF
+\cs_new:Nn \@@_make_ot_smallcaps:TF
   {
-    \exp_args:No \@@_check_ot_feat:NnTF \l_@@_fontface_cs_tl {smcp} {#1} {#2}
+    \bool_set_false:N \l_@@_tmpa_bool
+    \exp_args:Ne \clist_map_inline:nn { \l_@@_lang_tl , \g_@@_default_langs_clist }
+      {
+        \exp_args:Ne \clist_map_inline:nn { \l_@@_script_tl , \g_@@_default_scripts_clist }
+          {
+            \exp_args:No \@@_check_ot_feat:NnnnT \l_@@_fontface_cs_tl {smcp} {##1} {####1}
+              {
+%<debug>\typeout{SMCP~found~for~script/lang: ####1/##1~-~assuming~okay}
+                \bool_set_true:N \l_@@_tmpa_bool
+                \clist_map_break:
+              }
+          }
+      }
+    \bool_if:NTF \l_@@_tmpa_bool {#1} {#2}
   }
-%<*XE>
+%    \end{macrocode}
+%    \begin{macrocode}
 \cs_new:Nn \@@_make_smallcaps:TF
   {
     \bool_if:NTF \l_@@_ot_bool
@@ -1050,9 +1069,9 @@
           }
       }
   }
-%</XE>
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\@@_update_featstr:n}
 % \cmd{\g_@@_rawfeatures_sclist} is the string used to define the list of specific

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx	2024-05-11 20:36:43 UTC (rev 71237)
@@ -153,6 +153,12 @@
  {
   '#1' doesn't appear to have an Optical Size axis.
  }
+\@@_msg_new:nn {script-not-exist}
+ {
+  Script '#2' not explicitly supported within font '#1'.
+  Check the typeset output, and if it is okay then ignore this warning.
+  Otherwise a different font should be chosen.
+ }
 \@@_msg_new:nn {language-not-exist}
  {
   Language '#1' not explicitly supported
@@ -232,12 +238,6 @@
  {
   Adjusting the maths setup (use [no-math] to avoid this).
  }
-\@@_msg_new:nn {no-script}
- {
-  Script '#2' not explicitly supported within font '#1'.
-  Check the typeset output, and if it is okay then ignore this warning.
-  Otherwise a different font should be chosen.
- }
 \@@_msg_new:nn {opa-twice}
  {
   Opacity set twice, in both Colour and Opacity.\\

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-opentype.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-opentype.dtx	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-opentype.dtx	2024-05-11 20:36:43 UTC (rev 71237)
@@ -258,7 +258,6 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\@@_check_ot_feat:NnTF}
 % \begin{macro}{\@@_check_ot_feat:NnnnTF}
 % This macro takes an OpenType feature tag and checks if it exists in the current
 % font/script/language.
@@ -267,16 +266,8 @@
 % number corresponding to `|latn|'. The language used is \cmd\l_@@_language_int,
 % by default |0|, the `default language'.
 %    \begin{macrocode}
-\prg_new_conditional:Nnn \@@_check_ot_feat:Nn {TF,F}
+\prg_new_conditional:Nnn \@@_check_ot_feat:Nnnn {TF,T,F}
   {
-    \@@_check_ot_feat:NnnnTF #1 {#2} {\l_@@_lang_tl} {\l_@@_script_tl}
-      {\prg_return_true:} {\prg_return_false:}
-  }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\prg_new_conditional:Nnn \@@_check_ot_feat:Nnnn {TF,F}
-  {
     \bool_if:NTF \l_@@_never_check_bool
       { \prg_return_true: }
       {
@@ -325,7 +316,6 @@
   }
 %    \end{macrocode}
 % \end{macro}
-% \end{macro}
 %
 % \subsection{OpenType feature information}
 %

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx	2024-05-11 20:36:43 UTC (rev 71237)
@@ -70,7 +70,7 @@
 \ProvidesExplFile{fontspec.dtx}
 %</dtx>
 %<*fontspec>
-  {2024/05/07}{2.9d}{Font selection for XeLaTeX and LuaLaTeX}
+  {2024/05/11}{2.9e}{Font selection for XeLaTeX and LuaLaTeX}
 %</fontspec>
 %    \end{macrocode}
 %
@@ -89,8 +89,8 @@
 %<lua>local fontspec    = fontspec
 %<lua>fontspec.module   = {
 %<lua>    name          = "fontspec",
-%<lua>    version       = "2.9d",
-%<lua>    date          = "2024/05/07",
+%<lua>    version       = "2.9e",
+%<lua>    date          = "2024/05/11",
 %<lua>    description   = "Font selection for XeLaTeX and LuaLaTeX",
 %<lua>    author        = "Khaled Hosny, Philipp Gesang, Will Robertson",
 %<lua>    copyright     = "Khaled Hosny, Philipp Gesang, Will Robertson",

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty	2024-05-11 20:36:43 UTC (rev 71237)
@@ -40,7 +40,7 @@
 
 \RequirePackage{xparse}
 \ProvidesExplPackage{fontspec-luatex}%
-  {2024/05/07}{2.9d}{Font selection for XeLaTeX and LuaLaTeX}
+  {2024/05/11}{2.9e}{Font selection for XeLaTeX and LuaLaTeX}
 
 %%^^A%%  fontspec-code-load.dtx -- part of FONTSPEC <latex3.github.io/fontspec>
 %%^^A%%  fontspec-code-vars.dtx -- part of FONTSPEC <latex3.github.io/fontspec>
@@ -338,6 +338,12 @@
  {
   '#1' doesn't appear to have an Optical Size axis.
  }
+\__fontspec_msg_new:nn {script-not-exist}
+ {
+  Script '#2' not explicitly supported within font '#1'.
+  Check the typeset output, and if it is okay then ignore this warning.
+  Otherwise a different font should be chosen.
+ }
 \__fontspec_msg_new:nn {language-not-exist}
  {
   Language '#1' not explicitly supported
@@ -397,12 +403,6 @@
  {
   Adjusting the maths setup (use [no-math] to avoid this).
  }
-\__fontspec_msg_new:nn {no-script}
- {
-  Script '#2' not explicitly supported within font '#1'.
-  Check the typeset output, and if it is okay then ignore this warning.
-  Otherwise a different font should be chosen.
- }
 \__fontspec_msg_new:nn {opa-twice}
  {
   Opacity set twice, in both Colour and Opacity.\\
@@ -1007,7 +1007,7 @@
             \prop_get:cnN {g__fontspec_fontinfo_ \f at family _prop} {script-tag}  \l__fontspec_script_tl
             \prop_get:cnN {g__fontspec_fontinfo_ \f at family _prop} {lang-tag}    \l__fontspec_lang_tl
 
-            \__fontspec_check_ot_feat:NnTF \font {#1} {\prg_return_true:} {\prg_return_false:}
+            \__fontspec_check_ot_feat:NnnnTF \font {#1} {\l__fontspec_lang_tl} {\l__fontspec_script_tl} {\prg_return_true:} {\prg_return_false:}
           }
           {
             \prg_return_false:
@@ -1581,7 +1581,7 @@
 
     % "normal"
     \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl}
-    \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#1} {\l__fontspec_sizing_leftover_clist} {}
+    \__fontspec_setup_nfss:Nn \l__fontspec_nfss_tl { #1 , \l__fontspec_sizing_leftover_clist }
 
     % small caps
     \clist_set_eq:NN \l__fontspec_fontfeat_curr_clist \l__fontspec_fontfeat_sc_clist
@@ -1603,15 +1603,16 @@
 
     \bool_if:NF \l__fontspec_nosc_bool
       {
-        \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl
-          {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist}
+        \__fontspec_setup_nfss:Nn \l__fontspec_nfss_sc_tl
+          {#1 , \l__fontspec_sizing_leftover_clist , \l__fontspec_fontfeat_curr_clist}
       }
   }
-\cs_new:Nn \__fontspec_setup_nfss:Nnnn
+\cs_new:Nn \__fontspec_setup_nfss:Nn
   {
 
-    \__fontspec_get_features:n { #2 , #3 , #4 }
+    \__fontspec_get_features:n { #2 }
 
+
     \tl_if_empty:NF \l__fontspec_scale_tl
       {
         \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] }
@@ -1720,22 +1721,25 @@
         } (#1/#2)~
         with~ NFSS~ spec.:~
         \l__fontspec_nfss_tl
-        \exp_not:n { \\ }
-        -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} }
-        {
-          {\mddefault/\scdefault} {'small~ caps'~}
-          {\bfdefault/\scdefault} {'bold~ small~ caps'~}
-          {\mddefault/\scitdefault} {'italic~ small~ caps'~}
-          {\bfdefault/\scitdefault} {'bold~ italic~ small~ caps'~}
-          {\mddefault/\scsldefault} {'slanted~ small~ caps'~}
-          {\bfdefault/\scsldefault} {'bold~ slanted~ small~ caps'~}
-        }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~
-        with~ NFSS~ spec.:~
-        \l__fontspec_nfss_sc_tl
-        \tl_if_empty:fF {\l__fontspec_postadjust_tl}
+        \tl_if_empty:NF \l__fontspec_nfss_sc_tl
           {
-          \exp_not:N \\ and~ font~ adjustment~ code:
-          \exp_not:N \\ \l__fontspec_postadjust_tl
+            \exp_not:n { \\ }
+            -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} }
+            {
+              {\mddefault/\scdefault} {'small~ caps'~}
+              {\bfdefault/\scdefault} {'bold~ small~ caps'~}
+              {\mddefault/\scitdefault} {'italic~ small~ caps'~}
+              {\bfdefault/\scitdefault} {'bold~ italic~ small~ caps'~}
+              {\mddefault/\scsldefault} {'slanted~ small~ caps'~}
+              {\bfdefault/\scsldefault} {'bold~ slanted~ small~ caps'~}
+            }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~
+            with~ NFSS~ spec.:~
+            \l__fontspec_nfss_sc_tl
+            \tl_if_empty:fF {\l__fontspec_postadjust_tl}
+              {
+              \exp_not:N \\ and~ font~ adjustment~ code:
+              \exp_not:N \\ \l__fontspec_postadjust_tl
+              }
           }
       }
   }
@@ -1746,9 +1750,33 @@
     \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
+  {
+    \bool_set_false:N \l__fontspec_tmpa_bool
+    \exp_args:Ne \clist_map_inline:nn { \l__fontspec_lang_tl , \g__fontspec_default_langs_clist }
+      {
+        \exp_args:Ne \clist_map_inline:nn { \l__fontspec_script_tl , \g__fontspec_default_scripts_clist }
+          {
+            \exp_args:No \__fontspec_check_ot_feat:NnnnT \l__fontspec_fontface_cs_tl {smcp} {##1} {####1}
+              {
+                \bool_set_true:N \l__fontspec_tmpa_bool
+                \clist_map_break:
+              }
+          }
+      }
+    \bool_if:NTF \l__fontspec_tmpa_bool {#1} {#2}
+  }
 \cs_new:Nn \__fontspec_make_smallcaps:TF
   {
-    \exp_args:No \__fontspec_check_ot_feat:NnTF \l__fontspec_fontface_cs_tl {smcp} {#1} {#2}
+    \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}
+          }
+      }
   }
 \cs_new:Nn \__fontspec_update_featstr:n
   {
@@ -1946,13 +1974,8 @@
       }
       }
   }
-\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nn {TF,F}
+\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,T,F}
   {
-    \__fontspec_check_ot_feat:NnnnTF #1 {#2} {\l__fontspec_lang_tl} {\l__fontspec_script_tl}
-      {\prg_return_true:} {\prg_return_false:}
-  }
-\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,F}
-  {
     \bool_if:NTF \l__fontspec_never_check_bool
       { \prg_return_true: }
       {
@@ -2975,7 +2998,7 @@
           }
         \bool_if:NF \l__fontspec_scriptlang_exist_bool
           {
-            \__fontspec_warning:nxx {no-script} {\l_fontspec_fontname_tl} {#1}
+            \__fontspec_info:nxx {script-not-exist} {\l_fontspec_fontname_tl} {#1}
             \clist_set:Nn \l_tmpa_clist {#2}
             \clist_get:NN \l_tmpa_clist \l__fontspec_script_tl
             \exp_args:Noo \__fontspec_check_script:NnF \l__fontspec_fontface_cs_tl \l__fontspec_script_tl
@@ -2988,31 +3011,33 @@
       }
     }
   }
-\cs_new:Nn \fontspec_default_script:nn
+\clist_new:N \g__fontspec_default_scripts_clist
+\cs_new:Nn \fontspec_default_script:n
   {
-    \keys_define:nn {fontspec-opentype} { Script / #1 .code:n =
+    \clist_gset:Nn \g__fontspec_default_scripts_clist {#1}
+  }
+\fontspec_default_script:n {latn,DFLT}
+\keys_define:nn {fontspec-opentype} { Script / CustomDefault .code:n =
+  {
+    \bool_set_false:N \l__fontspec_scriptlang_exist_bool
+    \clist_map_inline:Nn \g__fontspec_default_scripts_clist
       {
-        \bool_set_false:N \l__fontspec_scriptlang_exist_bool
-        \clist_map_inline:nn {#2}
+        \exp_args:No \__fontspec_check_script:NnT \l__fontspec_fontface_cs_tl {##1}
           {
-            \exp_args:No \__fontspec_check_script:NnT \l__fontspec_fontface_cs_tl {####1}
-              {
-                \tl_set:Nn \l__fontspec_script_name_tl {#1}
-                \tl_set:Nn \l__fontspec_script_tl {####1}
-                \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int}
-                \bool_set_true:N \l__fontspec_scriptlang_exist_bool
-                \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 }
-                \clist_map_break:
-              }
+            \tl_set:Nn \l__fontspec_script_name_tl {Default (##1)}
+            \tl_set:Nn \l__fontspec_script_tl {##1}
+            \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int}
+            \bool_set_true:N \l__fontspec_scriptlang_exist_bool
+            \tl_gset:Nx \g__fontspec_single_feat_tl { script=##1 }
+            \clist_map_break:
           }
-        \bool_if:NF \l__fontspec_scriptlang_exist_bool
-          {
-            \tl_clear:N \l__fontspec_script_name_tl
-          }
       }
-    }
+    \bool_if:NF \l__fontspec_scriptlang_exist_bool
+      {
+        \tl_clear:N \l__fontspec_script_name_tl
+      }
   }
-\fontspec_default_script:nn {CustomDefault} {latn,DFLT}
+}
 \keys_define:nn {fontspec-opentype}
   {
     Language .choice: ,
@@ -3036,7 +3061,7 @@
           }
         \bool_if:NF \l__fontspec_scriptlang_exist_bool
           {
-            \__fontspec_warning:nx {language-not-exist} {#1}
+            \__fontspec_info:nx {language-not-exist} {#1}
             \clist_set:Nn \l_tmpa_clist {#2}
             \clist_get:NN \l_tmpa_clist \l__fontspec_lang_tl
             \exp_args:Noo \__fontspec_check_lang:NnF \l__fontspec_fontface_cs_tl \l__fontspec_lang_tl
@@ -3049,6 +3074,12 @@
       }
     }
   }
+\clist_new:N \g__fontspec_default_langs_clist
+\cs_new:Nn \fontspec_default_lang:n
+  {
+    \clist_gset:Nn \g__fontspec_default_langs_clist {#1}
+  }
+\fontspec_default_lang:n {dflt}
 \__fontspec_keys_define_code:nnn {fontspec-opentype} { Language / Default }
   {
     \tl_set:Nn \l__fontspec_lang_tl {dflt}

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty	2024-05-11 20:36:43 UTC (rev 71237)
@@ -40,7 +40,7 @@
 
 \RequirePackage{xparse}
 \ProvidesExplPackage{fontspec-xetex}%
-  {2024/05/07}{2.9d}{Font selection for XeLaTeX and LuaLaTeX}
+  {2024/05/11}{2.9e}{Font selection for XeLaTeX and LuaLaTeX}
 
 %%^^A%%  fontspec-code-load.dtx -- part of FONTSPEC <latex3.github.io/fontspec>
 %%^^A%%  fontspec-code-vars.dtx -- part of FONTSPEC <latex3.github.io/fontspec>
@@ -338,6 +338,12 @@
  {
   '#1' doesn't appear to have an Optical Size axis.
  }
+\__fontspec_msg_new:nn {script-not-exist}
+ {
+  Script '#2' not explicitly supported within font '#1'.
+  Check the typeset output, and if it is okay then ignore this warning.
+  Otherwise a different font should be chosen.
+ }
 \__fontspec_msg_new:nn {language-not-exist}
  {
   Language '#1' not explicitly supported
@@ -397,12 +403,6 @@
  {
   Adjusting the maths setup (use [no-math] to avoid this).
  }
-\__fontspec_msg_new:nn {no-script}
- {
-  Script '#2' not explicitly supported within font '#1'.
-  Check the typeset output, and if it is okay then ignore this warning.
-  Otherwise a different font should be chosen.
- }
 \__fontspec_msg_new:nn {opa-twice}
  {
   Opacity set twice, in both Colour and Opacity.\\
@@ -1003,7 +1003,7 @@
             \prop_get:cnN {g__fontspec_fontinfo_ \f at family _prop} {script-tag}  \l__fontspec_script_tl
             \prop_get:cnN {g__fontspec_fontinfo_ \f at family _prop} {lang-tag}    \l__fontspec_lang_tl
 
-            \__fontspec_check_ot_feat:NnTF \font {#1} {\prg_return_true:} {\prg_return_false:}
+            \__fontspec_check_ot_feat:NnnnTF \font {#1} {\l__fontspec_lang_tl} {\l__fontspec_script_tl} {\prg_return_true:} {\prg_return_false:}
           }
           {
             \prg_return_false:
@@ -1603,7 +1603,7 @@
 
     % "normal"
     \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl}
-    \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#1} {\l__fontspec_sizing_leftover_clist} {}
+    \__fontspec_setup_nfss:Nn \l__fontspec_nfss_tl { #1 , \l__fontspec_sizing_leftover_clist }
 
     % small caps
     \clist_set_eq:NN \l__fontspec_fontfeat_curr_clist \l__fontspec_fontfeat_sc_clist
@@ -1625,15 +1625,16 @@
 
     \bool_if:NF \l__fontspec_nosc_bool
       {
-        \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl
-          {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist}
+        \__fontspec_setup_nfss:Nn \l__fontspec_nfss_sc_tl
+          {#1 , \l__fontspec_sizing_leftover_clist , \l__fontspec_fontfeat_curr_clist}
       }
   }
-\cs_new:Nn \__fontspec_setup_nfss:Nnnn
+\cs_new:Nn \__fontspec_setup_nfss:Nn
   {
 
-    \__fontspec_get_features:n { #2 , #3 , #4 }
+    \__fontspec_get_features:n { #2 }
 
+
     \tl_if_empty:NF \l__fontspec_scale_tl
       {
         \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] }
@@ -1742,22 +1743,25 @@
         } (#1/#2)~
         with~ NFSS~ spec.:~
         \l__fontspec_nfss_tl
-        \exp_not:n { \\ }
-        -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} }
-        {
-          {\mddefault/\scdefault} {'small~ caps'~}
-          {\bfdefault/\scdefault} {'bold~ small~ caps'~}
-          {\mddefault/\scitdefault} {'italic~ small~ caps'~}
-          {\bfdefault/\scitdefault} {'bold~ italic~ small~ caps'~}
-          {\mddefault/\scsldefault} {'slanted~ small~ caps'~}
-          {\bfdefault/\scsldefault} {'bold~ slanted~ small~ caps'~}
-        }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~
-        with~ NFSS~ spec.:~
-        \l__fontspec_nfss_sc_tl
-        \tl_if_empty:fF {\l__fontspec_postadjust_tl}
+        \tl_if_empty:NF \l__fontspec_nfss_sc_tl
           {
-          \exp_not:N \\ and~ font~ adjustment~ code:
-          \exp_not:N \\ \l__fontspec_postadjust_tl
+            \exp_not:n { \\ }
+            -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} }
+            {
+              {\mddefault/\scdefault} {'small~ caps'~}
+              {\bfdefault/\scdefault} {'bold~ small~ caps'~}
+              {\mddefault/\scitdefault} {'italic~ small~ caps'~}
+              {\bfdefault/\scitdefault} {'bold~ italic~ small~ caps'~}
+              {\mddefault/\scsldefault} {'slanted~ small~ caps'~}
+              {\bfdefault/\scsldefault} {'bold~ slanted~ small~ caps'~}
+            }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~
+            with~ NFSS~ spec.:~
+            \l__fontspec_nfss_sc_tl
+            \tl_if_empty:fF {\l__fontspec_postadjust_tl}
+              {
+              \exp_not:N \\ and~ font~ adjustment~ code:
+              \exp_not:N \\ \l__fontspec_postadjust_tl
+              }
           }
       }
   }
@@ -1771,7 +1775,19 @@
   }
 \cs_new:Nn \__fontspec_make_ot_smallcaps:TF
   {
-    \exp_args:No \__fontspec_check_ot_feat:NnTF \l__fontspec_fontface_cs_tl {smcp} {#1} {#2}
+    \bool_set_false:N \l__fontspec_tmpa_bool
+    \exp_args:Ne \clist_map_inline:nn { \l__fontspec_lang_tl , \g__fontspec_default_langs_clist }
+      {
+        \exp_args:Ne \clist_map_inline:nn { \l__fontspec_script_tl , \g__fontspec_default_scripts_clist }
+          {
+            \exp_args:No \__fontspec_check_ot_feat:NnnnT \l__fontspec_fontface_cs_tl {smcp} {##1} {####1}
+              {
+                \bool_set_true:N \l__fontspec_tmpa_bool
+                \clist_map_break:
+              }
+          }
+      }
+    \bool_if:NTF \l__fontspec_tmpa_bool {#1} {#2}
   }
 \cs_new:Nn \__fontspec_make_smallcaps:TF
   {
@@ -2004,13 +2020,8 @@
       }
       }
   }
-\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nn {TF,F}
+\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,T,F}
   {
-    \__fontspec_check_ot_feat:NnnnTF #1 {#2} {\l__fontspec_lang_tl} {\l__fontspec_script_tl}
-      {\prg_return_true:} {\prg_return_false:}
-  }
-\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,F}
-  {
     \bool_if:NTF \l__fontspec_never_check_bool
       { \prg_return_true: }
       {
@@ -3098,7 +3109,7 @@
           }
         \bool_if:NF \l__fontspec_scriptlang_exist_bool
           {
-            \__fontspec_warning:nxx {no-script} {\l_fontspec_fontname_tl} {#1}
+            \__fontspec_info:nxx {script-not-exist} {\l_fontspec_fontname_tl} {#1}
             \clist_set:Nn \l_tmpa_clist {#2}
             \clist_get:NN \l_tmpa_clist \l__fontspec_script_tl
             \exp_args:Noo \__fontspec_check_script:NnF \l__fontspec_fontface_cs_tl \l__fontspec_script_tl
@@ -3111,31 +3122,33 @@
       }
     }
   }
-\cs_new:Nn \fontspec_default_script:nn
+\clist_new:N \g__fontspec_default_scripts_clist
+\cs_new:Nn \fontspec_default_script:n
   {
-    \keys_define:nn {fontspec-opentype} { Script / #1 .code:n =
+    \clist_gset:Nn \g__fontspec_default_scripts_clist {#1}
+  }
+\fontspec_default_script:n {latn,DFLT}
+\keys_define:nn {fontspec-opentype} { Script / CustomDefault .code:n =
+  {
+    \bool_set_false:N \l__fontspec_scriptlang_exist_bool
+    \clist_map_inline:Nn \g__fontspec_default_scripts_clist
       {
-        \bool_set_false:N \l__fontspec_scriptlang_exist_bool
-        \clist_map_inline:nn {#2}
+        \exp_args:No \__fontspec_check_script:NnT \l__fontspec_fontface_cs_tl {##1}
           {
-            \exp_args:No \__fontspec_check_script:NnT \l__fontspec_fontface_cs_tl {####1}
-              {
-                \tl_set:Nn \l__fontspec_script_name_tl {#1}
-                \tl_set:Nn \l__fontspec_script_tl {####1}
-                \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int}
-                \bool_set_true:N \l__fontspec_scriptlang_exist_bool
-                \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 }
-                \clist_map_break:
-              }
+            \tl_set:Nn \l__fontspec_script_name_tl {Default (##1)}
+            \tl_set:Nn \l__fontspec_script_tl {##1}
+            \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int}
+            \bool_set_true:N \l__fontspec_scriptlang_exist_bool
+            \tl_gset:Nx \g__fontspec_single_feat_tl { script=##1 }
+            \clist_map_break:
           }
-        \bool_if:NF \l__fontspec_scriptlang_exist_bool
-          {
-            \tl_clear:N \l__fontspec_script_name_tl
-          }
       }
-    }
+    \bool_if:NF \l__fontspec_scriptlang_exist_bool
+      {
+        \tl_clear:N \l__fontspec_script_name_tl
+      }
   }
-\fontspec_default_script:nn {CustomDefault} {latn,DFLT}
+}
 \keys_define:nn {fontspec-opentype}
   {
     Language .choice: ,
@@ -3159,7 +3172,7 @@
           }
         \bool_if:NF \l__fontspec_scriptlang_exist_bool
           {
-            \__fontspec_warning:nx {language-not-exist} {#1}
+            \__fontspec_info:nx {language-not-exist} {#1}
             \clist_set:Nn \l_tmpa_clist {#2}
             \clist_get:NN \l_tmpa_clist \l__fontspec_lang_tl
             \exp_args:Noo \__fontspec_check_lang:NnF \l__fontspec_fontface_cs_tl \l__fontspec_lang_tl
@@ -3172,6 +3185,12 @@
       }
     }
   }
+\clist_new:N \g__fontspec_default_langs_clist
+\cs_new:Nn \fontspec_default_lang:n
+  {
+    \clist_gset:Nn \g__fontspec_default_langs_clist {#1}
+  }
+\fontspec_default_lang:n {dflt}
 \__fontspec_keys_define_code:nnn {fontspec-opentype} { Language / Default }
   {
     \tl_set:Nn \l__fontspec_lang_tl {dflt}

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua	2024-05-11 20:36:43 UTC (rev 71237)
@@ -23,8 +23,8 @@
 local fontspec    = fontspec
 fontspec.module   = {
     name          = "fontspec",
-    version       = "2.9d",
-    date          = "2024/05/07",
+    version       = "2.9e",
+    date          = "2024/05/11",
     description   = "Font selection for XeLaTeX and LuaLaTeX",
     author        = "Khaled Hosny, Philipp Gesang, Will Robertson",
     copyright     = "Khaled Hosny, Philipp Gesang, Will Robertson",

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.sty	2024-05-11 20:36:30 UTC (rev 71236)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.sty	2024-05-11 20:36:43 UTC (rev 71237)
@@ -24,7 +24,7 @@
 
 \RequirePackage{xparse}
 \ProvidesExplPackage{fontspec}%
-  {2024/05/07}{2.9d}{Font selection for XeLaTeX and LuaLaTeX}
+  {2024/05/11}{2.9e}{Font selection for XeLaTeX and LuaLaTeX}
 
 %%^^A%%  fontspec-code-vars.dtx -- part of FONTSPEC <latex3.github.io/fontspec>
 \bool_new:N \g__fontspec_cfg_bool



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