[latex3-commits] [latex3/latex2e] main: Update l3kernel to 2023-05-15 (e4cf79f5)

github at latex-project.org github at latex-project.org
Mon May 15 23:53:30 CEST 2023


Repository : https://github.com/latex3/latex2e
On branch  : main
Link       : https://github.com/latex3/latex2e/commit/e4cf79f5d0d433ee616b5c886a4a169849f3e057

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

commit e4cf79f5d0d433ee616b5c886a4a169849f3e057
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Mon May 15 22:37:32 2023 +0100

    Update l3kernel to 2023-05-15


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

e4cf79f5d0d433ee616b5c886a4a169849f3e057
 base/testfiles-lthooks/filehook-005.tlg      |   2 +-
 base/testfiles/github-0414.tlg               |   2 +-
 required/graphics/testfiles/github-0776.tlg  |   4 +-
 required/graphics/testfiles/github-0776b.lvt |   2 +-
 texmf/tex/latex/l3kernel/expl3-code.tex      | 708 +++------------------------
 texmf/tex/latex/l3kernel/expl3-generic.tex   |   2 +-
 texmf/tex/latex/l3kernel/expl3.ltx           |   2 +-
 texmf/tex/latex/l3kernel/expl3.sty           |   2 +-
 8 files changed, 64 insertions(+), 660 deletions(-)

diff --git a/base/testfiles-lthooks/filehook-005.tlg b/base/testfiles-lthooks/filehook-005.tlg
index c785ebe4..e6a94dff 100644
--- a/base/testfiles-lthooks/filehook-005.tlg
+++ b/base/testfiles-lthooks/filehook-005.tlg
@@ -75,7 +75,7 @@ test.tex
 > file/test.tex/after
 ===============
 > file/deep.tex/before
