From 85f3a4254291baabb1445a5a5de528853892a0f7 Mon Sep 17 00:00:00 2001 From: Joseph Wright Date: Wed, 1 Nov 2023 06:55:02 +0000 Subject: [PATCH] Update l3kernel to 2023-11-01 --- base/testfiles/github-0944.tlg | 2 +- texmf/tex/latex/l3kernel/expl3-code.tex | 422 ++++++++++++--------- texmf/tex/latex/l3kernel/expl3-generic.tex | 2 +- texmf/tex/latex/l3kernel/expl3.ltx | 2 +- texmf/tex/latex/l3kernel/expl3.sty | 2 +- texmf/tex/latex/l3kernel/l3doc.cls | 10 +- 6 files changed, 256 insertions(+), 184 deletions(-) diff --git a/base/testfiles/github-0944.tlg b/base/testfiles/github-0944.tlg index 225cf91e1..993cc6d5b 100644 --- a/base/testfiles/github-0944.tlg +++ b/base/testfiles/github-0944.tlg @@ -22,7 +22,7 @@ LaTeX Warning: Reference `unknown' on page 1 undefined on input line .... ] (github-0944.aux) *********** -formatname- <-formatversion-> -L3 programming layer <2023-10-23> +L3 programming layer <2023-11-01> *********** *File List* -show the file list here- diff --git a/texmf/tex/latex/l3kernel/expl3-code.tex b/texmf/tex/latex/l3kernel/expl3-code.tex index 2f6e2fda2..d80a33cae 100644 --- a/texmf/tex/latex/l3kernel/expl3-code.tex +++ b/texmf/tex/latex/l3kernel/expl3-code.tex @@ -11,6 +11,7 @@ %% l3expan.dtx (with options: `package') %% l3quark.dtx (with options: `package') %% l3tl.dtx (with options: `package') +%% l3tl-build.dtx (with options: `package') %% l3str.dtx (with options: `package') %% l3seq.dtx (with options: `package') %% l3int.dtx (with options: `package') @@ -74,7 +75,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2023-10-23}% +\def\ExplFileDate{2023-11-01}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -4559,6 +4560,101 @@ \tl_new:N \l_tmpa_tl \tl_new:N \l_tmpb_tl \cs_undefine:N \__tl_tmp:w +%% File: l3tl-build.dtx +\cs_new_protected:Npn \tl_build_begin:N #1 + { \__tl_build_begin:NN \cs_set_nopar:Npe #1 } +\cs_new_protected:Npn \tl_build_gbegin:N #1 + { \__tl_build_begin:NN \cs_gset_nopar:Npe #1 } +\cs_new_protected:Npn \__tl_build_begin:NN #1#2 + { \exp_args:Nc \__tl_build_begin:NNN { \cs_to_str:N #2 ' } #2 #1 } +\cs_new_protected:Npn \__tl_build_begin:NNN #1#2#3 + { + #3 #1 { } + #3 #2 + { + \exp_not:n { \exp_end: \exp_end: \exp_end: \exp_end: } + \exp_not:n { \__tl_build_last:NNn #3 #1 { } } + } + } +\cs_new_protected:Npn \tl_build_put_right:Nn #1#2 + { + \cs_set_nopar:Npe #1 + { \__kernel_exp_not:w \exp_after:wN { \exp:w #1 #2 } } + } +\cs_generate_variant:Nn \tl_build_put_right:Nn { Ne , Nx } +\cs_new_protected:Npn \tl_build_gput_right:Nn #1#2 + { + \cs_gset_nopar:Npe #1 + { \__kernel_exp_not:w \exp_after:wN { \exp:w #1 #2 } } + } +\cs_generate_variant:Nn \tl_build_gput_right:Nn { Ne , Nx } +\cs_new_protected:Npn \__tl_build_last:NNn #1#2 + { + \if_false: { { \fi: + \exp_end: \exp_end: \exp_end: \exp_end: \exp_end: + \__tl_build_last:NNn #1 #2 { } + } + } + \if_meaning:w \c_empty_tl #2 + \__tl_build_begin:NN #1 #2 + \fi: + #1 #2 + { + \__kernel_exp_not:w \exp_after:wN + { + \exp:w \if_false: } } \fi: + \exp_after:wN \__tl_build_put:nn \exp_after:wN {#2} + } +\cs_new_protected:Npn \__tl_build_put:nn #1#2 { \__tl_build_put:nw {#2} #1 } +\cs_new_protected:Npn \__tl_build_put:nw #1#2 \__tl_build_last:NNn #3#4#5 + { #2 \__tl_build_last:NNn #3 #4 { #1 #5 } } +\cs_new_protected:Npn \tl_build_put_left:Nn #1 + { \__tl_build_put_left:NNn \cs_set_nopar:Npe #1 } +\cs_generate_variant:Nn \tl_build_put_left:Nn { Ne , Nx } +\cs_new_protected:Npn \tl_build_gput_left:Nn #1 + { \__tl_build_put_left:NNn \cs_gset_nopar:Npe #1 } +\cs_generate_variant:Nn \tl_build_gput_left:Nn { Ne , Nx } +\cs_new_protected:Npn \__tl_build_put_left:NNn #1#2#3 + { + #1 #2 + { + \__kernel_exp_not:w \exp_after:wN + { + \exp:w \exp_after:wN \__tl_build_put:nn + \exp_after:wN {#2} {#3} + } + } + } +\cs_new_protected:Npn \tl_build_end:N #1 + { + \__tl_build_get:NNN \__kernel_tl_set:Ne #1 #1 + \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N + } +\cs_new_protected:Npn \tl_build_gend:N #1 + { + \__tl_build_get:NNN \__kernel_tl_gset:Ne #1 #1 + \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N + } +\cs_new_protected:Npn \__tl_build_end_loop:NN #1#2 + { + \if_meaning:w \c_empty_tl #1 + \exp_after:wN \use_none:nnnnnn + \fi: + #2 #1 + \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } #2 + } +\cs_new_protected:Npn \__tl_build_get:NNN #1#2#3 + { #1 #3 { \if_false: { \fi: \exp_after:wN \__tl_build_get:w #2 } } } +\cs_new:Npn \__tl_build_get:w #1 \__tl_build_last:NNn #2#3#4 + { + \exp_not:n {#4} + \if_meaning:w \c_empty_tl #3 + \exp_after:wN \__tl_build_get_end:w + \fi: + \exp_after:wN \__tl_build_get:w #3 + } +\cs_new:Npn \__tl_build_get_end:w #1#2#3 + { \__kernel_exp_not:w \exp_after:wN { \if_false: } \fi: } %% File: l3str.dtx \scan_new:N \s__str_mark \scan_new:N \s__str_stop @@ -4752,7 +4848,7 @@ { \__str_case:nw {#1} #2 {#1} { } \s__str_mark {#3} \s__str_mark {#4} \s__str_stop } \cs_generate_variant:Nn \str_case:nn { V , o , e , nV , nv } \prg_generate_conditional_variant:Nnn \str_case:nn - { V , o , nV , nv } { T , F , TF } + { V , o , e , nV , nv } { T , F , TF } \cs_new_eq:NN \str_case:Nn \str_case:Vn \cs_new_eq:NN \str_case:NnT \str_case:VnT \cs_new_eq:NN \str_case:NnF \str_case:VnF @@ -5955,11 +6051,11 @@ \__seq_map_pairwise_function:Nnnwnn #1 #4 \s__seq_stop } \cs_generate_variant:Nn \seq_map_pairwise_function:NNN { Nc , c , cc } -\cs_new_protected:Npn \seq_set_map_x:NNn - { \__seq_set_map_x:NNNn \__kernel_tl_set:Ne } -\cs_new_protected:Npn \seq_gset_map_x:NNn - { \__seq_set_map_x:NNNn \__kernel_tl_gset:Ne } -\cs_new_protected:Npn \__seq_set_map_x:NNNn #1#2#3#4 +\cs_new_protected:Npn \seq_set_map_e:NNn + { \__seq_set_map_e:NNNn \__kernel_tl_set:Ne } +\cs_new_protected:Npn \seq_gset_map_e:NNn + { \__seq_set_map_e:NNNn \__kernel_tl_gset:Ne } +\cs_new_protected:Npn \__seq_set_map_e:NNNn #1#2#3#4 { \__seq_push_item_def:n { \exp_not:N \__seq_item:n {#4} } #1 #2 { #3 } @@ -16819,21 +16915,73 @@ \cs_new_protected:Npn \__fp_show:NN #1#2 { \__kernel_chk_tl_type:NnnT #2 { fp } + { \exp_args:No \__fp_show_validate:n #2 } + { \exp_args:Ne #1 { \token_to_str:N #2 = \fp_to_tl:N #2 } } + } +\cs_new:Npn \__fp_show_validate:n #1 + { + \__fp_show_validate:nn { #1 } { - \str_if_eq:eeTF { \tl_head:N #2 } { \s__fp_tuple } { \exp_not:o #2 } + \s__fp \__fp_chk:w ??? ;~ or \iow_newline: + \s__fp_tuple \__fp_tuple_chk:w ? ;~ or \iow_newline: + \s__fp_symbolic \__fp_symbolic_chk:w ? , ? ; + } + } +\cs_new:Npn \__fp_show_validate_aux:n #1 + { + \__fp_show_validate:nn { #1 } { } + } +\cs_new:Npn \__fp_show_validate:nn #1#2 + { + \tl_if_empty:nF { #1 } + { + \str_case:enF { \tl_head:n { #1 } } { - \exp_after:wN \__fp_show_validate:w #2 - \s__fp \__fp_chk:w ??? ; \s__fp_stop + { \s__fp } + { + \__fp_show_validate:w #1 \s__fp + \__fp_chk:w ??? ; \s__fp_stop + } + { \s__fp_tuple } + { + \__fp_tuple_show_validate:w #1 + \s__fp_tuple \__fp_tuple_chk:w ?? ; \s__fp_stop + } + { \s__fp_symbolic } + { + \__fp_symbolic_show_validate:w #1 + \s__fp_symbolic \__fp_symbolic_chk:w ? , ?? ; \s__fp_stop + } } + { #2 } } - { \exp_args:Ne #1 { \token_to_str:N #2 = \fp_to_tl:N #2 } } } \cs_new:Npn \__fp_show_validate:w #1 \s__fp \__fp_chk:w #2#3#4#5 ; #6 \s__fp_stop { - \token_if_eq_meaning:NNTF #2 1 - { \s__fp \__fp_chk:w #2 #3 {#4} #5 ; } - { \s__fp \__fp_chk:w #2 #3 #4 #5 ; } + \str_if_eq:nnF { #2 } {?} + { + \token_if_eq_meaning:NNTF #2 1 + { \s__fp \__fp_chk:w #2 #3 { #4 } #5 ; } + { \s__fp \__fp_chk:w #2 #3 #4 #5 ; } + \__fp_show_validate_aux:n { #6 } + } + } +\cs_new:Npn \__fp_tuple_show_validate:w + #1 \s__fp_tuple \__fp_tuple_chk:w #2#3 ; #4 \s__fp_stop + { + \str_if_eq:nnF { #2 } {?} + { \s__fp_tuple \__fp_tuple_chk:w { \__fp_show_validate_aux:n { #2 } } ; } + } +\cs_new:Npn \__fp_symbolic_show_validate:w + #1 \s__fp_symbolic \__fp_symbolic_chk:w #2 , #3#4 ; #5 \s__fp_stop + { + \str_if_eq:nnF { #2 } {?} + { + \s__fp_symbolic \__fp_symbolic_chk:w \exp_not:n { #2 } , + { \__fp_show_validate_aux:n { #3 } }; + \__fp_show_validate_aux:n { #5 } + } } \cs_new_protected:Npn \fp_show:n { \__kernel_msg_show_eval:Nn \fp_to_tl:n } @@ -20838,9 +20986,9 @@ \s__fp_symbolic \__fp_symbolic_chk:w \__fp_types_binary:Nww #1 , { #2; #3; } ; } -\cs_set:Npn \__fp_tmp:w #1#2 +\cs_set_protected:Npn \__fp_tmp:w #1#2 { - \cs_new_nopar:cpn + \cs_new:cpn { __fp_symbolic_#2_symbolic_o:ww } { \__fp_symbolic_binary_o:Nww #1 } \cs_new_eq:cc @@ -20864,7 +21012,7 @@ {not} {sec} {set_sign} {sin} {sqrt} {tan} } { - \cs_new_nopar:cpe { __fp_symbolic_#1_o:w } + \cs_new:cpe { __fp_symbolic_#1_o:w } { \exp_not:N \__fp_symbolic_unary_o:NNw \exp_not:c { __fp_#1_o:w } @@ -20872,7 +21020,7 @@ } \cs_set_protected:Npn \__fp_tmp:w #1#2#3 { - \cs_new_nopar:cpn { __fp_symbolic_to_#1:w } + \cs_new:cpn { __fp_symbolic_to_#1:w } { \exp_after:wN \__fp_symbolic_convert:wnnN \exp:w \exp_end_continue_f:w @@ -20949,10 +21097,10 @@ \tl_if_empty:nTF {#1} { \prg_return_true: } { - \tl_if_in:onTF { \tl_to_str:n {#1} } { ~ } + \tl_if_in:nnTF { #1 } { ~ } { \prg_return_true: } { - \exp_after:wN \__fp_id_if_invalid_aux:N \tl_to_str:n {#1} + \__fp_id_if_invalid_aux:N #1 { ? \prg_break:n \prg_return_false: } \prg_break_point: } @@ -20995,9 +21143,9 @@ } } } -\cs_new:Npn \__fp_variable_set_parsing:Nn #1#2 +\cs_new_protected:Npn \__fp_variable_set_parsing:Nn #1#2 { - \cs_set_nopar:Npn \__fp_tmp:w + \cs_set:Npn \__fp_tmp:w { \__fp_exp_after_symbolic_f:nw { \__fp_parse_infix:NN } \s__fp_symbolic \__fp_symbolic_chk:w @@ -21006,7 +21154,7 @@ \exp_args:NNc \__fp_variable_set_parsing_aux:NNn #1 { __fp_parse_word_#2:N } {#2} } -\cs_new:Npn \__fp_variable_set_parsing_aux:NNn #1#2#3 +\cs_new_protected:Npn \__fp_variable_set_parsing_aux:NNn #1#2#3 { \cs_if_eq:NNF #2 \__fp_tmp:w { @@ -21023,54 +21171,62 @@ } } \cs_new_protected:Npn \fp_clear_variable:n #1 + { + \exp_args:No \__fp_clear_variable:n { \tl_to_str:n {#1} } + } +\cs_new_protected:Npn \__fp_clear_variable:n #1 { \__fp_id_if_invalid:nTF {#1} { \msg_error:nnn { fp } { id-invalid } {#1} } - { \exp_args:No \__fp_clear_variable:n { \tl_to_str:n {#1} } } + { \__fp_clear_variable_aux:n {#1} } } -\cs_new_protected:Npn \__fp_clear_variable:n #1 +\cs_new_protected:Npn \__fp_clear_variable_aux:n #1 { - \cs_undefine:c { l__fp_variable_#1_fp } + \cs_set_eq:cN { l__fp_variable_#1_fp } \tex_undefined:D \__fp_variable_set_parsing:Nn \cs_set_eq:NN {#1} } \cs_new_protected:Npn \fp_new_variable:n #1 { - \__fp_id_if_invalid:nTF {#1} - { \msg_error:nnn { fp } { id-invalid } {#1} } - { \exp_args:No \__fp_new_variable:n { \tl_to_str:n {#1} } } + \exp_args:No \__fp_new_variable:n { \tl_to_str:n {#1} } } \cs_new_protected:Npn \__fp_new_variable:n #1 { - \cs_if_exist:cT { __fp_parse_word_#1:N } + \__fp_id_if_invalid:nTF {#1} + { \msg_error:nnn { fp } { id-invalid } {#1} } { - \msg_error:nnn - { fp } { id-already-defined } {#1} - \cs_undefine:c { __fp_parse_word_#1:N } - \cs_undefine:c { l__fp_variable_#1_fp } + \cs_if_exist:cT { __fp_parse_word_#1:N } + { + \msg_error:nnn + { fp } { id-already-defined } {#1} + \cs_undefine:c { __fp_parse_word_#1:N } + \cs_set_eq:cN { l__fp_variable_#1_fp } \tex_undefined:D + } + \__fp_variable_set_parsing:Nn \cs_gset_eq:NN {#1} } - \__fp_variable_set_parsing:Nn \cs_gset_eq:NN {#1} } \flag_new:n { __fp_symbolic } \cs_new_protected:Npn \fp_set_variable:nn #1 { - \__fp_id_if_invalid:nTF {#1} - { \msg_error:nnn { fp } { id-invalid } {#1} } - { \exp_args:No \__fp_set_variable:nn { \tl_to_str:n {#1} } } + \exp_args:No \__fp_set_variable:nn { \tl_to_str:n {#1} } } \cs_new_protected:Npn \__fp_set_variable:nn #1#2 { - \__fp_variable_set_parsing:Nn \cs_set_eq:NN {#1} - \fp_set:Nn \l__fp_symbolic_fp {#2} - \cs_set_nopar:cpn { l__fp_variable_#1_fp } - { \flag_ensure_raised:n { __fp_symbolic } \c_nan_fp } - \flag_clear:n { __fp_symbolic } - \fp_set:cn { l__fp_variable_#1_fp } { \l__fp_symbolic_fp } - \flag_if_raised:nT { __fp_symbolic } + \__fp_id_if_invalid:nTF {#1} + { \msg_error:nnn { fp } { id-invalid } {#1} } { - \msg_error:nneee { fp } { id-loop } - { \tl_to_str:n {#1} } - { \tl_to_str:n {#2} } - { \fp_to_tl:N \l__fp_symbolic_fp } + \__fp_variable_set_parsing:Nn \cs_set_eq:NN {#1} + \fp_set:Nn \l__fp_symbolic_fp {#2} + \cs_set_nopar:cpn { l__fp_variable_#1_fp } + { \flag_ensure_raised:n { __fp_symbolic } \c_nan_fp } + \flag_clear:n { __fp_symbolic } + \fp_set:cn { l__fp_variable_#1_fp } { \l__fp_symbolic_fp } + \flag_if_raised:nT { __fp_symbolic } + { + \msg_error:nneee { fp } { id-loop } + { #1 } + { \tl_to_str:n {#2} } + { \fp_to_tl:N \l__fp_symbolic_fp } + } } } \msg_new:nnnn { fp } { id-invalid } @@ -21104,7 +21260,7 @@ \cs_new_protected:Npn \__fp_new_function:n #1 { \__fp_id_if_invalid:nTF {#1} - { \msg_error:nnn { fp } { invalid-identifier } {#1} } + { \msg_error:nnn { fp } { id-invalid } {#1} } { \cs_if_exist:cT { __fp_parse_word_#1:N } { @@ -21116,12 +21272,12 @@ \__fp_function_set_parsing:Nn \cs_gset_eq:NN {#1} } } -\cs_new:Npn \__fp_function_set_parsing:Nn #1#2 +\cs_new_protected:Npn \__fp_function_set_parsing:Nn #1#2 { \exp_args:NNc \__fp_function_set_parsing_aux:NNn #1 { __fp_parse_word_#2:N } {#2} } -\cs_new:Npn \__fp_function_set_parsing_aux:NNn #1#2#3 +\cs_new_protected:Npn \__fp_function_set_parsing_aux:NNn #1#2#3 { \cs_set:Npe \__fp_tmp:w { @@ -21170,7 +21326,7 @@ \cs_new_protected:Npn \__fp_set_function:Nnnn #1#2#3#4 { \__fp_id_if_invalid:nTF {#2} - { \msg_error:nnn { fp } { invalid-identifier } {#2} } + { \msg_error:nnn { fp } { id-invalid } {#2} } { \cs_if_exist:cF { __fp_parse_word_#2:N } { \__fp_function_set_parsing:Nn \cs_set_eq:NN {#2} } @@ -21179,8 +21335,10 @@ \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#3} } { \int_incr:N \l__fp_function_arg_int - \exp_args:Ne \__fp_clear_variable:n - { _ \tex_romannumeral:D \l__fp_function_arg_int } + \exp_args:Ne \__fp_clear_variable_aux:n + { + \c_underscore_str \tex_romannumeral:D \l__fp_function_arg_int + } \fp_clear_variable:n {##1} \cs_set_nopar:cpe { l__fp_variable_##1_fp } { @@ -21246,8 +21404,12 @@ { \exp_args:No \__fp_clear_function:n { \tl_to_str:n {#1} } } \cs_new_protected:Npn \__fp_clear_function:n #1 { - \cs_undefine:c { __fp_parse_word_ #1 :N } - \__fp_function_set_parsing:Nn \cs_set_eq:NN {#1} + \__fp_id_if_invalid:nTF {#1} + { \msg_error:nnn { fp } { id-invalid } {#1} } + { + \cs_set_eq:cN { __fp_#1_o:w } \tex_undefine:D + \__fp_function_set_parsing:Nn \cs_set_eq:NN {#1} + } } %% File: l3fparray.dtx \int_new:N \g__fp_array_int @@ -26166,7 +26328,7 @@ \cs_new_protected:Npn \__regex_show_item_exact_cs:n #1 { \seq_set_split:Nnn \l__regex_internal_seq { \scan_stop: } {#1} - \seq_set_map_x:NNn \l__regex_internal_seq + \seq_set_map_e:NNn \l__regex_internal_seq \l__regex_internal_seq { \iow_char:N\\##1 } \__regex_show_one:n { control~sequence~ \seq_use:Nn \l__regex_internal_seq { ~or~ } } @@ -26685,7 +26847,7 @@ } \cs_new_protected:Npn \__regex_match_once_init_aux: { - \tl_build_clear:N \l__regex_matched_analysis_tl + \tl_build_begin:N \l__regex_matched_analysis_tl \tl_clear:N \l__regex_curr_analysis_tl } \cs_new_protected:Npn \__regex_single_match: @@ -26857,7 +27019,7 @@ \l__regex_fresh_thread_bool \int_set_eq:NN \l__regex_success_pos_int \l__regex_curr_pos_int \int_set_eq:NN \l__regex_last_char_success_int \l__regex_last_char_int - \tl_build_clear:N \l__regex_matched_analysis_tl + \tl_build_begin:N \l__regex_matched_analysis_tl \tl_set_eq:NN \l__regex_success_submatches_tl \l__regex_curr_submatches_tl \prg_break: @@ -27860,7 +28022,7 @@ \__regex_single_match: #1 \__regex_match_init: - \tl_build_clear:N \l__regex_input_tl + \tl_build_begin:N \l__regex_input_tl \__regex_match_once_init: \peek_analysis_map_inline:n { @@ -32290,13 +32452,12 @@ \cs_new:Npn \lua_escape:e #1 { \__lua_escape:n {#1} } \cs_new:Npn \lua_escape:n #1 { \lua_escape:e { \exp_not:n {#1} } } \str_new:N \l__lua_err_msg_str -\cs_generate_variant:Nn \msg_error:nnnn { nnnV } \cs_new_protected:Npn \lua_load_module:n #1 { \bool_if:nF { \__lua_load_module_p:n { #1 } } { \msg_error:nnnV - { luatex } { module-not-found } { #1 } { \l__lua_err_msg_str } + { luatex } { module-not-found } { #1 } \l__lua_err_msg_str } } \sys_if_engine_luatex:F @@ -34061,33 +34222,32 @@ { \bool_if:NTF \l_text_titlecase_check_letter_bool { - \tl_if_single:nTF {#4} + \exp_args:Ne \__text_change_case_codepoint_title_auxi:nnnn { - \bool_lazy_or:nnTF - { \token_if_letter_p:N #4 } - { - \bool_lazy_and_p:nn - { \token_if_active_p:N #4 } - { ! \int_compare_p:nNn {`#4} < { "80 } } - } - { \__text_change_case_codepoint_title:nnn } - { \__text_change_case_codepoint_title:nnnnn { title } {#1} } + \codepoint_to_category:n + { \__text_codepoint_from_chars:Nw #4 } } - { \__text_change_case_codepoint_title:nnn } } { \__text_change_case_codepoint_title:nnn } {#2} {#3} {#4} } +\cs_new:Npn \__text_change_case_codepoint_title_auxi:nnnn #1#2#3#4 + { + \tl_if_head_eq_charcode:nNTF {#1} { L } + { \__text_change_case_codepoint_title:nnn } + { \__text_change_case_codepoint_title_auxii:nnnn { title } } + {#2} {#3} {#4} + } \cs_new:Npn \__text_change_case_codepoint_title:nnn #1#2#3 - { \__text_change_case_codepoint_title:nnnnn { title } { end } {#1} {#2} {#3} } -\cs_new:Npn \__text_change_case_codepoint_title:nnnnn #1#2#3#4#5 + { \__text_change_case_codepoint_title_auxii:nnnn { end } {#1} {#2} {#3} } +\cs_new:Npn \__text_change_case_codepoint_title_auxii:nnnn #1#2#3#4 { - \cs_if_exist_use:cF { __text_change_case_title_ #4 :nnnnn } + \cs_if_exist_use:cF { __text_change_case_title_ #3 :nnnnn } { - \cs_if_exist_use:cF { __text_change_case_upper_ #4 :nnnnn } + \cs_if_exist_use:cF { __text_change_case_upper_ #3 :nnnnn } { \__text_change_case_codepoint:nnnnn } } - {#1} {#2} {#3} {#4} {#5} + { title } {#1} {#2} {#3} {#4} } \cs_new:Npn \__text_change_case_codepoint:nnnnn #1#2#3#4#5 { @@ -36200,104 +36360,8 @@ #1 #2 { #3 } \__seq_pop_item_def: } -\cs_new_protected:Npn \tl_build_begin:N #1 - { \__tl_build_begin:NN \cs_set_nopar:Npe #1 } -\cs_new_protected:Npn \tl_build_gbegin:N #1 - { \__tl_build_begin:NN \cs_gset_nopar:Npe #1 } -\cs_new_protected:Npn \__tl_build_begin:NN #1#2 - { \exp_args:Nc \__tl_build_begin:NNN { \cs_to_str:N #2 ' } #2 #1 } -\cs_new_protected:Npn \__tl_build_begin:NNN #1#2#3 - { - #3 #1 { } - #3 #2 - { - \exp_not:n { \exp_end: \exp_end: \exp_end: \exp_end: } - \exp_not:n { \__tl_build_last:NNn #3 #1 { } } - } - } -\cs_new_eq:NN \tl_build_clear:N \tl_build_begin:N -\cs_new_eq:NN \tl_build_gclear:N \tl_build_gbegin:N -\cs_new_protected:Npn \tl_build_put_right:Nn #1#2 - { - \cs_set_nopar:Npe #1 - { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } } - } -\cs_generate_variant:Nn \tl_build_put_right:Nn { Ne , Nx } -\cs_new_protected:Npn \tl_build_gput_right:Nn #1#2 - { - \cs_gset_nopar:Npe #1 - { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } } - } -\cs_generate_variant:Nn \tl_build_gput_right:Nn { Ne , Nx } -\cs_new_protected:Npn \__tl_build_last:NNn #1#2 - { - \if_false: { { \fi: - \exp_end: \exp_end: \exp_end: \exp_end: \exp_end: - \__tl_build_last:NNn #1 #2 { } - } - } - \if_meaning:w \c_empty_tl #2 - \__tl_build_begin:NN #1 #2 - \fi: - #1 #2 - { - \exp_after:wN \exp_not:n \exp_after:wN - { - \exp:w \if_false: } } \fi: - \exp_after:wN \__tl_build_put:nn \exp_after:wN {#2} - } -\cs_new_protected:Npn \__tl_build_put:nn #1#2 { \__tl_build_put:nw {#2} #1 } -\cs_new_protected:Npn \__tl_build_put:nw #1#2 \__tl_build_last:NNn #3#4#5 - { #2 \__tl_build_last:NNn #3 #4 { #1 #5 } } -\cs_new_protected:Npn \tl_build_put_left:Nn #1 - { \__tl_build_put_left:NNn \cs_set_nopar:Npe #1 } -\cs_generate_variant:Nn \tl_build_put_left:Nn { Ne , Nx } -\cs_new_protected:Npn \tl_build_gput_left:Nn #1 - { \__tl_build_put_left:NNn \cs_gset_nopar:Npe #1 } -\cs_generate_variant:Nn \tl_build_gput_left:Nn { Ne , Nx } -\cs_new_protected:Npn \__tl_build_put_left:NNn #1#2#3 - { - #1 #2 - { - \exp_after:wN \exp_not:n \exp_after:wN - { - \exp:w \exp_after:wN \__tl_build_put:nn - \exp_after:wN {#2} {#3} - } - } - } \cs_new_protected:Npn \tl_build_get:NN { \__tl_build_get:NNN \__kernel_tl_set:Ne } -\cs_new_protected:Npn \__tl_build_get:NNN #1#2#3 - { #1 #3 { \if_false: { \fi: \exp_after:wN \__tl_build_get:w #2 } } } -\cs_new:Npn \__tl_build_get:w #1 \__tl_build_last:NNn #2#3#4 - { - \exp_not:n {#4} - \if_meaning:w \c_empty_tl #3 - \exp_after:wN \__tl_build_get_end:w - \fi: - \exp_after:wN \__tl_build_get:w #3 - } -\cs_new:Npn \__tl_build_get_end:w #1#2#3 - { \exp_after:wN \exp_not:n \exp_after:wN { \if_false: } \fi: } -\cs_new_protected:Npn \tl_build_end:N #1 - { - \__tl_build_get:NNN \__kernel_tl_set:Ne #1 #1 - \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N - } -\cs_new_protected:Npn \tl_build_gend:N #1 - { - \__tl_build_get:NNN \__kernel_tl_gset:Ne #1 #1 - \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N - } -\cs_new_protected:Npn \__tl_build_end_loop:NN #1#2 - { - \if_meaning:w \c_empty_tl #1 - \exp_after:wN \use_none:nnnnnn - \fi: - #2 #1 - \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } #2 - } %% File: l3legacy.dtx \prg_new_conditional:Npnn \legacy_if:n #1 { p , T , F , TF } { @@ -36632,6 +36696,10 @@ \cs_gset:Npn \seq_indexed_map_function:NN { \seq_map_indexed_function:NN } \__kernel_patch_deprecation:nnNNpn { 2023-05-10 } { \seq_mapthread_function:NNN } \cs_gset:Npn \seq_mapthread_function:NNN { \seq_map_pairwise_function:NNN } +\__kernel_patch_deprecation:nnNNpn { 2023-10-26 } { \seq_set_map_e:NNn } +\cs_gset_protected:Npn \seq_set_map_x:NNn { \seq_set_map_e:NNn } +\__kernel_patch_deprecation:nnNNpn { 2023-10-26 } { \seq_gset_map_e:NNn } +\cs_gset_protected:Npn \seq_gset_map_x:NNn { \seq_gset_map_e:NNn } \__kernel_patch_deprecation:nnNNpn { 2021-01-11 } { (no~longer~required) } \cs_gset_protected:Npn \sys_load_deprecation: { } \__kernel_patch_deprecation:nnNNpn { 2023-07-08 } { \text_titlecase_first:n } @@ -36669,6 +36737,10 @@ \cs_generate_variant:Nn \tl_case:Nn { c } \prg_generate_conditional_variant:Nnn \tl_case:Nn { c } { T , F , TF } +\__kernel_patch_deprecation:nnNNpn { 2023-10-18 } { \tl_build_begin:N } +\cs_new_protected:Npn \tl_build_clear:N { \tl_build_begin:N } +\__kernel_patch_deprecation:nnNNpn { 2023-10-18 } { \tl_build_gbegin:N } +\cs_new_protected:Npn \tl_build_gclear:N { \tl_build_gbegin:N } \__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { [ \codepoint_generate:n ] } \cs_gset:Npn \char_to_utfviii_bytes:n { \__kernel_codepoint_to_bytes:n } \__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { \codepoint_to_nfd:n } diff --git a/texmf/tex/latex/l3kernel/expl3-generic.tex b/texmf/tex/latex/l3kernel/expl3-generic.tex index 0942a8855..f84742ea3 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-10-23}% +\def\ExplFileDate{2023-11-01}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\_=11 diff --git a/texmf/tex/latex/l3kernel/expl3.ltx b/texmf/tex/latex/l3kernel/expl3.ltx index e0c4ee078..b0134c23c 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-10-23}% +\def\ExplFileDate{2023-11-01}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\_=11 diff --git a/texmf/tex/latex/l3kernel/expl3.sty b/texmf/tex/latex/l3kernel/expl3.sty index 5e548a94e..8afbeb2e7 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-10-23}% +\def\ExplFileDate{2023-11-01}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% diff --git a/texmf/tex/latex/l3kernel/l3doc.cls b/texmf/tex/latex/l3kernel/l3doc.cls index 4191b7df9..238756a9b 100644 --- a/texmf/tex/latex/l3kernel/l3doc.cls +++ b/texmf/tex/latex/l3kernel/l3doc.cls @@ -655,9 +655,9 @@ \raisebox{\baselineskip}[0pt][0pt]{\hypertarget{expstar}{}}% \write \@auxout { \def \string \Codedoc@expstar { } } \__codedoc_typeset_exp:\ indicates~fully~expandable~functions,~which~ - can~be~used~within~an~\texttt{x}-type~argument~(in~plain~ - \TeX{}~terms,~inside~an~\cs{edef}),~as~well~as~within~an~ - \texttt{f}-type~argument. + can~be~used~within~an~\texttt{e}-type~argument~(inside~an~\tn{expanded}),~ + \texttt{x}-type~argument~(in~plain~\TeX{}~terms,~inside~an~\tn{edef}),~ + as~well~as~within~an~\texttt{f}-type~argument. } \NewDocumentCommand { \CodedocExplainREXP } { } { @@ -665,8 +665,8 @@ \write \@auxout { \def \string \Codedoc@rexpstar { } } \__codedoc_typeset_rexp:\ indicates~ restricted~expandable~functions,~which~can~be~used~within~an~ - \texttt{x}-type~argument~but~cannot~be~fully~expanded~within~an~ - \texttt{f}-type~argument. + \texttt{x}-type~argument~or~an~\texttt{e}-type~argument,~ + but~cannot~be~fully~expanded~within~an~\texttt{f}-type~argument. } \NewDocumentCommand { \CodedocExplainTF } { } {