%% %% This is file `l3expan.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% l3expan.dtx (with options: `package,trace') %% %% %% EXPERIMENTAL CODE %% %% Do not distribute this file without also distributing the %% source files specified above. %% %% Do not distribute a modified version of this file. %% %% %% File: l3expan.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: l3expan.dtx 735 2008-01-14 22:31:02Z morten $ {L3 Experimental Argument Expansion module} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} \RequirePackage{l3tlp} \tlp_new:Nn\l_exp_tlp{} \def_long_new:Npn\exp_arg_next:nnn#1#2#3{ #2\:::{#3#1} } \def_long_new:Npn\::n#1\:::#2#3{ #1\:::{#2{#3}} } \def_long_new:Npn\::N#1\:::#2#3{ #1\:::{#2#3} } \def_long_new:Npn\::c#1\:::#2#3{ \exp_after:NN\exp_arg_next:nnn\cs:w #3\cs_end:{#1}{#2} } \def_long_new:Npn\::o#1\:::#2#3{ \exp_after:NN\exp_arg_next:nnn\exp_after:NN{\exp_after:NN{#3}}{#1}{#2} } \def_long_new:Npn\::f#1\:::#2#3{ \exp_after:NN\exp_arg_next:nnn \exp_after:NN{\exp_after:NN{\int_to_roman:w -`0 #3}} {#1}{#2} } \def_new:Npn \exp_stop_f: {~} \let_new:NN \exp_arg:x \expanded % Move eventually. \cs_if_free:NTF\exp_arg:x{ \def_long_new:Npn\::x#1\:::#2#3{ % \tlp_set:Nx\l_exp_tlp{{{#3}}} \def:Npx \l_exp_tlp{{{#3}}} \exp_after:NN\exp_arg_next:nnn\l_exp_tlp{#1}{#2}} } { \def_long_new:Npn\::x#1\:::#2#3{ \exp_after:NN\exp_arg_next:nnn \exp_after:NN{\exp_arg:x{{#3}}}{#1}{#2} } } \def_long_new:Npn\:::#1{#1} \def_long_new:Npn\::C#1\:::#2#3{ \exp_after:NN\exp_C_aux:nnn\cs:w #3\cs_end:{#1}{#2}} \def_long_new:Npn\exp_C_aux:nnn #1{ \exp_after:NN \exp_arg_next:nnn \exp_after:NN { \exp_after:NN {#1} } } \def_long_new:Npn\::E#1\:::#2#3{ \exp_after:NN\exp_arg_next:nnn \exp_after:NN{#3}{#1}{#2} } \def_long_new:Npn\::e#1\:::#2#3{ \exp_after:NN\exp_arg_next:nnn \exp_after:NN{#3}{#1}{#2} } \def_long_new:Npn\::d#1\:::#2#3{ \exp_after:NN\exp_after:NN\exp_after:NN\exp_arg_next:nnn \exp_after:NN\exp_after:NN\exp_after:NN{ \exp_after:NN\exp_after:NN\exp_after:NN{#3}}{#1}{#2} } \let:NN \exp_args:NE \exp_after:NN \def:Npn \exp_args:NNE #1{\exp_args:NE#1\exp_args:NE} \def:Npn \exp_args:NNNE #1#2{\exp_args:NE#1\exp_args:NE#2\exp_args:NE} \def:Npn \exp_args:NEE #1{\exp_args:NE\exp_args:NE\exp_args:NE#1\exp_args:NE} \def:Npn \exp_args:NcE #1#2{\exp_after:NN #1\cs:w #2\exp_after:NN\cs_end:} \def:Npn \exp_args:Nd {\::d\:::} \def:Npn \exp_args:NNd {\::N\::d\:::} \def:Npn \exp_args:NC {\::C\:::} \def:Npn \exp_args:NNC {\::N\::C\:::} \def:Npn \exp_args:NNf {\::N\::f\:::} \def:Npn \exp_args:NNno {\::N\::n\::o\:::} \def:Npn \exp_args:NNnx {\::N\::n\::x\:::} % new \def:Npn \exp_args:NNoo {\::N\::o\::o\:::} % new \def:Npn \exp_args:NNox {\::N\::o\::x\:::} % new \def:Npn \exp_args:NNx {\::N\::x\:::} \def:Npn \exp_args:NcNc {\::c\::N\::c\:::} \def:Npn \exp_args:NcNo {\::c\::N\::o\:::} \def:Npn \exp_args:Ncco {\::c\::c\::o\:::} \def:Npn \exp_args:Ncco {\::c\::c\::o\:::} \def:Npn \exp_args:Nccx {\::c\::c\::x\:::} \def:Npn \exp_args:Ncnx {\::c\::n\::x\:::} \def:Npn \exp_args:Ncx {\::c\::x\:::} \def:Npn \exp_args:Nf {\::f\:::} \def:Npn \exp_args:Nfo{\::f\::o\:::} \def:Npn \exp_args:Nnf {\::n\::f\:::} \def:Npn \exp_args:NnnN {\::n\::n\::N\:::} %% Strange one this one... \def:Npn \exp_args:Nnnc {\::n\::n\::c\:::} \def:Npn \exp_args:Nnno {\::n\::n\::o\:::} \def:Npn \exp_args:Nnnx {\::n\::n\::x\:::} \def:Npn \exp_args:Nno {\::n\::o\:::} \def:Npn \exp_args:Nnox {\::n\::o\::x\:::} \def:Npn \exp_args:Nnx {\::n\::x\:::} \def:Npn \exp_args:Noo {\::o\::o\:::} \def:Npn \exp_args:Noox {\::o\::o\::x\:::} \def:Npn \exp_args:Nox {\::o\::x\:::} \def:Npn \exp_args:Nx {\::x\:::} \def:Npn \exp_args:Nxo {\::x\::o\:::} \def:Npn \exp_args:Nxx {\::x\::x\:::} \def_long_new:Npn\exp_not:o#1{\exp_not:n\exp_after:NN{#1}} \def_long_new:Npn\exp_not:d#1{ \exp_not:n\exp_after:NN\exp_after:NN\exp_after:NN{#1} } \def_long_new:Npn\exp_not:f#1{ \exp_not:n\exp_after:NN{\int_to_roman:w -`0 #1} } \def_new:Npn\exp_not:E{\exp_after:NN\exp_not:N} \def_long_new:Npn\exp_not:c#1{\exp_after:NN\exp_not:N\cs:w#1\cs_end:} \def_long_new:Npn \exp_args:No #1#2{\exp_after:NN#1\exp_after:NN{#2}} \def_long_new:Npn \exp_args:NOo #1#2#3{\exp_after:NN\exp_args:No \exp_after:NN#1 \exp_after:NN#2\exp_after:NN{#3}} \def_long_new:Npn \exp_args:NOOo #1#2#3#4{\exp_after:NN\exp_args:NOo \exp_after:NN#1\exp_after:NN#2\exp_after:NN#3\exp_after:NN{#4}} \def_long_new:Npn \exp_args:NNo #1#2#3{\exp_after:NN#1\exp_after:NN#2 \exp_after:NN{#3}} \def_long_new:Npn \exp_args:NNO #1#2#3 {\exp_after:NN#1 \exp_after:NN#2 #3} \def_long_new:Npn \exp_args:NNOo #1#2#3#4{\exp_after:NN\exp_args:NNo \exp_after:NN#1\exp_after:NN#2\exp_after:NN#3\exp_after:NN{#4}} \def_long_new:Npn \exp_args:NNNo #1#2#3#4{\exp_after:NN#1\exp_after:NN#2 \exp_after:NN#3\exp_after:NN{#4}} \def_long_new:Npn \exp_args:Nc #1#2{\exp_after:NN#1\cs:w#2\cs_end:} \def_long_new:Npn \exp_args:NNc #1#2#3{\exp_after:NN#1\exp_after:NN#2 \cs:w#3\cs_end:} \def_long_new:Npn \exp_args:NOc#1#2#3{\exp_after:NN\exp_args:No\exp_after:NN #1\exp_after:NN#2\cs:w#3\cs_end:} \def_long_new:Npn \exp_args:Ncc #1#2#3{\exp_after:NN#1 \cs:w#2\exp_after:NN\cs_end:\cs:w#3\cs_end:} \def_long_new:Npn \exp_args:Nccc #1#2#3#4{\exp_after:NN#1 \cs:w#2\exp_after:NN\cs_end:\cs:w#3\exp_after:NN \cs_end:\cs:w #4\cs_end:} \def_long_new:Npn \exp_args:Nco #1#2#3{\exp_after:NN#1\cs:w#2\exp_after:NN \cs_end:\exp_after:NN{#3}} \def:Npn\exp_def_form:nnn#1#2#3{ \exp_after:NN \def:Npn \cs:w #1:#3 \exp_after:NN \cs_end: \exp_after:NN { \cs:w exp_args:N#3 \exp_after:NN \cs_end: \cs:w #1:#2 \cs_end: } \cs_if_free:cT {exp_args:N#3} {\def:cpx {exp_args:N#3} {\exp_args_form_x:w #3 :} } } \def_new:Npn\exp_args_form_x:w #1 { \exp_not:c{::#1} \if_meaning:NN #1 : \else: \exp_after:NN\exp_args_form_x:w \fi:} %% %% %% End of file `l3expan.sty'.