summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/l3kernel/l3seq.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/l3kernel/l3seq.dtx')
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx70
1 files changed, 31 insertions, 39 deletions
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index 24d115669c..e4aeffa83f 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-04-20}
+% \date{Released 2023-05-05}
%
% \maketitle
%
@@ -1608,50 +1608,42 @@
% somewhat moot. The integer variables are declared in \pkg{l3int}:
% load-order issues.
% \begin{macrocode}
-\cs_if_exist:NTF \tex_uniformdeviate:D
+\seq_new:N \g_@@_internal_seq
+\cs_new_protected:Npn \seq_shuffle:N { \@@_shuffle:NN \seq_set_eq:NN }
+\cs_new_protected:Npn \seq_gshuffle:N { \@@_shuffle:NN \seq_gset_eq:NN }
+\cs_new_protected:Npn \@@_shuffle:NN #1#2
{
- \seq_new:N \g_@@_internal_seq
- \cs_new_protected:Npn \seq_shuffle:N { \@@_shuffle:NN \seq_set_eq:NN }
- \cs_new_protected:Npn \seq_gshuffle:N { \@@_shuffle:NN \seq_gset_eq:NN }
- \cs_new_protected:Npn \@@_shuffle:NN #1#2
+ \int_compare:nNnTF { \seq_count:N #2 } > \c_max_register_int
{
- \int_compare:nNnTF { \seq_count:N #2 } > \c_max_register_int
- {
- \msg_error:nnx { seq } { shuffle-too-large }
- { \token_to_str:N #2 }
- }
- {
- \group_begin:
- \int_zero:N \l_@@_internal_a_int
- \@@_push_item_def:
- \cs_gset_eq:NN \@@_item:n \@@_shuffle_item:n
- #2
- \@@_pop_item_def:
- \seq_gset_from_inline_x:Nnn \g_@@_internal_seq
- { \int_step_function:nN { \l_@@_internal_a_int } }
- { \tex_the:D \tex_toks:D ##1 }
- \group_end:
- #1 #2 \g_@@_internal_seq
- \seq_gclear:N \g_@@_internal_seq
- }
+ \msg_error:nnx { seq } { shuffle-too-large }
+ { \token_to_str:N #2 }
}
- \cs_new_protected:Npn \@@_shuffle_item:n
{
- \int_incr:N \l_@@_internal_a_int
- \int_set:Nn \l_@@_internal_b_int
- { 1 + \tex_uniformdeviate:D \l_@@_internal_a_int }
- \tex_toks:D \l_@@_internal_a_int
- = \tex_toks:D \l_@@_internal_b_int
- \tex_toks:D \l_@@_internal_b_int
- }
+ \group_begin:
+ \int_zero:N \l_@@_internal_a_int
+ \@@_push_item_def:
+ \cs_gset_eq:NN \@@_item:n \@@_shuffle_item:n
+ #2
+ \@@_pop_item_def:
+ \seq_gclear:N \g_@@_internal_seq
+ \int_step_inline:nn \l_@@_internal_a_int
+ {
+ \seq_gput_right:Nx \g_@@_internal_seq
+ { \tex_the:D \tex_toks:D ##1 }
+ }
+ \group_end:
+ #1 #2 \g_@@_internal_seq
+ \seq_gclear:N \g_@@_internal_seq
+ }
}
+\cs_new_protected:Npn \@@_shuffle_item:n
{
- \cs_new_protected:Npn \seq_shuffle:N #1
- {
- \msg_error:nnn { kernel } { fp-no-random }
- { \seq_shuffle:N #1 }
- }
- \cs_new_eq:NN \seq_gshuffle:N \seq_shuffle:N
+ \int_incr:N \l_@@_internal_a_int
+ \int_set:Nn \l_@@_internal_b_int
+ { 1 + \tex_uniformdeviate:D \l_@@_internal_a_int }
+ \tex_toks:D \l_@@_internal_a_int
+ = \tex_toks:D \l_@@_internal_b_int
+ \tex_toks:D \l_@@_internal_b_int
}
\cs_generate_variant:Nn \seq_shuffle:N { c }
\cs_generate_variant:Nn \seq_gshuffle:N { c }