diff options
Diffstat (limited to 'Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx | 169 |
1 files changed, 85 insertions, 84 deletions
diff --git a/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx index 66459badb08..b7fb52e7fdb 100644 --- a/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2025-01-14} +% \date{Released 2025-01-18} % % \maketitle % @@ -71,7 +71,7 @@ % % In this file at least, a \meta{floating point object} is a floating % point number or tuple. This can be extended to anything that starts -% with \cs{s_@@} or \cs{s_@@_\meta{type}} and ends with |;| with some +% with \cs{s_@@} or \cs{s_@@_\meta{type}} and ends with \cs{@@_sep:} with some % internal structure that depends on the \meta{type}. % % \begin{macro}[EXP]{\@@_parse:n} @@ -215,12 +215,12 @@ % |\add:ww| 12345 ; 333444 ; % \end{syntax} % which can safely perform the addition by grabbing two arguments -% delimited by~|;|. +% delimited by~\cs{@@_sep:}. % % If we were to continue parsing the expression, then the following % number should also be cleaned up before the next use of a binary % operation such as |\add:ww|. Just like \cs{int_value:w} |12345| -% \cs{exp_after:wN}~|;| expanded what follows once, we need |\add:ww| +% \cs{exp_after:wN}~\cs{@@_sep:} expanded what follows once, we need |\add:ww| % to do the calculation, and in the process to expand the following % once. This is also true in our real application: all the functions of % the form \cs[no-index]{@@_\ldots_o:ww} expand what follows once. This comes at the @@ -643,7 +643,7 @@ % expansion. That turns out to be useful. % \begin{macrocode} \cs_new:Npn \@@_parse_return_semicolon:w - #1 \fi: \@@_parse_expand:w { \fi: ; #1 } + #1 \fi: \@@_parse_expand:w { \fi: \@@_sep: #1 } % \end{macrocode} % \end{macro} % @@ -665,7 +665,7 @@ % stream, until meeting a non-digit, or up to a number of digits equal % to their index. The full expansion is % \begin{syntax} -% \meta{digits} |;| \meta{filling 0} |;| \meta{length} +% \meta{digits} \cs{@@_sep:} \meta{filling 0} \cs{@@_sep:} \meta{length} % \end{syntax} % where \meta{filling 0} is a string of zeros such that \meta{digits} % \meta{filling 0} has the length given by the index of the function, @@ -687,14 +687,14 @@ \@@_parse_expand:w } } -\@@_tmp:w {vii} \@@_parse_digits_vi:N { 0000000 ; 7 } -\@@_tmp:w {vi} \@@_parse_digits_v:N { 000000 ; 6 } -\@@_tmp:w {v} \@@_parse_digits_iv:N { 00000 ; 5 } -\@@_tmp:w {iv} \@@_parse_digits_iii:N { 0000 ; 4 } -\@@_tmp:w {iii} \@@_parse_digits_ii:N { 000 ; 3 } -\@@_tmp:w {ii} \@@_parse_digits_i:N { 00 ; 2 } -\@@_tmp:w {i} \@@_parse_digits_:N { 0 ; 1 } -\cs_new:Npn \@@_parse_digits_:N { ; ; 0 } +\@@_tmp:w {vii} \@@_parse_digits_vi:N { 0000000 \@@_sep: 7 } +\@@_tmp:w {vi} \@@_parse_digits_v:N { 000000 \@@_sep: 6 } +\@@_tmp:w {v} \@@_parse_digits_iv:N { 00000 \@@_sep: 5 } +\@@_tmp:w {iv} \@@_parse_digits_iii:N { 0000 \@@_sep: 4 } +\@@_tmp:w {iii} \@@_parse_digits_ii:N { 000 \@@_sep: 3 } +\@@_tmp:w {ii} \@@_parse_digits_i:N { 00 \@@_sep: 2 } +\@@_tmp:w {i} \@@_parse_digits_:N { 0 \@@_sep: 1 } +\cs_new:Npn \@@_parse_digits_:N { \@@_sep: \@@_sep: 0 } % \end{macrocode} % \end{macro} % @@ -874,26 +874,26 @@ \exp_after:wN \@@_parse_one_register_auxii:wwwNw } \exp_not:N \exp_after:wN { \exp_not:N \tex_the:D #1 } - ; \exp_not:N \@@_parse_one_register_dim:ww - \tl_to_str:n { pt } ; \exp_not:N \@@_parse_one_register_mu:www - . \tl_to_str:n { pt } ; \exp_not:N \@@_parse_one_register_int:www + \@@_sep: \exp_not:N \@@_parse_one_register_dim:ww + \tl_to_str:n { pt } \@@_sep: \exp_not:N \@@_parse_one_register_mu:www + . \tl_to_str:n { pt } \@@_sep: \exp_not:N \@@_parse_one_register_int:www \s_@@_stop } \exp_args:Nno \use:nn { \cs_new:Npn \@@_parse_one_register_auxii:wwwNw #1 . #2 } - { \tl_to_str:n { pt } #3 ; #4#5 \s_@@_stop } - { #4 #1.#2; } + { \tl_to_str:n { pt } #3 \@@_sep: #4#5 \s_@@_stop } + { #4 #1.#2\@@_sep: } \exp_args:Nno \use:nn { \cs_new:Npn \@@_parse_one_register_mu:www #1 } - { \tl_to_str:n { mu } ; #2 ; } - { \@@_parse_one_register_dim:ww #1 ; } -\cs_new:Npn \@@_parse_one_register_int:www #1; #2.; #3; + { \tl_to_str:n { mu } \@@_sep: #2 \@@_sep: } + { \@@_parse_one_register_dim:ww #1 \@@_sep: } +\cs_new:Npn \@@_parse_one_register_int:www #1\@@_sep: #2.\@@_sep: #3\@@_sep: { \@@_parse:n { #1 e #3 } } -\cs_new:Npn \@@_parse_one_register_dim:ww #1; #2; +\cs_new:Npn \@@_parse_one_register_dim:ww #1\@@_sep: #2\@@_sep: { \exp_after:wN \@@_from_dim_test:ww \int_value:w #2 \exp_after:wN , - \int_value:w \dim_to_decimal_in_sp:n { #1 pt } ; + \int_value:w \dim_to_decimal_in_sp:n { #1 pt } \@@_sep: } % \end{macrocode} % \end{macro} @@ -942,11 +942,11 @@ \exp_after:wN \@@_parse_one_register_wd:Nw #4 \@@_parse_expand:w e } -\cs_new:Npn \@@_parse_one_register_wd:Nw #1#2 ; +\cs_new:Npn \@@_parse_one_register_wd:Nw #1#2 \@@_sep: { \exp_after:wN \@@_from_dim_test:ww \exp_after:wN 0 \exp_after:wN , - \int_value:w \dim_to_decimal_in_sp:n { #1 #2 } ; + \int_value:w \dim_to_decimal_in_sp:n { #1 #2 } \@@_sep: } % \end{macrocode} % \end{macro} @@ -1020,7 +1020,7 @@ % mixture of lower and upper case, so we test and use a % differently-named control sequence. % \begin{macrocode} -\cs_new:Npn \@@_parse_word:Nw #1#2; +\cs_new:Npn \@@_parse_word:Nw #1#2\@@_sep: { \cs_if_exist_use:cF { @@_parse_word_#2:N } { @@ -1184,7 +1184,7 @@ % \begin{macrocode} \cs_new:Npn \@@_parse_zero: { - \exp_after:wN ; \exp_after:wN 1 + \exp_after:wN \@@_sep: \exp_after:wN 1 \int_value:w \@@_parse_exponent:N } % \end{macrocode} @@ -1220,7 +1220,7 @@ % % \begin{macro}[rEXP]{\@@_parse_small_leading:wwNN} % \begin{syntax} -% \cs{@@_parse_small_leading:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} +% \cs{@@_parse_small_leading:wwNN} |1| \meta{digits} \cs{@@_sep:} \meta{zeros} \cs{@@_sep:} \meta{number~of~zeros} % \end{syntax} % We leave \meta{digits} \meta{zeros} in the input stream: the % functions used to grab digits are such that this constitutes digits @@ -1232,7 +1232,7 @@ % Otherwise put $8$~zeros in to complete the significand, then look % for an exponent. % \begin{macrocode} -\cs_new:Npn \@@_parse_small_leading:wwNN 1 #1 ; #2; #3 #4 +\cs_new:Npn \@@_parse_small_leading:wwNN 1 #1 \@@_sep: #2\@@_sep: #3 #4 { #1 #2 \exp_after:wN \@@_parse_pack_trailing:NNNNNNww @@ -1254,7 +1254,7 @@ % % \begin{macro}[rEXP]{\@@_parse_small_trailing:wwNN} % \begin{syntax} -% \cs{@@_parse_small_trailing:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} \meta{next~token} +% \cs{@@_parse_small_trailing:wwNN} |1| \meta{digits} \cs{@@_sep:} \meta{zeros} \cs{@@_sep:} \meta{number~of~zeros} \meta{next~token} % \end{syntax} % Leave digits $10$ to~$15$ (arguments |#1| and |#2|) in the input % stream. If the \meta{next~token} is a digit, it is the $16$th @@ -1264,7 +1264,7 @@ % Otherwise, there is no $16$-th digit, so we put a~$0$, and look for % an exponent. % \begin{macrocode} -\cs_new:Npn \@@_parse_small_trailing:wwNN 1 #1 ; #2; #3 #4 +\cs_new:Npn \@@_parse_small_trailing:wwNN 1 #1 \@@_sep: #2\@@_sep: #3 #4 { #1 #2 \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f: @@ -1301,19 +1301,20 @@ % this is simple because such a carry can only occur to give rise to a % power of~$10$. % \begin{macrocode} -\cs_new:Npn \@@_parse_pack_trailing:NNNNNNww #1 #2 #3#4#5#6 #7; #8 ; +\cs_new:Npn \@@_parse_pack_trailing:NNNNNNww + #1 #2 #3#4#5#6 #7\@@_sep: #8 \@@_sep: { \if_meaning:w 2 #2 + 1 \fi: - ; #8 + #1 ; {#3#4#5#6} {#7}; + \@@_sep: #8 + #1 \@@_sep: {#3#4#5#6} {#7}\@@_sep: } -\cs_new:Npn \@@_parse_pack_leading:NNNNNww #1 #2#3#4#5 #6; #7; +\cs_new:Npn \@@_parse_pack_leading:NNNNNww #1 #2#3#4#5 #6\@@_sep: #7\@@_sep: { + #7 \if_meaning:w 2 #1 \@@_parse_pack_carry:w \fi: - ; 0 {#2#3#4#5} {#6} + \@@_sep: 0 {#2#3#4#5} {#6} } -\cs_new:Npn \@@_parse_pack_carry:w \fi: ; 0 #1 - { \fi: + 1 ; 0 {1000} } +\cs_new:Npn \@@_parse_pack_carry:w \fi: \@@_sep: 0 #1 + { \fi: + 1 \@@_sep: 0 {1000} } % \end{macrocode} % \end{macro} % @@ -1344,7 +1345,7 @@ % % \begin{macro}[rEXP]{\@@_parse_large_leading:wwNN} % \begin{syntax} -% \cs{@@_parse_large_leading:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} \meta{next~token} +% \cs{@@_parse_large_leading:wwNN} |1| \meta{digits} \cs{@@_sep:} \meta{zeros} \cs{@@_sep:} \meta{number~of~zeros} \meta{next~token} % \end{syntax} % We shift the exponent by the number of digits in~|#1|, namely the % target number, $8$, minus the \meta{number of zeros} (number of @@ -1357,7 +1358,7 @@ % complete the $8$~first digits, insert $8$~more, and look for an % exponent. % \begin{macrocode} -\cs_new:Npn \@@_parse_large_leading:wwNN 1 #1 ; #2; #3 #4 +\cs_new:Npn \@@_parse_large_leading:wwNN 1 #1 \@@_sep: #2\@@_sep: #3 #4 { + \c_@@_half_prec_int - #3 \exp_after:wN \@@_parse_pack_leading:NNNNNww @@ -1392,7 +1393,7 @@ % % \begin{macro}[EXP]{\@@_parse_large_trailing:wwNN} % \begin{syntax} -% \cs{@@_parse_large_trailing:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} \meta{next~token} +% \cs{@@_parse_large_trailing:wwNN} |1| \meta{digits} \cs{@@_sep:} \meta{zeros} \cs{@@_sep:} \meta{number~of~zeros} \meta{next~token} % \end{syntax} % We have just read $15$~digits. If the \meta{next token} is a digit, % then the exponent shift caused by this block of $8$~digits is~$8$, @@ -1408,7 +1409,7 @@ % for an exponent after using the \meta{zeros} and providing a $16$-th % digit of~$0$. % \begin{macrocode} -\cs_new:Npn \@@_parse_large_trailing:wwNN 1 #1 ; #2; #3 #4 +\cs_new:Npn \@@_parse_large_trailing:wwNN 1 #1 \@@_sep: #2\@@_sep: #3 #4 { \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f: \exp_after:wN \@@_parse_pack_trailing:NNNNNNww @@ -1488,9 +1489,9 @@ % time, the result |0| or |1| is added to the % surrounding integer expression. % \begin{macrocode} -\cs_new:Npn \@@_parse_round_after:wN #1; #2 +\cs_new:Npn \@@_parse_round_after:wN #1\@@_sep: #2 { - + #2 \exp_after:wN ; + + #2 \exp_after:wN \@@_sep: \int_value:w \@@_int_eval:w #1 + \@@_parse_exponent:N } % \end{macrocode} @@ -1500,8 +1501,8 @@ % {\@@_parse_small_round:NN, \@@_parse_round_after:wN} % Here, |#1|~is the digit that we are currently rounding (we only care % whether it is even or odd). If |#2|~is not a digit, then fetch an -% exponent and expand to |;|\meta{exponent} only. Otherwise, we -% expand to |+0| or |+1|, then |;|\meta{exponent}. To +% exponent and expand to \cs{@@_sep:}\meta{exponent} only. Otherwise, we +% expand to |+0| or |+1|, then \cs{@@_sep:}\meta{exponent}. To % decide which, call \cs{@@_round_s:NNNw} to know whether to round up, % giving it as arguments a sign~$0$ (all explicit numbers are % positive), the digit |#1|~to round, the first following digit~|#2|, @@ -1581,7 +1582,7 @@ \fi: \@@_parse_expand:w } -\cs_new:Npn \@@_parse_large_round_aux:wNN #1 ; #2 #3 +\cs_new:Npn \@@_parse_large_round_aux:wNN #1 \@@_sep: #2 #3 { + #2 \exp_after:wN \@@_parse_round_after:wN @@ -1591,7 +1592,7 @@ \exp_after:wN \@@_parse_round_loop:N \exp:w \exp_after:wN \@@_parse_expand:w \else: - \exp_after:wN ; + \exp_after:wN \@@_sep: \exp_after:wN 0 \exp_after:wN #3 \fi: @@ -1618,7 +1619,7 @@ % two tokens ahead completely would break the third example (unpacking % is even worse). Indeed, in the course of reading $3.2$, \cs{c_pi_fp} % is expanded to \cs{s_@@} \cs{@@_chk:w} |1| |0| |{-1}| |{3141}| -% $\cdots$ |;| and \cs{s_@@} stops the expansion. Expanding two tokens +% $\cdots$ \cs{@@_sep:} and \cs{s_@@} stops the expansion. Expanding two tokens % ahead would then force the expansion of \cs{@@_chk:w} (despite it % being protected), and that function tries to produce an error. % @@ -1636,7 +1637,7 @@ % \begin{macrocode} \cs_new:Npn \@@_parse_exponent:Nw #1 #2 \@@_parse_expand:w { - \exp_after:wN ; + \exp_after:wN \@@_sep: \int_value:w #2 \@@_parse_exponent:N #1 } % \end{macrocode} @@ -1669,7 +1670,7 @@ { \if_int_compare:w \if_catcode:w \scan_stop: \exp_not:N #2 0 \else: `#2 \fi: > `9 \exp_stop_f: - 0 \exp_after:wN ; \exp_after:wN #1 + 0 \exp_after:wN \@@_sep: \exp_after:wN #1 \else: \exp_after:wN \@@_parse_exponent_sign:N \fi: @@ -1708,7 +1709,7 @@ \@@_parse_exponent_keep:NTF #1 { \@@_parse_return_semicolon:w #1 } { - \exp_after:wN ; + \exp_after:wN \@@_sep: \exp:w } \fi: @@ -1820,7 +1821,7 @@ % \begin{macro}[EXP]{\@@_parse_apply_unary_type:NNN, \@@_parse_apply_unary_error:NNw} % In contrast to \cs{@@_parse_apply_function:NNNwN}, this checks that % the operand |#4| is a single argument (namely there is a single -% |;|). We use the fact that any floating point starts with a +% \cs{@@_sep:}). We use the fact that any floating point starts with a % \enquote{safe} token like \cs{s_@@}. If there is no argument % produce the |fp-no-arg| error; if there are at least two produce % |fp-multi-arg|. For the error message extract the mathematical @@ -1834,12 +1835,12 @@ % \begin{macrocode} \cs_new:Npn \@@_parse_apply_unary:NNNwN #1#2#3#4@#5 { - \@@_parse_apply_unary_chk:NwNw #4 @ ; . \s_@@_stop + \@@_parse_apply_unary_chk:NwNw #4 @ \@@_sep: . \s_@@_stop \@@_parse_apply_unary_type:NNN #3 #2 #4 @ \exp:w \exp_end_continue_f:w #5 #1 } -\cs_new:Npn \@@_parse_apply_unary_chk:NwNw #1#2 ; #3#4 \s_@@_stop +\cs_new:Npn \@@_parse_apply_unary_chk:NwNw #1#2 \@@_sep: #3#4 \s_@@_stop { \if_meaning:w @ #3 \else: \token_if_eq_meaning:NNTF . #3 @@ -2043,7 +2044,7 @@ \cs_new:cpn { @@_parse_word_#1:N } { \@@_exp_after_f:nw { \@@_parse_infix:NN } - \s_@@ \@@_chk:w 10 #2 ; + \s_@@ \@@_chk:w 10 #2 \@@_sep: } } \@@_tmp:w {pt} { {1} {1000} {0000} {0000} {0000} } @@ -2070,7 +2071,7 @@ { \exp_after:wN \@@_from_dim_test:ww \exp_after:wN 0 \exp_after:wN , - \int_value:w \dim_to_decimal_in_sp:n { 1 #1 } \exp_after:wN ; + \int_value:w \dim_to_decimal_in_sp:n { 1 #1 } \exp_after:wN \@@_sep: \exp:w \exp_end_continue_f:w \@@_parse_infix:NN } } @@ -2220,7 +2221,7 @@ % according to their types, and expands once after the result. % The |rev| version swaps its arguments before doing this. % \begin{macrocode} -\cs_new:Npn \@@_binary_type_o:Nww #1 #2#3 ; #4 +\cs_new:Npn \@@_binary_type_o:Nww #1 #2#3 \@@_sep: #4 { \exp_after:wN \@@_parse_apply_binary_chk:NN \cs:w @@ -2231,9 +2232,9 @@ _o:ww \cs_end: #1 - #2 #3 ; #4 + #2 #3 \@@_sep: #4 } -\cs_new:Npn \@@_binary_rev_type_o:Nww #1 #2#3 ; #4#5 ; +\cs_new:Npn \@@_binary_rev_type_o:Nww #1 #2#3 \@@_sep: #4#5 \@@_sep: { \exp_after:wN \@@_parse_apply_binary_chk:NN \cs:w @@ -2244,7 +2245,7 @@ _o:ww \cs_end: #1 - #4 #5 ; #2 #3 ; + #4 #5 \@@_sep: #2 #3 \@@_sep: } % \end{macrocode} % \end{macro} @@ -2253,10 +2254,10 @@ % % \begin{macro}[EXP]{\@@_parse_infix_after_operand:NwN} % \begin{macrocode} -\cs_new:Npn \@@_parse_infix_after_operand:NwN #1 #2; +\cs_new:Npn \@@_parse_infix_after_operand:NwN #1 #2\@@_sep: { \@@_exp_after_f:nw { \@@_parse_infix:NN #1 } - #2; + #2\@@_sep: } \cs_new:Npn \@@_parse_infix:NN #1 #2 { @@ -2430,7 +2431,7 @@ \exp_after:wN #1 \exp:w \exp_end_continue_f:w \@@_exp_after_tuple_f:nw { } - \s_@@_tuple \@@_tuple_chk:w { #2 #4 } ; + \s_@@_tuple \@@_tuple_chk:w { #2 #4 } \@@_sep: #5 #1 } % \end{macrocode} @@ -2688,14 +2689,14 @@ \fi: #1 #8 #9 } -\cs_new:Npn \@@_parse_apply_compare_aux:NNwN #1 #2 #3; #4 +\cs_new:Npn \@@_parse_apply_compare_aux:NNwN #1 #2 #3\@@_sep: #4 { \if_meaning:w \@@_parse_compare:NNNNNNN #4 \exp_after:wN \@@_parse_continue_compare:NNwNN \exp_after:wN #1 \exp_after:wN #2 \exp:w \exp_end_continue_f:w - \@@_exp_after_o:w #3; + \@@_exp_after_o:w #3\@@_sep: \exp:w \exp_end_continue_f:w \else: \exp_after:wN \@@_parse_continue:NwN @@ -2725,7 +2726,7 @@ { \@@_error:nffn { bad-args } {#1} - { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#3} ; } } + { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#3} \@@_sep: } } { } \exp_after:wN \c_nan_fp } @@ -2764,11 +2765,11 @@ { \@@_error:nffn { bad-args } {#2} - { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#4} ; } } + { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#4} \@@_sep: } } { } \exp_after:wN \c_nan_fp } -\cs_new:Npn \@@_parse_function_one_two_aux:nnw #1#2 #3; #4 +\cs_new:Npn \@@_parse_function_one_two_aux:nnw #1#2 #3\@@_sep: #4 { \@@_if_type_fp:NTwFw #4 { } @@ -2780,14 +2781,14 @@ \@@_parse_function_one_two_error_o:w } \s_@@_stop - \@@_parse_function_one_two_auxii:nnw {#1} {#2} #3; #4 + \@@_parse_function_one_two_auxii:nnw {#1} {#2} #3\@@_sep: #4 } -\cs_new:Npn \@@_parse_function_one_two_auxii:nnw #1#2#3; #4; #5 +\cs_new:Npn \@@_parse_function_one_two_auxii:nnw #1#2#3\@@_sep: #4\@@_sep: #5 { \if_meaning:w @ #5 \else: \exp_after:wN \@@_parse_function_one_two_error_o:w \fi: - \use_ii:nn {#1} { \use_none:n #2 } #3; #4; #5 + \use_ii:nn {#1} { \use_none:n #2 } #3\@@_sep: #4\@@_sep: #5 } % \end{macrocode} % \end{macro} @@ -2798,21 +2799,21 @@ % afterwards. The code |#1| should itself expand once after its % result. % \begin{macrocode} -\cs_new:Npn \@@_tuple_map_o:nw #1 \s_@@_tuple \@@_tuple_chk:w #2 ; +\cs_new:Npn \@@_tuple_map_o:nw #1 \s_@@_tuple \@@_tuple_chk:w #2 \@@_sep: { \exp_after:wN \s_@@_tuple \exp_after:wN \@@_tuple_chk:w \exp_after:wN { \exp:w \exp_end_continue_f:w \@@_tuple_map_loop_o:nw {#1} #2 - { \s_@@ \prg_break: } ; + { \s_@@ \prg_break: } \@@_sep: \prg_break_point: - \exp_after:wN } \exp_after:wN ; + \exp_after:wN } \exp_after:wN \@@_sep: } -\cs_new:Npn \@@_tuple_map_loop_o:nw #1#2#3 ; +\cs_new:Npn \@@_tuple_map_loop_o:nw #1#2#3 \@@_sep: { \use_none:n #2 - #1 #2 #3 ; + #1 #2 #3 \@@_sep: \exp:w \exp_end_continue_f:w \@@_tuple_map_loop_o:nw {#1} } @@ -2824,24 +2825,24 @@ % afterwards. % \begin{macrocode} \cs_new:Npn \@@_tuple_mapthread_o:nww #1 - \s_@@_tuple \@@_tuple_chk:w #2 ; - \s_@@_tuple \@@_tuple_chk:w #3 ; + \s_@@_tuple \@@_tuple_chk:w #2 \@@_sep: + \s_@@_tuple \@@_tuple_chk:w #3 \@@_sep: { \exp_after:wN \s_@@_tuple \exp_after:wN \@@_tuple_chk:w \exp_after:wN { \exp:w \exp_end_continue_f:w \@@_tuple_mapthread_loop_o:nw {#1} - #2 { \s_@@ \prg_break: } ; @ - #3 { \s_@@ \prg_break: } ; + #2 { \s_@@ \prg_break: } \@@_sep: @ + #3 { \s_@@ \prg_break: } \@@_sep: \prg_break_point: - \exp_after:wN } \exp_after:wN ; + \exp_after:wN } \exp_after:wN \@@_sep: } -\cs_new:Npn \@@_tuple_mapthread_loop_o:nw #1#2#3 ; #4 @ #5#6 ; +\cs_new:Npn \@@_tuple_mapthread_loop_o:nw #1#2#3 \@@_sep: #4 @ #5#6 \@@_sep: { \use_none:n #2 \use_none:n #5 - #1 #2 #3 ; #5 #6 ; + #1 #2 #3 \@@_sep: #5 #6 \@@_sep: \exp:w \exp_end_continue_f:w \@@_tuple_mapthread_loop_o:nw {#1} #4 @ } |