[latex3-commits] [git/LaTeX3-latex3-latex2e] develop: Update l3kernel and l3backend to 2020-06-03 (602c0d7f)

Joseph Wright joseph.wright at morningstar2.co.uk
Wed Jun 3 09:20:44 CEST 2020


Repository : https://github.com/latex3/latex2e
On branch  : develop
Link       : https://github.com/latex3/latex2e/commit/602c0d7f112c002e862c0a8fbb3a4e4c61a0cea2

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

commit 602c0d7f112c002e862c0a8fbb3a4e4c61a0cea2
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Wed Jun 3 08:20:44 2020 +0100

    Update l3kernel and l3backend to 2020-06-03


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

602c0d7f112c002e862c0a8fbb3a4e4c61a0cea2
 texmf/tex/latex/l3backend/l3backend-dvipdfmx.def  | 14 ++--
 texmf/tex/latex/l3backend/l3backend-dvips.def     | 32 +++++---
 texmf/tex/latex/l3backend/l3backend-dvisvgm.def   | 18 ++---
 texmf/tex/latex/l3backend/l3backend-pdfmode.def   | 24 +++---
 texmf/tex/latex/l3backend/l3backend-xdvipdfmx.def | 18 ++---
 texmf/tex/latex/l3kernel/expl3-code.tex           | 93 +++++++++++++++--------
 texmf/tex/latex/l3kernel/expl3-generic.tex        |  2 +-
 texmf/tex/latex/l3kernel/expl3.ltx                |  2 +-
 texmf/tex/latex/l3kernel/expl3.sty                |  2 +-
 9 files changed, 125 insertions(+), 80 deletions(-)

diff --git a/texmf/tex/latex/l3backend/l3backend-dvipdfmx.def b/texmf/tex/latex/l3backend/l3backend-dvipdfmx.def
index 2e4d20ed..a82491c6 100644
--- a/texmf/tex/latex/l3backend/l3backend-dvipdfmx.def
+++ b/texmf/tex/latex/l3backend/l3backend-dvipdfmx.def
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-dvipdfmx.def}{2020-05-05}{}
+  {l3backend-dvipdfmx.def}{2020-06-03}{}
   {L3 backend support: dvipdfmx}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -58,14 +58,14 @@
               }
               {
                 \exp_last_unbraced:Nx \__color_backend_pickup:w
-                  { \current at color } \q_stop #1
+                  { \current at color } \s__color_stop #1
               }
           }
-        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \q_stop #3
+        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
           { \tl_set:Nn #3 { #1 ~ #2 } }
       }
   }
