From 87b3a936763b34a0b1a91c081cc739a2067192bc Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 8 Nov 2021 23:16:59 +0000 Subject: etl (9nov21) git-svn-id: svn://tug.org/texlive/trunk@60998 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/etl/etl.sty | 109 +++++++++++++++++++------------- 1 file changed, 64 insertions(+), 45 deletions(-) (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/etl/etl.sty b/Master/texmf-dist/tex/latex/etl/etl.sty index de2abad38c5..974c4d0e4cf 100644 --- a/Master/texmf-dist/tex/latex/etl/etl.sty +++ b/Master/texmf-dist/tex/latex/etl/etl.sty @@ -30,7 +30,7 @@ %% etl.sty %% \ProvidesExplPackage{etl} - {2021-08-28} {0.2} + {2021-11-07} {0.3} {expandable token list manipulation} \cs_if_exist:NF \tex_expanded:D { @@ -43,10 +43,6 @@ \cs_new_eq:NN \__etl_detokenize:w \tex_detokenize:D \scan_new:N \s__etl_stop \scan_new:N \s__etl_mark -\cs_new:Npn \__etl_if_mark:nTF #1 - { \__etl_if_mark:w #1 \__etl_if_mark_true:w \s__etl_mark \use_ii:nn } -\cs_new:Npn \__etl_if_mark:w #1 \s__etl_mark {} -\cs_new:Npn \__etl_if_mark_true:w \s__etl_mark \use_ii:nn #1#2 {#1} \cs_new:Npn \__etl_split_first:w #1 { { \__etl_unexpanded:w {#1} } @@ -98,13 +94,11 @@ \__etl_act_result:n {#6} {#4} }} } -\cs_new:Npn \__etl_act:nnnnnnn #1#2#3#4#5#6#7 +\exp_args:NNno \exp_args:Nno \use:n + { \cs_new:Npn \__etl_act:nnnnnnn #1#2#3#4#5#6#7 } { - \__etl_expanded:w - { - \__etl_act:w #7 {\s__etl_stop} . \s__etl_stop {#5} {#1} {#2} {#3} - \__etl_act_result:n {#6} {#4} - } + \exp_after:wN \use_ii_iii:nnn + \etl_act:nnnnnnn {#1} {#2} {#3} {#4} {#5} {#6} {#7} } \exp_args:Nno \use:n { \cs_new:Npn \etl_act:nnnnnn #1#2#3#4#5#6 } { \etl_act:nnnnnnn {#1} {#2} {#3} {#4} {#5} {} {#6} } @@ -193,6 +187,27 @@ \cs_new:Npn \__etl_act_unexpanded_normal:nN #1 { \exp_not:N } \cs_new:Npn \__etl_act_unexpanded_space:n #1 { ~ } \cs_new:Npn \__etl_act_unexpanded_group:nn #1#2 { { \__etl_unexpanded:w {#2} } } +\cs_new:Npn \__etl_act_unexpanded_rest:w #1 \__etl_act:w #2# + { + \__etl_unexpanded:w {#2} + \__etl_act_unexpanded_rest_aux:n + } +\cs_new:Npn \__etl_act_unexpanded_rest_aux:w #1# + { + \__etl_unexpanded:w {#1} + \__etl_act_unexpanded_rest_aux:n + } +\cs_new:Npn \__etl_act_unexpanded_rest_aux:n #1 + { + \__etl_act_if_end:w #1 \__etl_act_unexpanded_rest_done:w \s__etl_stop + { \__etl_unexpanded:w {#1} } + \__etl_act_unexpanded_rest_aux:w + } +\cs_new:Npn \__etl_act_unexpanded_rest_done:w + \s__etl_stop #1 \__etl_act_unexpanded_rest_aux:w + . \s__etl_stop #2#3#4#5 + \__etl_act_result:n #6#7 + {} \cs_new:Npn \etl_act_status:n #1 #2 \s__etl_stop #3 { #2 \s__etl_stop {#1} } \cs_new:Npn \etl_act_put_back:n #1 #2 \__etl_act:w { #2 \__etl_act:w #1 } @@ -214,6 +229,33 @@ { \__etl_unexpanded:w { #1 #3 } } \cs_new:Npn \etl_act_break_post:n #1 #2 \__etl_act_result:n #3#4 { \__etl_unexpanded:w { #3 #1 } } +\cs_new:Npn \etl_act_apply_to_rest:n #1 + { + \__etl_expanded:w { \__etl_unexpanded:w {#1} { \if_false: }} \fi: + \__etl_act_get_rest:w \prg_do_nothing: + } +\cs_new:Npn \__etl_act_get_rest:w #1 \__etl_act:w #2# + { + \__etl_unexpanded:w {#2} + \__etl_act_get_rest_aux:nn {#1} + } +\cs_new:Npn \__etl_act_get_rest_aux:nw #1 #2# + { + \__etl_unexpanded:w {#2} + \__etl_act_get_rest_aux:nn {#1} + } +\cs_new:Npn \__etl_act_get_rest_aux:nn #1#2 + { + \__etl_act_if_end:w #2 \__etl_act_get_rest_done:w \s__etl_stop + { \__etl_unexpanded:w {#2} } + \__etl_act_get_rest_aux:nw {#1} + } +\cs_new:Npn \__etl_act_get_rest_done:w \s__etl_stop #1 \__etl_act_get_rest_aux:nw #2 + { + \if_false: {{ \fi: } \exp_after:wN } + #2 + \__etl_act:w { \s__etl_stop } + } \exp_args:Nno \use:n { \cs_new:Npn \etl_token_if_eq:NNTF #1#2 } { \token_if_eq_meaning:NNT {#1} {#2} { \str_if_eq:nnT #1#2 \use_ii:nnn } @@ -477,10 +519,7 @@ \exp_args:Nno \use:n { \cs_new:Npn \etl_token_replace_once:nNn #1#2#3 } { \etl_act:nnnnnn - { - \__etl_token_replace:NnnN #2 - { \etl_act_switch_normal:n \__etl_act_unexpanded_normal:nN } - } + { \__etl_token_replace:NnnN #2 \__etl_act_unexpanded_rest:w } \__etl_act_unexpanded_space:n \__etl_act_unexpanded_group:nn \use_none:nn @@ -494,7 +533,7 @@ \__etl_replace_space:n \__etl_replace_group:nn \__etl_replace_final:nn - { {#2} {#2} {} {#3} \scan_stop: } + { {#2} {#2} {} {#3} \prg_do_nothing: } {#1} } \exp_args:Nno \use:n { \cs_new:Npn \__etl_replace_put_back:nnnN #1#2#3#4 } @@ -539,15 +578,8 @@ \__etl_if_empty:nTF {#2} { \__etl_unexpanded:w {#5} - \__etl_if_mark:nTF {#6} - { - \etl_act_switch:nnn - \__etl_act_unexpanded_normal:nN - \__etl_act_unexpanded_space:n - \__etl_act_unexpanded_group:nn - \etl_act_status:n { {} {} {} {} #6 } - } - { \etl_act_status:n { {#3} {#3} {} {#5} #6 } } + #6 + \etl_act_status:n { {#3} {#3} {} {#5} #6 } } { \etl_act_status:n { {#2} {#3} { #4 #7 } {#5} #6 } } } @@ -571,15 +603,8 @@ \__etl_if_empty:nTF {#1} { \__etl_unexpanded:w {#4} - \__etl_if_mark:nTF {#5} - { - \etl_act_switch:nnn - \__etl_act_unexpanded_normal:nN - \__etl_act_unexpanded_space:n - \__etl_act_unexpanded_group:nn - \etl_act_status:n { {} {} {} {} #5 } - } - { \etl_act_status:n { {#2} {#2} {} {#4} #5 } } + #5 + \etl_act_status:n { {#2} {#2} {} {#4} #5 } } { \etl_act_status:n { {#1} {#2} { #3 ~ } {#4} #5 } } } @@ -602,15 +627,8 @@ \__etl_if_empty:nTF {#2} { \__etl_unexpanded:w {#5} - \__etl_if_mark:nTF {#6} - { - \etl_act_switch:nnn - \__etl_act_unexpanded_normal:nN - \__etl_act_unexpanded_space:n - \__etl_act_unexpanded_group:nn - \etl_act_status:n { {} {} {} {} #6 } - } - { \etl_act_status:n { {#3} {#3} {} {#5} #6 } } + #6 + \etl_act_status:n { {#3} {#3} {} {#5} #6 } } { \etl_act_status:n { {#2} {#3} { #4 {#7} } {#5} #6 } } } @@ -627,7 +645,7 @@ \__etl_replace_space:n \__etl_replace_group_deep:nn \__etl_replace_final:nn - { {#2} {#2} {} {#3} \scan_stop: } + { {#2} {#2} {} {#3} \prg_do_nothing: } {#1} } \cs_new:Npn \__etl_replace_group_deep:nn #1 @@ -679,7 +697,7 @@ \__etl_replace_space:n \__etl_replace_group:nn \__etl_replace_final:nn - { {#2} {#2} {} {#3} \s__etl_mark } + { {#2} {#2} {} {#3} \__etl_act_unexpanded_rest:w } {#1} } \exp_args:Nno \use:n { \cs_new_protected:Npn \etl_new_if_in:Nnn #1#2#3 } @@ -806,6 +824,7 @@ }} } } +\cs_undefine:N \__etl_act:nnnnnnn %% %% %% End of file `etl.sty'. -- cgit v1.2.3