summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/expl3/l3tlp.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-05-22 17:46:23 +0000
committerKarl Berry <karl@freefriends.org>2007-05-22 17:46:23 +0000
commitf4eb27d3314d15838f674a3872000159d029f88b (patch)
tree6e9ab33c5a2d702912b4a969ade4e4e2ac586d62 /Master/texmf-dist/tex/latex/expl3/l3tlp.sty
parent14af3f447439750920f754792b89f113d019076a (diff)
update expl3
git-svn-id: svn://tug.org/texlive/trunk@4335 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/expl3/l3tlp.sty')
-rw-r--r--Master/texmf-dist/tex/latex/expl3/l3tlp.sty420
1 files changed, 373 insertions, 47 deletions
diff --git a/Master/texmf-dist/tex/latex/expl3/l3tlp.sty b/Master/texmf-dist/tex/latex/expl3/l3tlp.sty
index 8c7dbfc9339..e80ea876717 100644
--- a/Master/texmf-dist/tex/latex/expl3/l3tlp.sty
+++ b/Master/texmf-dist/tex/latex/expl3/l3tlp.sty
@@ -15,83 +15,409 @@
%% Do not distribute a modified version of this file.
%%
%%
-%% File: l3tlp.dtx Copyright (C) 1990-1998 LaTeX3 project
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{l3tlp}
- [1998/04/20 v1.0d L3 Experimental Token List Pointers]
-\RequirePackage{l3basics}\par
- \let_new:NN\tlp_new:Nn\gdef:Npn
-\def_long_new:Npn \tlp_clear:N #1{\tlp_set_eq:NN #1\c_empty_tlp}
-\def_long_new:Npn \tlp_gclear:N #1{\tlp_gset_eq:NN #1\c_empty_tlp}
+%% File: l3tlp.dtx Copyright (C) 1990-2006 LaTeX3 project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/cgi-bin/cvsweb.cgi/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX Project Team.
+%%
+%% -----------------------------------------------------------------------
+\RequirePackage{l3names}
+\GetIdInfo$Id: l3tlp.dtx 581 2006-12-12 12:28:27Z morten $
+ {L3 Experimental Token List Pointers}
+\RequirePackage{l3basics}
+\def_long_new:Npn \tlp_new:Nn #1#2{
+ \chk_new_cs:N #1
+ \gdef:Npn #1{#2}
+}
+\def_new:Npn \tlp_new:cn {\exp_args:Nc \tlp_new:Nn }
+\def_long_new:Npn \tlp_new:Nx #1#2{
+ \chk_new_cs:N #1
+ \gdef:Npx #1{#2}
+}
+\def_new:Npn \tlp_use:N #1 {
+ \if_meaning:NN #1 \scan_stop:
+ \err_latex_bug:x {Token~list~pointer~ `\token_to_string:N #1'~
+ has~ an~ erroneous~ structure!}
+ \else:
+ \exp_after:NN #1
+ \fi:
+}
+\def_new:Npn \tlp_use:c {\exp_args:Nc \tlp_use:N}
+\def_long_new:Npn\tlp_set:Nn#1#2{\def:Npn#1{#2}}
+\def_long_new:Npn\tlp_set:Nx#1#2{\def:Npx#1{#2}}
+\def_long_new:Npn\tlp_gset:Nn#1#2{\gdef:Npn#1{#2}}
+\def_long_new:Npn\tlp_gset:Nx#1#2{\gdef:Npx#1{#2}}
+\def_new:Npn \tlp_set:No {\exp_args:NNo \tlp_set:Nn}
+\def_new:Npn \tlp_set:Nf {\exp_args:NNf \tlp_set:Nn}
+\def_new:Npn \tlp_set:cn {\exp_args:Nc \tlp_set:Nn}
+\def_new:Npn \tlp_set:co {\exp_args:Nco \tlp_set:Nn}
+\def_new:Npn \tlp_set:cx {\exp_args:Nc \tlp_set:Nx}
+\def_new:Npn \tlp_gset:No {\exp_args:NNo \tlp_gset:Nn}
+\def_new:Npn \tlp_gset:cn {\exp_args:Nc \tlp_gset:Nn}
+\def_new:Npn \tlp_gset:cx {\exp_args:Nc \tlp_gset:Nx}
+\let_new:NN \tlp_set_eq:NN \let:NN
+\let_new:NN \tlp_gset_eq:NN \glet:NN
+\def_new:Npn \tlp_set_eq:Nc {\exp_args:NNc \tlp_set_eq:NN}
+\def_new:Npn \tlp_set_eq:cN {\exp_args:Nc \tlp_set_eq:NN}
+\def_new:Npn \tlp_set_eq:cc {\exp_args:Ncc \tlp_set_eq:NN}
+\def_new:Npn \tlp_gset_eq:Nc {\exp_args:NNc \tlp_gset_eq:NN}
+\def_new:Npn \tlp_gset_eq:cN {\exp_args:Nc \tlp_gset_eq:NN}
+\def_new:Npn \tlp_gset_eq:cc {\exp_args:Ncc \tlp_gset_eq:NN}
+\def_new:Npn \tlp_clear:N #1{\tlp_set_eq:NN #1\c_empty_tlp}
\def_new:Npn \tlp_clear:c {\exp_args:Nc \tlp_clear:N}
+\def_new:Npn \tlp_gclear:N #1{\tlp_gset_eq:NN #1\c_empty_tlp}
\def_new:Npn \tlp_gclear:c {\exp_args:Nc \tlp_gclear:N}
\let_new:NN \tlp_clear_new:N \tlp_clear:N
-\def_long_new:Npn \tlp_clear_new:c {\exp_args:Nc \tlp_clear_new:N}
+\def_new:Npn \tlp_clear_new:c {\exp_args:Nc \tlp_clear_new:N}
\let_new:NN \tlp_gclear_new:N \tlp_gclear:N
-\def_long_new:Npn \tlp_gclear_new:c {\exp_args:Nc \tlp_gclear_new:N}
-\def_long_new:Npn \tlp_put_left:Nn #1{\exp_after:NN
- \tlp_put_left:aux\exp_after:NN{#1}#1}
+\def_new:Npn \tlp_gclear_new:c {\exp_args:Nc \tlp_gclear_new:N}
+\def_new:Npn \tlp_put_left:Nn #1{
+ \exp_args:No \tlp_put_left_aux:w {#1}#1}
\def_new:Npn\tlp_put_left:No{\exp_args:NNo\tlp_put_left:Nn}
-\def_long_new:Npn \tlp_gput_left:Nn {
+\def_new:Npn \tlp_gput_left:Nn {
\pref_global:D
- \tlp_put_left:Nn}
+ \tlp_put_left:Nn
+}
\def_new:Npn\tlp_gput_left:No{\exp_args:NNo\tlp_gput_left:Nn}
-\def_long_new:Npn \tlp_put_left:aux #1#2#3{\def:Npn #2{#3#1}
+\def_new:Npn\tlp_gput_left:Nx{\exp_args:NNx\tlp_gput_left:Nn}
+\def_long_new:Npn \tlp_put_left_aux:w #1#2#3{\tlp_set:Nn #2{#3#1}
}
\def_long_new:Npn \tlp_put_right:Nn #1#2{\tlp_set:No #1{#1#2}}
\def_long_new:Npn \tlp_gput_right:Nn #1#2{\tlp_gset:No #1{#1#2}}
\def_new:Npn \tlp_gput_right:No {\exp_args:NNo \tlp_gput_right:Nn}
\def_new:Npn \tlp_gput_right:Nx {\exp_args:NNx \tlp_gput_right:Nn}
+\def_new:Npn \tlp_gput_right:cn {\exp_args:Nc \tlp_gput_right:Nn}
+\def_new:Npn \tlp_gput_right:co {\exp_args:Nco \tlp_gput_right:Nn}
\def_new:Npn \tlp_put_right:cc {\exp_args:Ncc \tlp_put_right:Nn}
\def_new:Npn \tlp_put_right:No {\exp_args:NNo \tlp_put_right:Nn}
\def_new:Npn \tlp_put_right:Nx {\exp_args:Nnx \tlp_put_right:Nn}
- \def_new:Npn\tlp_set:Nn#1#2{\def:Npn#1{#2}}
- \def_new:Npn\tlp_set:Nx#1#2{\def:Npx#1{#2}}
- \def_new:Npn\tlp_gset:Nn#1#2{\gdef:Npn#1{#2}}
- \def_new:Npn\tlp_gset:Nx#1#2{\gdef:Npx#1{#2}}
- \let_new:NN\tlp_set:No\def:No
- \let_new:NN\tlp_gset:No\gdef:No
- \let_new:NN\tlp_set_eq:NN\let:NwN
- \let_new:NN\tlp_gset_eq:NN\glet:NN
\def_new:Npn \tlp_gset:Nc {
\pref_global:D
- \tlp_set:Nc}
+ \tlp_set:Nc}
\def_new:Npn \tlp_set:Nc #1#2{\tlp_set:No #1{\cs:w#2\cs_end:}}
-\def_new:Npn \tlp_empty_p:N #1{
+\def_new:Npn \tlp_if_empty_p:N #1{
\if_meaning:NN#1\c_empty_tlp \c_true \else: \c_false \fi:}
-\def_new:Npn \tlp_empty:NF #1{
- \if_meaning:NN#1\c_empty_tlp
- \exp_after:NN\use_none:nn
- \fi:
- \use:n}
-\def_new:Npn \tlp_empty:NTF #1{
- \if_meaning:NN#1\c_empty_tlp
- \exp_after:NN\use_choice_i:nn
- \else:
- \exp_after:NN\use_choice_ii:nn
- \fi:}
-\def_new:Npn \tlp_eq:NNF #1#2{
- \if_meaning:NN#1#2
- \exp_after:NN\use_none:nn
- \fi:
- \use:n}
+\def_new:Npn \tlp_if_empty_p:c {\exp_args:Nc\tlp_if_empty_p:N}
+\def_test_function_new:npn {tlp_if_empty:N} #1{
+ \if_meaning:NN#1\c_empty_tlp}
+\def_new:Npn \tlp_if_empty:cTF {\exp_args:Nc \tlp_if_empty:NTF}
+\def_new:Npn \tlp_if_empty:cT {\exp_args:Nc \tlp_if_empty:NT}
+\def_new:Npn \tlp_if_empty:cF {\exp_args:Nc \tlp_if_empty:NF}
+\def_new:Npn \tlp_if_eq_p:NN #1#2{
+ \if_meaning:NN#1#2 \c_true \else: \c_false \fi:}
+\def_new:Npn \tlp_if_eq_p:Nc {\exp_args:NNc\tlp_if_empty_p:NN}
+\def_new:Npn \tlp_if_eq_p:cN {\exp_args:Nc\tlp_if_empty_p:NN}
+\def_new:Npn \tlp_if_eq_p:cc {\exp_args:Ncc\tlp_if_empty_p:NN}
+\def_test_function_new:npn {tlp_if_eq:NN} #1#2{\if_meaning:NN#1#2}
+\def_new:Npn \tlp_if_eq:cNTF{\exp_args:Nc \tlp_if_eq:NNTF}
+\def_new:Npn \tlp_if_eq:cNT {\exp_args:Nc \tlp_if_eq:NNT}
+\def_new:Npn \tlp_if_eq:cNF {\exp_args:Nc \tlp_if_eq:NNF}
+\def_new:Npn \tlp_if_eq:NcTF{\exp_args:NNc \tlp_if_eq:NNTF}
+\def_new:Npn \tlp_if_eq:NcT {\exp_args:NNc \tlp_if_eq:NNT}
+\def_new:Npn \tlp_if_eq:NcF {\exp_args:NNc \tlp_if_eq:NNF}
+\def_new:Npn \tlp_if_eq:ccTF{\exp_args:Ncc \tlp_if_eq:NNTF}
+\def_new:Npn \tlp_if_eq:ccT {\exp_args:Ncc \tlp_if_eq:NNT}
+\def_new:Npn \tlp_if_eq:ccF {\exp_args:Ncc \tlp_if_eq:NNF}
\tlp_new:Nn \c_empty_tlp {}
\tlp_new:Nn \c_relax_tlp {\scan_stop:}
-
\tlp_new:Nn \g_tmpa_tlp{}
\tlp_new:Nn \g_tmpb_tlp{}
-
\tlp_new:Nn \l_testa_tlp {}
\tlp_new:Nn \l_testb_tlp {}
\tlp_new:Nn \g_testa_tlp {}
\tlp_new:Nn \g_testb_tlp {}
-
\tlp_new:Nn \l_tmpa_tlp{}
\tlp_new:Nn \l_tmpb_tlp{}
-\def_new:Npn \tlp_to_str:N {\exp_after:NN\tlp_to_str:aux
- \token_to_meaning:N}
-\def_new:Npn \tlp_to_str:aux #1>{}
+\def_new:Npn \tlp_to_str:N {\exp_after:NN\tlp_to_str_aux:w
+ \token_to_meaning:N}
+\def_new:Npn \tlp_to_str_aux:w #1>{}
\def_new:Npn\tlp_to_str:c{\exp_args:Nc\tlp_to_str:N}
+\def_long_new:Npn \tlist_if_empty_p:n #1{
+ \exp_after:NN\if_meaning:NN\exp_after:NN\q_nil\tlist_to_str:n{#1}\q_nil
+ \c_true
+ \else:
+ \c_false
+ \fi:
+}
+\def_new:Npn \tlist_if_empty_p:o {\exp_args:No\tlist_if_empty_p:n}
+\def_long_test_function_new:npn{tlist_if_empty:n}#1{
+ \if:w\tlist_if_empty_p:n{#1}}
+\def_long_test_function_new:npn{tlist_if_empty:o}#1{
+ \if:w\tlist_if_empty_p:o{#1}}
+\def_long_new:Npn \tlist_if_blank_p:n #1{
+ \exp_after:NN\tlist_if_blank_p_aux:w\tlist_to_str:n{#1}aa..\q_nil
+}
+\def_new:Npn \tlist_if_blank_p_aux:w #1#2a#3#4\q_nil{
+ \if_meaning:NN #3#4\c_true\else:\c_false\fi:}
+\def_long_test_function_new:npn{tlist_if_blank:n}#1{
+ \if:w\tlist_if_blank_p:n{#1}}
+\def:Npn \tlist_if_blank_p:o{\exp_args:No\tlist_if_blank_p:n}
+\def_long_test_function_new:npn{tlist_if_blank:o}#1{
+ \if:w\tlist_if_blank_p:o{#1}}
+\let_new:NN \tlist_to_lowercase:n \tex_lowercase:D
+\let_new:NN \tlist_to_uppercase:n \tex_uppercase:D
+\let_new:NN \tlist_to_str:n \etex_detokenize:D
+\def_long_new:Npn \tlist_map_function:nN #1#2{
+ \tlist_map_function_aux:Nn #2 #1 \q_nil \q_stop
+}
+\def_new:Npn \tlp_map_function:NN #1#2{
+ \exp_after:NN \tlist_map_function_aux:Nn
+ \exp_after:NN #2 #1 \q_nil \q_stop
+}
+\def_long_new:Npn \tlist_map_function_aux:Nn #1#2{
+ \quark_if_nil:nT{#2} \tlist_map_break:w
+ #1{#2} \tlist_map_function_aux:Nn #1
+}
+\def_new:Npn\tlp_map_function:cN{\exp_args:Nc\tlp_map_function:NN}
+\def_long_new:Npn \tlist_map_inline:nn #1#2{
+ \num_incr:N \l_tlp_inline_level_num
+ \def_long:cpn {tlist_map_inline_ \num_use:N \l_tlp_inline_level_num :n}
+ ##1{#2}
+ \exp_args:Nc \tlist_map_function_aux:Nn
+ {tlist_map_inline_ \num_use:N \l_tlp_inline_level_num :n}
+ #1 \q_nil\q_stop
+ \num_decr:N \l_tlp_inline_level_num
+}
+\def_long_new:Npn \tlp_map_inline:Nn #1#2{
+ \num_incr:N \l_tlp_inline_level_num
+ \def_long:cpn {tlist_map_inline_ \num_use:N \l_tlp_inline_level_num :n}
+ ##1{#2}
+ \exp_args:NcE \tlist_map_function_aux:Nn
+ {tlist_map_inline_ \num_use:N \l_tlp_inline_level_num :n}
+ #1 \q_nil\q_stop
+ \num_decr:N \l_tlp_inline_level_num
+}
+\def_new:Npn\tlp_map_inline:cN{\exp_args:Nc\tlp_map_inline:NN}
+\tlp_new:Nn \l_tlp_inline_level_num{0}
+\def_long_new:Npn \tlist_map_variable:nNn #1#2#3{
+ \tlist_map_variable_aux:Nnn #2 {#3} #1 \q_nil \q_stop
+}
+\def_new:Npn \tlp_map_variable:NNn {\exp_args:No \tlist_map_variable:nNn}
+\def_new:Npn \tlp_map_variable:cNn {\exp_args:Nc \tlp_map_variable:NNn}
+\def_long_new:Npn \tlist_map_variable_aux:Nnn #1#2#3{
+ \tlp_set:Nn #1{#3}
+ \quark_if_nil:NT #1 \tlist_map_break:w
+ #2 \tlist_map_variable_aux:Nnn #1{#2}
+}
+\let_new:NN \tlist_map_break:w \use_none_delimit_by_q_stop:w
+\let_new:NN \tlp_map_break:w \tlist_map_break:w
+\let_new:NN \tlist_compare:xx \pdfstrcmp
+\def_long_new:NNn \tlist_compare:nn 2{
+ \tlist_compare:xx{\exp_not:n{#1}}{\exp_not:n{#2}}
+}
+\def_long_new:NNn \tlist_compare:nx 1{
+ \tlist_compare:xx{\exp_not:n{#1}}
+}
+\def_long_new:NNn \tlist_compare:xn 2{
+ \tlist_compare:xx{#1}{\exp_not:n{#2}}
+}
+\def_long_new:NNn \tlist_compare:no 2{
+ \tlist_compare:xx{\exp_not:n{#1}}{\exp_not:n\exp_after:NN{#2}}
+}
+\def_long_new:NNn \tlist_compare:on 2{
+ \tlist_compare:xx{\exp_not:n\exp_after:NN{#1}}{\exp_not:n{#2}}
+}
+\def_long_new:NNn \tlist_compare:oo 2{
+ \tlist_compare:xx{\exp_not:n\exp_after:NN{#1}}{\exp_not:n\exp_after:NN{#2}}
+}
+\def_long_new:NNn \tlist_compare:xo 2{
+ \tlist_compare:xx{#1}{\exp_not:n\exp_after:NN{#2}}
+}
+\def_long_new:NNn \tlist_compare:ox 2{
+ \tlist_compare:xx{\exp_not:n\exp_after:NN{#1}}{\exp_not:n{#2}}
+}
+\def:Npn \tmp:w #1{
+ \def_long_new:cNx {tlist_if_eq_p:#1} 2{
+ \exp_not:N \if_num:w
+ \exp_after:NN \exp_not:N \cs:w tlist_compare:#1\cs_end:{##1}{##2}
+ \exp_not:n{ =\c_zero \c_true \else: \c_false \fi: }
+ }
+ \def_long_test_function_new:npx{tlist_if_eq:#1}##1##2{
+ \exp_not:N \if_num:w
+ \exp_after:NN \exp_not:N \cs:w tlist_compare:#1\cs_end:{##1}{##2}
+ \exp_not:n{ =\c_zero }
+ }
+}
+\tmp:w{xx} \tmp:w{nn} \tmp:w{oo} \tmp:w{xn} \tmp:w{nx}
+\tmp:w{on} \tmp:w{no} \tmp:w{xo} \tmp:w{ox}
+\cs_if_really_free:cT{pdf_strcmp:D}{
+ \def_long_test_function:npn{tlist_if_eq:nn}#1#2{
+ \tlp_set:Nx \l_testa_tlp {\exp_not:n{#1}}
+ \tlp_set:Nx \l_testb_tlp {\exp_not:n{#2}}
+ \if_meaning:NN\l_testa_tlp \l_testb_tlp
+ }
+ \def_long_test_function:npn{tlist_if_eq:oo}#1#2{
+ \tlp_set:Nx \l_testa_tlp {\exp_not:o{#1}}
+ \tlp_set:Nx \l_testb_tlp {\exp_not:o{#2}}
+ \if_meaning:NN\l_testa_tlp \l_testb_tlp
+ }
+ \def_long:Npn\tlist_compare:xx #1#2{\ERROR}
+}
+\def_long:Npn \tlp_if_in:NnTF #1#2{
+ \def_long:Npn\tmp:w ##1 #2 ##2\q_stop{
+ \quark_if_no_value:nFT{##2}
+ }
+ \exp_after:NN \tmp:w #1 #2 \q_no_value \q_stop
+}
+\def_new:Npn \tlp_if_in:cnTF {\exp_args:Nc\tlp_if_in:NnTF}
+\def_long:Npn \tlp_if_in:NnT #1#2{
+ \def_long:Npn\tmp:w ##1 #2 ##2\q_stop{
+ \quark_if_no_value:nFT{##2}
+ }
+ \exp_after:NN \tmp:w #1 #2 \q_no_value \q_stop
+}
+\def_new:Npn \tlp_if_in:cnT {\exp_args:Nc\tlp_if_in:NnT}
+\def_long:Npn \tlp_if_in:NnF #1#2{
+ \def_long:Npn\tmp:w ##1 #2 ##2\q_stop{
+ \quark_if_no_value:nT{##2}
+ }
+ \exp_after:NN \tmp:w #1 #2 \q_no_value \q_stop
+}
+\def_new:Npn \tlp_if_in:cnF {\exp_args:Nc\tlp_if_in:NnF}
+\def_long_new:Npn \tlist_if_in:nnTF #1#2{
+ \def_long:Npn\tmp:w ##1 #2 ##2\q_stop{
+ \quark_if_no_value:nFT{##2}
+ }
+ \tmp:w #1 #2 \q_no_value \q_stop
+}
+\def_new:Npn \tlist_if_in:onTF {\exp_args:No\tlist_if_in:nnTF}
+\tlp_new:Nn\l_tlp_replace_tlp{}
+\def_long_new:NNn \tlp_replace_in_aux:NNnn 4{
+ \def:Npn \tmp:w ##1#3##2\q_stop{
+ \quark_if_no_value:nF{##2}
+ {
+ \tlp_set:Nx\l_tlp_replace_tlp{\exp_not:o{\use_none:n##1#4}}
+ \def:Npn \tmp:w ####1#3\q_no_value{
+ \tlp_put_right:Nx \l_tlp_replace_tlp {\exp_not:o{\use_none:n ####1}}
+ }
+ \tmp:w \q_mark ##2
+ }
+ #1#2\l_tlp_replace_tlp
+ }
+ \use_arg_i:n{\exp_after:NN \tmp:w\exp_after:NN\q_mark}
+ #2#3 \q_no_value\q_stop
+}
+\def_new:Npn \tlp_replace_in:Nnn {\tlp_replace_in_aux:NNnn \tlp_set_eq:NN}
+\def_new:Npn \tlp_replace_in:cnn{\exp_args:Nc\tlp_replace_in:Nnn}
+\def_new:Npn \tlp_greplace_in:Nnn {\tlp_replace_in_aux:NNnn \tlp_gset_eq:NN}
+\def_new:Npn \tlp_greplace_in:cnn{\exp_args:Nc\tlp_greplace_in:Nnn}
+\def_long:NNn \tlp_replace_all_in_aux:NNnn 4{
+ \tlp_clear:N \l_tlp_replace_tlp
+ \def:Npn \tmp:w ##1#3##2\q_stop{
+ \quark_if_no_value:nTF{##2}
+ {
+ \tlp_put_right:Nx \l_tlp_replace_tlp {\exp_not:o{\use_none:n##1}}
+ }
+ {
+ \tlp_put_right:Nx \l_tlp_replace_tlp {\exp_not:o{\use_none:n##1 #4}}
+ \tmp:w \q_mark##2 \q_stop
+ }
+ }
+ \use_arg_i:n{\exp_after:NN \tmp:w\exp_after:NN\q_mark}
+ #2#3 \q_no_value\q_stop
+ #1#2\l_tlp_replace_tlp
+}
+\def_new:Npn \tlp_replace_all_in:Nnn {
+ \tlp_replace_all_in_aux:NNnn \tlp_set_eq:NN}
+\def_new:Npn \tlp_replace_all_in:cnn{\exp_args:Nc\tlp_replace_all_in:Nnn}
+\def_new:Npn \tlp_greplace_all_in:Nnn {
+ \tlp_replace_all_in_aux:NNnn \tlp_gset_eq:NN}
+\def_new:Npn \tlp_greplace_all_in:cnn{\exp_args:Nc\tlp_greplace_all_in:Nnn}
+\def_long_new:NNn \tlp_remove_in:Nn 2{\tlp_replace_in:Nnn #1{#2}{}}
+\def_long_new:NNn \tlp_gremove_in:Nn 2{\tlp_greplace_in:Nnn #1{#2}{}}
+\def_new:Npn \tlp_remove_in:cn{\exp_args:Nc\tlp_remove_in:Nn}
+\def_new:Npn \tlp_gremove_in:cn{\exp_args:Nc\tlp_gremove_in:Nn}
+\def_long_new:Npn \tlp_remove_all_in:Nn #1#2{
+ \tlp_replace_all_in:Nnn #1{#2}{}
+}
+\def_long_new:Npn \tlp_gremove_all_in:Nn #1#2{
+ \tlp_greplace_all_in:Nnn #1{#2}{}
+}
+\def_new:Npn \tlp_remove_all_in:cn{\exp_args:Nc\tlp_remove_all_in:Nn}
+\def_new:Npn \tlp_gremove_all_in:cn{\exp_args:Nc\tlp_gremove_all_in:Nn}
+\def_long_new:Npn \tlist_head:n #1{\tlist_head:w #1\q_nil}
+\let_new:NN \tlist_head_i:n \tlist_head:n
+\def_long_new:Npn \tlist_tail:n #1{\tlist_tail:w #1\q_nil}
+\def_new:Npn \tlist_tail:f {\exp_args:Nf \tlist_tail:n}
+\def_long_new:Npn \tlist_head_iii:n #1{\tlist_head_iii:w #1\q_nil}
+\def_new:Npn \tlist_head_iii:f {\exp_args:Nf \tlist_head_iii:n}
+\let_new:NN \tlist_head:w \use_arg_i_delimit_by_q_nil:nw
+\def_long_new:Npn \tlist_tail:w #1#2\q_nil{#2}
+\def_long_new:Npn \tlist_head_iii:w #1#2#3#4\q_nil{#1#2#3}
+\def_long_new:Npn \tlist_if_head_eq_meaning_p:nN #1#2{
+ \exp_after:NN \if_meaning:NN \tlist_head:w #1\q_nil#2
+ \c_true
+ \else:
+ \c_false
+ \fi:
+}
+\def_long_test_function_new:npn {tlist_if_head_eq_meaning:nN}#1#2{
+ \if:w \tlist_if_head_eq_meaning_p:nN{#1}#2}
+\def_long_new:Npn \tlist_if_head_eq_charcode_p:nN #1#2{
+ \exp_after:NN\if_charcode:w \exp_after:NN\exp_not:N
+ \tlist_head:w #1\q_nil\exp_not:N#2
+ \c_true
+ \else:
+ \c_false
+ \fi:
+}
+\def_long_test_function_new:npn {tlist_if_head_eq_charcode:nN}#1#2{
+ \if:w\tlist_if_head_eq_charcode_p:nN{#1}#2}
+\def_long_new:Npn \tlist_if_head_eq_charcode_p:fN #1#2{
+ \exp_after:NN\if_charcode:w \tlist_head:w #1\q_nil\exp_not:N#2
+ \c_true
+ \else:
+ \c_false
+ \fi:
+}
+\def_long_test_function_new:npn {tlist_if_head_eq_charcode:fN}#1#2{
+ \if:w\tlist_if_head_eq_charcode_p:fN{#1}#2}
+\def_long_new:Npn \tlist_if_head_eq_catcode_p:nN #1#2{
+ \exp_after:NN\if_charcode:w \exp_after:NN\exp_not:N
+ \tlist_head:w #1\q_nil\exp_not:N#2
+ \c_true
+ \else:
+ \c_false
+ \fi:
+}
+\def_long_test_function_new:npn {tlist_if_head_eq_catcode:nN}#1#2{
+ \if:w\tlist_if_head_eq_catcode_p:nN{#1}#2}
+\def_long_new:Npn \tlist_reverse:n #1{
+ \tlist_reverse_aux:nN {} #1 \q_nil\q_stop
+}
+\def_long_new:Npn \tlist_reverse_aux:nN #1#2{
+ \quark_if_nil:NT #2
+ { \use_arg_i_delimit_by_q_stop:nw {#1} }
+ \tlist_reverse_aux:nN {#2#1}
+}
+\RequirePackage{l3expan}
+\RequirePackage{l3num}\par
%%
%%
%% End of file `l3tlp.sty'.