summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3kernel
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-06-18 21:08:59 +0000
committerKarl Berry <karl@freefriends.org>2020-06-18 21:08:59 +0000
commit700211024849d94938004ff91e0a3928b1578e98 (patch)
treea577e99bdf389f5e3a443561cb0162e4a13cd8ad /Master/texmf-dist/tex/latex/l3kernel
parent0e574a322aeab7e91f801eec35e961965f597e7a (diff)
l3 (18jun20)
git-svn-id: svn://tug.org/texlive/trunk@55586 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel')
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex143
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.ltx73
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty81
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def4
5 files changed, 184 insertions, 119 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index d1eab62be8b..c954b30dfb2 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/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-06-03}%
+\def\ExplFileDate{2020-06-18}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -6410,6 +6410,39 @@
}
\cs_generate_variant:Nn \seq_map_variable:NNn { Nc }
\cs_generate_variant:Nn \seq_map_variable:NNn { c , cc }
+\cs_new:Npn \seq_map_indexed_function:NN #1#2
+ {
+ \__seq_map_indexed:NN #1#2
+ \prg_break_point:Nn \seq_map_break: { }
+ }
+\cs_new_protected:Npn \seq_map_indexed_inline:Nn #1#2
+ {
+ \int_gincr:N \g__kernel_prg_map_int
+ \cs_gset_protected:cpn
+ { __seq_map_ \int_use:N \g__kernel_prg_map_int :w } ##1##2 {#2}
+ \exp_args:NNc \__seq_map_indexed:NN #1
+ { __seq_map_ \int_use:N \g__kernel_prg_map_int :w }
+ \prg_break_point:Nn \seq_map_break:
+ { \int_gdecr:N \g__kernel_prg_map_int }
+ }
+\cs_new:Npn \__seq_map_indexed:NN #1#2
+ {
+ \exp_after:wN \__seq_map_indexed:Nw
+ \exp_after:wN #2
+ \int_value:w 1
+ \exp_after:wN \use_i:nn
+ \exp_after:wN ;
+ #1
+ \prg_break: \__seq_item:n { } \prg_break_point:
+ }
+\cs_new:Npn \__seq_map_indexed:Nw #1#2 ; #3 \__seq_item:n #4
+ {
+ #3
+ #1 {#2} {#4}
+ \exp_after:wN \__seq_map_indexed:Nw
+ \exp_after:wN #1
+ \int_value:w \int_eval:w 1 + #2 ;
+ }
\cs_new:Npn \seq_count:N #1
{
\int_eval:n
@@ -10823,6 +10856,37 @@
\cs_generate_variant:Nn \__kernel_msg_expandable_error:nnnnn { nnfff }
\cs_generate_variant:Nn \__kernel_msg_expandable_error:nnnn { nnff }
\cs_generate_variant:Nn \__kernel_msg_expandable_error:nnn { nnf }
+\cs_new:Npn \msg_expandable_error:nnnnnn #1#2#3#4#5#6
+ {
+ \exp_args:Ne \__msg_expandable_error_module:nn
+ {
+ \exp_args:Nc \exp_args:Noooo
+ { \c__msg_text_prefix_tl #1 / #2 }
+ { \tl_to_str:n {#3} }
+ { \tl_to_str:n {#4} }
+ { \tl_to_str:n {#5} }
+ { \tl_to_str:n {#6} }
+ }
+ {#1}
+ }
+\cs_new:Npn \msg_expandable_error:nnnnn #1#2#3#4#5
+ { \msg_expandable_error:nnnnnn {#1} {#2} {#3} {#4} {#5} { } }
+\cs_new:Npn \msg_expandable_error:nnnn #1#2#3#4
+ { \msg_expandable_error:nnnnnn {#1} {#2} {#3} {#4} { } { } }
+\cs_new:Npn \msg_expandable_error:nnn #1#2#3
+ { \msg_expandable_error:nnnnnn {#1} {#2} {#3} { } { } { } }
+\cs_new:Npn \msg_expandable_error:nn #1#2
+ { \msg_expandable_error:nnnnnn {#1} {#2} { } { } { } { } }
+\cs_generate_variant:Nn \msg_expandable_error:nnnnnn { nnffff }
+\cs_generate_variant:Nn \msg_expandable_error:nnnnn { nnfff }
+\cs_generate_variant:Nn \msg_expandable_error:nnnn { nnff }
+\cs_generate_variant:Nn \msg_expandable_error:nnn { nnf }
+\cs_new:Npn \__msg_expandable_error_module:nn #1#2
+ {
+ \exp_after:wN \exp_after:wN
+ \exp_after:wN \__msg_use_none_delimit_by_s_stop:w
+ \use:n { \::error ! ~ #2 : ~ #1 } \s__msg_stop
+ }
%% File: l3file.dtx
\tl_new:N \l__ior_internal_tl
\int_const:Nn \c__ior_term_ior { 16 }
@@ -26688,16 +26752,15 @@
\cs_new_protected:Npn \color_ensure_current:
{
\__color_backend_pickup:N \l__color_current_tl
- \__color_select:V \l__color_current_tl
+ \__color_select:N \l__color_current_tl
}
\scan_new:N \s__color_stop
-\cs_new_protected:Npn \__color_select:n #1
- { \__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_backend_ #1 :w } #2 \s__color_stop }
+\cs_new_protected:Npn \__color_select:N #1
+ { \exp_after:wN \__color_select:nn #1 }
+\cs_new_protected:Npn \__color_select:nn #1#2
+ { \use:c { __color_backend_ #1 :n } {#2} }
\tl_new:N \l__color_current_tl
-\tl_set:Nn \l__color_current_tl { gray~0 }
+\tl_set:Nn \l__color_current_tl { { gray } { 0 } }
%% File: l3coffins.dtx
\box_new:N \l__coffin_internal_box
\dim_new:N \l__coffin_internal_dim
@@ -30448,37 +30511,6 @@
\cs:w flag~#1 \cs_end: 0 ;
\fi:
}
-\cs_new:Npn \msg_expandable_error:nnnnnn #1#2#3#4#5#6
- {
- \exp_args:Ne \__msg_expandable_error_module:nn
- {
- \exp_args:Nc \exp_args:Noooo
- { \c__msg_text_prefix_tl #1 / #2 }
- { \tl_to_str:n {#3} }
- { \tl_to_str:n {#4} }
- { \tl_to_str:n {#5} }
- { \tl_to_str:n {#6} }
- }
- {#1}
- }
-\cs_new:Npn \msg_expandable_error:nnnnn #1#2#3#4#5
- { \msg_expandable_error:nnnnnn {#1} {#2} {#3} {#4} {#5} { } }
-\cs_new:Npn \msg_expandable_error:nnnn #1#2#3#4
- { \msg_expandable_error:nnnnnn {#1} {#2} {#3} {#4} { } { } }
-\cs_new:Npn \msg_expandable_error:nnn #1#2#3
- { \msg_expandable_error:nnnnnn {#1} {#2} {#3} { } { } { } }
-\cs_new:Npn \msg_expandable_error:nn #1#2
- { \msg_expandable_error:nnnnnn {#1} {#2} { } { } { } { } }
-\cs_generate_variant:Nn \msg_expandable_error:nnnnnn { nnffff }
-\cs_generate_variant:Nn \msg_expandable_error:nnnnn { nnfff }
-\cs_generate_variant:Nn \msg_expandable_error:nnnn { nnff }
-\cs_generate_variant:Nn \msg_expandable_error:nnn { nnf }
-\cs_new:Npn \__msg_expandable_error_module:nn #1#2
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \__msg_use_none_delimit_by_s_stop:w
- \use:n { \::error ! ~ #2 : ~ #1 } \s__msg_stop
- }
\cs_new_protected:Npn \msg_show_eval:Nn #1#2
{ \exp_args:Nf \__msg_show_eval:nnN { #1 {#2} } {#2} \tl_show:n }
\cs_new_protected:Npn \msg_log_eval:Nn #1#2
@@ -30619,39 +30651,6 @@
{ \seq_set_from_inline_x:Nnn #1 {#2} { #3 {##1} } }
\cs_new_protected:Npn \seq_gset_from_function:NnN #1#2#3
{ \seq_gset_from_inline_x:Nnn #1 {#2} { #3 {##1} } }
-\cs_new:Npn \seq_indexed_map_function:NN #1#2
- {
- \__seq_indexed_map:NN #1#2
- \prg_break_point:Nn \seq_map_break: { }
- }
-\cs_new_protected:Npn \seq_indexed_map_inline:Nn #1#2
- {
- \int_gincr:N \g__kernel_prg_map_int
- \cs_gset_protected:cpn
- { __seq_map_ \int_use:N \g__kernel_prg_map_int :w } ##1##2 {#2}
- \exp_args:NNc \__seq_indexed_map:NN #1
- { __seq_map_ \int_use:N \g__kernel_prg_map_int :w }
- \prg_break_point:Nn \seq_map_break:
- { \int_gdecr:N \g__kernel_prg_map_int }
- }
-\cs_new:Npn \__seq_indexed_map:NN #1#2
- {
- \exp_after:wN \__seq_indexed_map:Nw
- \exp_after:wN #2
- \int_value:w 1
- \exp_after:wN \use_i:nn
- \exp_after:wN ;
- #1
- \prg_break: \__seq_item:n { } \prg_break_point:
- }
-\cs_new:Npn \__seq_indexed_map:Nw #1#2 ; #3 \__seq_item:n #4
- {
- #3
- #1 {#2} {#4}
- \exp_after:wN \__seq_indexed_map:Nw
- \exp_after:wN #1
- \int_value:w \int_eval:w 1 + #2 ;
- }
\str_const:Nx \c_sys_engine_version_str
{
\str_case:on \c_sys_engine_str
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
index cb8d09c4f0d..52f1e1edb19 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
+++ b/Master/texmf-dist/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-06-03}%
+\def\ExplFileDate{2020-06-18}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\def\tempa{LaTeX2e}%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
index 538c3fddab2..b385a59bd6e 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
@@ -19,26 +19,34 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2020-06-03}%
+\def\ExplFileDate{2020-06-18}%
\let\ExplLoaderFileDate\ExplFileDate
\everyjob\expandafter{\the\everyjob
\message{L3 programming layer <\ExplFileDate>}%
}
-\protected\def\ProvidesExplPackage#1#2#3#4%
+\protected\def\ProvidesExplPackage
+ {\@expl@provides@file@@Nnnnnn\ProvidesPackage{Package}}
+\protected\def\ProvidesExplClass
+ {\@expl@provides@file@@Nnnnnn\ProvidesClass{Document Class}}
+\protected\def\ProvidesExplFile
+ {\@expl@provides@file@@Nnnnnn\ProvidesFile{File}}
+\protected\long\def\@expl@provides@file@@Nnnnnn#1#2#3#4#5#6%
{%
- \ProvidesPackage{#1}[#2 \ifx\relax#3\relax\else v#3\space\fi #4]%
+ \ifnum0%
+ \ifdefined#11\fi
+ \ifx\relax#1\else1\fi
+ =11
+ \expandafter#1%
+ \else
+ \@expl@provides@generic@@wnnw{#2}%
+ \fi
+ {#3}[{#4 \ifx\relax#5\relax\else v#5\space\fi #6}]%
\ExplSyntaxOn
- }%
-\protected\def\ProvidesExplClass#1#2#3#4%
- {%
- \ProvidesClass{#1}[#2 \ifx\relax#3\relax\else v#3\space\fi #4]%
- \ExplSyntaxOn
- }%
-\protected\def\ProvidesExplFile#1#2#3#4%
+ }
+\protected\long\def\@expl@provides@generic@@wnnw#1\fi#2[#3]%
{%
- \ProvidesFile{#1}[#2 \ifx\relax#3\relax\else v#3\space\fi #4]%
- \ExplSyntaxOn
- }%
+ \immediate\write-1{#1: #2 #3}%
+ }
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname tex\string _let:D\endcsname\relax
\expandafter\@firstofone
@@ -50,10 +58,13 @@
\expandafter\ifx\csname tex\string _let:D\endcsname\relax
\expandafter\endinput
\fi
-\ifdefined\@pushfilenameaux
+\ifcsname\detokenize{g__expl_reload_bool}\endcsname
\ExplSyntaxOn
+ \bool_gset_true:N \g__expl_reload_bool
+\else
+ \bool_new:N \g__expl_reload_bool
\fi
-\cs_if_exist:NF \c__expl_def_ext_tl
+\tl_if_exist:NF \c__expl_def_ext_tl
{ \tl_const:Nn \c__expl_def_ext_tl { def } }
\cs_gset_protected:Npn \__kernel_sys_configuration_load:n #1
{
@@ -88,12 +99,19 @@
\sys_load_deprecation:
}
}
-\tl_put_left:Nn \document
+\cs_if_exist:NF \@expl@sys@load@backend@@
+ {
+ \tl_put_left:Nn \document
+ {
+ \endgroup
+ \@expl@sys@load@backend@@
+ \begingroup
+ }
+ }
+\cs_gset_protected:Npn \@expl@sys@load@backend@@
{
- \endgroup
\str_if_exist:NF \c_sys_backend_str
{ \sys_load_backend:n { } }
- \begingroup
}
\cs_if_free:cTF { ver@expl3.sty }
{
@@ -107,11 +125,16 @@
\reverse_if:N \if_cs_exist:N \s__expl_stop
\scan_new:N \s__expl_stop
\fi:
-\tl_put_left:Nn \@pushfilename
+\cs_if_exist:NF \@expl@push@filename@@
+ {
+ \tl_put_left:Nn \@pushfilename { \@expl@push@filename@@ }
+ \tl_put_right:Nn \@pushfilename { \@expl@push@filename@aux@@ }
+ }
+\cs_gset_protected:Npn \@expl@push@filename@@
{
\exp_args:Nx \__kernel_file_input_push:n
{
- \tl_to_str:N \@currname
+ \tl_to_str:N \@currname .
\tl_to_str:N \@currext
}
\tl_put_left:Nx \l__expl_status_stack_tl
@@ -122,13 +145,17 @@
}
\ExplSyntaxOff
}
-\tl_put_right:Nn \@pushfilename { \@pushfilenameaux }
-\cs_set_protected:Npn \@pushfilenameaux #1#2#3
+\cs_gset_protected:Npn \@expl@push@filename@aux@@ #1#2#3
{
\str_gset:Nn \g_file_curr_name_str {#3}
#1 #2 {#3}
}
-\tl_put_right:Nn \@popfilename
+\cs_if_exist:NF \@expl@pop@filename@@
+ {
+ \tl_put_right:Nn \@popfilename
+ { \@expl@pop@filename@@ }
+ }
+\cs_gset_protected:Npn \@expl@pop@filename@@
{
\__kernel_file_input_pop:
\tl_if_empty:NTF \l__expl_status_stack_tl
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index 4ded77abe6b..17df13adb3f 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
@@ -19,28 +19,36 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2020-06-03}%
+\def\ExplFileDate{2020-06-18}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%
\ExplFileDate\space
L3 programming layer (loader)
]%
-\protected\def\ProvidesExplPackage#1#2#3#4%
+\protected\def\ProvidesExplPackage
+ {\@expl@provides@file@@Nnnnnn\ProvidesPackage{Package}}
+\protected\def\ProvidesExplClass
+ {\@expl@provides@file@@Nnnnnn\ProvidesClass{Document Class}}
+\protected\def\ProvidesExplFile
+ {\@expl@provides@file@@Nnnnnn\ProvidesFile{File}}
+\protected\long\def\@expl@provides@file@@Nnnnnn#1#2#3#4#5#6%
{%
- \ProvidesPackage{#1}[#2 \ifx\relax#3\relax\else v#3\space\fi #4]%
+ \ifnum0%
+ \ifdefined#11\fi
+ \ifx\relax#1\else1\fi
+ =11
+ \expandafter#1%
+ \else
+ \@expl@provides@generic@@wnnw{#2}%
+ \fi
+ {#3}[{#4 \ifx\relax#5\relax\else v#5\space\fi #6}]%
\ExplSyntaxOn
- }%
-\protected\def\ProvidesExplClass#1#2#3#4%
- {%
- \ProvidesClass{#1}[#2 \ifx\relax#3\relax\else v#3\space\fi #4]%
- \ExplSyntaxOn
- }%
-\protected\def\ProvidesExplFile#1#2#3#4%
+ }
+\protected\long\def\@expl@provides@generic@@wnnw#1\fi#2[#3]%
{%
- \ProvidesFile{#1}[#2 \ifx\relax#3\relax\else v#3\space\fi #4]%
- \ExplSyntaxOn
- }%
+ \immediate\write-1{#1: #2 #3}%
+ }
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname tex\string _let:D\endcsname\relax
\expandafter\@firstofone
@@ -52,10 +60,13 @@
\expandafter\ifx\csname tex\string _let:D\endcsname\relax
\expandafter\endinput
\fi
-\ifdefined\@pushfilenameaux
+\ifcsname\detokenize{g__expl_reload_bool}\endcsname
\ExplSyntaxOn
+ \bool_gset_true:N \g__expl_reload_bool
+\else
+ \bool_new:N \g__expl_reload_bool
\fi
-\cs_if_exist:NF \c__expl_def_ext_tl
+\tl_if_exist:NF \c__expl_def_ext_tl
{ \tl_const:Nn \c__expl_def_ext_tl { def } }
\cs_gset_protected:Npn \__kernel_sys_configuration_load:n #1
{
@@ -71,7 +82,7 @@
\@onefilewithoptions {#1} [ ] [ ]
\c__expl_def_ext_tl
}
-\cs_if_exist:NF \l__expl_options_clist
+\clist_if_exist:NF \l__expl_options_clist
{ \clist_new:N \l__expl_options_clist }
\DeclareOption*
{ \clist_put_right:NV \l__expl_options_clist \CurrentOption }
@@ -103,14 +114,29 @@
\sys_load_deprecation:
}
}
+\cs_if_exist:NF \@expl@sys@load@backend@@
+ {
+ \tl_put_left:Nn \document
+ {
+ \endgroup
+ \@expl@sys@load@backend@@
+ \begingroup
+ }
+ }
+\cs_gset_protected:Npn \@expl@sys@load@backend@@
+ {
+ \str_if_exist:NF \c_sys_backend_str
+ { \sys_load_backend:n { } }
+ }
\keys_set:nV { sys } \l__expl_options_clist
\str_if_exist:NF \c_sys_backend_str
{ \sys_load_backend:n { } }
-\cs_if_exist:NT \@pushfilenameaux
+\bool_if:NT \g__expl_reload_bool
{
\cs_gset_eq:NN \__kernel_sys_configuration_load:n
\__kernel_sys_configuration_load_std:n
- \endinput
+ \ExplSyntaxOff
+ \file_input_stop:
}
\cs_if_free:cTF { ver@expl3.sty }
{
@@ -124,11 +150,16 @@
\reverse_if:N \if_cs_exist:N \s__expl_stop
\scan_new:N \s__expl_stop
\fi:
-\tl_put_left:Nn \@pushfilename
+\cs_if_exist:NF \@expl@push@filename@@
+ {
+ \tl_put_left:Nn \@pushfilename { \@expl@push@filename@@ }
+ \tl_put_right:Nn \@pushfilename { \@expl@push@filename@aux@@ }
+ }
+\cs_gset_protected:Npn \@expl@push@filename@@
{
\exp_args:Nx \__kernel_file_input_push:n
{
- \tl_to_str:N \@currname
+ \tl_to_str:N \@currname .
\tl_to_str:N \@currext
}
\tl_put_left:Nx \l__expl_status_stack_tl
@@ -139,13 +170,17 @@
}
\ExplSyntaxOff
}
-\tl_put_right:Nn \@pushfilename { \@pushfilenameaux }
-\cs_set_protected:Npn \@pushfilenameaux #1#2#3
+\cs_gset_protected:Npn \@expl@push@filename@aux@@ #1#2#3
{
\str_gset:Nn \g_file_curr_name_str {#3}
#1 #2 {#3}
}
-\tl_put_right:Nn \@popfilename
+\cs_if_exist:NF \@expl@pop@filename@@
+ {
+ \tl_put_right:Nn \@popfilename
+ { \@expl@pop@filename@@ }
+ }
+\cs_gset_protected:Npn \@expl@pop@filename@@
{
\__kernel_file_input_pop:
\tl_if_empty:NTF \l__expl_status_stack_tl
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def b/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def
index 2eb91079290..f088cf38802 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def
@@ -207,6 +207,10 @@
\cs_gset:Npn \str_if_eq_x:nnF { \str_if_eq:eeF }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_if_eq:eeTF }
\cs_gset:Npn \str_if_eq_x:nnTF { \str_if_eq:eeTF }
+\__kernel_patch_deprecation:nnNNpn { 2022-07-01 } { \seq_map_indexed_inline:Nn }
+\cs_gset:Npn \seq_indexed_map_inline:Nn { \seq_map_indexed_inline:Nn }
+\__kernel_patch_deprecation:nnNNpn { 2022-07-01 } { \seq_map_indexed_function:NN }
+\cs_gset:Npn \seq_indexed_map_function:NN { \seq_map_indexed_function:NN }
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \file_get:nnN }
\cs_gset_protected:Npn \tl_set_from_file:Nnn #1#2#3
{ \file_get:nnN {#3} {#2} #1 }