173 lines
5.2 KiB
TeX
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'.
|