summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/environ/environ.sty
blob: 99469eb1f6b135c7d6ecf62ea3f95a9ef2482a32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
%%
%% 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}[2007/09/23 v0.1 A new environment syntax]
\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}
\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}%
  \expandafter\env@newcommand\csname env@@#1\endcsname[1]{%
    \csname env@@@#1\endcsname{%
      \csname env@args@\@currenvir\endcsname##1\unskip}}%
  \expandafter\env@newcommand\csname env@@@#1\endcsname[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'.