diff options
author | Karl Berry <karl@freefriends.org> | 2021-11-22 21:19:01 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-11-22 21:19:01 +0000 |
commit | 886a160757f8fa328e5a5e95c6796d72780e831b (patch) | |
tree | ab78ccf9dc685cb071866b651e0bcd055cac3e56 /Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex | |
parent | 3738e5a3a99ac058b02c64cf3f63fe1fea77a065 (diff) |
l3kernel (22nov21)
git-svn-id: svn://tug.org/texlive/trunk@61121 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex | 463 |
1 files changed, 276 insertions, 187 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index acd7546557c..9bbbaa1dc45 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -24,7 +24,7 @@ %% l3file.dtx (with options: `package') %% l3skip.dtx (with options: `package') %% l3keys.dtx (with options: `package') -%% l3intarray.dtx (with options: `package') +%% l3intarray.dtx (with options: `package,tex') %% l3fp.dtx (with options: `package') %% l3fp-aux.dtx (with options: `package') %% l3fp-traps.dtx (with options: `package') @@ -70,7 +70,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2021-11-12}% +\def\ExplFileDate{2021-11-22}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -158,10 +158,7 @@ \expandafter\ifx\csname newcatcodetable\endcsname\relax \input{ltluatex}% \fi - \begingroup\edef\ignored{% - \expandafter\noexpand\csname prg_return_true:\endcsname - \expandafter\noexpand\csname prg_return_false:\endcsname - }\endgroup + \ifdefined\newluabytecode\newluabytecode\@expl@luadata@bytecode\fi \directlua{require("expl3")}% \ifnum 0% \directlua{ @@ -13091,29 +13088,19 @@ \cs_new:Npn \__keys_define_code:w #1 \c_colon_str #2 \s__keys_stop { \tl_if_empty:nTF {#2} } \cs_new_protected:Npn \__keys_bool_set:Nn #1#2 - { - \bool_if_exist:NF #1 { \bool_new:N #1 } - \__keys_choice_make: - \__keys_cmd_set:nx { \l_keys_path_str / true } - { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 } - \__keys_cmd_set:nx { \l_keys_path_str / false } - { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 } - \__keys_cmd_set:nn { \l_keys_path_str / unknown } - { - \msg_error:nnx { keys } { boolean-values-only } - \l_keys_key_str - } - \__keys_default_set:n { true } - } + { \__keys_bool_set:Nnnn #1 {#2} { true } { false } } \cs_generate_variant:Nn \__keys_bool_set:Nn { c } \cs_new_protected:Npn \__keys_bool_set_inverse:Nn #1#2 + { \__keys_bool_set:Nnnn #1 {#2} { false } { true } } +\cs_generate_variant:Nn \__keys_bool_set_inverse:Nn { c } +\cs_new_protected:Npn \__keys_bool_set:Nnnn #1#2#3#4 { \bool_if_exist:NF #1 { \bool_new:N #1 } \__keys_choice_make: \__keys_cmd_set:nx { \l_keys_path_str / true } - { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 } + { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 } \__keys_cmd_set:nx { \l_keys_path_str / false } - { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 } + { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 } \__keys_cmd_set:nn { \l_keys_path_str / unknown } { \msg_error:nnx { keys } { boolean-values-only } @@ -13121,7 +13108,7 @@ } \__keys_default_set:n { true } } -\cs_generate_variant:Nn \__keys_bool_set_inverse:Nn { c } +\cs_generate_variant:Nn \__keys_bool_set:Nn { c } \cs_new_protected:Npn \__keys_choice_make: { \__keys_choice_make:N \__keys_choice_find:n } \cs_new_protected:Npn \__keys_multichoice_make: @@ -13228,6 +13215,24 @@ { \__keys_execute:nn \l_keys_path_str {#1} } } } +\cs_new_protected:Npn \__keys_legacy_if_set:nn #1#2 + { \__keys_legacy_if_set:nnnn {#1} {#2} { true } { false } } +\cs_new_protected:Npn \__keys_legacy_if_set_inverse:nn #1#2 + { \__keys_legacy_if_set:nnnn {#1} {#2} { false } { true } } +\cs_new_protected:Npn \__keys_legacy_if_set:nnnn #1#2#3#4 + { + \__keys_choice_make: + \__keys_cmd_set:nx { \l_keys_path_str / true } + { \exp_not:c { legacy_if_#2 set_ #3 :n } { \exp_not:n {#1} } } + \__keys_cmd_set:nx { \l_keys_path_str / false } + { \exp_not:c { legacy_if_#2 set_ #4 :n } { \exp_not:n {#1} } } + \__keys_cmd_set:nn { \l_keys_path_str / unknown } + { + \msg_error:nnx { keys } { boolean-values-only } + \l_keys_key_str + } + \__keys_default_set:n { true } + } \cs_new_protected:Npn \__keys_meta_make:n #1 { \__keys_cmd_set:Vo \l_keys_path_str @@ -13420,6 +13425,14 @@ { \__keys_variable_set_required:NnnN #1 { int } { g } n } \cs_new_protected:cpn { \c__keys_props_root_str .int_gset:c } #1 { \__keys_variable_set_required:cnnN {#1} { int } { g } n } +\cs_new_protected:cpn { \c__keys_props_root_str .legacy_if_set:n } #1 + { \__keys_legacy_if_set:nn {#1} { } } +\cs_new_protected:cpn { \c__keys_props_root_str .legacy_if_gset:n } #1 + { \__keys_legacy_if_set:nn {#1} { g } } +\cs_new_protected:cpn { \c__keys_props_root_str .legacy_if_set_inverse:n } #1 + { \__keys_legacy_if_set_inverse:nn {#1} { } } +\cs_new_protected:cpn { \c__keys_props_root_str .legacy_if_gset_inverse:n } #1 + { \__keys_legacy_if_set_inverse:nn {#1} { g } } \cs_new_protected:cpn { \c__keys_props_root_str .meta:n } #1 { \__keys_meta_make:n {#1} } \cs_new_protected:cpn { \c__keys_props_root_str .meta:nn } #1 @@ -14032,193 +14045,269 @@ \prop_gput:Nnn \g_msg_module_name_prop { keys } { LaTeX3 } \prop_gput:Nnn \g_msg_module_type_prop { keys } { } %% File: l3intarray.dtx -\cs_new_eq:NN \__intarray_entry:w \tex_fontdimen:D -\cs_new_eq:NN \__intarray_count:w \tex_hyphenchar:D -\int_new:N \l__intarray_loop_int -\dim_const:Nn \c__intarray_sp_dim { 1 sp } -\int_new:N \g__intarray_font_int \msg_new:nnn { kernel } { negative-array-size } { Size~of~array~may~not~be~negative:~#1 } -\cs_new_protected:Npn \__intarray_new:N #1 - { - \__kernel_chk_if_free_cs:N #1 - \int_gincr:N \g__intarray_font_int - \tex_global:D \tex_font:D #1 - = cmr10~at~ \g__intarray_font_int \c__intarray_sp_dim \scan_stop: - \int_step_inline:nn { 8 } - { \__kernel_intarray_gset:Nnn #1 {##1} \c_zero_int } - } -\cs_new_protected:Npn \intarray_new:Nn #1#2 +\int_new:N \l__intarray_loop_int +\cs_if_exist:NTF \__intarray_gset_count:Nw { - \__intarray_new:N #1 - \__intarray_count:w #1 = \int_eval:n {#2} \scan_stop: - \int_compare:nNnT { \intarray_count:N #1 } < 0 + \int_new:N \g__intarray_table_int + \int_new:N \l__intarray_bad_index_int + \cs_new_protected:Npn \__intarray_new:N #1 { - \msg_error:nnx { kernel } { negative-array-size } - { \intarray_count:N #1 } + \__kernel_chk_if_free_cs:N #1 + \int_gincr:N \g__intarray_table_int + \cs_gset_nopar:Npx #1 { \__intarray:w \int_use:N \g__intarray_table_int \c_space_tl } } - \int_compare:nNnT { \intarray_count:N #1 } > 0 - { \__kernel_intarray_gset:Nnn #1 { \intarray_count:N #1 } { 0 } } - } -\cs_generate_variant:Nn \intarray_new:Nn { c } -\cs_new:Npn \intarray_count:N #1 { \int_value:w \__intarray_count:w #1 } -\cs_generate_variant:Nn \intarray_count:N { c } -\cs_new:Npn \__intarray_signed_max_dim:n #1 - { \int_value:w \int_compare:nNnT {#1} < 0 { - } \c_max_dim } -\cs_new:Npn \__intarray_bounds:NNnTF #1#2#3 - { - \if_int_compare:w 1 > #3 \exp_stop_f: - \__intarray_bounds_error:NNnw #1 #2 {#3} - \else: - \if_int_compare:w #3 > \intarray_count:N #2 \exp_stop_f: - \__intarray_bounds_error:NNnw #1 #2 {#3} - \fi: - \fi: - \use_i:nn - } -\cs_new:Npn \__intarray_bounds_error:NNnw #1#2#3#4 \use_i:nn #5#6 - { - #4 - #1 { kernel } { out-of-bounds } - { \token_to_str:N #2 } {#3} { \intarray_count:N #2 } - #6 - } -\cs_new_protected:Npn \__kernel_intarray_gset:Nnn #1#2#3 - { \__intarray_entry:w #2 #1 #3 \c__intarray_sp_dim } -\cs_new_protected:Npn \intarray_gset:Nnn #1#2#3 - { - \exp_after:wN \__intarray_gset:Nww - \exp_after:wN #1 - \int_value:w \int_eval:n {#2} \exp_after:wN ; - \int_value:w \int_eval:n {#3} ; - } -\cs_generate_variant:Nn \intarray_gset:Nnn { c } -\cs_new_protected:Npn \__intarray_gset:Nww #1#2 ; #3 ; - { - \__intarray_bounds:NNnTF \msg_error:nnxxx #1 {#2} + \cs_new_protected:Npn \intarray_new:Nn #1#2 { - \__intarray_gset_overflow_test:nw {#3} - \__kernel_intarray_gset:Nnn #1 {#2} {#3} + \__intarray_new:N #1 + \__intarray_gset_count:Nw #1 \int_eval:n {#2} \scan_stop: + \int_compare:nNnT { \intarray_count:N #1 } < 0 + { + \msg_error:nnx { kernel } { negative-array-size } + { \intarray_count:N #1 } + } } - { } - } -\cs_if_exist:NTF \tex_ifabsnum:D - { - \cs_new_protected:Npn \__intarray_gset_overflow_test:nw #1 + \cs_generate_variant:Nn \intarray_new:Nn { c } + \cs_generate_variant:Nn \intarray_count:N { c } + \cs_new_protected:Npn \__kernel_intarray_gset:Nnn #1#2#3 + { \__intarray_gset:w #2 #1 #3 \scan_stop: } + \cs_new_protected:Npn \intarray_gset:Nnn #1#2#3 { - \tex_ifabsnum:D #1 > \c_max_dim - \exp_after:wN \__intarray_gset_overflow:NNnn - \fi: + \__intarray_gset:wF \int_eval:n {#2} #1 \int_eval:n{#3} + { + \msg_error:nnxxx { kernel } { out-of-bounds } + { \token_to_str:N #1 } { \int_use:N \l__intarray_bad_index_int } { \intarray_count:N #1 } + } + } + \cs_generate_variant:Nn \intarray_gset:Nnn { c } + \cs_generate_variant:Nn \intarray_gzero:N { c } + \cs_new:Npn \__kernel_intarray_item:Nn #1#2 + { \__intarray_item:w #2 #1 } + \cs_new:Npn \intarray_item:Nn #1#2 + { + \__intarray_item:wF \int_eval:n {#2} #1 + { + \msg_expandable_error:nnfff { kernel } { out-of-bounds } + { \token_to_str:N #1 } { \int_use:N \l__intarray_bad_index_int } { \intarray_count:N #1 } + 0 + } + } + \cs_generate_variant:Nn \intarray_item:Nn { c } + \cs_new:Npn \intarray_rand_item:N #1 + { \intarray_item:Nn #1 { \int_rand:n { \intarray_count:N #1 } } } + \cs_generate_variant:Nn \intarray_rand_item:N { c } + \cs_new_protected:Npn \intarray_const_from_clist:Nn #1#2 + { + \__intarray_new:N #1 + \int_zero:N \l__intarray_loop_int + \clist_map_inline:nn {#2} + { + \int_incr:N \l__intarray_loop_int + \__kernel_intarray_gset:Nnn #1 \l__intarray_loop_int { \int_eval:n {##1} } } } + \cs_generate_variant:Nn \intarray_const_from_clist:Nn { c } + \cs_new:Npn \intarray_to_clist:N #1 { \__intarray_to_clist:Nn #1 { , } } + \cs_generate_variant:Nn \intarray_to_clist:N { c } + \cs_new:Npn \__kernel_intarray_range_to_clist:Nnn #1#2#3 + { + \__intarray_range_to_clist:w #1 + \int_eval:n {#2} ~ \int_eval:n {#3} ~ + } + \cs_new_protected:Npn \__kernel_intarray_gset_range_from_clist:Nnn #1#2#3 + { + \__intarray_gset_range:w \int_eval:w #2 #1 #3 , , \scan_stop: + } + \cs_new_protected:Npn \__intarray_gset_overflow_test:nw #1 + { + } } { - \cs_new_protected:Npn \__intarray_gset_overflow_test:nw #1 + \cs_new_eq:NN \__intarray_entry:w \tex_fontdimen:D + \cs_new_eq:NN \__intarray_count:w \tex_hyphenchar:D + \dim_const:Nn \c__intarray_sp_dim { 1 sp } + \int_new:N \g__intarray_font_int + \cs_new_protected:Npn \__intarray_new:N #1 { - \if_int_compare:w \int_abs:n {#1} > \c_max_dim - \exp_after:wN \__intarray_gset_overflow:NNnn + \__kernel_chk_if_free_cs:N #1 + \int_gincr:N \g__intarray_font_int + \tex_global:D \tex_font:D #1 + = cmr10~at~ \g__intarray_font_int \c__intarray_sp_dim \scan_stop: + \int_step_inline:nn { 8 } + { \__kernel_intarray_gset:Nnn #1 {##1} \c_zero_int } + } + \cs_new_protected:Npn \intarray_new:Nn #1#2 + { + \__intarray_new:N #1 + \__intarray_count:w #1 = \int_eval:n {#2} \scan_stop: + \int_compare:nNnT { \intarray_count:N #1 } < 0 + { + \msg_error:nnx { kernel } { negative-array-size } + { \intarray_count:N #1 } + } + \int_compare:nNnT { \intarray_count:N #1 } > 0 + { \__kernel_intarray_gset:Nnn #1 { \intarray_count:N #1 } { 0 } } + } + \cs_generate_variant:Nn \intarray_new:Nn { c } + \cs_new:Npn \intarray_count:N #1 { \int_value:w \__intarray_count:w #1 } + \cs_generate_variant:Nn \intarray_count:N { c } + \cs_new:Npn \__intarray_signed_max_dim:n #1 + { \int_value:w \int_compare:nNnT {#1} < 0 { - } \c_max_dim } + \cs_new:Npn \__intarray_bounds:NNnTF #1#2#3 + { + \if_int_compare:w 1 > #3 \exp_stop_f: + \__intarray_bounds_error:NNnw #1 #2 {#3} + \else: + \if_int_compare:w #3 > \intarray_count:N #2 \exp_stop_f: + \__intarray_bounds_error:NNnw #1 #2 {#3} + \fi: \fi: + \use_i:nn } - } -\cs_new_protected:Npn \__intarray_gset_overflow:NNnn #1#2#3#4 - { - \msg_error:nnxxxx { kernel } { overflow } - { \token_to_str:N #2 } {#3} {#4} { \__intarray_signed_max_dim:n {#4} } - #1 #2 {#3} { \__intarray_signed_max_dim:n {#4} } - } -\cs_new_protected:Npn \intarray_gzero:N #1 - { - \int_zero:N \l__intarray_loop_int - \prg_replicate:nn { \intarray_count:N #1 } + \cs_new:Npn \__intarray_bounds_error:NNnw #1#2#3#4 \use_i:nn #5#6 + { + #4 + #1 { kernel } { out-of-bounds } + { \token_to_str:N #2 } {#3} { \intarray_count:N #2 } + #6 + } + \cs_new_protected:Npn \__kernel_intarray_gset:Nnn #1#2#3 + { \__intarray_entry:w #2 #1 #3 \c__intarray_sp_dim } + \cs_new_protected:Npn \intarray_gset:Nnn #1#2#3 + { + \exp_after:wN \__intarray_gset:Nww + \exp_after:wN #1 + \int_value:w \int_eval:n {#2} \exp_after:wN ; + \int_value:w \int_eval:n {#3} ; + } + \cs_generate_variant:Nn \intarray_gset:Nnn { c } + \cs_new_protected:Npn \__intarray_gset:Nww #1#2 ; #3 ; + { + \__intarray_bounds:NNnTF \msg_error:nnxxx #1 {#2} + { + \__intarray_gset_overflow_test:nw {#3} + \__kernel_intarray_gset:Nnn #1 {#2} {#3} + } + { } + } + \cs_if_exist:NTF \tex_ifabsnum:D + { + \cs_new_protected:Npn \__intarray_gset_overflow_test:nw #1 + { + \tex_ifabsnum:D #1 > \c_max_dim + \exp_after:wN \__intarray_gset_overflow:NNnn + \fi: + } + } + { + \cs_new_protected:Npn \__intarray_gset_overflow_test:nw #1 + { + \if_int_compare:w \int_abs:n {#1} > \c_max_dim + \exp_after:wN \__intarray_gset_overflow:NNnn + \fi: + } + } + \cs_new_protected:Npn \__intarray_gset_overflow:NNnn #1#2#3#4 + { + \msg_error:nnxxxx { kernel } { overflow } + { \token_to_str:N #2 } {#3} {#4} { \__intarray_signed_max_dim:n {#4} } + #1 #2 {#3} { \__intarray_signed_max_dim:n {#4} } + } + \cs_new_protected:Npn \intarray_gzero:N #1 + { + \int_zero:N \l__intarray_loop_int + \prg_replicate:nn { \intarray_count:N #1 } + { + \int_incr:N \l__intarray_loop_int + \__intarray_entry:w \l__intarray_loop_int #1 \c_zero_dim + } + } + \cs_generate_variant:Nn \intarray_gzero:N { c } + \cs_new:Npn \__kernel_intarray_item:Nn #1#2 + { \int_value:w \__intarray_entry:w #2 #1 } + \cs_new:Npn \intarray_item:Nn #1#2 + { + \exp_after:wN \__intarray_item:Nw + \exp_after:wN #1 + \int_value:w \int_eval:n {#2} ; + } + \cs_generate_variant:Nn \intarray_item:Nn { c } + \cs_new:Npn \__intarray_item:Nw #1#2 ; + { + \__intarray_bounds:NNnTF \msg_expandable_error:nnfff #1 {#2} + { \__kernel_intarray_item:Nn #1 {#2} } + { 0 } + } + \cs_new:Npn \intarray_rand_item:N #1 + { \intarray_item:Nn #1 { \int_rand:n { \intarray_count:N #1 } } } + \cs_generate_variant:Nn \intarray_rand_item:N { c } + \cs_new_protected:Npn \intarray_const_from_clist:Nn #1#2 + { + \__intarray_new:N #1 + \int_zero:N \l__intarray_loop_int + \clist_map_inline:nn {#2} + { \exp_args:Nf \__intarray_const_from_clist:nN { \int_eval:n {##1} } #1 } + \__intarray_count:w #1 \l__intarray_loop_int + } + \cs_generate_variant:Nn \intarray_const_from_clist:Nn { c } + \cs_new_protected:Npn \__intarray_const_from_clist:nN #1#2 { \int_incr:N \l__intarray_loop_int - \__intarray_entry:w \l__intarray_loop_int #1 \c_zero_dim + \__intarray_gset_overflow_test:nw {#1} + \__kernel_intarray_gset:Nnn #2 \l__intarray_loop_int {#1} } - } -\cs_generate_variant:Nn \intarray_gzero:N { c } -\cs_new:Npn \__kernel_intarray_item:Nn #1#2 - { \int_value:w \__intarray_entry:w #2 #1 } -\cs_new:Npn \intarray_item:Nn #1#2 - { - \exp_after:wN \__intarray_item:Nw - \exp_after:wN #1 - \int_value:w \int_eval:n {#2} ; - } -\cs_generate_variant:Nn \intarray_item:Nn { c } -\cs_new:Npn \__intarray_item:Nw #1#2 ; - { - \__intarray_bounds:NNnTF \msg_expandable_error:nnfff #1 {#2} - { \__kernel_intarray_item:Nn #1 {#2} } - { 0 } - } -\cs_new:Npn \intarray_rand_item:N #1 - { \intarray_item:Nn #1 { \int_rand:n { \intarray_count:N #1 } } } -\cs_generate_variant:Nn \intarray_rand_item:N { c } -\cs_new_protected:Npn \intarray_const_from_clist:Nn #1#2 - { - \__intarray_new:N #1 - \int_zero:N \l__intarray_loop_int - \clist_map_inline:nn {#2} - { \exp_args:Nf \__intarray_const_from_clist:nN { \int_eval:n {##1} } #1 } - \__intarray_count:w #1 \l__intarray_loop_int - } -\cs_generate_variant:Nn \intarray_const_from_clist:Nn { c } -\cs_new_protected:Npn \__intarray_const_from_clist:nN #1#2 - { - \int_incr:N \l__intarray_loop_int - \__intarray_gset_overflow_test:nw {#1} - \__kernel_intarray_gset:Nnn #2 \l__intarray_loop_int {#1} - } -\cs_new:Npn \intarray_to_clist:N #1 { \__intarray_to_clist:Nn #1 { , } } -\cs_generate_variant:Nn \intarray_to_clist:N { c } -\cs_new:Npn \__intarray_to_clist:Nn #1#2 - { - \int_compare:nNnF { \intarray_count:N #1 } = \c_zero_int + \cs_new:Npn \intarray_to_clist:N #1 { \__intarray_to_clist:Nn #1 { , } } + \cs_generate_variant:Nn \intarray_to_clist:N { c } + \cs_new:Npn \__intarray_to_clist:Nn #1#2 + { + \int_compare:nNnF { \intarray_count:N #1 } = \c_zero_int + { + \exp_last_unbraced:Nf \use_none:n + { \__intarray_to_clist:w 1 ; #1 {#2} \prg_break_point: } + } + } + \cs_new:Npn \__intarray_to_clist:w #1 ; #2#3 + { + \if_int_compare:w #1 > \__intarray_count:w #2 + \prg_break:n + \fi: + #3 \__kernel_intarray_item:Nn #2 {#1} + \exp_after:wN \__intarray_to_clist:w + \int_value:w \int_eval:w #1 + \c_one_int ; #2 {#3} + } + \cs_new:Npn \__kernel_intarray_range_to_clist:Nnn #1#2#3 { \exp_last_unbraced:Nf \use_none:n - { \__intarray_to_clist:w 1 ; #1 {#2} \prg_break_point: } + { + \exp_after:wN \__intarray_range_to_clist:ww + \int_value:w \int_eval:w #2 \exp_after:wN ; + \int_value:w \int_eval:w #3 ; + #1 \prg_break_point: + } } - } -\cs_new:Npn \__intarray_to_clist:w #1 ; #2#3 - { - \if_int_compare:w #1 > \__intarray_count:w #2 - \prg_break:n - \fi: - #3 \__kernel_intarray_item:Nn #2 {#1} - \exp_after:wN \__intarray_to_clist:w - \int_value:w \int_eval:w #1 + \c_one_int ; #2 {#3} - } -\cs_new:Npn \__kernel_intarray_range_to_clist:Nnn #1#2#3 - { - \exp_last_unbraced:Nf \use_none:n + \cs_new:Npn \__intarray_range_to_clist:ww #1 ; #2 ; #3 { + \if_int_compare:w #1 > #2 \exp_stop_f: + \prg_break:n + \fi: + , \__kernel_intarray_item:Nn #3 {#1} \exp_after:wN \__intarray_range_to_clist:ww - \int_value:w \int_eval:w #2 \exp_after:wN ; - \int_value:w \int_eval:w #3 ; - #1 \prg_break_point: + \int_value:w \int_eval:w #1 + \c_one_int ; #2 ; #3 + } + \cs_new_protected:Npn \__kernel_intarray_gset_range_from_clist:Nnn #1#2#3 + { + \int_set:Nn \l__intarray_loop_int {#2} + \__intarray_gset_range:Nw #1 #3 , , \prg_break_point: + } + \cs_new_protected:Npn \__intarray_gset_range:Nw #1 #2 , + { + \if_catcode:w \scan_stop: \tl_to_str:n {#2} \scan_stop: + \prg_break:n + \fi: + \__kernel_intarray_gset:Nnn #1 \l__intarray_loop_int {#2} + \int_incr:N \l__intarray_loop_int + \__intarray_gset_range:Nw #1 } - } -\cs_new:Npn \__intarray_range_to_clist:ww #1 ; #2 ; #3 - { - \if_int_compare:w #1 > #2 \exp_stop_f: - \prg_break:n - \fi: - , \__kernel_intarray_item:Nn #3 {#1} - \exp_after:wN \__intarray_range_to_clist:ww - \int_value:w \int_eval:w #1 + \c_one_int ; #2 ; #3 - } -\cs_new_protected:Npn \__kernel_intarray_gset_range_from_clist:Nnn #1#2#3 - { - \int_set:Nn \l__intarray_loop_int {#2} - \__intarray_gset_range:Nw #1 #3 , , \prg_break_point: - } -\cs_new_protected:Npn \__intarray_gset_range:Nw #1 #2 , - { - \if_catcode:w \scan_stop: \tl_to_str:n {#2} \scan_stop: - \prg_break:n - \fi: - \__kernel_intarray_gset:Nnn #1 \l__intarray_loop_int {#2} - \int_incr:N \l__intarray_loop_int - \__intarray_gset_range:Nw #1 } \cs_new_protected:Npn \intarray_show:N { \__intarray_show:NN \msg_show:nnxxxx } \cs_generate_variant:Nn \intarray_show:N { c } |