From 2e4672ed6f7b49c9d1c44b6ca850cfe7024fc639 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Sat, 12 Oct 2019 03:00:57 +0000
Subject: CTAN sync 201910120300

---
 macros/latex/contrib/l3kernel/l3file.dtx | 87 +++++++++++++++++++-------------
 1 file changed, 53 insertions(+), 34 deletions(-)

(limited to 'macros/latex/contrib/l3kernel/l3file.dtx')

diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index 5dd15d0e3d..c9c1fd72ee 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-10-02}
+% \date{Released 2019-10-11}
 %
 % \maketitle
 %
@@ -1043,11 +1043,18 @@
 %</package>
   }
 \cs_generate_variant:Nn \__kernel_ior_open:Nn { No }
-\cs_new_protected:Npn \@@_open_stream:Nn #1#2
+%    \end{macrocode}
+%   Here, we act defensively in case \LuaTeX{} is in use with an
+%   extensionless file name.
+%    \begin{macrocode}
+\cs_new_protected:Npx \@@_open_stream:Nn #1#2
   {
-    \tex_global:D \tex_chardef:D #1 = \l_@@_stream_tl \scan_stop:
-    \prop_gput:NVn \g_@@_streams_prop #1 {#2}
-    \tex_openin:D #1 #2 \scan_stop:
+    \tex_global:D \tex_chardef:D #1 = \exp_not:N \l_@@_stream_tl \scan_stop:
+    \prop_gput:NVn \exp_not:N \g_@@_streams_prop #1 {#2}
+    \tex_openin:D #1
+      \sys_if_engine_luatex:TF
+        { {#2} }
+        {  #2 \scan_stop: }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2251,25 +2258,12 @@
 %     \g_file_curr_ext_str ,
 %     \g_file_curr_name_str
 %   }
-%   The name of the current file should be available at all times.
-%   For the format the file name needs to be picked up at the start of the
-%   run. In \LaTeXe{} package mode the current file name is collected from
-%   \tn{@currname}.
+%   The name of the current file should be available at all times:
+%   the name itself is set dynamically.
 %    \begin{macrocode}
 \str_new:N \g_file_curr_dir_str
 \str_new:N \g_file_curr_ext_str
 \str_new:N \g_file_curr_name_str
-%<*initex>
-\tex_everyjob:D \exp_after:wN
-  {
-    \tex_the:D \tex_everyjob:D
-    \str_gset:Nx \g_file_curr_name_str { \tex_jobname:D }
-  }
-%</initex>
-%<*package>
-\cs_if_exist:NT \@currname
-  { \str_gset_eq:NN \g_file_curr_name_str \@currname }
-%</package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -2278,7 +2272,8 @@
 %   mode we can recover the information from the details held by
 %   \LaTeXe{} (we must be in the preamble and loaded using \tn{usepackage}
 %   or \tn{RequirePackage}). As \LaTeXe{} doesn't store directory and
-%   name separately, we stick to the same convention here.
+%   name separately, we stick to the same convention here. In pre-loading,
+%   \tn{@currnamestack} is empty so is skipped.
 %    \begin{macrocode}
 \seq_new:N \g_@@_stack_seq
 %<*package>
@@ -2301,7 +2296,10 @@
         }
     }
   \cs_if_exist:NT \@currnamestack
-    { \exp_after:wN \@@_tmp:w \@currnamestack }
+    {
+      \tl_if_empty:NF \@currnamestack
+        { \exp_after:wN \@@_tmp:w \@currnamestack }
+    }
 \group_end:
 %</package>
 %    \end{macrocode}
@@ -2642,9 +2640,27 @@
 \cs_new:Npx \@@_file_ext_check_auxiii:nw #1#2 . #3 . #4 \q_stop
   {
     \exp_not:N \quark_if_nil:nTF {#3}
-      { \exp_not:N \__kernel_file_name_quote:n { #1 \tl_to_str:n { .tex } } }
+      {
+        \exp_not:N \exp_args:Nee \exp_not:N \@@_file_ext_check_auxiv:nn
+          { \exp_not:N \__kernel_file_name_quote:n {#1} }
+          {
+            \exp_not:N \__kernel_file_name_quote:n
+              { #1 \tl_to_str:n { .tex } }
+          }
+      }
       {#1}
   }
+\cs_new:Npn \@@_file_ext_check_auxiv:nn #1#2
+  {
+    \tl_if_blank:eTF { \@@_file_size:n {#2} }
+      {#1}
+      {
+        \int_compare:nNnTF
+          { \@@_file_size:n {#1} } = { \@@_file_size:n {#2} }
+          {#2}
+          {#1}
+      }
+  }
 %    \end{macrocode}
 %   Deal with the fact that the primitive might not be available.
 %    \begin{macrocode}
@@ -2816,7 +2832,7 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}
+% \begin{macro}[noTF]
 %   {\file_get_mdfive_hash:nN, \file_get_size:nN, \file_get_timestamp:nN}
 % \begin{macro}{\@@_get_details:nnN}
 %   Non-expandable wrappers around the above in the case where appropriate
@@ -3073,7 +3089,7 @@
     \str_gset_eq:NN \g_file_curr_ext_str  \l_@@_ext_str
   }
 %<*package>
-\cs_new_eq:NN \__kernel_file_input_push:n \__file_input_push:n
+\cs_new_eq:NN \__kernel_file_input_push:n \@@_input_push:n
 %</package>
 \cs_new_protected:Npn \@@_input_pop:
   {
@@ -3081,7 +3097,7 @@
     \exp_after:wN \@@_input_pop:nnn \l_@@_internal_tl
   }
 %<*package>
-\cs_new_eq:NN \__kernel_file_input_pop: \__file_input_pop:
+\cs_new_eq:NN \__kernel_file_input_pop: \@@_input_pop:
 %</package>
 \cs_new_protected:Npn \@@_input_pop:nnn #1#2#3
   {
@@ -3191,14 +3207,17 @@
 % \cs{g_@@_record_seq}.
 %    \begin{macrocode}
 %<*package>
-\AtBeginDocument
-  {
-    \exp_args:NNx \seq_set_from_clist:Nn \l_@@_tmp_seq
-      { \tl_to_str:N \@filelist }
-    \seq_gconcat:NNN
-      \g_@@_record_seq
-      \g_@@_record_seq
-      \l_@@_tmp_seq
+\cs_if_exist:NT \@filelist
+  {
+    \AtBeginDocument
+      {
+        \exp_args:NNx \seq_set_from_clist:Nn \l_@@_tmp_seq
+          { \tl_to_str:N \@filelist }
+        \seq_gconcat:NNN
+          \g_@@_record_seq
+          \g_@@_record_seq
+          \l_@@_tmp_seq
+      }
   }
 %</package>
 %    \end{macrocode}
-- 
cgit v1.2.3

