recettes/environ.sty
2010-10-04 19:21:21 +02:00

173 lines
5.2 KiB
TeX

%%
%% This is file `environ.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% environ.dtx (with options: `package')
%%
%% __________________________________
%% Copyright (C) 2007 Will Robertson
%%
%% License information appended.
%%
\ProvidesPackage{environ}[2008/06/18 v0.2 A new way to define environments]
\def\environbodyname#1{\def\env@BODY{#1}}
\environbodyname\BODY
\def\environfinalcode#1{%
\def\env@finalcode{#1}}
\environfinalcode{\ignorespacesafterend}
\def\longdef@c#1{%
\expandafter\long\expandafter\def\csname#1\endcsname}
\catcode`\Q=3
\long\def\trim@spaces#1{\romannumeral-`\q\trim@trim@\noexpand#1Q Q}
\long\def\trim@trim@#1 Q{\trim@trim@@#1Q}
\long\def\trim@trim@@#1Q#2{#1}
\catcode`\Q=11
\unless\ifdefined\collect@body
\newtoks\@emptytoks
\newtoks\@envbody
\def\collect@body#1{%
\@envbody{\expandafter#1\expandafter{\the\@envbody}}%
\edef\process@envbody{\the\@envbody\noexpand\end{\@currenvir}}%
\@envbody\@emptytoks \def\begin@stack{b}%
\begingroup
\expandafter\let\csname\@currenvir\endcsname\collect@@body
\edef\process@envbody{%
\expandafter\noexpand\csname\@currenvir\endcsname}%
\process@envbody
}
\def\push@begins#1\begin#2{%
\ifx\end#2\else
b\expandafter\push@begins
\fi}
\def\addto@envbody#1{%
\global\@envbody\expandafter{\the\@envbody#1}}
\def\collect@@body#1\end#2{%
\edef\begin@stack{%
\push@begins#1\begin\end \expandafter\@gobble\begin@stack}%
\ifx\@empty\begin@stack
\endgroup
\@checkend{#2}%
\addto@envbody{#1}%
\else
\addto@envbody{#1\end{#2}}%
\fi
\process@envbody}
\fi
\long\def\Collect@Body#1{%
\@envbody{\expandafter#1\expandafter{\the\@envbody}}%
\edef\process@envbody{\the\@envbody\noexpand\end{\@currenvir}}%
\@envbody\@emptytoks \def\begin@stack{b}%
\begingroup
\expandafter\let\csname\@currenvir\endcsname\Collect@@Body
\edef\process@envbody{%
\expandafter\noexpand\csname\@currenvir\endcsname}%
\process@envbody
}
\long\def\Push@Begins#1\begin#2{%
\ifx\end#2\else
b\expandafter\Push@Begins
\fi}
\long\def\Addto@Envbody#1{%
\global\@envbody\expandafter{\the\@envbody#1}}
\long\def\Collect@@Body#1\end#2{%
\edef\begin@stack{%
\Push@Begins#1\begin\end\expandafter\@gobble\begin@stack}%
\ifx\@empty\begin@stack
\endgroup
\@checkend{#2}%
\Addto@Envbody{#1}%
\else
\Addto@Envbody{#1\end{#2}}%
\fi
\process@envbody}
\def\NewEnviron{%
\let\env@newcommand\newcommand
\let\env@newenvironment\newenvironment
\env@NewEnviron}
\def\RenewEnviron{%
\let\env@newcommand\renewcommand
\let\env@newenvironment\renewenvironment
\env@NewEnviron}
\def\env@NewEnviron#1{%
\@ifnextchar[
{\env@new@i{#1}}
{\env@new@iii{#1}{}}}
\def\env@new@i#1[#2]{%
\@ifnextchar[
{\env@new@ii{#1}[#2]}
{\env@new@iii{#1}{[#2]}}}
\def\env@new@ii#1[#2][#3]{%
\env@new@iii{#1}{[#2][#3]}}
\long\def\env@new@iii#1#2#3{%
\@temptokena={\env@new{#1}{#2}{#3}}%
\@ifnextchar[{%
\the\@temptokena
}{%
\expandafter\the\expandafter
\@temptokena\expandafter[\env@finalcode]%
}}
\long\def\env@new#1#2#3[#4]{%
\env@newenvironment{#1}{%
\expandafter\Collect@Body\csname env@#1@parse\endcsname
}{#4}
\longdef@c{env@#1@parse}##1{%
\csname env@#1@save@env\endcsname##1\env@nil
\csname env@#1@process\endcsname##1\env@nil}%
\expandafter\env@newcommand
\csname env@#1@save@env\endcsname#2{\env@save}%
\expandafter\env@newcommand
\csname env@#1@process\endcsname#2{#3\env@ignore}}
\long\def\env@save#1\env@nil{%
\expandafter\edef\env@BODY{%
\unexpanded\expandafter
\expandafter\expandafter{\trim@spaces{#1}}}}
\long\def\env@ignore#1\env@nil{}
\newcommand\NewEnvironment{%
\let\env@newenvironment\newenvironment
\let\env@newcommand\newcommand
\Make@Environment}
\newcommand\RenewEnvironment{%
\let\env@newenvironment\renewenvironment
\let\env@newcommand\renewcommand
\Make@Environment}
\newcommand\Make@Environment[2]{%
\expandafter\let\csname env@args@#1\endcsname\ignorespaces
\env@newenvironment{#1}{%
\expandafter\Collect@Body\csname env@@#1\endcsname}{\ignorespacesafterend}%
\longdef@c{env@@#1}##1{%
\csname env@@@#1\endcsname{%
\csname env@args@#1\endcsname##1\unskip}}%
\longdef@c{env@@@#1}##1{#2}}
\newcommand\EnvironArgs[1]{%
\@ifnextchar[
{\Env@Args{#1}}
{\Env@Args{#1}[0]}}
\long\def\Env@Args#1[#2]{%
\@ifnextchar[
{\Env@@@Args{#1}[#2]}
{\Env@@Args{#1}[#2]}}
\long\def\Env@@Args#1[#2]#3{%
\expandafter\renewcommand\csname env@args@#1\endcsname[#2]{%
#3\ignorespaces}}
\long\def\Env@@@Args#1[#2][#3]#4{%
\expandafter\renewcommand\csname env@args@#1\endcsname[#2][#3]{%
#4\ignorespaces}}
%%
%% Copyright (C) 2007 by Will Robertson <wspr81@gmail.com>
%%
%% Distributable under the LaTeX Project Public License,
%% version 1.3c or higher (your choice). The latest version of
%% this license is at: http://www.latex-project.org/lppl.txt
%%
%% This work is "maintained" (as per LPPL maintenance status)
%% by Will Robertson.
%%
%% This work consists of the file environ.dtx
%% and the derived files environ.pdf,
%% environ.sty, and
%% environ.ins.
%%
%%
%% End of file `environ.sty'.