texlive[49739] Master/texmf-dist: fontspec (17jan19)

commits+karl at tug.org commits+karl at tug.org
Thu Jan 17 22:28:23 CET 2019


Revision: 49739
          http://tug.org/svn/texlive?view=revision&revision=49739
Author:   karl
Date:     2019-01-17 22:28:23 +0100 (Thu, 17 Jan 2019)
Log Message:
-----------
fontspec (17jan19)

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-feat-opentype.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-keyval.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-code-vars.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-api.tex
    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	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/doc/latex/fontspec/CHANGES.md	2019-01-17 21:28:23 UTC (rev 49739)
@@ -1,6 +1,12 @@
 Change history
 ==============
 
+## v2.6l (2019/01/18)
+
+    * REALLY fix crash when loading fonts that are missing a requested script.
+    * Lots of internal logic changes for what should have been an easy fix :(
+
+
 ## v2.6k (2019/01/16)
 
     * Fix crash when loading fonts that are missing a requested script.

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-feat-opentype.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx	2019-01-17 21:28:23 UTC (rev 49739)
@@ -424,35 +424,38 @@
   {
     \keys_define:nn { fontspec-opentype } { Script / #1 .code:n =
       {
-        \bool_set_false:N \l_@@_scriptlang_exist_bool
-        \clist_map_inline:nn {#2}
+        \bool_if:NF \l_@@_scripts_missing_bool
           {
-            \@@_check_script:NnT \l_fontspec_font {####1}
+            \bool_set_false:N \l_@@_scriptlang_exist_bool
+            \clist_map_inline:nn {#2}
               {
-                \tl_set:Nn \l_fontspec_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
-          {
-            \str_if_eq:eeTF {#1} {Latin}
-              {
-                \@@_warning:nx {script-not-exist} {#1}
-              }
-              {
-                \@@_check_script:NnTF \l_fontspec_font {latn}
+                \@@_check_script:NnT \l_fontspec_font {####1}
                   {
-                    \@@_warning:nx {script-not-exist-latn} {#1}
-                    \tl_set:Nn \l_fontspec_script_tl {latn}
+                    \tl_set:Nn \l_fontspec_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
+              {
+                \str_if_eq:eeTF {#1} {Latin}
                   {
                     \@@_warning:nx {script-not-exist} {#1}
-                    \keys_set:nn {fontspec-opentype} { Script = Default }
                   }
+                  {
+                    \@@_check_script:NnTF \l_fontspec_font {latn}
+                      {
+                        \@@_warning:nx {script-not-exist-latn} {#1}
+                        \tl_set:Nn \l_fontspec_script_tl {latn}
+                        \int_set:Nn \l_@@_script_int {\l_@@_strnum_int}
+                      }
+                      {
+                        \@@_warning:nx {script-not-exist} {#1}
+                        \keys_set:nn {fontspec-opentype} { Script = Default }
+                      }
+                  }
               }
           }
       }

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx	2019-01-17 21:28:23 UTC (rev 49739)
@@ -239,6 +239,15 @@
     \@@_primitive_font_gset:Nnn \l_fontspec_font
       { \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} } {\f at size pt}
     \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly
+    \@@_check_script:NnTF \l_fontspec_font {DFLT}
+      {
+%<debug>\typeout{Has~Opentype~scripts}
+        \bool_set_false:N  \l_@@_scripts_missing_bool
+      }
+      {
+%<debug>\typeout{No~Opentype~scripts}
+        \bool_set_true:N \l_@@_scripts_missing_bool
+      }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -304,34 +313,43 @@
 %<debug>  \typeout{:: _set_scriptlang:}
     \bool_if:NT \l_@@_firsttime_bool
       {
-        \tl_if_empty:NTF \l_@@_script_name_tl
+        \bool_if:NTF \l_@@_scripts_missing_bool
           {
-            \@@_check_script:NnTF \l_fontspec_font {latn}
+%<debug>  \typeout{:::: NADA}
+            \@@_info:n {no-scripts}
+          }
+          {
+            \tl_if_empty:NTF \l_@@_script_name_tl
               {
-                \tl_set:Nn \l_@@_script_name_tl {Latin}
+                \@@_check_script:NnTF \l_fontspec_font {latn}
+                  {
+%<debug>  \typeout{:::: Defaulting to latn script}
+                    \tl_set:Nn \l_@@_script_name_tl {Latin}
+                    \tl_if_empty:NT \l_@@_lang_name_tl
+                      {
+                        \tl_set:Nn \l_@@_lang_name_tl {Default}
+                      }
+                    \keys_set:nx {fontspec-opentype} {Script=\l_@@_script_name_tl}
+                    \keys_set:nx {fontspec-opentype} {Language=\l_@@_lang_name_tl}
+%<debug>  \typeout{:::: Script=\l_@@_script_name_tl, Language=\l_@@_lang_name_tl}
+                  }
+                  {
+%<debug>  \typeout{:::: Default script only}
+                    \@@_info:n {dflt-script}
+                    \keys_set:nx {fontspec-opentype} {Script=Default}
+                    \keys_set:nx {fontspec-opentype} {Language=Default}
+                  }
+              }
+              {
                 \tl_if_empty:NT \l_@@_lang_name_tl
                   {
                     \tl_set:Nn \l_@@_lang_name_tl {Default}
                   }
+%<debug>  \typeout{:::: Script=\l_@@_script_name_tl, Language=\l_@@_lang_name_tl}
                 \keys_set:nx {fontspec-opentype} {Script=\l_@@_script_name_tl}
                 \keys_set:nx {fontspec-opentype} {Language=\l_@@_lang_name_tl}
-%<debug>  \typeout{:::: Script=\l_@@_script_name_tl, Language=\l_@@_lang_name_tl}
               }
-              {
-%<debug>  \typeout{:::: NADA}
-                \@@_info:n {no-scripts}
-                \bool_set_true:N \l_@@_never_check_bool
-              }
           }
-          {
-            \tl_if_empty:NT \l_@@_lang_name_tl
-              {
-                \tl_set:Nn \l_@@_lang_name_tl {Default}
-              }
-%<debug>  \typeout{:::: Script=\l_@@_script_name_tl, Language=\l_@@_lang_name_tl}
-            \keys_set:nx {fontspec-opentype} {Script=\l_@@_script_name_tl}
-            \keys_set:nx {fontspec-opentype} {Language=\l_@@_lang_name_tl}
-          }
       }
   }
 %    \end{macrocode}
@@ -1138,25 +1156,31 @@
     \int_compare:nT { \tl_count:n {#6} > 2 }
       { \@@_error:nx {ot-tag-too-long} {#2#3#4#5#6} }
 
-    \str_if_eq:eeTF {#2#3#4#5#6} {DFLT}
-      { \int_zero:N #1 }
+    \int_set:Nn #1
       {
-        \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
-          }
+          `#2 * "1000000
+        + `#3 * "10000
+        + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100
+        + \ifx \c_empty_tl #5 32 \else `#5 \fi
       }
   }
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\cs_generate_variant:Nn \@@_iv_str_to_num:Nn {No}
+%</XE>
 %    \end{macrocode}
+% \end{macro}
 %
+% \begin{macro}{\@@_lang_dflt_correct:N}
 %    \begin{macrocode}
+%<*XE>
+\cs_new_protected:Nn \@@_lang_dflt_correct:N
+  {
+    \int_compare:nNnT {#1} = {1145457748} % "DFLT"
+      {
+        \int_zero:N #1
+      }
+  }
 %</XE>
 %    \end{macrocode}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-keyval.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-keyval.dtx	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-keyval.dtx	2019-01-17 21:28:23 UTC (rev 49739)
@@ -105,6 +105,7 @@
               {
                 \int_case:nn \l_keys_choice_int { 1 {/AAT} 2 {/OT} 3 {/OT} 4 {/GR} }
               }
+%<debug>\typeout{Renderer: \l_fontspec_renderer_tl}
             \tl_gset:Nx \g_@@_single_feat_tl { \l_fontspec_renderer_tl }
 %</XE>
 %<*LU>
@@ -120,6 +121,7 @@
                 {
                   \int_case:nn \l_keys_choice_int { 5 {node} 6 {base} }
                 }
+%<debug>\typeout{Mode: \l_fontspec_mode_tl}
               \tl_gset:Nx \g_@@_single_feat_tl { mode=\l_fontspec_mode_tl }
 %</LU>
           }

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx	2019-01-17 21:28:23 UTC (rev 49739)
@@ -239,6 +239,10 @@
  {
   Font "\l_fontspec_fontname_tl" does not contain any OpenType `Script' information.
  }
+\@@_msg_new:nnn {fontspec} {dflt-script}
+ {
+  Font "\l_fontspec_fontname_tl" falling back to default (DFLT) script.
+ }
 \@@_msg_new:nnn {fontspec} {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	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-opentype.dtx	2019-01-17 21:28:23 UTC (rev 49739)
@@ -149,10 +149,12 @@
 %    \begin{macrocode}
 \prg_new_conditional:Nnn \@@_check_script:Nn {TF,T}
   {
+%<debug>\typeout{:: _check_script:Nn}
     \bool_if:NTF \l_@@_never_check_bool
       { \prg_return_true: }
 %<*XE>
       {
+%<debug>\typeout{::::~ checking~ script~ #2}
         \@@_iv_str_to_num:Nx \l_@@_strnum_int {#2}
         \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts #1 }
         \int_zero:N \l_tmpa_int
@@ -175,8 +177,17 @@
         \cs_if_eq:NNTF #1 \font
           { \tl_set:Nx \l_@@_tmp_tl {\curr at fontshape/\f at size} }
           { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} }
+%<debug>\typeout{::::~ checking:~"\l_@@_tmp_tl",~ "#2"}
         \directlua{fontspec.check_ot_script("\l_@@_tmp_tl", "#2")}
-        \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
+        \bool_if:NTF \l__fontspec_check_bool
+          {
+%<debug>\typeout{::::::~ TRUE}
+            \prg_return_true:
+          }
+          {
+%<debug>\typeout{::::::~ FALSE}
+            \prg_return_false:
+          }
       }
 %</LU>
   }
@@ -206,18 +217,23 @@
       {
         \@@_iv_str_to_num:Nx \l_@@_strnum_int {#2}
         \@@_iv_str_to_num:Nx \l_@@_script_int {#3}
-        \int_set:Nn \l_tmpb_int
+        \int_set:Nn \l_@@_tmpb_int
           { \XeTeXOTcountlanguages #1 \l_@@_script_int }
-        \int_zero:N \l_tmpa_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 }
+        \bool_until_do:nn { \int_compare_p:nNn \l_@@_tmpa_int = \l_@@_tmpb_int }
           {
-            \ifnum\XeTeXOTlanguagetag #1 \l_@@_script_int \l_tmpa_int = \l_@@_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
+            \int_set:Nn \l_@@_tmpc_int
+              { \XeTeXOTlanguagetag #1 \l_@@_script_int \l_@@_tmpa_int }
+
+            \int_compare:nNnTF \l_@@_tmpc_int = \l_@@_strnum_int
+              {
+                \bool_set_true:N \l__fontspec_check_bool
+                \int_set:Nn \l_@@_tmpa_int {\l_@@_tmpb_int}
+              }
+              {
+                \int_incr:N \l_@@_tmpa_int
+              }
           }
         \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
       }
@@ -260,7 +276,7 @@
 %    \begin{macrocode}
 \prg_new_conditional:Nnn \@@_check_ot_feat:Nnnn {TF,F}
   {
-    \bool_if:NTF \l_@@_never_check_bool
+    \bool_if:nTF {\l_@@_never_check_bool || \l_@@_scripts_missing_bool}
       { \prg_return_true: }
 %<*XE>
       {
@@ -267,6 +283,7 @@
 %<debug>\typeout{::~ fontspec_check_ot_feat:nnn~ {#2}{#3}{#4}}
         \@@_iv_str_to_num:Nx \l_@@_strnum_int   {#2}
         \@@_iv_str_to_num:Nx \l_@@_language_int {#3}
+        \@@_lang_dflt_correct:N \l_@@_language_int
         \@@_iv_str_to_num:Nx \l_@@_script_int   {#4}
         \int_set:Nn \l_tmpb_int
         {

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-vars.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-vars.dtx	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-code-vars.dtx	2019-01-17 21:28:23 UTC (rev 49739)
@@ -67,9 +67,8 @@
 %    \end{macrocode}
 %
 % \begin{macro}{\l_@@_never_check_bool}
-% This boolean is overloaded. It is used to disable checking opentype script, language, and tags
-% for two purposes: when a font has no opentype features, we just turn it true (i.e., disable checking);
-% and, when running checking code that has a user-defined return path we want to allow the higher-level
+% It is used to disable checking opentype script, language, and tags
+% when running checking code that has a user-defined return path we want to allow the higher-level
 % code to dictate the logic.
 % TODO: tidy this up!
 %    \begin{macrocode}
@@ -77,6 +76,14 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\l_@@_scripts_missing_bool}
+% True for a regular opentype font with at least the DFLT script.
+% False for a font lacking all script (and therefore language and feature) tags.
+%    \begin{macrocode}
+\bool_new:N \l_@@_scripts_missing_bool
+%    \end{macrocode}
+% \end{macro}
+%
 % \paragraph{Counters}
 %    \begin{macrocode}
 \int_new:N \l_@@_script_int
@@ -83,6 +90,9 @@
 \int_new:N \l_@@_language_int
 \int_new:N \l_@@_strnum_int
 \int_new:N \l_@@_tmp_int
+\int_new:N \l_@@_tmpa_int
+\int_new:N \l_@@_tmpb_int
+\int_new:N \l_@@_tmpc_int
 \int_new:N \l_@@_em_int
 \int_new:N \l_@@_emdef_int
 \int_new:N \l_@@_strong_int

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-api.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-api.tex	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-api.tex	2019-01-17 21:28:23 UTC (rev 49739)
@@ -87,6 +87,15 @@
 (see \vref{sec:newfeatures}) is the error-checking that is performed when
 the script or language is requested.
 
+Both commands accept a comma-separated list of OpenType tags in order of preference.
+This permits, for example, supporting both new and old versions of a language tag with
+a common user interface:
+\begin{Verbatim}
+  \newfontlanguage{Turkish}{TRK,TUR}
+\end{Verbatim}
+Here, a font that is requested with \verb|Script=Turkish| will first be checked for the
+OpenType language tag \verb|TRK|, which will be selected if available. If not available,
+the \verb|TUR| tag will be queried and used if possible as a fallback.
 
 
 \section{Going behind \pkg{fontspec}'s back}

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx	2019-01-17 21:28:23 UTC (rev 49739)
@@ -71,7 +71,7 @@
 \ProvidesExplFile{fontspec.dtx}
 %</dtx>
 %<*fontspec>
-  {2019/01/16}{2.6k}{Font selection for XeLaTeX and LuaLaTeX}
+  {2019/01/18}{2.6l}{Font selection for XeLaTeX and LuaLaTeX}
 %</fontspec>
 %    \end{macrocode}
 %
@@ -90,8 +90,8 @@
 %<lua>local fontspec    = fontspec
 %<lua>fontspec.module   = {
 %<lua>    name          = "fontspec",
-%<lua>    version       = "2.6k",
-%<lua>    date          = "2019/01/16",
+%<lua>    version       = "2.6l",
+%<lua>    date          = "2019/01/18",
 %<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	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty	2019-01-17 21:28:23 UTC (rev 49739)
@@ -41,7 +41,7 @@
 
 \RequirePackage{xparse}
 \ProvidesExplPackage{fontspec-luatex}%
-  {2019/01/16}{2.6k}{Font selection for XeLaTeX and LuaLaTeX}
+  {2019/01/18}{2.6l}{Font selection for XeLaTeX and LuaLaTeX}
 
 %%^^A%%  fontspec-code-load.dtx -- part of FONTSPEC <wspr.io/fontspec>
 %%^^A%%  fontspec-code-vars.dtx -- part of FONTSPEC <wspr.io/fontspec>
@@ -73,10 +73,14 @@
 \bool_new:N \l__fontspec_proceed_bool
 \bool_new:N \l__fontspec_check_feat_bool
 \bool_new:N \l__fontspec_never_check_bool
+\bool_new:N \l__fontspec_scripts_missing_bool
 \int_new:N \l__fontspec_script_int
 \int_new:N \l__fontspec_language_int
 \int_new:N \l__fontspec_strnum_int
 \int_new:N \l__fontspec_tmp_int
+\int_new:N \l__fontspec_tmpa_int
+\int_new:N \l__fontspec_tmpb_int
+\int_new:N \l__fontspec_tmpc_int
 \int_new:N \l__fontspec_em_int
 \int_new:N \l__fontspec_emdef_int
 \int_new:N \l__fontspec_strong_int
@@ -407,6 +411,10 @@
  {
   Font "\l_fontspec_fontname_tl" does not contain any OpenType `Script' information.
  }
+\__fontspec_msg_new:nnn {fontspec} {dflt-script}
+ {
+  Font "\l_fontspec_fontname_tl" falling back to default (DFLT) script.
+ }
 \__fontspec_msg_new:nnn {fontspec} {opa-twice}
  {
   Opacity set twice, in both Colour and Opacity.\\
@@ -1281,6 +1289,13 @@
     \__fontspec_primitive_font_gset:Nnn \l_fontspec_font
       { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f at size pt}
     \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly
+    \__fontspec_check_script:NnTF \l_fontspec_font {DFLT}
+      {
+        \bool_set_false:N  \l__fontspec_scripts_missing_bool
+      }
+      {
+        \bool_set_true:N \l__fontspec_scripts_missing_bool
+      }
   }
 \cs_new:Nn \__fontspec_construct_font_call:nnnnnn
   {
@@ -1310,11 +1325,30 @@
   {
     \bool_if:NT \l__fontspec_firsttime_bool
       {
-        \tl_if_empty:NTF \l__fontspec_script_name_tl
+        \bool_if:NTF \l__fontspec_scripts_missing_bool
           {
-            \__fontspec_check_script:NnTF \l_fontspec_font {latn}
+            \__fontspec_info:n {no-scripts}
+          }
+          {
+            \tl_if_empty:NTF \l__fontspec_script_name_tl
               {
-                \tl_set:Nn \l__fontspec_script_name_tl {Latin}
+                \__fontspec_check_script:NnTF \l_fontspec_font {latn}
+                  {
+                    \tl_set:Nn \l__fontspec_script_name_tl {Latin}
+                    \tl_if_empty:NT \l__fontspec_lang_name_tl
+                      {
+                        \tl_set:Nn \l__fontspec_lang_name_tl {Default}
+                      }
+                    \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl}
+                    \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl}
+                  }
+                  {
+                    \__fontspec_info:n {dflt-script}
+                    \keys_set:nx {fontspec-opentype} {Script=Default}
+                    \keys_set:nx {fontspec-opentype} {Language=Default}
+                  }
+              }
+              {
                 \tl_if_empty:NT \l__fontspec_lang_name_tl
                   {
                     \tl_set:Nn \l__fontspec_lang_name_tl {Default}
@@ -1322,19 +1356,7 @@
                 \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl}
                 \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl}
               }
-              {
-                \__fontspec_info:n {no-scripts}
-                \bool_set_true:N \l__fontspec_never_check_bool
-              }
           }
-          {
-            \tl_if_empty:NT \l__fontspec_lang_name_tl
-              {
-                \tl_set:Nn \l__fontspec_lang_name_tl {Default}
-              }
-            \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl}
-            \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl}
-          }
       }
   }
 \cs_new:Nn \__fontspec_get_features:n
@@ -1817,7 +1839,13 @@
           { \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} }
         \directlua{fontspec.check_ot_script("\l__fontspec_tmp_tl", "#2")}
-        \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
+        \bool_if:NTF \l__fontspec_check_bool
+          {
+            \prg_return_true:
+          }
+          {
+            \prg_return_false:
+          }
       }
   }
 \prg_new_conditional:Nnn \__fontspec_check_lang:Nn {TF}
@@ -1848,7 +1876,7 @@
   }
 \prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,F}
   {
-    \bool_if:NTF \l__fontspec_never_check_bool
+    \bool_if:nTF {\l__fontspec_never_check_bool || \l__fontspec_scripts_missing_bool}
       { \prg_return_true: }
       {
         \__fontspec_ot_validate_tag:x {#2}
@@ -2754,35 +2782,38 @@
   {
     \keys_define:nn { fontspec-opentype } { Script / #1 .code:n =
       {
-        \bool_set_false:N \l__fontspec_scriptlang_exist_bool
-        \clist_map_inline:nn {#2}
+        \bool_if:NF \l__fontspec_scripts_missing_bool
           {
-            \__fontspec_check_script:NnT \l_fontspec_font {####1}
+            \bool_set_false:N \l__fontspec_scriptlang_exist_bool
+            \clist_map_inline:nn {#2}
               {
-                \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
-          {
-            \str_if_eq:eeTF {#1} {Latin}
-              {
-                \__fontspec_warning:nx {script-not-exist} {#1}
-              }
-              {
-                \__fontspec_check_script:NnTF \l_fontspec_font {latn}
+                \__fontspec_check_script:NnT \l_fontspec_font {####1}
                   {
-                    \__fontspec_warning:nx {script-not-exist-latn} {#1}
-                    \tl_set:Nn \l_fontspec_script_tl {latn}
+                    \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
+              {
+                \str_if_eq:eeTF {#1} {Latin}
                   {
                     \__fontspec_warning:nx {script-not-exist} {#1}
-                    \keys_set:nn {fontspec-opentype} { Script = Default }
                   }
+                  {
+                    \__fontspec_check_script:NnTF \l_fontspec_font {latn}
+                      {
+                        \__fontspec_warning:nx {script-not-exist-latn} {#1}
+                        \tl_set:Nn \l_fontspec_script_tl {latn}
+                        \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int}
+                      }
+                      {
+                        \__fontspec_warning:nx {script-not-exist} {#1}
+                        \keys_set:nn {fontspec-opentype} { Script = Default }
+                      }
+                  }
               }
           }
       }

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty	2019-01-17 21:28:23 UTC (rev 49739)
@@ -41,7 +41,7 @@
 
 \RequirePackage{xparse}
 \ProvidesExplPackage{fontspec-xetex}%
-  {2019/01/16}{2.6k}{Font selection for XeLaTeX and LuaLaTeX}
+  {2019/01/18}{2.6l}{Font selection for XeLaTeX and LuaLaTeX}
 
 %%^^A%%  fontspec-code-load.dtx -- part of FONTSPEC <wspr.io/fontspec>
 %%^^A%%  fontspec-code-vars.dtx -- part of FONTSPEC <wspr.io/fontspec>
@@ -73,10 +73,14 @@
 \bool_new:N \l__fontspec_proceed_bool
 \bool_new:N \l__fontspec_check_feat_bool
 \bool_new:N \l__fontspec_never_check_bool
+\bool_new:N \l__fontspec_scripts_missing_bool
 \int_new:N \l__fontspec_script_int
 \int_new:N \l__fontspec_language_int
 \int_new:N \l__fontspec_strnum_int
 \int_new:N \l__fontspec_tmp_int
+\int_new:N \l__fontspec_tmpa_int
+\int_new:N \l__fontspec_tmpb_int
+\int_new:N \l__fontspec_tmpc_int
 \int_new:N \l__fontspec_em_int
 \int_new:N \l__fontspec_emdef_int
 \int_new:N \l__fontspec_strong_int
@@ -407,6 +411,10 @@
  {
   Font "\l_fontspec_fontname_tl" does not contain any OpenType `Script' information.
  }
+\__fontspec_msg_new:nnn {fontspec} {dflt-script}
+ {
+  Font "\l_fontspec_fontname_tl" falling back to default (DFLT) script.
+ }
 \__fontspec_msg_new:nnn {fontspec} {opa-twice}
  {
   Opacity set twice, in both Colour and Opacity.\\
@@ -1277,6 +1285,13 @@
     \__fontspec_primitive_font_gset:Nnn \l_fontspec_font
       { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f at size pt}
     \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly
+    \__fontspec_check_script:NnTF \l_fontspec_font {DFLT}
+      {
+        \bool_set_false:N  \l__fontspec_scripts_missing_bool
+      }
+      {
+        \bool_set_true:N \l__fontspec_scripts_missing_bool
+      }
   }
 \cs_new:Nn \__fontspec_construct_font_call:nnnnnn
   {
@@ -1306,11 +1321,30 @@
   {
     \bool_if:NT \l__fontspec_firsttime_bool
       {
-        \tl_if_empty:NTF \l__fontspec_script_name_tl
+        \bool_if:NTF \l__fontspec_scripts_missing_bool
           {
-            \__fontspec_check_script:NnTF \l_fontspec_font {latn}
+            \__fontspec_info:n {no-scripts}
+          }
+          {
+            \tl_if_empty:NTF \l__fontspec_script_name_tl
               {
-                \tl_set:Nn \l__fontspec_script_name_tl {Latin}
+                \__fontspec_check_script:NnTF \l_fontspec_font {latn}
+                  {
+                    \tl_set:Nn \l__fontspec_script_name_tl {Latin}
+                    \tl_if_empty:NT \l__fontspec_lang_name_tl
+                      {
+                        \tl_set:Nn \l__fontspec_lang_name_tl {Default}
+                      }
+                    \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl}
+                    \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl}
+                  }
+                  {
+                    \__fontspec_info:n {dflt-script}
+                    \keys_set:nx {fontspec-opentype} {Script=Default}
+                    \keys_set:nx {fontspec-opentype} {Language=Default}
+                  }
+              }
+              {
                 \tl_if_empty:NT \l__fontspec_lang_name_tl
                   {
                     \tl_set:Nn \l__fontspec_lang_name_tl {Default}
@@ -1318,19 +1352,7 @@
                 \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl}
                 \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl}
               }
-              {
-                \__fontspec_info:n {no-scripts}
-                \bool_set_true:N \l__fontspec_never_check_bool
-              }
           }
-          {
-            \tl_if_empty:NT \l__fontspec_lang_name_tl
-              {
-                \tl_set:Nn \l__fontspec_lang_name_tl {Default}
-              }
-            \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl}
-            \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl}
-          }
       }
   }
 \cs_new:Nn \__fontspec_get_features:n
@@ -1755,19 +1777,21 @@
     \int_compare:nT { \tl_count:n {#6} > 2 }
       { \__fontspec_error:nx {ot-tag-too-long} {#2#3#4#5#6} }
 
-    \str_if_eq:eeTF {#2#3#4#5#6} {DFLT}
-      { \int_zero:N #1 }
+    \int_set:Nn #1
       {
-        \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
-          }
+          `#2 * "1000000
+        + `#3 * "10000
+        + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100
+        + \ifx \c_empty_tl #5 32 \else `#5 \fi
       }
   }
-\cs_generate_variant:Nn \__fontspec_iv_str_to_num:Nn {No}
+\cs_new_protected:Nn \__fontspec_lang_dflt_correct:N
+  {
+    \int_compare:nNnT {#1} = {1145457748} % "DFLT"
+      {
+        \int_zero:N #1
+      }
+  }
 
 %%^^A%%  fontspec-code-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec>
 
@@ -1879,18 +1903,23 @@
       {
         \__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_tmpb_int
+        \int_set:Nn \l__fontspec_tmpb_int
           { \XeTeXOTcountlanguages #1 \l__fontspec_script_int }
-        \int_zero:N \l_tmpa_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_tmpa_int = \l_tmpb_int }
+        \bool_until_do:nn { \int_compare_p:nNn \l__fontspec_tmpa_int = \l__fontspec_tmpb_int }
           {
-            \ifnum\XeTeXOTlanguagetag #1 \l__fontspec_script_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
+            \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
+              }
           }
         \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
       }
@@ -1902,11 +1931,12 @@
   }
 \prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,F}
   {
-    \bool_if:NTF \l__fontspec_never_check_bool
+    \bool_if:nTF {\l__fontspec_never_check_bool || \l__fontspec_scripts_missing_bool}
       { \prg_return_true: }
       {
         \__fontspec_iv_str_to_num:Nx \l__fontspec_strnum_int   {#2}
         \__fontspec_iv_str_to_num:Nx \l__fontspec_language_int {#3}
+        \__fontspec_lang_dflt_correct:N \l__fontspec_language_int
         \__fontspec_iv_str_to_num:Nx \l__fontspec_script_int   {#4}
         \int_set:Nn \l_tmpb_int
         {
@@ -2895,35 +2925,38 @@
   {
     \keys_define:nn { fontspec-opentype } { Script / #1 .code:n =
       {
-        \bool_set_false:N \l__fontspec_scriptlang_exist_bool
-        \clist_map_inline:nn {#2}
+        \bool_if:NF \l__fontspec_scripts_missing_bool
           {
-            \__fontspec_check_script:NnT \l_fontspec_font {####1}
+            \bool_set_false:N \l__fontspec_scriptlang_exist_bool
+            \clist_map_inline:nn {#2}
               {
-                \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
-          {
-            \str_if_eq:eeTF {#1} {Latin}
-              {
-                \__fontspec_warning:nx {script-not-exist} {#1}
-              }
-              {
-                \__fontspec_check_script:NnTF \l_fontspec_font {latn}
+                \__fontspec_check_script:NnT \l_fontspec_font {####1}
                   {
-                    \__fontspec_warning:nx {script-not-exist-latn} {#1}
-                    \tl_set:Nn \l_fontspec_script_tl {latn}
+                    \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
+              {
+                \str_if_eq:eeTF {#1} {Latin}
                   {
                     \__fontspec_warning:nx {script-not-exist} {#1}
-                    \keys_set:nn {fontspec-opentype} { Script = Default }
                   }
+                  {
+                    \__fontspec_check_script:NnTF \l_fontspec_font {latn}
+                      {
+                        \__fontspec_warning:nx {script-not-exist-latn} {#1}
+                        \tl_set:Nn \l_fontspec_script_tl {latn}
+                        \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int}
+                      }
+                      {
+                        \__fontspec_warning:nx {script-not-exist} {#1}
+                        \keys_set:nn {fontspec-opentype} { Script = Default }
+                      }
+                  }
               }
           }
       }

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua	2019-01-17 21:28:23 UTC (rev 49739)
@@ -23,8 +23,8 @@
 local fontspec    = fontspec
 fontspec.module   = {
     name          = "fontspec",
-    version       = "2.6k",
-    date          = "2019/01/16",
+    version       = "2.6l",
+    date          = "2019/01/18",
     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	2019-01-17 21:28:05 UTC (rev 49738)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.sty	2019-01-17 21:28:23 UTC (rev 49739)
@@ -21,7 +21,7 @@
 
 \RequirePackage{xparse}
 \ProvidesExplPackage{fontspec}%
-  {2019/01/16}{2.6k}{Font selection for XeLaTeX and LuaLaTeX}
+  {2019/01/18}{2.6l}{Font selection for XeLaTeX and LuaLaTeX}
 
 %%^^A%%  fontspec-code-load.dtx -- part of FONTSPEC <wspr.io/fontspec>
 \sys_if_engine_luatex:T



More information about the tex-live-commits mailing list