diff options
author | Karl Berry <karl@freefriends.org> | 2014-03-25 21:28:33 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2014-03-25 21:28:33 +0000 |
commit | f773331df58a7fd5a9e45fcb04799793085e41dd (patch) | |
tree | 723ade178cbcc9ab2d9d65d97e6412e57e9e91eb /Master/texmf-dist/tex/latex/fifo-stack | |
parent | ed18618d5ba20315c34cc8fe58e4989b5de500ed (diff) |
fifo-stack (25mar14)
git-svn-id: svn://tug.org/texlive/trunk@33288 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/fifo-stack')
-rw-r--r-- | Master/texmf-dist/tex/latex/fifo-stack/fifo-stack.sty | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/fifo-stack/fifo-stack.sty b/Master/texmf-dist/tex/latex/fifo-stack/fifo-stack.sty new file mode 100644 index 00000000000..95a2b746f19 --- /dev/null +++ b/Master/texmf-dist/tex/latex/fifo-stack/fifo-stack.sty @@ -0,0 +1,210 @@ +%% +%% This is file `fifo-stack.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% fifo-stack.dtx (with options: `package') +%% +%% Copyright (C) 2014 Stephen Gaito (PerceptiSys Ltd) +%% +%% This work may be distributed and/or modified under the conditions of the LaTeX +%% Project Public License, either version 1.3 of this license or (at your +%% option) 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. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Stephen Gaito. +%% +%% The released source can be found at: +%% https://github.com/diSimplex/latexFifoStack/tree/master/texStyle +%% +%% The development source can be found at: +%% https://github.com/stephengaito/latexFifoStack/tree/master/texStyle +%% +%% This work consists of the files fifo-stack.dtx, and fifo-stack.ins. +%% +%% The command: +%% pdflatex fifo-stack.ins +%% followed by: +%% pdflatex fifo-stack.dtx +%% will produce the derived files: fifo-stack.sty, fifo-stack-test.tex, +%% and fifo-stack.pdf. +%% +%% The command: +%% pdflatex fifo-stack-test.tex +%% will regression test the fifo-stack package. Output will be found in +%% fifo-stack-test.lgout. If pdflatex completes with no errors, then all +%% regression tests passed. +%% +\ProvidesPackage{fifo-stack}[2014/03/24 v1.0 Multi-FIFO/stack system] +\RequirePackage{ifthen} +\newcount\tmp@fifo@stack@top +\newcount\tmp@fifo@stack@bottom +\newcount\tmp@fifo@stack@size +\global\def\fifo@stack@pointer#1{% + \ifnum#1<0 + @\expandafter\romannumeral\numexpr -1*#1 \relax + \else + \expandafter\romannumeral\numexpr #1+1 \relax + \fi +} +\newcommand\FSCreate[2]{% + \expandafter\gdef\csname #1@fifo@stack@count@top\endcsname{0}% + \expandafter\gdef\csname #1@fifo@stack@count@bottom\endcsname{1}% + \expandafter\gdef\csname #1@fifo@stack@count@size\endcsname{0}% + \expandafter\do@fifo@stack@top@macro% + \csname #1@fifo@stack@count@top\endcsname{#1}{#2}% + \expandafter\do@fifo@stack@bottom@macro% + \csname #1@fifo@stack@count@bottom\endcsname{#1}{#2}% +} +\newcommand\do@fifo@stack@top@macro[3]{% + \expandafter\newcommand\expandafter*% + \csname fifo@stack@top@#2\endcsname{% + \expandafter\ifx\csname #2@\fifo@stack@pointer#1\endcsname\relax + #3% + \else + \csname #2@\fifo@stack@pointer#1\endcsname + \fi + }% +} +\newcommand\do@fifo@stack@bottom@macro[3]{% + \expandafter\newcommand\expandafter*% + \csname fifo@stack@bottom@#2\endcsname{% + \expandafter\ifx\csname #2@\fifo@stack@pointer#1\endcsname\relax + #3% + \else + \csname #2@\fifo@stack@pointer#1\endcsname + \fi + }% +} +\newcommand{\FSClear}[1]{% + \whiledo{0 < \FSSize{#1}}{\FSPop{#1}} +} + +\newcommand{\FSDestroy}[1]{% + \FSClear{#1} + \expandafter\global\expandafter\let + \csname #1@fifo@stack@count@top\endcsname= + \fifo@stack@never@defined\relax + \expandafter\global\expandafter\let + \csname #1@fifo@stack@count@bottom\endcsname= + \fifo@stack@never@defined\relax + \expandafter\global\expandafter\let + \csname #1@fifo@stack@count@size\endcsname= + \fifo@stack@never@defined\relax + \expandafter\global\expandafter\let + \csname fifo@stack@top@#1\endcsname= + \fifo@stack@never@defined\relax + \expandafter\global\expandafter\let + \csname fifo@stack@bottom@#1\endcsname= + \fifo@stack@never@defined\relax +} +\newcommand\FSTop[1]{% + \ifx\csname #1@fifo@stack@count@top\endcsname\relax + \PackageError{fifo-stack}{Undefined FIFO/stack #1}% + {You should first create the FIFO/stack with \FSCreate}% + \else + \csname fifo@stack@top@#1\endcsname + \fi +} +\newcommand\FSPush[2]{% + \ifx\csname #1@fifo@stack@count@top\endcsname\relax + \PackageError{fifo-stack}{Undefined FIFO/stack #1}% + {You should first create the FIFO/stack with \FSCreate}% + \else + \edef\fifo@stack@newtop{#2}% + \tmp@fifo@stack@top\csname #1@fifo@stack@count@top\endcsname\relax + \global\advance\tmp@fifo@stack@top by 1\relax + \expandafter\xdef\csname #1@fifo@stack@count@top\endcsname + {\the\tmp@fifo@stack@top}% + \tmp@fifo@stack@size\csname #1@fifo@stack@count@size\endcsname\relax + \global\advance\tmp@fifo@stack@size by 1\relax + \expandafter\xdef\csname #1@fifo@stack@count@size\endcsname + {\the\tmp@fifo@stack@size}% + \expandafter\xdef\csname #1@\fifo@stack@pointer\tmp@fifo@stack@top\endcsname + {\fifo@stack@newtop}% + \fi +} +\newcommand\FSPop[1]{% + \ifx\csname #1@fifo@stack@count@top\endcsname\relax + \PackageError{fifo-stack}{Undefined FIFO/stack #1}% + {You should first create the FIFO/stack with \FSCreate}% + \else + \tmp@fifo@stack@top\csname #1@fifo@stack@count@top\endcsname\relax + \tmp@fifo@stack@bottom\csname #1@fifo@stack@count@bottom\endcsname\relax + \ifnum\tmp@fifo@stack@top<\tmp@fifo@stack@bottom\relax\else + \expandafter\global\expandafter\let + \csname #1@\fifo@stack@pointer\tmp@fifo@stack@top\endcsname= + \fifo@stack@never@defined\relax + \advance\tmp@fifo@stack@top by -1\relax + \expandafter\xdef\csname #1@fifo@stack@count@top\endcsname + {\the\tmp@fifo@stack@top}% + \tmp@fifo@stack@size\csname #1@fifo@stack@count@size\endcsname\relax + \global\advance\tmp@fifo@stack@size by -1\relax + \expandafter\xdef\csname #1@fifo@stack@count@size\endcsname + {\the\tmp@fifo@stack@size}% + \fi + \fi +} +\newcommand\FSShowTop[1]{% + {\edef\fifo@stack@top{\FSTop{#1}}% + \typeout{The top of #1: \fifo@stack@top}}} +\newcommand\FSBottom[1]{% + \ifx\csname #1@fifo@stack@count@bottom\endcsname\relax + \PackageError{fifo-stack}{Undefined FIFO/stack #1}% + {You should first create the FIFO/stack with \FSCreate}% + \else + \csname fifo@stack@bottom@#1\endcsname + \fi +} +\newcommand\FSUnshift[2]{% + \ifx\csname #1@fifo@stack@count@bottom\endcsname\relax + \PackageError{fifo-stack}{Undefined FIFO/stack #1}% + {You should first create the FIFO/stack with \FSCreate}% + \else + \edef\fifo@stack@newBottom{#2}% + \tmp@fifo@stack@bottom\csname #1@fifo@stack@count@bottom\endcsname\relax + \global\advance\tmp@fifo@stack@bottom by -1\relax + \expandafter\xdef\csname #1@fifo@stack@count@bottom\endcsname + {\the\tmp@fifo@stack@bottom}% + \tmp@fifo@stack@size\csname #1@fifo@stack@count@size\endcsname\relax + \global\advance\tmp@fifo@stack@size by 1\relax + \expandafter\xdef\csname #1@fifo@stack@count@size\endcsname + {\the\tmp@fifo@stack@size}% + \expandafter\xdef\csname #1@\fifo@stack@pointer\tmp@fifo@stack@bottom\endcsname + {\fifo@stack@newBottom}% + \fi +} +\newcommand\FSShift[1]{% + \ifx\csname #1@fifo@stack@count@bottom\endcsname\relax + \PackageError{fifo-stack}{Undefined FIFO/stack #1}% + {You should first create the FIFO/stack with \FSCreate}% + \else + \tmp@fifo@stack@top\csname #1@fifo@stack@count@top\endcsname\relax + \tmp@fifo@stack@bottom\csname #1@fifo@stack@count@bottom\endcsname\relax + \ifnum\tmp@fifo@stack@top<\tmp@fifo@stack@bottom\relax\else + \expandafter\global\expandafter\let + \csname #1@\fifo@stack@pointer\tmp@fifo@stack@bottom\endcsname= + \fifo@stack@never@defined\relax + \advance\tmp@fifo@stack@bottom by 1\relax + \expandafter\xdef\csname #1@fifo@stack@count@bottom\endcsname + {\the\tmp@fifo@stack@bottom}% + \tmp@fifo@stack@size\csname #1@fifo@stack@count@size\endcsname\relax + \global\advance\tmp@fifo@stack@size by -1\relax + \expandafter\xdef\csname #1@fifo@stack@count@size\endcsname + {\the\tmp@fifo@stack@size}% + \fi + \fi +} +\newcommand\FSShowBottom[1]{% + {\edef\fifo@stack@bottom{\FSBottom{#1}}% + \typeout{The bottom of #1: \fifo@stack@bottom}}} +\newcommand\FSSize[1]{\csname #1@fifo@stack@count@size\endcsname} +\endinput +%% +%% End of file `fifo-stack.sty'. |