-\cs_new_protected:Npn \__color_backend_cmyk:nnnn #1#2#3#4
+\cs_new_protected:Npn \__color_backend_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
   {
     \__color_backend_select:x
       {
@@ -74,14 +74,14 @@
         \fp_eval:n {#3} ~ \fp_eval:n {#4}
       }
   }
-\cs_new_protected:Npn \__color_backend_gray:n #1
+\cs_new_protected:Npn \__color_backend_gray:w #1 \s__color_stop
   { \__color_backend_select:x { gray~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \__color_backend_rgb:nnn #1#2#3
+\cs_new_protected:Npn \__color_backend_rgb:w #1 ~ #2 ~ #3 \s__color_stop
   {
     \__color_backend_select:x
       { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
   }
-\cs_new_protected:Npn \__color_backend_spot:nn #1#2
+\cs_new_protected:Npn \__color_backend_spot:w #1 ~ #2 \s__color_stop
   { \__color_backend_select:n { #1 } }
 \cs_new_protected:Npn \__color_backend_select:n #1
   {
diff --git a/texmf/tex/latex/l3backend/l3backend-dvips.def b/texmf/tex/latex/l3backend/l3backend-dvips.def
index bc6e7ba3..4c768d96 100644
--- a/texmf/tex/latex/l3backend/l3backend-dvips.def
+++ b/texmf/tex/latex/l3backend/l3backend-dvips.def
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-dvips.def}{2020-05-05}{}
+  {l3backend-dvips.def}{2020-06-03}{}
   {L3 backend support: dvips}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -79,14 +79,14 @@
               }
               {
                 \exp_last_unbraced:Nx \__color_backend_pickup:w
-                  { \current at color } \q_stop #1
+                  { \current at color } \s__color_stop #1
               }
           }
-        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \q_stop #3
+        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
           { \tl_set:Nn #3 { #1 ~ #2 } }
       }
   }
-\cs_new_protected:Npn \__color_backend_cmyk:nnnn #1#2#3#4
+\cs_new_protected:Npn \__color_backend_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
   {
     \__color_backend_select:x
       {
@@ -95,14 +95,14 @@
         \fp_eval:n {#3} ~ \fp_eval:n {#4}
       }
   }
-\cs_new_protected:Npn \__color_backend_gray:n #1
+\cs_new_protected:Npn \__color_backend_gray:w #1 \s__color_stop
   { \__color_backend_select:x { gray~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \__color_backend_rgb:nnn #1#2#3
+\cs_new_protected:Npn \__color_backend_rgb:w #1 ~ #2 ~ #3 \s__color_stop
   {
     \__color_backend_select:x
       { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
   }
-\cs_new_protected:Npn \__color_backend_spot:nn #1#2
+\cs_new_protected:Npn \__color_backend_spot:w #1 ~ #2 \s__color_stop
   { \__color_backend_select:n { #1 } }
 \cs_new_protected:Npn \__color_backend_select:n #1
   {
@@ -472,13 +472,28 @@
 \cs_new_protected:Npn \__pdf_backend_object_write_array:nn #1#2
   {
     \__pdf_backend_pdfmark:x
-      { #1 [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL }
+      { #1 ~0~ [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL }
   }
 \cs_new_protected:Npn \__pdf_backend_object_write_dict:nn #1#2
   {
     \__pdf_backend_pdfmark:x
       { #1 << \exp_not:n {#2} >> /PUT }
   }
+\cs_new_protected:Npn \__pdf_backend_object_write_fstream:nn #1#2
+  {
+    \exp_args:Nx
+      \__pdf_backend_object_write_fstream:nnn {#1} #2
+  }
+\cs_new_protected:Npn \__pdf_backend_object_write_fstream:nnn #1#2#3
+  {
+    \__kernel_backend_postscript:n
+      {
+        SDict ~ begin ~
+        mark ~ #1 ~ << #2 >> /PUT ~ pdfmark ~
+        mark ~ #1 ~ ( #3 )~ ( r )~ file ~ /PUT ~ pdfmark ~
+        end
+      }
+  }
 \cs_new_protected:Npn \__pdf_backend_object_write_stream:nn #1#2
   {
     \exp_args:Nx
@@ -488,7 +503,6 @@
   {
     \__kernel_backend_postscript:n
       {
-        [nobreak]
         mark ~ #1 ~ ( #3 ) /PUT ~ pdfmark ~
         mark ~ #1 ~ << #2 >> /PUT ~ pdfmark
       }
diff --git a/texmf/tex/latex/l3backend/l3backend-dvisvgm.def b/texmf/tex/latex/l3backend/l3backend-dvisvgm.def
index c548b96c..06d084a2 100644
--- a/texmf/tex/latex/l3backend/l3backend-dvisvgm.def
+++ b/texmf/tex/latex/l3backend/l3backend-dvisvgm.def
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-dvisvgm.def}{2020-05-05}{}
+  {l3backend-dvisvgm.def}{2020-06-03}{}
   {L3 backend support: dvisvgm}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -59,14 +59,14 @@
               }
               {
                 \exp_last_unbraced:Nx \__color_backend_pickup:w
-                  { \current at color } \q_stop #1
+                  { \current at color } \s__color_stop #1
               }
           }
-        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \q_stop #3
+        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
           { \tl_set:Nn #3 { #1 ~ #2 } }
       }
   }
-\cs_new_protected:Npn \__color_backend_cmyk:nnnn #1#2#3#4
+\cs_new_protected:Npn \__color_backend_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
   {
     \__color_backend_select:x
       {
@@ -75,14 +75,14 @@
         \fp_eval:n {#3} ~ \fp_eval:n {#4}
       }
   }
-\cs_new_protected:Npn \__color_backend_gray:n #1
+\cs_new_protected:Npn \__color_backend_gray:w #1 \s__color_stop
   { \__color_backend_select:x { gray~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \__color_backend_rgb:nnn #1#2#3
+\cs_new_protected:Npn \__color_backend_rgb:w #1 ~ #2 ~ #3 \s__color_stop
   {
     \__color_backend_select:x
       { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
   }
-\cs_new_protected:Npn \__color_backend_spot:nn #1#2
+\cs_new_protected:Npn \__color_backend_spot:w #1 ~ #2 \s__color_stop
   { \__color_backend_select:n { #1 } }
 \cs_new_protected:Npn \__color_backend_select:n #1
   {
@@ -498,11 +498,11 @@
          dvisvgm:img~
          \dim_to_decimal:n { \l_graphics_ury_dim } ~
          \dim_to_decimal:n { \l_graphics_ury_dim } ~
-         \__graphics_backend_include_bitmap_quote:w #1 " #1 " \q_stop
+         \__graphics_backend_include_bitmap_quote:w #1 " #1 " \s__graphics_stop
        }
   }
 \cs_new_eq:NN \__graphics_backend_include_jpg:n \__graphics_backend_include_png:n
-\cs_new:Npn \__graphics_backend_include_bitmap_quote:w #1 " #2 " #3 \q_stop
+\cs_new:Npn \__graphics_backend_include_bitmap_quote:w #1 " #2 " #3 \s__graphics_stop
   { " #2 " }
 %% File: l3backend-pdf.dtx
 \box_new:N \l__pdf_internal_box
diff --git a/texmf/tex/latex/l3backend/l3backend-pdfmode.def b/texmf/tex/latex/l3backend/l3backend-pdfmode.def
index 17ebeeaf..1e89dc85 100644
--- a/texmf/tex/latex/l3backend/l3backend-pdfmode.def
+++ b/texmf/tex/latex/l3backend/l3backend-pdfmode.def
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-pdfmode.def}{2020-05-05}{}
+  {l3backend-pdfmode.def}{2020-06-03}{}
   {L3 backend support: PDF mode}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -76,10 +76,10 @@
         \cs_set_protected:Npn \__color_backend_pickup:N #1
           {
             \exp_last_unbraced:Nx \__color_backend_pickup:w
-              { \current at color } ~ 0 ~ 0 ~ 0 \q_stop #1
+              { \current at color } ~ 0 ~ 0 ~ 0 \s__color_stop #1
           }
         \cs_new_protected:Npn \__color_backend_pickup:w
-          #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \q_stop #7
+          #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s__color_stop #7
           {
             \str_if_eq:nnTF {#2} { g }
               { \tl_set:Nn #7 { gray ~ #1 } }
@@ -104,39 +104,39 @@
       }
   }
 \int_new:N \l__kernel_color_stack_int
-\cs_new_protected:Npn \__color_backend_cmyk:nnnn #1#2#3#4
+\cs_new_protected:Npn \__color_backend_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
   {
      \use:x
        {
-         \__color_backend_cmyk_aux:nnnn
+         \__color_backend_cmyk:nnnn
            { \fp_eval:n {#1} }
            { \fp_eval:n {#2} }
            { \fp_eval:n {#3} }
            { \fp_eval:n {#4} }
        }
   }
-\cs_new_protected:Npn \__color_backend_cmyk_aux:nnnn #1#2#3#4
+\cs_new_protected:Npn \__color_backend_cmyk:nnnn #1#2#3#4
   {
     \__color_backend_select:n
       { #1 ~ #2 ~ #3 ~ #4 ~ k ~ #1 ~ #2 ~ #3 ~ #4 ~ K }
   }
+\cs_new_protected:Npn \__color_backend_gray:w #1 \s__color_stop
+  { \exp_args:Nx \__color_backend_gray:n { \fp_eval:n {#1} } }
 \cs_new_protected:Npn \__color_backend_gray:n #1
-  { \exp_args:Nx \__color_backend_gray_aux:n { \fp_eval:n {#1} } }
-\cs_new_protected:Npn \__color_backend_gray_aux:n #1
   { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } }
-\cs_new_protected:Npn \__color_backend_rgb:nnn #1#2#3
+\cs_new_protected:Npn \__color_backend_rgb:w #1~ #2 ~ #3 \s__color_stop
   {
      \use:x
        {
-         \__color_backend_rgb_aux:nnn
+         \__color_backend_rgb:nnn
            { \fp_eval:n {#1} }
            { \fp_eval:n {#2} }
            { \fp_eval:n {#3} }
        }
   }
-\cs_new_protected:Npn \__color_backend_rgb_aux:nnn #1#2#3
+\cs_new_protected:Npn \__color_backend_rgb:nnn #1#2#3
   { \__color_backend_select:n { #1 ~ #2 ~ #3 ~ rg ~ #1 ~ #2 ~ #3 ~ RG } }
-\cs_new_protected:Npn \__color_backend_spot:nn #1#2
+\cs_new_protected:Npn \__color_backend_spot:w #1 ~ #2 \s__color_stop
   { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ sc ~ #2 ~ SC } }
 \cs_new_protected:Npx \__color_backend_select:n #1
   {
diff --git a/texmf/tex/latex/l3backend/l3backend-xdvipdfmx.def b/texmf/tex/latex/l3backend/l3backend-xdvipdfmx.def
index 8065a5ce..e385c1bc 100644
--- a/texmf/tex/latex/l3backend/l3backend-xdvipdfmx.def
+++ b/texmf/tex/latex/l3backend/l3backend-xdvipdfmx.def
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-xdvipdfmx.def}{2020-05-05}{}
+  {l3backend-xdvipdfmx.def}{2020-06-03}{}
   {L3 backend support: xdvipdfmx}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -58,14 +58,14 @@
               }
               {
                 \exp_last_unbraced:Nx \__color_backend_pickup:w
-                  { \current at color } \q_stop #1
+                  { \current at color } \s__color_stop #1
               }
           }
-        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \q_stop #3
+        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
           { \tl_set:Nn #3 { #1 ~ #2 } }
       }
   }
-\cs_new_protected:Npn \__color_backend_cmyk:nnnn #1#2#3#4
+\cs_new_protected:Npn \__color_backend_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
   {
     \__color_backend_select:x
       {
@@ -74,14 +74,14 @@
         \fp_eval:n {#3} ~ \fp_eval:n {#4}
       }
   }
-\cs_new_protected:Npn \__color_backend_gray:n #1
+\cs_new_protected:Npn \__color_backend_gray:w #1 \s__color_stop
   { \__color_backend_select:x { gray~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \__color_backend_rgb:nnn #1#2#3
+\cs_new_protected:Npn \__color_backend_rgb:w #1 ~ #2 ~ #3 \s__color_stop
   {
     \__color_backend_select:x
       { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
   }
-\cs_new_protected:Npn \__color_backend_spot:nn #1#2
+\cs_new_protected:Npn \__color_backend_spot:w #1 ~ #2 \s__color_stop
   { \__color_backend_select:n { #1 } }
 \cs_new_protected:Npn \__color_backend_select:n #1
   {
@@ -480,12 +480,12 @@
 \cs_new_protected:Npn \__graphics_backend_include_pdf:n #1
   {
     \tex_XeTeXpdffile:D
-      \__graphics_backend_include_pdf_quote:w #1 "#1" \q_stop \c_space_tl
+      \__graphics_backend_include_pdf_quote:w #1 "#1" \s__graphics_stop \c_space_tl
       \int_compare:nNnT \l_graphics_page_int > 0
         { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
         \exp_after:wN \__graphics_backend_getbb_pagebox:w \l_graphics_pagebox_tl
   }
-\cs_new:Npn \__graphics_backend_include_pdf_quote:w #1 " #2 " #3 \q_stop
+\cs_new:Npn \__graphics_backend_include_pdf_quote:w #1 " #2 " #3 \s__graphics_stop
   { " #2 " }
 %% File: l3backend-pdf.dtx
 \box_new:N \l__pdf_internal_box
diff --git a/texmf/tex/latex/l3kernel/expl3-code.tex b/texmf/tex/latex/l3kernel/expl3-code.tex
index 5249b817..d1eab62b 100644
--- a/texmf/tex/latex/l3kernel/expl3-code.tex
+++ b/texmf/tex/latex/l3kernel/expl3-code.tex
@@ -68,7 +68,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-05-15}%
+\def\ExplFileDate{2020-06-03}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -21066,25 +21066,27 @@
 \bool_new:N \g__str_error_bool
 \flag_new:n { str_byte }
 \flag_new:n { str_error }
-\prg_new_conditional:Npnn \__str_if_contains_char:NN #1#2 { T , TF }
+\prg_new_conditional:Npnn \__str_if_contains_char:Nn #1#2 { T , TF }
   {
-    \exp_after:wN \__str_if_contains_char_aux:NN \exp_after:wN #2
-      #1 { \prg_break:n { ? \fi: } }
+    \exp_after:wN \__str_if_contains_char_aux:nn \exp_after:wN {#1} {#2}
+      { \prg_break:n { ? \fi: } }
     \prg_break_point:
     \prg_return_false:
   }
-\prg_new_conditional:Npnn \__str_if_contains_char:nN #1#2 { TF }
+\cs_new:Npn \__str_if_contains_char_aux:nn #1#2
+  { \__str_if_contains_char_auxi:nN {#2} #1 }
+\prg_new_conditional:Npnn \__str_if_contains_char:nn #1#2 { TF }
   {
-    \__str_if_contains_char_aux:NN #2 #1 { \prg_break:n { ? \fi: } }
+    \__str_if_contains_char_auxi:nN {#2} #1 { \prg_break:n { ? \fi: } }
     \prg_break_point:
     \prg_return_false:
   }
-\cs_new:Npn \__str_if_contains_char_aux:NN #1#2
+\cs_new:Npn \__str_if_contains_char_auxi:nN #1#2
   {
     \if_charcode:w #1 #2
       \exp_after:wN \__str_if_contains_char_true:
     \fi:
-    \__str_if_contains_char_aux:NN #1
+    \__str_if_contains_char_auxi:nN {#1}
   }
 \cs_new:Npn \__str_if_contains_char_true:
   { \prg_break:n { \prg_return_true: \use_none:n } }
@@ -21777,22 +21779,22 @@
 \str_const:Nn \c__str_escape_name_not_str { ! " $ & ' } %$
 \str_const:Nn \c__str_escape_name_str { {}/<>[] }
 \cs_new_protected:Npn \__str_convert_escape_name:
-  { \__str_convert_gmap:N \__str_escape_name_char:N }
-\cs_new:Npn \__str_escape_name_char:N #1
+  { \__str_convert_gmap:N \__str_escape_name_char:n }
+\cs_new:Npn \__str_escape_name_char:n #1
   {
-    \__str_if_escape_name:NTF #1 {#1}
+    \__str_if_escape_name:nTF {#1} {#1}
       { \c_hash_str \__str_output_hexadecimal:n {`#1} }
   }
-\prg_new_conditional:Npnn \__str_if_escape_name:N #1 { TF }
+\prg_new_conditional:Npnn \__str_if_escape_name:n #1 { TF }
   {
     \if_int_compare:w `#1 < "2A \exp_stop_f:
-      \__str_if_contains_char:NNTF \c__str_escape_name_not_str #1
+      \__str_if_contains_char:NnTF \c__str_escape_name_not_str {#1}
         \prg_return_true: \prg_return_false:
     \else:
       \if_int_compare:w `#1 > "7E \exp_stop_f:
         \prg_return_false:
       \else:
-        \__str_if_contains_char:NNTF \c__str_escape_name_str #1
+        \__str_if_contains_char:NnTF \c__str_escape_name_str {#1}
           \prg_return_false: \prg_return_true:
       \fi:
     \fi:
@@ -21805,8 +21807,8 @@
   {
     \__str_if_escape_string:NTF #1
       {
-        \__str_if_contains_char:NNT
-          \c__str_escape_string_str #1
+        \__str_if_contains_char:NnT
+          \c__str_escape_string_str {#1}
           { \c_backslash_str }
         #1
       }
@@ -21830,22 +21832,22 @@
     \fi:
   }
 \cs_new_protected:Npn \__str_convert_escape_url:
-  { \__str_convert_gmap:N \__str_escape_url_char:N }
-\cs_new:Npn \__str_escape_url_char:N #1
+  { \__str_convert_gmap:N \__str_escape_url_char:n }
+\cs_new:Npn \__str_escape_url_char:n #1
   {
-    \__str_if_escape_url:NTF #1 {#1}
+    \__str_if_escape_url:nTF {#1} {#1}
       { \c_percent_str \__str_output_hexadecimal:n { `#1 } }
   }
-\prg_new_conditional:Npnn \__str_if_escape_url:N #1 { TF }
+\prg_new_conditional:Npnn \__str_if_escape_url:n #1 { TF }
   {
     \if_int_compare:w `#1 < "41 \exp_stop_f:
-      \__str_if_contains_char:nNTF { "-.<> } #1
+      \__str_if_contains_char:nnTF { "-.<> } {#1}
         \prg_return_true: \prg_return_false:
     \else:
       \if_int_compare:w `#1 > "7E \exp_stop_f:
         \prg_return_false:
       \else:
-        \__str_if_contains_char:nNTF { [ ] } #1
+        \__str_if_contains_char:nnTF { [ ] } {#1}
           \prg_return_false: \prg_return_true:
       \fi:
     \fi:
@@ -22330,6 +22332,43 @@
       \prg_break:
     }
 \group_end:
+\cs_new:Npn \str_convert_pdfname:n #1
+  {
+    \exp_args:Ne \tl_to_str:n
+      { \str_map_function:nN {#1} \__str_convert_pdfname:n }
+  }
+\bool_lazy_or:nnTF
+  { \sys_if_engine_luatex_p: }
+  { \sys_if_engine_xetex_p: }
+  {
+    \cs_new:Npn \__str_convert_pdfname:n #1
+      {
+        \int_compare:nNnTF { `#1 } > { "7F }
+          { \__str_convert_pdfname_bytes:n {#1} }
+          { \__str_escape_name_char:n {#1} }
+      }
+    \cs_new:Npn \__str_convert_pdfname_bytes:n #1
+      {
+        \exp_args:Ne \__str_convert_pdfname_bytes_aux:n
+          { \char_to_utfviii_bytes:n {`#1} }
+      }
+    \cs_new:Npn \__str_convert_pdfname_bytes_aux:n #1
+      { \__str_convert_pdfname_bytes_aux:nnnn #1 }
+    \cs_new:Npx \__str_convert_pdfname_bytes_aux:nnnn #1#2#3#4
+      {
+        \c_hash_str \exp_not:N \__str_output_hexadecimal:n {#1}
+        \c_hash_str \exp_not:N \__str_output_hexadecimal:n {#2}
+        \exp_not:N \tl_if_blank:nF {#3}
+          {
+            \c_hash_str \exp_not:N \__str_output_hexadecimal:n {#3}
+            \exp_not:N \tl_if_blank:nF {#4}
+              {
+                \c_hash_str \exp_not:N \__str_output_hexadecimal:n {#4}
+              }
+          }
+      }
+  }
+  { \cs_new_eq:NN \__str_convert_pdfname:n \__str_escape_name_char:n }
 %% File: l3tl-analysis.dtx
 \scan_new:N \s__tl
 \cs_new_eq:NN \l__tl_analysis_token ?
@@ -26656,15 +26695,7 @@
   { \__color_select:w #1 \s__color_stop }
 \cs_generate_variant:Nn \__color_select:n { V }
 \cs_new_protected:Npn \__color_select:w #1 ~ #2 \s__color_stop
-  { \use:c { __color_select_ #1 :w } #2 \s__color_stop }
-\cs_new_protected:Npn \__color_select_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
-  { \__color_backend_cmyk:nnnn {#1} {#2} {#3} {#4} }
-\cs_new_protected:Npn \__color_select_gray:w #1 \s__color_stop
-  { \__color_backend_gray:n {#1} }
-\cs_new_protected:Npn \__color_select_rgb:w #1 ~ #2 ~ #3 \s__color_stop
-  { \__color_backend_rgb:nnn {#1} {#2} {#3} }
-\cs_new_protected:Npn \__color_select_spot:w #1 ~ #2 \s__color_stop
-  { \__color_backend_spot:nn {#1} {#2} }
+  { \use:c { __color_backend_ #1 :w } #2 \s__color_stop }
 \tl_new:N \l__color_current_tl
 \tl_set:Nn \l__color_current_tl { gray~0 }
 %% File: l3coffins.dtx
diff --git a/texmf/tex/latex/l3kernel/expl3-generic.tex b/texmf/tex/latex/l3kernel/expl3-generic.tex
index e3eba08c..cb8d09c4 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{2020-05-15}%
+\def\ExplFileDate{2020-06-03}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \def\tempa{LaTeX2e}%
diff --git a/texmf/tex/latex/l3kernel/expl3.ltx b/texmf/tex/latex/l3kernel/expl3.ltx
index c0cbe0e5..538c3fdd 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{2020-05-15}%
+\def\ExplFileDate{2020-06-03}%
 \let\ExplLoaderFileDate\ExplFileDate
 \everyjob\expandafter{\the\everyjob
   \message{L3 programming layer <\ExplFileDate>}%
diff --git a/texmf/tex/latex/l3kernel/expl3.sty b/texmf/tex/latex/l3kernel/expl3.sty
index 8878c82d..4ded77ab 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{2020-05-15}%
+\def\ExplFileDate{2020-06-03}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%





More information about the latex3-commits mailing list.