summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/concepts/with.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-12-28 22:46:43 +0000
committerKarl Berry <karl@freefriends.org>2012-12-28 22:46:43 +0000
commitaa3041c0939f2447fc48fd4c3ad830dfe75ef401 (patch)
treef72a6d6589b2d2763ad34d7755b94dc8878742d1 /Master/texmf-dist/tex/latex/concepts/with.sty
parent87e35eb4054f370617fc566daff3a5a6f527211a (diff)
concepts (28dec12)
git-svn-id: svn://tug.org/texlive/trunk@28649 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/concepts/with.sty')
-rw-r--r--Master/texmf-dist/tex/latex/concepts/with.sty324
1 files changed, 265 insertions, 59 deletions
diff --git a/Master/texmf-dist/tex/latex/concepts/with.sty b/Master/texmf-dist/tex/latex/concepts/with.sty
index 4e94ac02516..49e16dac493 100644
--- a/Master/texmf-dist/tex/latex/concepts/with.sty
+++ b/Master/texmf-dist/tex/latex/concepts/with.sty
@@ -2,7 +2,7 @@
% %
% Copyright (c) 2012 - Michiel Helvensteijn (www.mhelvens.net) %
% %
-% http://latex-concepts.googlecode.com %
+% http://latex-with.googlecode.com %
% %
% This work may be distributed and/or modified under the conditions %
% of the LaTeX Project Public License, either version 1.3 of this %
@@ -15,89 +15,295 @@
% %
% The Current Maintainer of this work is Michiel Helvensteijn. %
% %
-% This work consists of the file with.sty. %
+% This work consists of the file with.sty and with.tex. %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \fi %%%%
-% I will 'officially' release this package at some point in the future. For
-% now I'm just using it to document the concepts package. Still, it's
-% released under LPPL, so use it as you will.
+% \CheckSum{0}
%
-% -- Michiel Helvensteijn
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{Package Info} %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
-\ProvidesExplPackage{with}{2012/12/16}{0.0.1}
- {an inline construct for passing token lists as ##1-type arguments}
+\ProvidesExplPackage{with}{2012/12/23}{0.0.1}
+ {an inline construct for passing token lists as parameters}
+% \end{macrocode}
-\cs_new_eq:NN \qnv \q_no_value
-\cs_new:Nn \with:nn {
- \with:nnnnnnnnn {#1}\qnv\qnv\qnv\qnv\qnv\qnv\qnv{#2}
-}
-\cs_new:Nn \with:nnn {
- \with:nnnnnnnnn {#1}{#2}\qnv\qnv\qnv\qnv\qnv\qnv{#3}
-}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{Required Packages} %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% \begin{macrocode}
+\RequirePackage{xparse}
+\RequirePackage{l3regex}
+% \end{macrocode}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{Package Code} %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% \begin{macrocode}
+\cs_generate_variant:Nn \cs_generate_variant:Nn {cn}
+% \end{macrocode}
-\cs_new:Nn \with:nnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}\qnv\qnv\qnv\qnv\qnv{#4}
-}
-\cs_new:Nn \with:nnnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}{#4}\qnv\qnv\qnv\qnv{#5}
-}
-\cs_new:Nn \with:nnnnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}{#4}{#5}\qnv\qnv\qnv{#6}
+% \begin{macrocode}
+\cs_new:Nn \gen_use:nn {
+ \cs_generate_variant:cn
+ { #1 : \prg_replicate:nn{\tl_count:n{#2}}{n} }
+ { #2 }
+ \use:c{ #1 : #2 }
}
+% \end{macrocode}
-\cs_new:Nn \with:nnnnnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}\qnv\qnv{#7}
+
+
+% \begin{macrocode}
+\cs_new_protected:Nn \with:n {#1}
+\cs_new_protected:Nn \with:nn {
+ \cs_set:Npn \__with:n ##1 {#2}
+ \__with:n {#1} }
+\cs_new_protected:Nn \with:nnn {
+ \cs_set:Npn \__with:nn ##1##2 {#3}
+ \__with:nn {#1}{#2} }
+\cs_new_protected:Nn \with:nnnn {
+ \cs_set:Npn \__with:nnn ##1##2##3 {#4}
+ \__with:nnn {#1}{#2}{#3} }
+\cs_new_protected:Nn \with:nnnnn {
+ \cs_set:Npn \__with:nnnn ##1##2##3##4 {#5}
+ \__with:nnnn {#1}{#2}{#3}{#4} }
+\cs_new_protected:Nn \with:nnnnnn {
+ \cs_set:Npn \__with:nnnnn ##1##2##3##4##5 {#6}
+ \__with:nnnnn {#1}{#2}{#3}{#4}{#5} }
+\cs_new_protected:Nn \with:nnnnnnn {
+ \cs_set:Npn \__with:nnnnnn ##1##2##3##4##5##6 {#7}
+ \__with:nnnnnn {#1}{#2}{#3}{#4}{#5}{#6} }
+\cs_new_protected:Nn \with:nnnnnnnn {
+ \cs_set:Npn \__with:nnnnnnn ##1##2##3##4##5##6##7 {#8}
+ \__with:nnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7} }
+\cs_new_protected:Nn \with:nnnnnnnnn {
+ \cs_set:Npn \__with:nnnnnnnn ##1##2##3##4##5##6##7##8 {#9}
+ \__with:nnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8} }
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+\msg_new:nnnn{with}{invalid-parameter-specs}{
+ The~argument~specification~'#1'~is~not~valid.
+}{
+ The~argument~specification~should~consist~of~between~
+ one~and~seven~of~the~letters~'n',~'o',~'f',~'x',~'u'~or~'U'.
}
+% \end{macrocode}
+
-\cs_new:Nn \with:nnnnnnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7}\qnv{#8}
+
+% \begin{macrocode}
+\msg_new:nnnn{with}{invalid-parameter-number}{
+ You~specified~#1~arguments~but~provided~#2.
+}{
+ Your~argument~specification~is~'#3',~which~means~you~should~
+ provide~#1~optional~arguments.~However,~you~provided~only~#2.
}
+% \end{macrocode}
+
-\cs_new:Nn \with:nnnnnnnnn {
- \cs_set:Nn \with_aux:nnnnnnnn {#9}
- \with_aux:nnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}
+
+% \begin{macrocode}
+\tl_new:N \l__with_argspec_tl
+\tl_new:c {l__with_p_1_tl} \tl_new:c {l__with_p_2_tl}
+\tl_new:c {l__with_p_3_tl} \tl_new:c {l__with_p_4_tl}
+\tl_new:c {l__with_p_5_tl} \tl_new:c {l__with_p_6_tl}
+\tl_new:c {l__with_p_7_tl}
+\tl_new:N \l__with_code_tl
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+\int_new:N \l__with_arg_int
+\cs_new:Nn \__with_param_name: {
+ l__with_p_
+ \int_use:N\l__with_arg_int
+ _tl
}
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+\tl_new:N \l__with_unique_counter_tl
+\tl_new:N \l__with_param_tl
+% \end{macrocode}
+
+
+% \begin{macrocode}
\cs_generate_variant:Nn \with:nn {xn}
-\cs_generate_variant:Nn \with:nnn {xxn}
-\cs_generate_variant:Nn \with:nnnn {xxxn}
-\cs_generate_variant:Nn \with:nnnnn {xxxxn}
-\cs_generate_variant:Nn \with:nnnnnn {xxxxxn}
-\cs_generate_variant:Nn \with:nnnnnnn {xxxxxxn}
-\cs_generate_variant:Nn \with:nnnnnnnn {xxxxxxxn}
-\cs_generate_variant:Nn \with:nnnnnnnnn {xxxxxxxxn}
-
-\NewDocumentCommand{\With}{+o+o+o+o+o+o+o+o+m}{
- \IfValueTF{#8}{ \with:xxxxxxxxn{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9} }{
- \IfValueTF{#7}{ \with:xxxxxxxn {#1}{#2}{#3}{#4}{#5}{#6}{#7} {#9} }{
- \IfValueTF{#6}{ \with:xxxxxxn {#1}{#2}{#3}{#4}{#5}{#6} {#9} }{
- \IfValueTF{#5}{ \with:xxxxxn {#1}{#2}{#3}{#4}{#5} {#9} }{
- \IfValueTF{#4}{ \with:xxxxn {#1}{#2}{#3}{#4} {#9} }{
- \IfValueTF{#3}{ \with:xxxn {#1}{#2}{#3} {#9} }{
- \IfValueTF{#2}{ \with:xxn {#1}{#2} {#9} }{
- \IfValueTF{#1}{ \with:xn {#1} {#9} }
- {#9}
+\cs_generate_variant:Nn \with:nnnnnnnnn {oooooooon}
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+\NewDocumentCommand \with {m +o +o +o +o +o +o +o +m} {
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \regex_match:nnF {^[noxfuU]{1,7}$} {#1}
+ { \msg_critical:nnn{with}{invalid-parameter-specs}{#1} }
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \tl_set:Nn \l__with_argspec_tl {#1}
+ \int_zero:N \l__with_arg_int
+ \IfValueT{#2} {
+ \tl_set:cn {l__with_p_1_tl} {#2} \int_incr:N \l__with_arg_int
+ \IfValueT{#3} {
+ \tl_set:cn {l__with_p_2_tl} {#3} \int_incr:N \l__with_arg_int
+ \IfValueT{#4} {
+ \tl_set:cn {l__with_p_3_tl} {#4} \int_incr:N \l__with_arg_int
+ \IfValueT{#5} {
+ \tl_set:cn {l__with_p_4_tl} {#5} \int_incr:N \l__with_arg_int
+ \IfValueT{#6} {
+ \tl_set:cn {l__with_p_5_tl} {#6} \int_incr:N \l__with_arg_int
+ \IfValueT{#7} {
+ \tl_set:cn {l__with_p_6_tl} {#7} \int_incr:N \l__with_arg_int
+ \IfValueT{#8} {
+ \tl_set:cn {l__with_p_7_tl} {#8} \int_incr:N \l__with_arg_int
}}}}}}}
-}
+ \tl_set:Nn \l__with_code_tl {#9}
+% \end{macrocode}
-\int_new:c{g_with_uniquecsname_count}
-\cs_new:Nn \with_uniquecsname:n {
- \with_uniquecsname:xn {uniquecsname} {#1}
-}
-\cs_new:Nn \with_uniquecsname:xn {
- \int_incr:c {g_with_uniquecsname_count}
- \with:xn {#1\int_use:c{g_with_uniquecsname_count}} {#2}
-}
+% \begin{macrocode}
+ \int_compare:nNnF {\tl_count:n{#1}} = {\l__with_arg_int} {
+ \msg_error:nnxxx{with}{invalid-parameter-number}
+ { \tl_count:n{#1} }
+ { \int_use:N \l__with_arg_int }
+ { #1 }
+ }
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \tl_replace_all:Nnn \l__with_argspec_tl {u} {x}
+ \tl_replace_all:Nnn \l__with_argspec_tl {U} {c}
+% \end{macrocode}
-\NewDocumentCommand{\WithUniqueCsname}{O{uniquecsname}+m}{
- \with_uniquecsname:xn {#1} {#2}
+
+
+% \begin{macrocode}
+ \int_zero:N \l__with_arg_int
+ \tl_map_inline:nn {#1} {
+ \int_incr:N \l__with_arg_int
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \tl_if_in:nnT {uU} {##1} {
+ \tl_set:Nx \l__with_unique_counter_tl
+ { g__with_unique_ \use:c{\__with_param_name:} _count_int }
+
+ \int_if_exist:cF {\l__with_unique_counter_tl}
+ { \int_new:c {\l__with_unique_counter_tl} }
+
+ \int_incr:c {\l__with_unique_counter_tl}
+
+ \tl_put_left:cx {\__with_param_name:}
+ { g_with_unique_ }
+
+ \tl_put_right:cx {\__with_param_name:}
+ { _ \int_use:c{\l__with_unique_counter_tl} }
+ }
+% \end{macrocode}
+
+
+
+% \uninteresting\begin{macrocode}
+ }
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \with:oooooooon {\l__with_argspec_tl}
+ {\cs:w l__with_p_1_tl \cs_end:}
+ {\cs:w l__with_p_2_tl \cs_end:}
+ {\cs:w l__with_p_3_tl \cs_end:}
+ {\cs:w l__with_p_4_tl \cs_end:}
+ {\cs:w l__with_p_5_tl \cs_end:}
+ {\cs:w l__with_p_6_tl \cs_end:}
+ {\cs:w l__with_p_7_tl \cs_end:} {
+ \with:oooooooon {##1o}{##2}{##3}{##4}
+ {##5}{##6}{##7}{##8} {
+ \int_case:nnn {\l__with_arg_int} {
+ {1} { \gen_use:nn{with}{####1}
+ {####2} {\l__with_code_tl} }
+ {2} { \gen_use:nn{with}{####1}
+ {####2}{####3} {\l__with_code_tl} }
+ {3} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4} {\l__with_code_tl} }
+ {4} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4}
+ {####5} {\l__with_code_tl} }
+ {5} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4}
+ {####5}{####6} {\l__with_code_tl} }
+ {6} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4}
+ {####5}{####6}{####7} {\l__with_code_tl} }
+ {7} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4}
+ {####5}{####6}{####7}
+ {####8} {\l__with_code_tl} }
+ }{}
+ }
+ }
+% \end{macrocode}
+
+
+
+% \uninteresting\begin{macrocode}
}
+% \end{macrocode}
+
+