summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/lualatex/simurgh/simurgh-tools.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/simurgh/simurgh-tools.sty')
-rw-r--r--Master/texmf-dist/tex/lualatex/simurgh/simurgh-tools.sty505
1 files changed, 505 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lualatex/simurgh/simurgh-tools.sty b/Master/texmf-dist/tex/lualatex/simurgh/simurgh-tools.sty
new file mode 100644
index 00000000000..3ce782eb783
--- /dev/null
+++ b/Master/texmf-dist/tex/lualatex/simurgh/simurgh-tools.sty
@@ -0,0 +1,505 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{simurgh-tools}[2013/12/01 v0.01a programming tools]
+\providecommand{\@simurgh@saveprimitive}[2]{\begingroup\escapechar`\\\relax
+ \edef\@tempa{\string#1}\edef\@tempb{\meaning#1}%
+ \ifx\@tempa\@tempb \global\let#2#1%
+ \else
+ \edef\@tempb{\meaning#2}%
+ \ifx\@tempa\@tempb
+ \else
+ \@latex@error{Unable to properly define \string#2; primitive
+ \noexpand#1no longer primitive}\@eha
+ \fi
+ \fi
+ \endgroup}
+\def\eqnewif#1#2{%
+ \count@\escapechar \escapechar\m@ne
+ \let#1\iffalse
+ \let#2\iffalse
+ \eq@if#1#2\iftrue
+ \eq@if#1#2\iffalse
+ \escapechar\count@}
+\def\eq@if#1#2#3{%
+ \expandafter\def\csname\expandafter\@gobbletwo\string#1%
+ \expandafter\@gobbletwo\string#3\endcsname
+ {\let#1#3%
+ \let#2#3}%
+ \expandafter\def\csname\expandafter\@gobbletwo\string#2%
+ \expandafter\@gobbletwo\string#3\endcsname
+ {\let#2#3%
+ \let#1#3}}
+\newcommand*{\if@simurgh@csdef}[1]{%
+ \ifcsname#1\endcsname
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\newcommand*{\if@simurgh@csundef}[1]{%
+ \ifcsname#1\endcsname
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+\newcommand{\if@simurgh@def}[1]{%
+ \ifdefined#1%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\newcommand{\if@simurgh@undef}[1]{%
+ \ifdefined#1%
+ \ifx#1\relax
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+\newcommand{\if@simurgh@blank}[1]{% from url.sty
+ \simurgh@ifblank@i#1&&\@secondoftwo\@firstoftwo:}
+\long\def\simurgh@ifblank@i#1#2&#3#4#5:{#4}
+\newcommand{\simurgh@notblank}[1]{%
+ \simurgh@ifblank@i#1&&\@firstoftwo\@secondoftwo:}
+\newcommand{\if@simurgh@defmacro}{}
+\long\edef\if@simurgh@defmacro#1{%
+ \noexpand\expandafter\noexpand\simurgh@ifdefmacro
+ \noexpand\meaning#1\detokenize{macro}:&}
+\edef\simurgh@ifdefmacro{%
+ \def\noexpand\simurgh@ifdefmacro##1\detokenize{macro}:##2&}
+\simurgh@ifdefmacro{\simurgh@notblank{#2}}
+\newcommand*{\if@simurgh@csmacro}[1]{%
+ \if@simurgh@csdef{#1}
+ {\expandafter\if@simurgh@defmacro\csname#1\endcsname}
+ {\@secondoftwo}}
+\newcommand{\if@simurgh@defprimitive}[1]{%
+ \ifpdfprimitive#1%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\newcommand{\if@simurgh@csprimitive}[1]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup%
+ \expandafter\ifpdfprimitive\csname#1\endcsname%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\newcommand*{\simurgh@csdefcs}[2]{%
+\expandafter\@ifdefinable \csname#1\endcsname{%
+\expandafter\def\csname#1\expandafter\endcsname{\csname#2\endcsname}}}
+\newcommand*{\simurgh@csletcs}[2]{%
+\expandafter\@ifdefinable \csname#1\endcsname{%
+\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}}
+\newcommand*{\simurgh@cslet}[2]{%
+\expandafter\@ifdefinable \csname#1\endcsname{%
+\expandafter\let\csname#1\endcsname#2}}
+\newcommand{\simurgh@namelongdef}[1]{%
+ \long\expandafter\def\csname #1\endcsname}
+
+
+\protected\def\simurgh@error{\PackageError{simurgh}}
+\protected\def\simurgh@warning{\PackageWarning{simurgh}}
+\protected\def\simurgh@info{\PackageInfo{simurgh}}
+
+\newcommand*{\simurgh@newrobustcmd}{}
+\protected\def\simurgh@newrobustcmd{\@star@or@long\simurgh@new@command}
+
+\def\simurgh@new@command#1{\@testopt{\simurgh@newcommand#1}0}
+
+\def\simurgh@newcommand#1[#2]{%
+ \@ifnextchar[%]
+ {\simurgh@xargdef#1[#2]}
+ {\ifx\l@ngrel@x\relax
+ \let\l@ngrel@x\protected
+ \else
+ \protected\def\l@ngrel@x{\protected\long}%
+ \fi
+ \@argdef#1[#2]}}
+
+\long\def\simurgh@xargdef#1[#2][#3]#4{%
+ \@ifdefinable#1{%
+ \expandafter\protected
+ \expandafter\def
+ \expandafter#1%
+ \expandafter{%
+ \expandafter\@testopt
+ \csname\string#1\endcsname{#3}}%
+ \expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}}}
+
+\simurgh@newrobustcmd*{\simurgh@renewrobustcmd}{\@star@or@long\simurgh@renew@command}
+
+\def\simurgh@renew@command#1{%
+ \if@simurgh@undef{#1}
+ {\simurgh@error{\string#1 undefined}\@ehc}
+ {}%
+ \let\@ifdefinable\@rc@ifdefinable
+ \simurgh@new@command#1}
+
+
+\simurgh@newrobustcmd*{\simurgh@providerobustcmd}{\@star@or@long\simurgh@provide@command}
+
+\def\simurgh@provide@command#1{%
+ \if@simurgh@undef{#1}
+ {\def\reserved@a{\simurgh@new@command#1}}
+ {\def\reserved@a{\simurgh@renew@command\reserved@a}}%
+ \reserved@a}
+
+\newcommand*{\simurgh@csuse}[1]{%
+ \ifcsname#1\endcsname
+ \csname#1\expandafter\endcsname
+ \fi}
+
+\newcommand{\simurgh@expandonce}[1]{%
+ \unexpanded\expandafter{#1}}
+
+\def\simurgh@protected{%
+ \let\@@protect\protect
+ \let\protect\@unexpandable@protect
+ \afterassignment\restore@protect}
+
+\simurgh@newrobustcmd{\simurgh@appto}[2]{%
+ \if@simurgh@undef{#1}
+ {\edef#1{\unexpanded{#2}}}
+ {\edef#1{\simurgh@expandonce#1\unexpanded{#2}}}}
+\simurgh@newrobustcmd{\simurgh@eappto}[2]{%
+ \if@simurgh@undef{#1}
+ {\edef#1{#2}}
+ {\edef#1{\simurgh@expandonce#1#2}}}
+\simurgh@newrobustcmd{\simurgh@gappto}[2]{%
+ \if@simurgh@undef{#1}
+ {\xdef#1{\unexpanded{#2}}}
+ {\xdef#1{\simurgh@expandonce#1\unexpanded{#2}}}}
+\simurgh@newrobustcmd{\simurgh@xappto}[2]{%
+ \if@simurgh@undef{#1}
+ {\xdef#1{#2}}
+ {\xdef#1{\simurgh@expandonce#1#2}}}
+
+\simurgh@newrobustcmd*{\simurgh@protected@eappto}{\simurgh@protected\simurgh@eappto}
+\simurgh@newrobustcmd*{\simurgh@protected@xappto}{\simurgh@protected\simurgh@xappto}
+
+\simurgh@newrobustcmd{\simurgh@preto}[2]{%
+ \if@simurgh@undef{#1}
+ {\edef#1{\unexpanded{#2}}}
+ {\edef#1{\unexpanded{#2}\simurgh@expandonce#1}}}
+\simurgh@newrobustcmd{\simurgh@epreto}[2]{%
+ \if@simurgh@undef{#1}
+ {\edef#1{#2}}
+ {\edef#1{#2\simurgh@expandonce#1}}}
+\simurgh@newrobustcmd{\simurgh@gpreto}[2]{%
+ \if@simurgh@undef{#1}
+ {\xdef#1{\unexpanded{#2}}}
+ {\xdef#1{\unexpanded{#2}\simurgh@expandonce#1}}}
+\simurgh@newrobustcmd{\simurgh@xpreto}[2]{%
+ \if@simurgh@undef{#1}
+ {\xdef#1{#2}}
+ {\xdef#1{#2\simurgh@expandonce#1}}}
+
+\simurgh@newrobustcmd*{\simurgh@protected@epreto}{\simurgh@protected\simurgh@epreto}
+\simurgh@newrobustcmd*{\simurgh@protected@xpreto}{\simurgh@protected\simurgh@xpreto}
+
+\simurgh@newrobustcmd*{\simurgh@csappto}[1]{\expandafter\simurgh@appto\csname#1\endcsname}
+\simurgh@newrobustcmd*{\simurgh@cseappto}[1]{\expandafter\simurgh@eappto\csname#1\endcsname}
+\simurgh@newrobustcmd*{\simurgh@csgappto}[1]{\expandafter\simurgh@gappto\csname#1\endcsname}
+\simurgh@newrobustcmd*{\simurgh@csxappto}[1]{\expandafter\simurgh@xappto\csname#1\endcsname}
+\simurgh@newrobustcmd*{\simurgh@protected@cseappto}{\simurgh@protected\simurgh@cseappto}
+\simurgh@newrobustcmd*{\simurgh@protected@csxappto}{\simurgh@protected\simurgh@csxappto}
+
+\simurgh@newrobustcmd*{\simurgh@cspreto}[1]{\expandafter\simurgh@preto\csname#1\endcsname}
+\simurgh@newrobustcmd*{\simurgh@csepreto}[1]{\expandafter\simurgh@epreto\csname#1\endcsname}
+\simurgh@newrobustcmd*{\simurgh@csgpreto}[1]{\expandafter\simurgh@gpreto\csname#1\endcsname}
+\simurgh@newrobustcmd*{\simurgh@csxpreto}[1]{\expandafter\simurgh@xpreto\csname#1\endcsname}
+\simurgh@newrobustcmd*{\simurgh@protected@csepreto}{\simurgh@protected\simurgh@csepreto}
+\simurgh@newrobustcmd*{\simurgh@protected@csxpreto}{\simurgh@protected\simurgh@csxpreto}
+
+\simurgh@newrobustcmd{\if@simurgh@patchable}{%
+ \simurgh@dbg@trce\if@simurgh@patchable
+ \begingroup
+ \@makeother\#%
+ \@ifstar\simurgh@ifpatchable@i\simurgh@ifpatchable}
+
+\long\def\simurgh@ifpatchable#1#2{%
+ \endgroup
+ \simurgh@dbg@init#1%
+ \if@simurgh@undef{#1}
+ {\simurgh@dbg@fail{def}\@secondoftwo}
+ {\simurgh@dbg@info{def}%
+ \if@simurgh@defmacro{#1}
+ {\simurgh@dbg@info{mac}%
+ \simurgh@ifscanable{#1}
+ {\simurgh@ifhashcheck{#2}
+ {\simurgh@dbg@info{tok}%
+ \simurgh@ifpattern#1{#2}
+ {\simurgh@dbg@info{pat}%
+ \simurgh@dbg@info{pos}\@firstoftwo}
+ {\simurgh@dbg@fail{pat}\@secondoftwo}}
+ {\simurgh@dbg@fail{hsh}\@secondoftwo}}
+ {\simurgh@dbg@fail{tok}\@secondoftwo}}
+ {\simurgh@dbg@fail{mac}\@secondoftwo}}}
+
+\long\def\simurgh@ifpatchable@i#1{%
+ \endgroup
+ \simurgh@dbg@init#1%
+ \if@simurgh@undef{#1}
+ {\simurgh@dbg@fail{def}\@secondoftwo}
+ {\simurgh@dbg@info{def}%
+ \if@simurgh@defmacro{#1}
+ {\simurgh@dbg@info{mac}%
+ \if@simurgh@defparam{#1}
+ {\simurgh@dbg@info{prm}%
+ \simurgh@ifscanable{#1}
+ {\simurgh@dbg@info{tok}%
+ \simurgh@dbg@info{pos}\@firstoftwo}
+ {\simurgh@dbg@fail{tok}\@secondoftwo}}
+ {\simurgh@dbg@info{prl}%
+ \if@simurgh@defprotected{#1}
+ {\simurgh@dbg@info{pro}}
+ {}%
+ \simurgh@dbg@info{pos}\@firstoftwo}}
+ {\simurgh@dbg@fail{mac}\@secondoftwo}}}
+
+\simurgh@newrobustcmd*{\simurgh@patchcmd}{%
+ \simurgh@dbg@trce\simurgh@patchcmd
+ \begingroup
+ \@makeother\#%
+ \simurgh@@patchcmd}
+
+\newcommand{\simurgh@@patchcmd}[4][########1]{%
+ \simurgh@ifpatchable#2{#3}
+ {\simurgh@dbg@succ{ret}%
+ \begingroup
+ \edef\simurgh@resrvda{%
+ \def\noexpand\simurgh@resrvda####1\detokenize{macro:}####2->####3&{%
+ #1\def\string\simurgh@resrvda\space####2{\noexpand\simurgh@resrvdb####3&}}%
+ \def\noexpand\simurgh@resrvdb####1\detokenize{#3}####2&{%
+ ####1\detokenize{#4}####2}%
+ \edef\noexpand\simurgh@resrvda{%
+ \noexpand\simurgh@resrvda\meaning#2&}}%
+ \simurgh@resrvda
+ \simurgh@patchcmd@scantoks\simurgh@resrvda
+ \let#2\simurgh@resrvda
+ \simurgh@undef\simurgh@resrvda
+ \@firstoftwo}
+ {\@secondoftwo}}
+
+\def\simurgh@patchcmd@scantoks#1{%
+ \edef\simurgh@resrvda{\endgroup
+ \unexpanded{\makeatletter\scantokens}{#1}%
+ \catcode\number`\@=\the\catcode`\@\relax}%
+ \simurgh@resrvda}
+
+
+\protected\def\simurgh@ifscanable#1{%
+ \begingroup
+ \edef\simurgh@resrvda{%
+ \def\noexpand\simurgh@resrvda####1\detokenize{macro}:####2->####3&{%
+ ####1\def\string\simurgh@resrvda####2{####3}}%
+ \edef\noexpand\simurgh@resrvda{\noexpand\simurgh@resrvda\meaning#1&}}%
+ \simurgh@resrvda
+ \makeatletter
+ \scantokens\expandafter{\simurgh@resrvda}%
+ \expandafter\endgroup\ifx#1\simurgh@resrvda
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\protected\long\def\simurgh@ifhashcheck#1{%
+ \begingroup
+ \edef\simurgh@resrvda{\detokenize{#1}}%
+ \expandafter\endgroup
+ \expandafter\simurgh@ifhashcheck@i\meaning\simurgh@resrvda&}
+
+\edef\simurgh@ifhashcheck@i#1&{%
+ \noexpand\expandafter
+ \noexpand\simurgh@ifhashcheck@ii
+ \noexpand\strip@prefix#1\string#\string#&}
+
+\edef\simurgh@ifhashcheck@ii{%
+ \def\noexpand\simurgh@ifhashcheck@ii##1\string#\string###2&}
+\simurgh@ifhashcheck@ii{\if@simurgh@blank{#2}}
+
+\protected\long\def\simurgh@ifpattern#1#2{%
+ \begingroup
+ \edef\simurgh@resrvda{%
+ \def\noexpand\simurgh@resrvda####1\detokenize{#2}####2&{%
+ \endgroup\noexpand\noexpand\noexpand\if@simurgh@blank{####2}}%
+ \edef\noexpand\simurgh@resrvda{\noexpand\simurgh@resrvda
+ \expandafter\strip@prefix\meaning#1\detokenize{#2}&}%
+ \noexpand\simurgh@resrvda}
+ \simurgh@resrvda\@secondoftwo\@firstoftwo}
+
+\newcommand{\if@simurgh@defparam}{}
+\long\edef\if@simurgh@defparam#1{%
+ \noexpand\expandafter\noexpand\simurgh@ifdefparam
+ \noexpand\meaning#1\detokenize{macro}:->&}
+\edef\simurgh@ifdefparam{%
+ \def\noexpand\simurgh@ifdefparam##1\detokenize{macro}:##2->##3&}
+\simurgh@ifdefparam{\simurgh@notblank{#2}}
+
+\newcommand{\if@simurgh@defprotected}{}
+\long\edef\if@simurgh@defprotected#1{%
+ \noexpand\expandafter\noexpand\simurgh@ifdefprotected
+ \noexpand\meaning#1\string\protected&}
+\edef\simurgh@ifdefprotected{%
+ \def\noexpand\simurgh@ifdefprotected##1\string\protected##2&}
+\simurgh@ifdefprotected{\simurgh@notblank{#2}}
+
+\simurgh@newrobustcmd{\simurgh@undef}[1]{\let#1\simurgh@undefined}
+
+\let\simurgh@dbg@trce\@gobble
+\let\simurgh@dbg@init\@gobble
+\let\simurgh@dbg@info\@gobble
+\let\simurgh@dbg@succ\@gobble
+\let\simurgh@dbg@fail\@gobble
+
+\simurgh@newrobustcmd*{\simurgh@apptocmd}{%
+ \simurgh@dbg@trce\simurgh@apptocmd
+ \begingroup
+ \@makeother\#%
+ \simurgh@hooktocmd\simurgh@append}
+
+\simurgh@newrobustcmd*{\simurgh@pretocmd}{%
+ \simurgh@dbg@trce\simurgh@pretocmd
+ \begingroup
+ \@makeother\#%
+ \simurgh@hooktocmd\simurgh@prepend}
+
+\long\def\simurgh@hooktocmd#1#2#3{%
+ \endgroup
+ \simurgh@dbg@init#2%
+ \if@simurgh@undef{#2}
+ {\simurgh@dbg@fail{def}\@secondoftwo}
+ {\simurgh@dbg@info{def}%
+ \if@simurgh@defmacro{#2}
+ {\simurgh@dbg@info{mac}%
+ \if@simurgh@defparam{#2}
+ {\simurgh@dbg@info{prm}%
+ \simurgh@ifscanable{#2}
+ {\simurgh@ifhashcheck{#3}
+ {\simurgh@dbg@info{tok}%
+ \simurgh@dbg@succ{ret}%
+ \simurgh@hooktocmd@i#1#2{#3}%
+ \@firstoftwo}
+ {\simurgh@dbg@fail{hsh}\@secondoftwo}}
+ {\simurgh@dbg@fail{tok}\@secondoftwo}}
+ {\simurgh@dbg@info{prl}%
+ \if@simurgh@defprotected{#2}
+ {\simurgh@dbg@info{pro}%
+ \simurgh@dbg@succ{red}%
+ \protected}
+ {\simurgh@dbg@succ{red}}%
+ \edef#2{#1{\simurgh@expandonce#2}{\unexpanded{#3}}}%
+ \@firstoftwo}}
+ {\simurgh@dbg@fail{mac}\@secondoftwo}}}
+
+\long\def\simurgh@hooktocmd@i#1#2#3{%
+ \begingroup
+ \edef\simurgh@resrvda{%
+ \def\noexpand\simurgh@resrvda####1\detokenize{macro}:####2->####3&{%
+ ####1\def\string\simurgh@resrvda\space####2{#1{####3}{\detokenize{#3}}}}%
+ \edef\noexpand\simurgh@resrvda{%
+ \noexpand\simurgh@resrvda\meaning#2&}}%
+ \simurgh@resrvda
+ \simurgh@patchcmd@scantoks\simurgh@resrvda
+ \let#2\simurgh@resrvda
+ \simurgh@undef\simurgh@resrvda}
+
+\long\def\simurgh@append#1#2{#1#2}
+\long\def\simurgh@prepend#1#2{#2#1}
+
+\simurgh@newrobustcmd*{\simurgh@AtEndPreamble}{\simurgh@gappto\simurgh@endpreamblehook}
+\newcommand*{\simurgh@endpreamblehook}{}
+
+\simurgh@preto\document{%
+ \endgroup
+ \let\simurgh@AtEndPreamble\@firstofone
+ \simurgh@endpreamblehook
+ \protected\def\simurgh@AtEndPreamble{\@notprerr\@gobble}%
+ \simurgh@undef\simurgh@endpreamblehook
+ \begingroup}
+
+\simurgh@newrobustcmd*{\simurgh@AfterPreamble}{\AtBeginDocument}
+\simurgh@AtEndPreamble{\let\simurgh@AfterPreamble\@firstofone}
+
+\simurgh@newrobustcmd*{\simurgh@AfterEndPreamble}{\simurgh@gappto\simurgh@afterendpreamblehook}
+\newcommand*{\simurgh@afterendpreamblehook}{}
+
+\simurgh@appto\document{%
+ \let\simurgh@AfterEndPreamble\@firstofone
+ \simurgh@afterendpreamblehook
+ \protected\def\simurgh@AfterEndPreamble{\@notprerr\@gobble}%
+ \simurgh@undef\simurgh@afterendpreamblehook
+ \ignorespaces}
+
+\AtEndDocument{\let\simurgh@AfterEndPreamble\@gobble}
+
+\simurgh@newrobustcmd*{\simurgh@AfterEndDocument}{\simurgh@gappto\simurgh@afterenddocumenthook}
+\newcommand*{\simurgh@afterenddocumenthook}{}
+
+\simurgh@patchcmd\enddocument
+ {\deadcycles}
+ {\let\simurgh@AfterEndDocument\@firstofone
+ \simurgh@afterenddocumenthook
+ \deadcycles}
+ {}
+ {\let\simurgh@@end\@@end
+ \def\@@end{%
+ \let\simurgh@AfterEndDocument\@firstofone
+ \simurgh@afterenddocumenthook
+ \simurgh@@end}}
+
+\simurgh@newrobustcmd{\simurgh@AtBeginEnvironment}[1]{%
+ \simurgh@csgappto{@begin@#1@hook}}
+
+\simurgh@patchcmd\begin
+ {\csname #1\endcsname}
+ {\simurgh@csuse{@begin@#1@hook}%
+ \csname #1\endcsname}
+ {}
+ {\simurgh@warning{%
+ Patching '\string\begin' failed!\MessageBreak
+ '\string\simurgh@AtBeginEnvironment' will not work\@gobble}}
+
+\simurgh@newrobustcmd{\simurgh@AtEndEnvironment}[1]{%
+ \simurgh@csgappto{@end@#1@hook}}
+
+\simurgh@patchcmd\end
+ {\csname end#1\endcsname}
+ {\simurgh@csuse{@end@#1@hook}%
+ \csname end#1\endcsname}
+ {}
+ {\simurgh@warning{%
+ Patching '\string\end' failed!\MessageBreak
+ '\string\simurgh@AtEndEnvironment' will not work\@gobble}}
+
+\simurgh@newrobustcmd{\simurgh@BeforeBeginEnvironment}[1]{%
+ \simurgh@csgappto{@beforebegin@#1@hook}}
+
+\simurgh@pretocmd\begin
+ {\simurgh@csuse{@beforebegin@#1@hook}}
+ {}
+ {\simurgh@warning{%
+ Patching '\string\begin' failed!\MessageBreak
+ '\string\simurgh@BeforeBeginEnvironment' will not work\@gobble}}
+
+\simurgh@newrobustcmd{\simurgh@AfterEndEnvironment}[1]{%
+ \simurgh@csgappto{@afterend@#1@hook}}
+
+\simurgh@patchcmd\end
+ {\if@ignore}
+ {\simurgh@csuse{@afterend@#1@hook}%
+ \if@ignore}
+ {}
+ {\simurgh@warning{%
+ Patching '\string\end' failed!\MessageBreak
+ '\string\simurgh@AfterEndEnvironment' will not work\@gobble}}
+\endinput \ No newline at end of file