From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/storecmd/storecmd.sty | 280 +++++++++++++++++++++++++++++
 1 file changed, 280 insertions(+)
 create mode 100644 macros/latex/contrib/storecmd/storecmd.sty

(limited to 'macros/latex/contrib/storecmd/storecmd.sty')

diff --git a/macros/latex/contrib/storecmd/storecmd.sty b/macros/latex/contrib/storecmd/storecmd.sty
new file mode 100644
index 0000000000..08a81919d0
--- /dev/null
+++ b/macros/latex/contrib/storecmd/storecmd.sty
@@ -0,0 +1,280 @@
+%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
+%                                                                          %
+% This is file 'storecmd.sty', version 0.0.1, October 2011.                %
+%                                                                          %
+% This package and accompanying files may be distributed and/or            %
+% modified under the conditions of the LaTeX Project Public License,       %
+% either version 1.3 of this license or any later version. The latest      %
+% version of this license is in http://www.latex-project.org/lppl.txt      %
+% and version 1.3 or later is part of all distributions of LaTeX           %
+% version 2005/12/01 or later.                                             %
+%                                                                          %
+% The LPPL maintenance status of this software is 'author-maintained'.     %
+%                                                                          %
+% This software is provided 'as it is', without warranty of any kind,      %
+% either expressed or implied, including, but not limited to, the          %
+% implied warranties of merchantability and fitness for a particular       %
+% purpose.                                                                 %
+%                                                                          %
+% Copyright (c) 2011 Ahmed Musa (amusa22@gmail.com).                       %
+%                                                                          %
+%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
+
+\@ifpackageloaded{catoptions}{}{\RequirePackage{catoptions}[2011/08/07]}
+\UseNormalCatcodes
+\StyleFilePurpose{Store command name at definition time}
+\StyleFileRCSInfo
+$Id: storecmd.sty,v 0.0.1 2011/10/15 09:00:00 Ahmed Musa Exp $
+\ProvidesPackage{storecmd}[\StyleFileInfo]
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\SetStyleFileMessages[stcmd@]{info}{warn}{err}
+\RequirePackage{ltxtools}[2011/09/10]
+\robust@def*\stcmd@verbosewarn#1{\ifstcmd@verbose\stcmd@warn{#1}\fi}
+\robust@def*\stcmd@verboseinfo#1{\ifstcmd@verbose\stcmd@info{#1}\fi}
+\providecommand*\ifsentinelTF[1]{%
+  \edef\reserved@a{\unexpanded{#1}}%
+  \ifx\reserved@a\currsentinel\expandafter\@firstoftwo
+    \else\expandafter\@secondoftwo\fi
+}
+\robust@def*\stcmd@merge{\LTS@testopt\stcmd@m@rge,}
+\robust@def*\stcmd@m@rge[#1]#2#3{%
+  \trim@@spaces{#3}\LTS@tempa
+  \ifdefTF#2{}{\def#2{}}%
+  \xifinsetTF{#1\@space\LTS@tempa#1}{#1\@space#2#1}{}{%
+    \xdef#2{\csliststack{#1\@space}#2\expandcsonce\LTS@tempa}%
+  }%
+}
+\newvariables{if}[stcmd@]{storefile,storecmd,cmdescap,global,long,
+  protected,verbose}
+\robust@def*\stcmd@typeintocontinue{%
+  \message{^^JType x or X to quit, or <RETURN> to proceed^^J}%
+  {\endlinechar-1\global\read-1 to\@gtempa}%
+  \lowercase\expandafter{\expandafter\def\expandafter
+    \@gtempa\expandafter{\@gtempa}}%
+  \xifstrcmpTF\@gtempa{x}\LTS@emergencystop\relax
+}
+
+\docommalist{storerenew,overwrite,neversave,showsource}{%
+  \XDeclareSwitchOption{#1}[true](stcmd@){%
+    \ifdefswitchTF{stcmd@#1}{%
+      \stcmd@verboseinfo{'#1' set true\on@line}%
+    }{}%
+  }%
+}
+
+\XDeclareSwitchOption{verbose}[true](stcmd@){%
+  \ifdefswitchTF{stcmd@verbose}{%
+    \stcmd@info{'verbose' set true\on@line}%
+  }{}%
+}
+\XDeclareCommandOption{storefile}[cmdnamesfile](stcmd@){%
+  \ifblankTF{#1}{%
+    \stcmd@err{No storage file name}\@ehc
+    \stcmd@storefilefalse
+  }{%
+    \if\stcmd@overwrite\else
+      \IfFileExists\stcmd@storefile{%
+        \message{^^J! File '\stcmd@storefile' already exists:}%
+        \stcmd@typeintocontinue
+      }{}%
+    \fi
+    \stcmd@storefiletrue
+    \NewWrites[stcmd@]{outputcheck}%
+    \immediate\openout\stcmd@outputcheck=\stcmd@storefile\@space
+    \immediate\write\stcmd@outputcheck{\relax}%
+    \LTS@AfterEndDocument{\immediate\closeout\stcmd@outputcheck}%
+  }%
+}
+\XDeclareCommandOption{storecmd}[cmdnamesmacro](stcmd@){%
+  \def\stcmd@tempa##1{%
+    \message{^^J! Command '##1\stcmd@storecmd' already exists:}%
+    \stcmd@typeintocontinue
+  }%
+  \ifblankTF{#1}{%
+    \stcmd@err{No storage command name}\@ehc
+    \stcmd@storecmdfalse
+  }{%
+    \stcmd@storecmdtrue
+    \ifescapedTF{#1}{%
+      \if\stcmd@overwrite\else
+        \ifdefFT{#1}{}{\stcmd@tempa\expandcsonce}%
+      \fi
+      \stcmd@cmdescaptrue
+      \gdef#1{}%
+    }{%
+      \if\stcmd@overwrite\else
+        \ifcsndefFT{#1}{}{\stcmd@tempa\noexpandcsn}%
+      \fi
+      \stcmd@cmdescapfalse
+      \csn@gdef{#1}{}%
+    }%
+  }%
+}
+\XDeclareOption*{\stcmd@warn{Unknown option '\CurrentOption' ignored}}
+\XExecuteOptions{%
+  verbose=true,neversave=false,storerenew=false,overwrite=false,
+  showsource=false
+}
+\XProcessOptions*\relax
+\robust@def*\longcmd{\stcmd@longtrue}
+\robust@def*\globalcmd{\stcmd@globaltrue}
+\robust@def*\protectedcmd{\stcmd@protectedtrue}
+\robust@def*\stcmd@cmdprefixes@a{%
+  \ifstcmd@global\global\fi
+  \ifstcmd@long\long\fi
+  \ifstcmd@protected\protected\fi
+}
+\robust@def*\stcmd@cmdprefixes@b{%
+  \ifstcmd@global
+    \stcmd@globalfalse
+    \let\stcmd@global\global
+  \else
+    \let\stcmd@global\@empty
+  \fi
+  \ifstcmd@long
+    \stcmd@longfalse
+    \let\stcmd@long\long
+  \else
+    \let\stcmd@long\@empty
+  \fi
+  \ifstcmd@protected
+    \stcmd@protectedfalse\protected
+  \fi
+  \stcmd@global\stcmd@long
+}
+\robust@def*\defsavecmd{\cpt@starorlong\stcmd@defsavecmd}
+\robust@def*\newsavecmd{\cpt@starorlong\stcmd@newsavecmd}
+\robust@def*\renewsavecmd{\cpt@starorlong\stcmd@renewsavecmd}
+\robust@def*\stcmd@savecmd#1{%
+  \if\stcmd@neversave\else
+    \begingroup
+    \escapechar=92
+    \xdef\@gtempa{%
+      \expandafter\@gobble\string#1%
+      \if\stcmd@showsource
+        \@space(\ifx\@currname\@empty
+        \jobname.tex\else\@currname.\@currext\fi)%
+      \fi
+    }%
+    \endgroup
+    \ifstcmd@storefile
+      \immediate\write\stcmd@outputcheck{\@gtempa}%
+    \fi
+    \ifboolFT{stcmd@storecmd}{}{%
+      \cptexpanded{%
+        \stcmd@merge
+          \ifstcmd@cmdescap
+            \expandcsonce\stcmd@storecmd
+          \else
+            \noexpandcsn\stcmd@storecmd
+          \fi
+        {\@gtempa}%
+      }%
+    }%
+  \fi
+}
+\robust@def*\stcmd@defsavecmd#1{%
+  \ifdefFT{#1}{}{%
+    \if\stcmd@verbose
+      \stcmd@info{Command '\string#1' is redefined\on@line}%
+    \fi
+  }%
+  \stcmd@savecmd{#1}%
+  \stcmd@cmdprefixes@b\l@ngrel@x\def#1%
+}
+\robust@def*\stcmd@newsavecmd#1{%
+  \stcmd@savecmd{#1}%
+  \LTS@testopt{\stcmd@n@wc@mmand#1}{0}%
+}
+\robust@def*\stcmd@renewsavecmd#1{%
+  \ifdefTF{#1}{%
+    \if\stcmd@storerenew
+      \stcmd@savecmd{#1}%
+    \fi
+    \let\ifcsdefinable\rc@ifcsdefinable
+    \stcmd@n@wcommand#1%
+  }{%
+    \stcmd@err{Command '\string#1' is undefined:
+      \MessageBreak it can't be redefined}\@ehc
+  }%
+}
+\robust@def*\stcmd@newcommand{\cpt@starorlong\stcmd@n@wcommand}
+\robust@def*\stcmd@n@wcommand#1{\LTS@testopt{\stcmd@n@wc@mmand#1}0}
+\robust@def*\stcmd@n@wc@mmand#1[#2]{%
+  \ifnextisbrack{\stcmd@xargdef@a#1{#2}}{\stcmd@argdef@a#1{#2}}%
+}
+\robust@def\stcmd@argdef@a#1#2{%
+  \LTS@testpnopt{\stcmd@argdef@b{#1}{#2}}{}%
+}
+\robust@def\stcmd@argdef@b#1#2(#3)#4{%
+  \def\stcmd@tempd{#3}%
+  \ifcsdefinable#1{\stcmd@yargdef#1\@ne{#2}{#4}}%
+}
+\robust@def\stcmd@xargdef@a#1#2[#3]{%
+  \LTS@testpnopt{\stcmd@xargdef@b{#1}{#2}{#3}}{}%
+}
+\robust@def\stcmd@xargdef@b#1#2#3(#4)#5{%
+  \def\stcmd@tempd{#4}%
+  \ifcsdefinable#1{%
+    \stcmd@cmdprefixes@a
+    \expandafter\def\expandafter#1\expandafter{%
+      \expandafter\@protected@testopt\expandafter#1%
+      \csname\string#1\endcsname{#3}%
+    }%
+    \aftercsname\stcmd@yargdef{\string#1}\tw@{#2}{#5}%
+  }%
+}
+\robust@def\stcmd@yargdef#1#2#3{%
+  \ifnum#2=\tw@
+    \def\stcmd@tempb##11{[####1]}%
+  \else
+    \let\stcmd@tempb\@gobble
+  \fi
+  \expandafter\stcmd@zargdef\expandafter{\number#3}#1%
+}
+\robust@def\stcmd@zargdef#1#2{%
+  \begingroup
+  \def\stcmd@tempa##1#1##2##{%
+    \def\stcmd@tempc{\stcmd@cmdprefixes@b\l@ngrel@x}%
+    \cptexpandsecond{\expandafter\endgroup\stcmd@tempc
+      \expandafter\def\expandafter#2\stcmd@tempb##1#1}{\elt{#1}}%
+  }%
+  \@tempcnta\z@pt
+  \loop
+    \advance\@tempcnta\@ne
+    \csn@def{d\number\@tempcnta}{}%
+    \ifnum\@tempcnta<9\relax
+  \repeat
+  \ifx\stcmd@tempd\@empty\else
+    \@tempcnta\z@pt
+    \def\do##1##2{%
+      \ifstrcmpTF{##1}\zargdef@nil{}{%
+        \advance\@tempcnta\@ne
+        \ifnum\@tempcnta>#1\relax
+          \stcmd@err{Number of delimiters exceeds
+            number of parameters}\@ehc
+        \fi
+        \ifinsetTF{,##1,}{,1,2,3,4,5,6,7,8,9,}{}{%
+          \stcmd@err{Invalid delimiter syntax:
+            \MsgBrk no digit [1-9] found before delimiter}\@ehc
+        }%
+        \csn@def{d##1}{##2}\do
+      }%
+    }%
+    \expandafter\do\stcmd@tempd\zargdef@nil\zargdef@nil
+  \fi
+  \ifx\stcmd@tempb\@gobble\else
+    \expandafter\ifx\csname d1\endcsname\@empty\else
+      \stcmd@err{Argument one of command \string#2 is
+        \MsgBrk already delimited by '[]'}\@ehc
+    \fi
+  \fi
+  \def\elt##1{\expandcsnonce{d##1}}%
+  \edef\stcmd@tempc{0####1\ifx\stcmd@tempb\@gobble\elt1\fi
+    ####2\elt2####3\elt3####4\elt4####5\elt5####6\elt6%
+    ####7\elt7####8\elt8####9\elt9%
+  }%
+  \expandafter\stcmd@tempa\stcmd@tempc###1%
+}
+
+\endinput
-- 
cgit v1.2.3