-(testpath//deep.tex
+(testpath/deep.tex
 testpath/deep.tex
 )
 > file/deep.tex/after
diff --git a/base/testfiles/github-0414.tlg b/base/testfiles/github-0414.tlg
index 455107c4..aa369f4b 100644
--- a/base/testfiles/github-0414.tlg
+++ b/base/testfiles/github-0414.tlg
@@ -1,6 +1,6 @@
 This is a generated file for the LaTeX2e validation system.
 Don't change this file in any respect.
-(testpath//testcls.cls (article.cls
+(testpath/testcls.cls (article.cls
 Document Class: article ....-..-.. v... Standard LaTeX document class
 (size10.clo
 File: size10.clo ....-..-.. v... Standard LaTeX file (size option)
diff --git a/required/graphics/testfiles/github-0776.tlg b/required/graphics/testfiles/github-0776.tlg
index deda9be2..e2dcd25c 100644
--- a/required/graphics/testfiles/github-0776.tlg
+++ b/required/graphics/testfiles/github-0776.tlg
@@ -1,4 +1,4 @@
 This is a generated file for the l3build validation system.
 Don't change this file in any respect.
-File: ./folder-a//meow.ps Graphic file (type eps)
-<./folder-a//meow.ps>
+File: ./folder-a/meow.ps Graphic file (type eps)
+<./folder-a/meow.ps>
diff --git a/required/graphics/testfiles/github-0776b.lvt b/required/graphics/testfiles/github-0776b.lvt
index 245e6d4c..de253de0 100644
--- a/required/graphics/testfiles/github-0776b.lvt
+++ b/required/graphics/testfiles/github-0776b.lvt
@@ -14,7 +14,7 @@
 
 \sbox2{\includegraphics{folder-a/meow}}
 
-\graphicspath{{folder-a}{folder-b}}
+\graphicspath{{folder-a/}{folder-b/}}
 
 \sbox4{\includegraphics{meow.ps}}
 
diff --git a/texmf/tex/latex/l3kernel/expl3-code.tex b/texmf/tex/latex/l3kernel/expl3-code.tex
index 2630452f..583482f5 100644
--- a/texmf/tex/latex/l3kernel/expl3-code.tex
+++ b/texmf/tex/latex/l3kernel/expl3-code.tex
@@ -71,7 +71,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-11}%
+\def\ExplFileDate{2023-05-15}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -129,23 +129,6 @@
       L3 programming layer (code)%
   }%
 %% File: l3bootstrap.dtx
-\begingroup
-  \expandafter\ifx\csname directlua\endcsname\relax
-  \else
-    \directlua{%
-      local i
-      local t = { }
-      for _,i in pairs(tex.extraprimitives("luatex")) do
-        if string.match(i,"^U") then
-          if not string.match(i,"^Uchar$") then %$
-            table.insert(t,i)
-          end
-        end
-      end
-      tex.enableprimitives("", t)
-    }%
-  \fi
-\endgroup
 \begingroup\expandafter\expandafter\expandafter\endgroup
   \expandafter\ifx\csname pdfstrcmp\endcsname\relax
   \let\pdfstrcmp\strcmp
@@ -183,27 +166,23 @@
   \def\ShortText{Required primitives not found}%
   \def\LongText%
     {%
-      The L3 programming layer requires the e-TeX primitives and additional
-      \LineBreak functionality as described in the README file.
+      The L3 programming layer requires the e-TeX primitives and the
+      \LineBreak 'pdfTeX extensions'  as described in the README file.
       \LineBreak
       These are available in the engines\LineBreak
-      - pdfTeX v1.40.0\LineBreak
-      - XeTeX v0.99992\LineBreak
+      - pdfTeX v1.40.20\LineBreak
+      - XeTeX v0.999991\LineBreak
       - LuaTeX v1.10\LineBreak
-      - e-(u)pTeX mid-2012\LineBreak
+      - e-(u)pTeX v3.8.2\LineBreak
       - Prote (2021)\LineBreak
       or later.\LineBreak
       \LineBreak
     }%
   \ifnum0%
-    \expandafter\ifx\csname expanded\endcsname\relax
-      \expandafter\ifx\csname pdfstrcmp\endcsname\relax\else 1\fi
+    \expandafter\ifx\csname luatexversion\endcsname\relax
+      \expandafter\ifx\csname expanded\endcsname\relax\else 1\fi
     \else
-      \expandafter\ifx\csname luatexversion\endcsname\relax
-        1%
-      \else
-        \ifnum\luatexversion<110 \else 1\fi
-      \fi
+      \ifnum\luatexversion<110 \else 1\fi
     \fi
     =0 %
       \newlinechar`\^^J %
@@ -229,20 +208,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
         }%
   \fi
 \next
-\begingroup
-  \def\@tempa{LaTeX2e}%
-  \def\next{}%
-  \ifx\fmtname\@tempa
-    \expandafter\ifx\csname extrafloats\endcsname\relax
-      \def\next
-        {%
-          \RequirePackage{etex}%
-          \csname reserveinserts\endcsname{32}%
-        }%
-    \fi
-  \fi
-\expandafter\endgroup
-\next
 \protected\edef\ExplSyntaxOff
   {%
     \protected\def\noexpand\ExplSyntaxOff{}%
@@ -1389,64 +1354,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \tex_fi:D
   \tex_fi:D
 \tex_fi:D
-\tex_ifdefined:D \luatexsuppressfontnotfounderror
-  \tex_let:D \tex_alignmark:D           \luatexalignmark
-  \tex_let:D \tex_aligntab:D            \luatexaligntab
-  \tex_let:D \tex_attribute:D           \luatexattribute
-  \tex_let:D \tex_attributedef:D        \luatexattributedef
-  \tex_let:D \tex_catcodetable:D        \luatexcatcodetable
-  \tex_let:D \tex_clearmarks:D          \luatexclearmarks
-  \tex_let:D \tex_crampeddisplaystyle:D \luatexcrampeddisplaystyle
-  \tex_let:D \tex_crampedscriptscriptstyle:D
-    \luatexcrampedscriptscriptstyle
-  \tex_let:D \tex_crampedscriptstyle:D  \luatexcrampedscriptstyle
-  \tex_let:D \tex_crampedtextstyle:D    \luatexcrampedtextstyle
-  \tex_let:D \tex_fontid:D              \luatexfontid
-  \tex_let:D \tex_formatname:D          \luatexformatname
-  \tex_let:D \tex_gleaders:D            \luatexgleaders
-  \tex_let:D \tex_initcatcodetable:D    \luatexinitcatcodetable
-  \tex_let:D \tex_latelua:D             \luatexlatelua
-  \tex_let:D \tex_luaescapestring:D     \luatexluaescapestring
-  \tex_let:D \tex_luafunction:D         \luatexluafunction
-  \tex_let:D \tex_mathstyle:D           \luatexmathstyle
-  \tex_let:D \tex_nokerns:D             \luatexnokerns
-  \tex_let:D \tex_noligs:D              \luatexnoligs
-  \tex_let:D \tex_outputbox:D           \luatexoutputbox
-  \tex_let:D \tex_pageleftoffset:D      \luatexpageleftoffset
-  \tex_let:D \tex_pagetopoffset:D       \luatexpagetopoffset
-  \tex_let:D \tex_postexhyphenchar:D    \luatexpostexhyphenchar
-  \tex_let:D \tex_posthyphenchar:D      \luatexposthyphenchar
-  \tex_let:D \tex_preexhyphenchar:D     \luatexpreexhyphenchar
-  \tex_let:D \tex_prehyphenchar:D       \luatexprehyphenchar
-  \tex_let:D \tex_savecatcodetable:D    \luatexsavecatcodetable
-  \tex_let:D \tex_scantextokens:D       \luatexscantextokens
-  \tex_let:D \tex_suppressifcsnameerror:D
-    \luatexsuppressifcsnameerror
-  \tex_let:D \tex_suppresslongerror:D   \luatexsuppresslongerror
-  \tex_let:D \tex_suppressmathparerror:D
-    \luatexsuppressmathparerror
-  \tex_let:D \tex_suppressoutererror:D  \luatexsuppressoutererror
-  \tex_let:D \tex_Uchar:D                  \luatexUchar
-  \tex_let:D \tex_suppressfontnotfounderror:D
-    \luatexsuppressfontnotfounderror
-  \tex_let:D \tex_bodydir:D             \luatexbodydir
-  \tex_let:D \tex_boxdir:D              \luatexboxdir
-  \tex_let:D \tex_leftghost:D           \luatexleftghost
-  \tex_let:D \tex_localbrokenpenalty:D  \luatexlocalbrokenpenalty
-  \tex_let:D \tex_localinterlinepenalty:D
-    \luatexlocalinterlinepenalty
-  \tex_let:D \tex_localleftbox:D        \luatexlocalleftbox
-  \tex_let:D \tex_localrightbox:D       \luatexlocalrightbox
-  \tex_let:D \tex_mathdir:D             \luatexmathdir
-  \tex_let:D \tex_pagebottomoffset:D    \luatexpagebottomoffset
-  \tex_let:D \tex_pagedir:D             \luatexpagedir
-  \tex_let:D \tex_pageheight:D             \luatexpageheight
-  \tex_let:D \tex_pagerightoffset:D     \luatexpagerightoffset
-  \tex_let:D \tex_pagewidth:D              \luatexpagewidth
-  \tex_let:D \tex_pardir:D              \luatexpardir
-  \tex_let:D \tex_rightghost:D          \luatexrightghost
-  \tex_let:D \tex_textdir:D             \luatextextdir
-\tex_fi:D
 \tex_ifnum:D 0
   \tex_ifdefined:D \tex_pdftexversion:D 1 \tex_fi:D
   \tex_ifdefined:D \tex_luatexversion:D 1 \tex_fi:D
@@ -1480,11 +1387,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \tex_global:D \tex_let:D \tex_year:D \tex_undefined:D
   \tex_fi:D
 \tex_endgroup:D
-\tex_ifdefined:D \tex_luatexversion:D
-  \tex_let:D \tex_pdftexbanner:D   \tex_undefined:D
-  \tex_let:D \tex_pdftexrevision:D \tex_undefined:D
-  \tex_let:D \tex_pdftexversion:D  \tex_undefined:D
-\tex_fi:D
 \tex_ifdefined:D \orieveryjob
   \tex_let:D \tex_everyjob:D \orieveryjob
 \tex_fi:D
@@ -1615,9 +1517,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \l__exp_internal_tl
   }
 \cs_set:Npn \use:e #1 { \tex_expanded:D {#1} }
-\tex_ifdefined:D \tex_expanded:D \tex_else:D
-  \cs_set:Npn \use:e #1 { \exp_args:Ne \use:n {#1} }
-\tex_fi:D
 \cs_set:Npn \use:n    #1       {#1}
 \cs_set:Npn \use:nn   #1#2     {#1#2}
 \cs_set:Npn \use:nnn  #1#2#3   {#1#2#3}
@@ -2372,15 +2271,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   { \exp_after:wN \__exp_arg_next:Nnn \cs:w #3 \cs_end: {#1} {#2} }
 \cs_new:Npn \::o #1 \::: #2#3
   { \exp_after:wN \__exp_arg_next:nnn \exp_after:wN {#3} {#1} {#2} }
-\cs_if_exist:NTF \tex_expanded:D
-  {
-    \cs_new:Npn \::e #1 \::: #2#3
-      { \tex_expanded:D { \exp_not:n { #1 \::: } { \exp_not:n {#2} {#3} } } }
-  }
-  {
-    \cs_new:Npn \::e #1 \::: #2#3
-      { \exp_args:Ne \__exp_arg_next:nnn {#3} {#1} {#2} }
-  }
+\cs_new:Npn \::e #1 \::: #2#3
+  { \tex_expanded:D { \exp_not:n { #1 \::: } { \exp_not:n {#2} {#3} } } }
 \cs_new:Npn \::f #1 \::: #2#3
   {
     \exp_after:wN \__exp_arg_next:nnn
@@ -2442,18 +2334,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   { \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN {#3} }
 \cs_new:Npn \exp_args:NNNo #1#2#3#4
   { \exp_after:wN #1 \exp_after:wN#2 \exp_after:wN #3 \exp_after:wN {#4} }
-\cs_if_exist:NTF \tex_expanded:D
-  {
-    \cs_new:Npn \exp_args:Ne #1#2
-      { \exp_after:wN #1 \tex_expanded:D { {#2} } }
-  }
-  {
-    \cs_new:Npn \exp_args:Ne #1#2
-      {
-        \exp_after:wN #1 \exp_after:wN
-          { \exp:w \__exp_e:nn {#2} { } }
-      }
-  }
+\cs_new:Npn \exp_args:Ne #1#2
+  { \exp_after:wN #1 \tex_expanded:D { {#2} } }
 \cs_new:Npn \exp_args:Nf #1#2
   { \exp_after:wN #1 \exp_after:wN { \exp:w \exp_end_continue_f:w #2 } }
 \cs_new:Npn \exp_args:Nv #1#2
@@ -2478,16 +2360,12 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \exp_after:wN #2
     \exp_after:wN { \exp:w \__exp_eval_register:c {#3} }
   }
-\cs_if_exist:NTF \tex_expanded:D
+\cs_new:Npn \exp_args:NNe #1#2#3
   {
-    \cs_new:Npn \exp_args:NNe #1#2#3
-      {
-        \exp_after:wN #1
-        \exp_after:wN #2
-        \tex_expanded:D { {#3} }
-      }
+    \exp_after:wN #1
+    \exp_after:wN #2
+    \tex_expanded:D { {#3} }
   }
-  { \cs_new:Npn \exp_args:NNe { \::N \::e \::: } }
 \cs_new:Npn \exp_args:NNf #1#2#3
   {
     \exp_after:wN #1
@@ -2575,15 +2453,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \exp_after:wN \__exp_arg_last_unbraced:nn
       \exp_after:wN { \exp:w \__exp_eval_register:c {#2} } {#1}
   }
-\cs_if_exist:NTF \tex_expanded:D
-  {
-    \cs_new:Npn \::e_unbraced \::: #1#2
-      { \tex_expanded:D { \exp_not:n {#1} #2 } }
-  }
-  {
-    \cs_new:Npn \::e_unbraced \::: #1#2
-      { \exp:w \__exp_e:nn {#2} {#1} }
-  }
+\cs_new:Npn \::e_unbraced \::: #1#2
+  { \tex_expanded:D { \exp_not:n {#1} #2 } }
 \cs_new:Npn \::f_unbraced \::: #1#2
   {
     \exp_after:wN \__exp_arg_last_unbraced:nn
@@ -2599,12 +2470,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   { \exp_after:wN #1 \exp:w \__exp_eval_register:N #2 }
 \cs_new:Npn \exp_last_unbraced:Nv #1#2
   { \exp_after:wN #1 \exp:w \__exp_eval_register:c {#2} }
-\cs_if_exist:NTF \tex_expanded:D
-  {
-    \cs_new:Npn \exp_last_unbraced:Ne #1#2
-      { \exp_after:wN #1 \tex_expanded:D {#2} }
-  }
-  { \cs_new:Npn \exp_last_unbraced:Ne { \::e_unbraced \::: } }
+\cs_new:Npn \exp_last_unbraced:Ne #1#2
+  { \exp_after:wN #1 \tex_expanded:D {#2} }
 \cs_new:Npn \exp_last_unbraced:Nf #1#2
   { \exp_after:wN #1 \exp:w \exp_end_continue_f:w #2 }
 \cs_new:Npn \exp_last_unbraced:NNo #1#2#3
@@ -2667,15 +2534,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_new_eq:NN \__kernel_exp_not:w \tex_unexpanded:D
 \cs_new:Npn \exp_not:c #1 { \exp_after:wN \exp_not:N \cs:w #1 \cs_end: }
 \cs_new:Npn \exp_not:o #1 { \__kernel_exp_not:w \exp_after:wN {#1} }
-\cs_if_exist:NTF \tex_expanded:D
-  {
-    \cs_new:Npn \exp_not:e #1
-      { \__kernel_exp_not:w \tex_expanded:D { {#1} } }
-  }
-  {
-    \cs_new:Npn \exp_not:e
-      { \__kernel_exp_not:w \exp_args:Ne \prg_do_nothing: }
-  }
+\cs_new:Npn \exp_not:e #1
+  { \__kernel_exp_not:w \tex_expanded:D { {#1} } }
 \cs_new:Npn \exp_not:f #1
   { \__kernel_exp_not:w \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
 \cs_new:Npn \exp_not:V #1
@@ -2698,282 +2558,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   \fi:
   \cs_new:Npn \exp_end_continue_f:nw #1 { `^^@ #1 }
 \group_end:
-\cs_if_exist:NF \tex_expanded:D
-  {
-    \cs_new:Npn \__exp_e:nn #1
-      {
-        \if_false: { \fi:
-          \tl_if_head_is_N_type:nTF {#1}
-            { \__exp_e:N }
-            {
-              \tl_if_head_is_group:nTF {#1}
-                { \__exp_e_group:n }
-                {
-                  \tl_if_empty:nTF {#1}
-                    { \exp_after:wN \__exp_e_end:nn }
-                    { \exp_after:wN \__exp_e_space:nn }
-                  \exp_after:wN { \if_false: } \fi:
-                }
-            }
-          #1
-        }
-      }
-    \cs_new:Npn \__exp_e_end:nn #1#2 { \exp_end: #2 }
-    \cs_new:Npn \__exp_e_space:nn #1#2
-      { \exp_args:Nf \__exp_e:nn {#1} { #2 ~ } }
-    \cs_new:Npn \__exp_e_group:n #1
-      {
-        \exp_after:wN \__exp_e_put:nn
-        \exp_after:wN { \exp_after:wN { \exp_after:wN {
-              \exp:w \if_false: } \fi: \__exp_e:nn {#1} { } } }
-      }
-    \cs_new:Npn \__exp_e_put:nn #1
-      {
-        \exp_args:NNo \exp_args:No \__exp_e_put:nnn
-          { \tl_head:n {#1} } {#1}
-      }
-    \cs_new:Npn \__exp_e_put:nnn #1#2#3
-      { \exp_args:No \__exp_e:nn { \use_none:n #2 } { #3 #1 } }
-    \cs_new:Npn \__exp_e:N #1
-      {
-        \exp_after:wN \__exp_e:Nnn
-        \exp_after:wN #1
-        \exp_after:wN { \if_false: } \fi:
-      }
-    \cs_new:Npn \__exp_e:Nnn #1
-      {
-        \if_case:w
-          \exp_after:wN \if_meaning:w \exp_not:N #1 #1 1 ~ \fi:
-          \token_if_protected_macro:NT #1 { 1 ~ }
-          \token_if_protected_long_macro:NT #1 { 1 ~ }
-          \if_meaning:w \exp_not:n #1 2 ~ \fi:
-          \if_meaning:w \exp_not:N #1 3 ~ \fi:
-          \if_meaning:w \tex_the:D #1 4 ~ \fi:
-          \if_meaning:w \tex_primitive:D #1 5 ~ \fi:
-          0 ~
-          \exp_after:wN \__exp_e_expandable:Nnn
-        \or: \exp_after:wN \__exp_e_protected:Nnn
-        \or: \exp_after:wN \__exp_e_unexpanded:Nnn
-        \or: \exp_after:wN \__exp_e_noexpand:Nnn
-        \or: \exp_after:wN \__exp_e_the:Nnn
-        \or: \exp_after:wN \__exp_e_primitive:Nnn
-        \fi:
-        #1
-      }
-    \cs_new:Npn \__exp_e_protected:Nnn #1#2#3
-      { \__exp_e:nn {#2} { #3 #1 } }
-    \cs_new:Npn \__exp_e_expandable:Nnn #1#2
-      { \exp_args:No \__exp_e:nn { #1 #2 } }
-    \cs_new:Npn \__exp_e_primitive:Nnn #1#2
-      {
-        \if_false: { \fi:
-          \tl_if_head_is_N_type:nTF {#2}
-            { \__exp_e_primitive_aux:NNw #1 }
-            {
-              \msg_expandable_error:nnn { kernel } { e-type }
-                { Missing~primitive~name }
-              \__exp_e_primitive_aux:NNw #1 \c_empty_tl
-            }
-          #2
-        }
-      }
-    \cs_new:Npn \__exp_e_primitive_aux:NNw #1#2
-      {
-        \exp_after:wN \__exp_e_primitive_aux:NNnn
-        \exp_after:wN #1
-        \exp_after:wN #2
-        \exp_after:wN { \if_false: } \fi:
-      }
-    \cs_new:Npn \__exp_e_primitive_aux:NNnn #1#2
-      {
-        \exp_args:Nf \str_case_e:nnTF { \cs_to_str:N #2 }
-          {
-            { unexpanded } { \__exp_e_unexpanded:Nnn \exp_not:n }
-            { noexpand } { \__exp_e_noexpand:Nnn \exp_not:N }
-            { the } { \__exp_e_the:Nnn \tex_the:D }
-            {
-              \sys_if_engine_xetex:T { pdf }
-              \sys_if_engine_luatex:T { pdf }
-              primitive
-            } { \__exp_e_primitive:Nnn #1 }
-          }
-          { \__exp_e_primitive_other:NNnn #1 #2 }
-      }
-    \cs_new:Npn \__exp_e_primitive_other:NNnn #1#2#3
-      {
-        \exp_args:No \__exp_e_primitive_other_aux:nNNnn
-          { #1 #2 #3 }
-          #1 #2 {#3}
-      }
-    \cs_new:Npn \__exp_e_primitive_other_aux:nNNnn #1#2#3#4#5
-      {
-        \str_if_eq:nnTF {#1} { #2 #3 #4 }
-          { \__exp_e:nn {#4} { #5 #2 #3 } }
-          { \__exp_e:nn {#1} {#5} }
-      }
-    \cs_new:Npn \__exp_e_noexpand:Nnn #1#2
-      {
-        \tl_if_head_is_N_type:nTF {#2}
-          { \__exp_e_put:nn } { \__exp_e:nn } {#2}
-      }
-    \cs_new:Npn \__exp_e_unexpanded:Nnn #1 { \__exp_e_unexpanded:nn }
-    \cs_new:Npn \__exp_e_unexpanded:nn #1
-      {
-        \tl_if_head_is_N_type:nTF {#1}
-          {
-            \exp_args:Nf \__exp_e_unexpanded:nn
-              { \__exp_e_unexpanded:nN {#1} #1 }
-          }
-          {
-            \tl_if_head_is_group:nTF {#1}
-              { \__exp_e_put:nn }
-              {
-                \tl_if_empty:nTF {#1}
-                  {
-                    \msg_expandable_error:nnn
-                      { kernel } { e-type }
-                      { \unexpanded missing~brace }
-                    \__exp_e_end:nn
-                  }
-                  { \exp_args:Nf \__exp_e_unexpanded:nn }
-              }
-            {#1}
-          }
-      }
-    \cs_new:Npn \__exp_e_unexpanded:nN #1#2
-      {
-        \exp_after:wN \if_meaning:w \exp_not:N #2 #2
-          \exp_after:wN \use_i:nn
-        \else:
-          \exp_after:wN \use_ii:nn
-        \fi:
-        {
-          \token_if_eq_catcode:NNTF #2 \c_space_token
-            { \exp_stop_f: }
-            {
-              \token_if_eq_meaning:NNTF #2 \scan_stop:
-                { \exp_stop_f: }
-                {
-                  \msg_expandable_error:nnn
-                    { kernel } { e-type }
-                    { \unexpanded missing~brace }
-                  { }
-                }
-            }
-        }
-        {
-          \token_if_eq_meaning:NNTF #2 \exp_not:N
-            {
-              \exp_args:No \tl_if_head_is_N_type:nT { \use_none:n #1 }
-                { \__exp_e_unexpanded:N }
-            }
-            { \exp_after:wN \exp_stop_f: #2 }
-        }
-      }
-    \cs_new:Npn \__exp_e_unexpanded:N #1
-      {
-        \exp_after:wN \if_meaning:w \exp_not:N #1 #1 \else:
-          \exp_after:wN \use_i:nn
-        \fi:
-        \exp_stop_f: #1
-      }
-    \cs_new:Npn \__exp_e_the:Nnn #1#2
-      {
-        \tl_if_head_is_N_type:nTF {#2}
-          { \if_false: { \fi: \__exp_e_the:N #2 } }
-          { \exp_args:No \__exp_e:nn { \tex_the:D #2 } }
-      }
-    \cs_new:Npn \__exp_e_the:N #1
-      {
-        \exp_after:wN \if_meaning:w \exp_not:N #1 #1
-          \exp_after:wN \use_i:nn
-        \else:
-          \exp_after:wN \use_ii:nn
-        \fi:
-        {
-          \if_meaning:w \tex_toks:D #1
-            \exp_after:wN \__exp_e_the_toks:wnn \int_value:w
-            \exp_after:wN \__exp_e_the_toks:n
-            \exp_after:wN { \int_value:w \if_false: } \fi:
-          \else:
-            \__exp_e_if_toks_register:NTF #1
-              { \exp_after:wN \__exp_e_the_toks_reg:N }
-              {
-                \exp_after:wN \__exp_e:nn \exp_after:wN {
-                  \tex_the:D \if_false: } \fi:
-              }
-            \exp_after:wN #1
-          \fi:
-        }
-        {
-          \exp_after:wN \__exp_e_the:Nnn \exp_after:wN ?
-          \exp_after:wN { \exp:w \if_false: } \fi:
-          \exp_after:wN \exp_end: #1
-        }
-      }
-    \cs_new:Npn \__exp_e_the_toks_reg:N #1
-      {
-        \exp_after:wN \__exp_e_put:nn \exp_after:wN {
-          \exp_after:wN {
-            \tex_the:D \if_false: } \fi: #1 }
-      }
-    \cs_new:Npn \__exp_e_the_toks:wnn #1; #2
-      {
-        \exp_args:No \__exp_e_put:nnn
-          { \tex_the:D \tex_toks:D #1 } { ? #2 }
-      }
-    \cs_new:Npn \__exp_e_the_toks:n #1
-      {
-        \tl_if_head_is_N_type:nTF {#1}
-          { \exp_after:wN \__exp_e_the_toks:N \if_false: { \fi: #1 } }
-          { ; {#1} }
-      }
-    \cs_new:Npn \__exp_e_the_toks:N #1
-      {
-        \if_int_compare:w 10 < 9 \token_to_str:N #1 \exp_stop_f:
-          \exp_after:wN \use_i:nn
-        \else:
-          \exp_after:wN \use_ii:nn
-        \fi:
-        {
-          #1
-          \exp_after:wN \__exp_e_the_toks:n
-          \exp_after:wN { \if_false: } \fi:
-        }
-        {
-          \exp_after:wN ;
-          \exp_after:wN { \if_false: } \fi: #1
-        }
-      }
-    \prg_new_conditional:Npnn \__exp_e_if_toks_register:N #1 { TF }
-      {
-        \token_if_toks_register:NTF #1 { \prg_return_true: }
-          {
-            \cs_if_exist:cTF
-              {
-                __exp_e_the_
-                \exp_after:wN \cs_to_str:N
-                \token_to_meaning:N #1
-                :
-              } { \prg_return_true: } { \prg_return_false: }
-          }
-      }
-    \cs_new_eq:NN \__exp_e_the_XeTeXinterchartoks: ?
-    \cs_new_eq:NN \__exp_e_the_errhelp: ?
-    \cs_new_eq:NN \__exp_e_the_everycr: ?
-    \cs_new_eq:NN \__exp_e_the_everydisplay: ?
-    \cs_new_eq:NN \__exp_e_the_everyeof: ?
-    \cs_new_eq:NN \__exp_e_the_everyhbox: ?
-    \cs_new_eq:NN \__exp_e_the_everyjob: ?
-    \cs_new_eq:NN \__exp_e_the_everymath: ?
-    \cs_new_eq:NN \__exp_e_the_everypar: ?
-    \cs_new_eq:NN \__exp_e_the_everyvbox: ?
-    \cs_new_eq:NN \__exp_e_the_output: ?
-    \cs_new_eq:NN \__exp_e_the_pdfpageattr: ?
-    \cs_new_eq:NN \__exp_e_the_pdfpageresources: ?
-    \cs_new_eq:NN \__exp_e_the_pdfpagesattr: ?
-    \cs_new_eq:NN \__exp_e_the_pdfpkmode: ?
-  }
 \cs_new_eq:NN \s__cs_mark \scan_stop:
 \cs_new_eq:NN \s__cs_stop \scan_stop:
 \cs_new:Npn \q__cs_recursion_stop { \q__cs_recursion_stop }
@@ -3214,22 +2798,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       }
     \cs_new_protected:Npn \__cs_generate_internal_test_aux:w
         ##1 #1 ##2 \s__cs_mark ##3 ##4 \s__cs_stop {##3}
-    \cs_if_exist:NTF \tex_expanded:D
-      {
-        \cs_new_eq:NN \__cs_generate_internal_test:Nw
-          \__cs_generate_internal_test_aux:w
-      }
-      {
-        \cs_new_protected:Npn \__cs_generate_internal_test:Nw ##1
-          {
-            \if_meaning:w \tex_expanded:D ##1
-              \exp_after:wN \__cs_generate_internal_test_aux:w
-              \exp_after:wN #1
-            \else:
-              \exp_after:wN \__cs_generate_internal_test_aux:w
-            \fi:
-          }
-      }
+    \cs_new_eq:NN \__cs_generate_internal_test:Nw
+      \__cs_generate_internal_test_aux:w
   }
 \exp_args:No \__cs_tmp:w { \token_to_str:N p }
 \cs_new_protected:Npn \__cs_generate_internal_one_go:NNn #1#2#3
@@ -4415,40 +3985,15 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \cs_new:Npn \__tl_trim_mark: {}
   }
 \__tl_tmp:w { ~ }
-\cs_if_exist:NTF \tex_expanded:D
+\cs_new:Npn \tl_head:n #1
   {
-    \cs_new:Npn \tl_head:n #1
-      {
-        \__kernel_exp_not:w \tex_expanded:D
-          { { \if_false: { \fi: \__tl_head_aux:n #1 { } } } }
-      }
-    \cs_new:Npn \__tl_head_aux:n #1
-      {
-        \__kernel_exp_not:w {#1}
-        \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi:
-      }
+    \__kernel_exp_not:w \tex_expanded:D
+      { { \if_false: { \fi: \__tl_head_aux:n #1 { } } } }
   }
+\cs_new:Npn \__tl_head_aux:n #1
   {
-    \cs_new:Npn \tl_head:n #1
-      {
-        \__kernel_exp_not:w
-          \if_false: { \fi: \__tl_head_auxi:nw #1 { } \s__tl_stop }
-      }
-    \cs_new:Npn \__tl_head_auxi:nw #1#2 \s__tl_stop
-      {
-        \exp_after:wN \__tl_head_auxii:n \exp_after:wN {
-          \if_false: } \fi: {#1}
-      }
-    \exp_args:Nno \use:n
-      { \cs_new:Npn \__tl_head_auxii:n #1 }
-      {
-        \__tl_if_empty_if:o { \use_none:n #1 }
-          \exp_after:wN \use_ii:nnn
-        \fi:
-        \use_ii:nn
-          {#1}
-          { \if_false: { \fi: \__tl_head_auxi:nw #1 } }
-      }
+    \__kernel_exp_not:w {#1}
+    \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi:
   }
 \cs_generate_variant:Nn \tl_head:n { V , v , f }
 \cs_new:Npn \tl_head:w #1#2 \q_stop {#1}
@@ -8927,20 +8472,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
           \exp_after:wN \exp_end:
           \tex_Ucharcat:D #1 \exp_stop_f: #2 \exp_stop_f:
         }
-      \cs_if_exist:NF \tex_expanded:D
-        {
-          \cs_new_eq:NN \__char_generate_auxii:nnw \__char_generate_aux:nnw
-          \cs_gset:Npn \__char_generate_aux:nnw #1#2#3 \exp_end:
-            {
-              #3
-              \if_int_compare:w #2 = 13 \exp_stop_f:
-                \msg_expandable_error:nn { char } { active }
-              \else:
-                \__char_generate_auxii:nnw {#1} {#2}
-              \fi:
-              \exp_end:
-            }
-        }
   \else:
     \char_set_catcode_active:n { 0 }
     \tl_set:Nn \l__char_tmp_tl { \exp_not:N ^^@ \exp_not:N \or: }
@@ -9803,42 +9334,24 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   }
 \cs_new:Npn \__prop_count:nn #1#2 { + 1 }
 \cs_generate_variant:Nn \prop_count:N { c }
-\cs_if_exist:NTF \tex_expanded:D
+\cs_new:Npn \prop_to_keyval:N #1
   {
-    \cs_new:Npn \prop_to_keyval:N #1
-      {
-        \__kernel_exp_not:w
-          \prop_if_empty:NTF #1
-            { {} }
-            {
-              \exp_after:wN \exp_after:wN \exp_after:wN
+    \__kernel_exp_not:w
+      \prop_if_empty:NTF #1
+        { {} }
+        {
+          \exp_after:wN \exp_after:wN \exp_after:wN
+          {
+            \tex_expanded:D
               {
-                \tex_expanded:D
-                  {
-                    \__kernel_exp_not:w { \use_none:n }
-                    \prop_map_function:NN #1 \__prop_to_keyval:nn
-                  }
+                \__kernel_exp_not:w { \use_none:n }
+                \prop_map_function:NN #1 \__prop_to_keyval:nn
               }
-            }
-      }
-    \cs_new:Npn \__prop_to_keyval:nn #1#2
-      { , ~ {#1} =~ { \__kernel_exp_not:w {#2} } }
-  }
-  {
-    \cs_new:Npn \prop_to_keyval:N #1
-      {
-        \__kernel_exp_not:w
-          \prop_if_empty:NTF #1
-            { {} }
-            {
-              \prop_map_function:NN #1 \__prop_to_keyval:nnw
-              \__prop_to_keyval_exp_after:wN { \use_none:n }
-            }
-      }
-    \cs_new_eq:NN \__prop_to_keyval_exp_after:wN \exp_after:wN
-    \cs_new:Npn \__prop_to_keyval:nnw #1#2#3 \__prop_to_keyval_exp_after:wN #4
-      { #3 \__prop_to_keyval_exp_after:wN { #4 , ~ {#1} =~ {#2} } }
+          }
+        }
   }
+\cs_new:Npn \__prop_to_keyval:nn #1#2
+  { , ~ {#1} =~ { \__kernel_exp_not:w {#2} } }
 \prg_new_protected_conditional:Npnn \prop_pop:NnN #1#2#3 { T , F , TF }
   {
     \__prop_split:NnTF #1 {#2}
@@ -10870,11 +10383,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   { Relation~'#1'~not~among~=,<,>,==,!=,<=,>=. }
 \msg_new:nnn { kernel } { zero-step }
   { Zero~step~size~for~function~#1. }
-\cs_if_exist:NF \tex_expanded:D
-  {
-    \msg_new:nnn { kernel } { e-type }
-      { #1 ~ in~e-type~argument }
-  }
 \msg_new:nnn { clist } { show }
   {
     The~comma~list~ \tl_if_empty:nF {#1} { #1 ~ }
@@ -11880,18 +11388,18 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \tl_if_blank:nTF {#2}
       {
         \seq_map_tokens:Nn \l_file_search_path_seq
-          { \__file_full_name_aux:Nnn \seq_map_break:n {#1} }
+          { \__file_full_name_aux:Nnnn \seq_map_break:n {#1} { / } }
         \cs_if_exist:NT \input at path
           {
             \tl_map_tokens:Nn \input at path
-              { \__file_full_name_aux:Nnn \tl_map_break:n {#1} }
+              { \__file_full_name_aux:Nnnn \tl_map_break:n {#1} { } }
           }
         \__file_name_end:
       }
       { \__file_ext_check:nn {#1} {#2} }
   }
-\cs_new:Npn \__file_full_name_aux:Nnn #1#2#3
-  { \exp_args:Ne \__file_full_name_aux:nN { \tl_to_str:n {#3} / #2 } #1 }
+\cs_new:Npn \__file_full_name_aux:Nnnn #1#2#3#4
+  { \exp_args:Ne \__file_full_name_aux:nN { \tl_to_str:n {#4} #3 #2 } #1 }
 \cs_new:Npn \__file_full_name_aux:nN #1
   { \exp_args:Nne \__file_full_name_aux:nnN {#1} { \__file_full_name_aux:n {#1} } }
 \cs_new:Npn \__file_full_name_aux:nnN #1 #2 #3
@@ -11941,21 +11449,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
           {#3}
       }
   }
-\cs_if_exist:NF \tex_filesize:D
-  {
-    \cs_gset:Npn \file_full_name:n #1
-      {
-        \msg_expandable_error:nnn
-          { kernel } { primitive-not-available }
-          { \(pdf)filesize }
-      }
-  }
-\msg_new:nnnn { kernel } { primitive-not-available }
-  { Primitive~\token_to_str:N #1 not~available }
-  {
-    The~version~of~your~TeX~engine~does~not~provide~functionality~equivalent~to~
-    the~#1~primitive.
-  }
 \cs_new_protected:Npn \file_get_full_name:nN #1#2
   {
     \file_get_full_name:nNF {#1} #2
@@ -11973,50 +11466,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_generate_variant:Nn \file_get_full_name:nNT  { V }
 \cs_generate_variant:Nn \file_get_full_name:nNF  { V }
 \cs_generate_variant:Nn \file_get_full_name:nNTF { V }
-\cs_if_exist:NF \tex_filesize:D
-  {
-    \prg_set_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF }
-      {
-        \__kernel_tl_set:Nx \l__file_base_name_tl
-          { \__kernel_file_name_sanitize:n {#1} }
-        \__file_get_full_name_search:nN { } \use:n
-        \seq_map_inline:Nn \l_file_search_path_seq
-          { \__file_get_full_name_search:nN { ##1 / } \seq_map_break:n }
-        \cs_if_exist:NT \input at path
-          {
-            \tl_map_inline:Nn \input at path
-              { \__file_get_full_name_search:nN { ##1 } \tl_map_break:n }
-          }
-        \tl_set:Nn \l__file_full_name_tl { \q_no_value }
-        \prg_break_point:
-        \quark_if_no_value:NTF \l__file_full_name_tl
-          {
-            \ior_close:N \g__file_internal_ior
-            \prg_return_false:
-          }
-          {
-            \file_parse_full_name:VNNN \l__file_full_name_tl
-              \l__file_dir_str \l__file_name_str \l__file_ext_str
-            \str_if_empty:NT \l__file_ext_str
-              {
-                \__kernel_ior_open:No \g__file_internal_ior
-                  { \l__file_full_name_tl .tex }
-                \ior_if_eof:NF \g__file_internal_ior
-                   { \tl_put_right:Nn \l__file_full_name_tl { .tex } }
-              }
-            \ior_close:N \g__file_internal_ior
-            \tl_set_eq:NN #2 \l__file_full_name_tl
-            \prg_return_true:
-          }
-      }
-  }
-\cs_new_protected:Npn \__file_get_full_name_search:nN #1#2
-  {
-    \__kernel_tl_set:Nx \l__file_full_name_tl
-      { \tl_to_str:n {#1} \l__file_base_name_tl }
-    \__kernel_ior_open:No \g__file_internal_ior \l__file_full_name_tl
-    \ior_if_eof:NF \g__file_internal_ior { #2 { \prg_break: } }
-  }
 \ior_new:N \g__file_internal_ior
 \cs_new:Npn \file_size:n #1
   { \__file_details:nn {#1} { size } }
@@ -12125,26 +11574,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       { \prg_return_false: }
       { \prg_return_true: }
   }
-\cs_if_exist:NF \tex_filesize:D
-  {
-    \cs_set_protected:Npn \__file_get_details:nnN #1#2#3
-       {
-        \tl_clear:N #3
-        \msg_error:nnx
-          { kernel } { primitive-not-available }
-          {
-            \token_to_str:N \(pdf)file
-            \str_case:nn {#2}
-              {
-                { hex_dump } { dump }
-                { mdfive_hash } { mdfivesum }
-                { timestamp } { moddate }
-                { size } { size }
-              }
-          }
-        \prg_return_false:
-      }
-  }
 \cs_new_protected:Npn \file_get_hex_dump:nnnN #1#2#3#4
   {
     \file_get_hex_dump:nnnNF {#1} {#2} {#3} #4
@@ -12201,17 +11630,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       }
   }
 \cs_new_eq:NN \__file_timestamp:n \tex_filemoddate:D
-\cs_if_exist:NF \__file_timestamp:n
-  {
-    \prg_set_conditional:Npnn \file_compare_timestamp:nNn #1#2#3
-      { p , T , F , TF }
-      {
-        \msg_expandable_error:nnn
-          { kernel } { primitive-not-available }
-          { \(pdf)filemoddate }
-        \prg_return_false:
-      }
-  }
 \prg_new_protected_conditional:Npnn \file_if_exist:n #1 { T , F , TF }
   {
     \file_get_full_name:nNTF {#1} \l__file_full_name_tl
@@ -13053,26 +12471,14 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \group_begin:
   \cs_set_protected:Npn \__keyval_tmp:w #1#2
     {
-      \cs_if_exist:NTF \tex_expanded:D
+      \cs_new:Npn \keyval_parse:nnn ##1 ##2 ##3
         {
-          \cs_new:Npn \keyval_parse:nnn ##1 ##2 ##3
+          \__kernel_exp_not:w \tex_expanded:D
             {
-              \__kernel_exp_not:w \tex_expanded:D
-                {
-                  {
-                    \__keyval_loop_active:nnw {##1} {##2}
-                      \s__keyval_mark ##3 #1 \s__keyval_tail #1
-                  }
-                }
-            }
-        }
-        {
-          \cs_new:Npn \keyval_parse:nnn ##1 ##2 ##3
-            {
-              \group_align_safe_begin:
-              \__keyval_loop_active:nnw {##1} {##2}
-                \s__keyval_mark ##3 #1 \s__keyval_tail #1
-              \group_align_safe_end:
+              {
+                \__keyval_loop_active:nnw {##1} {##2}
+                  \s__keyval_mark ##3 #1 \s__keyval_tail #1
+              }
             }
         }
       \cs_new_eq:NN \keyval_parse:NNn \keyval_parse:nnn
@@ -13211,9 +12617,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
           \__keyval_loop_other:nnw {##2}
         }
     }
-  \cs_if_exist:NTF \tex_expanded:D
-    { \__keyval_tmp:w { } { } }
-    { \__keyval_tmp:w \group_align_safe_end: \group_align_safe_begin: }
+  \__keyval_tmp:w { } { }
 \group_end:
 \cs_new:Npn \__keyval_if_empty:w #1 \s__keyval_mark \s__keyval_stop { }
 \cs_new:Npn \__keyval_if_blank:w \s__keyval_mark #1 { \__keyval_if_empty:w \s__keyval_mark }
diff --git a/texmf/tex/latex/l3kernel/expl3-generic.tex b/texmf/tex/latex/l3kernel/expl3-generic.tex
index 0dd38b9e..8cfb6fcc 100644
--- a/texmf/tex/latex/l3kernel/expl3-generic.tex
+++ b/texmf/tex/latex/l3kernel/expl3-generic.tex
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-11}%
+\def\ExplFileDate{2023-05-15}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11
diff --git a/texmf/tex/latex/l3kernel/expl3.ltx b/texmf/tex/latex/l3kernel/expl3.ltx
index e9b7a23e..0d0af2b2 100644
--- a/texmf/tex/latex/l3kernel/expl3.ltx
+++ b/texmf/tex/latex/l3kernel/expl3.ltx
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-11}%
+\def\ExplFileDate{2023-05-15}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11
diff --git a/texmf/tex/latex/l3kernel/expl3.sty b/texmf/tex/latex/l3kernel/expl3.sty
index 7df6fceb..ea9ae807 100644
--- a/texmf/tex/latex/l3kernel/expl3.sty
+++ b/texmf/tex/latex/l3kernel/expl3.sty
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-11}%
+\def\ExplFileDate{2023-05-15}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%





More information about the latex3-commits mailing list.