summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/algorithmicx
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2006-10-12 01:40:37 +0000
committerNorbert Preining <preining@logic.at>2006-10-12 01:40:37 +0000
commita3e5f4189a145472017be9745847e9d05ebbc0a0 (patch)
treeabbb504a0ce2402455d54547f127c93a57a9b3fc /Master/texmf-dist/tex/latex/algorithmicx
parent9078ab149a4827ec032de77b4d8b4ff8f48f4628 (diff)
add algorithmicx to ctan2tl (MAKEnosymlink), add algorithmicx to tpm-ctan-check,
update algorithmicx git-svn-id: svn://tug.org/texlive/trunk@2311 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/algorithmicx')
-rw-r--r--Master/texmf-dist/tex/latex/algorithmicx/algc.sty41
-rw-r--r--Master/texmf-dist/tex/latex/algorithmicx/algcompatible.sty89
-rw-r--r--Master/texmf-dist/tex/latex/algorithmicx/algmatlab.sty15
-rw-r--r--Master/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty636
-rw-r--r--Master/texmf-dist/tex/latex/algorithmicx/algpascal.sty37
-rw-r--r--Master/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty98
6 files changed, 606 insertions, 310 deletions
diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algc.sty b/Master/texmf-dist/tex/latex/algorithmicx/algc.sty
index 60c39b7835c..c42b44f2d17 100644
--- a/Master/texmf-dist/tex/latex/algorithmicx/algc.sty
+++ b/Master/texmf-dist/tex/latex/algorithmicx/algc.sty
@@ -1,8 +1,8 @@
-% C ALGORITHMIC STYLE -- Released 18 MAR 2004
+% C ALGORITHMIC STYLE -- Released 27 APR 2005
% for LaTeX version 2e
%
% Copyright Szasz Janos
-% E-mail szaszjanos@users.sourceforge.net
+% E-mail szaszjanos@sourceforge.net
%
\NeedsTeXFormat{LaTeX2e}%
\ProvidesPackage{algc}%
@@ -10,49 +10,40 @@
\RequirePackage{algorithmicx}%
\typeout{Document Style - c/c++ environments for use with the `algorithmicx' style}%
%
-\def\ALG@setc{t}%
-\DeclareOption{noset}{\def\ALG@setc{}}%
-\DeclareOption{set}{\def\ALG@setc{t}}%
\ProcessOptions%
%
%
% *** DECLARATIONS ***
%
%
-\ALG@deflanguage{c}{\ALG@setc}%
-{%
+\algnewlanguage{c}%
+\alglanguage{c}%
%
% *** KEYWORDS ***
%
-\let\algorithmicbegin\{%
-\let\algorithmicend\}%
-\newcommand\textkeyword{\textbf}%
+\let\ALG@cbegin\{%
+\let\ALG@cend\}%
+\algnewcommand\algorithmicbegin{\ALG@cbegin}%
+\algnewcommand\algorithmicend{\ALG@cend}%
+\algnewcommand\textkeyword{\textbf}%
%
% *** DECLARED BLOCKS AND LOOPS ***
%
\algdef{SEi}{Begin}{End}{0cm}{\algorithmicbegin}{\algorithmicend}%
%
-\algdef{lS}{For}[3]{\textkeyword{for}\ (\(##1\); \(##2\); \(##3\))}%
-\algdef{lS}{While}[1]{\textkeyword{while}\ (\(##1\))}%
+\algdef{lS}{For}[3]{\textkeyword{for}\ (\(#1\); \(#2\); \(#3\))}%
+\algdef{lS}{While}[1]{\textkeyword{while}\ (\(#1\))}%
\algdef{lS}{Do}{\textkeyword{do}}%
\algdef{Lc}{Do}{While}{0}%
-\algdef{lS}{If}[1]{\textkeyword{if}\ (\(##1\))}%
+\algdef{lS}{If}[1]{\textkeyword{if}\ (\(#1\))}%
\algdef{lC}{If}{Else}{\textkeyword{else}}%
%
% *** OTHER DECLARATIONS ***
%
-\def\ALG@beginalgorithmic{\let\{\Begin\let\}\End}%
+%\def\ALG@beginalgorithmic{\let\{\Begin\let\}\End}%
%
-\newcommand\Function[3]{\State##1 ##32(##3)}%\textit{##2}(##3)}
-\newcommand\Return{\State\textkeyword{return}\space}%
+%\newcommand\Function[3]{\State#1 #32(#3)}%\textit{#2}(#3)}
+%\newcommand\Return{\State\textkeyword{return}\space}%
%
-\renewcommand\algorithmiccomment[1]{\hfill// ##1}%
-%
-%
-%
-}%
-%
-%
-%
-\let\ALG@setc\relax%
+\algrenewcomment[1]{\hfill// #1}%
%
diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algcompatible.sty b/Master/texmf-dist/tex/latex/algorithmicx/algcompatible.sty
new file mode 100644
index 00000000000..075f8512e27
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/algorithmicx/algcompatible.sty
@@ -0,0 +1,89 @@
+% ALGORITHMIC STYLE -- Released 27 APR 2005
+% for LaTeX version 2e
+%
+% Copyright Szasz Janos
+% E-mail szaszjanos@users.sourceforge.net
+% Based on Peter Williams's algorithmic.sty
+%
+\NeedsTeXFormat{LaTeX2e}%
+\ProvidesPackage{algcompatible}%
+\RequirePackage{ifthen}%
+\RequirePackage{algorithmicx}%
+\typeout{Document Style - algorithmic compatible environments for the `algorithmicx' style}%
+%
+\def\ALG@noend{f}%
+%
+\DeclareOption{noend}{\def\ALG@noend{t}}%
+\DeclareOption{end}{\def\ALG@noend{f}}%
+\ProcessOptions%
+%
+% *** DECLARATIONS ***
+%
+\algnewlanguage{algorithmic}%
+\alglanguage{algorithmic}%
+%
+% *** KEYWORDS ***
+%
+\algnewcommand\algorithmicend{\textbf{end}}
+\algnewcommand\algorithmicdo{\textbf{do}}
+\algnewcommand\algorithmicwhile{\textbf{while}}
+\algnewcommand\algorithmicfor{\textbf{for}}
+\algnewcommand\algorithmicforall{\textbf{for all}}
+\algnewcommand\algorithmicloop{\textbf{loop}}
+\algnewcommand\algorithmicrepeat{\textbf{repeat}}
+\algnewcommand\algorithmicuntil{\textbf{until}}
+\algnewcommand\algorithmicif{\textbf{if}}
+\algnewcommand\algorithmicthen{\textbf{then}}
+\algnewcommand\algorithmicelse{\textbf{else}}
+\algnewcommand\algorithmicrequire{\textbf{Require:}}
+\algnewcommand\algorithmicensure{\textbf{Ensure:}}
+%
+% *** DECLARED LOOPS ***
+%
+% lines...
+\let\ALG@loopmark\ALG@x@nomark%
+% default line and marks
+\def\ALG@startmark{nomark}%
+\def\ALG@blockline{noline}%
+\def\ALG@continuemark{nomark}%
+\def\ALG@endmark{nomark}%
+%
+\newcommand\ALG@compatcomm[1]{\ifthenelse{\equal{#1}{default}}{}{\ \algorithmiccomment{#1}}}%
+\algrenewcomment[1]{\{#1\}}%
+\algdef{SE}[WHILE]{WHILE}{ENDWHILE}%
+ [2][default]{\algorithmicwhile\ #2\ \algorithmicdo\ALG@compatcomm{#1}}%
+ {\algorithmicend\ \algorithmicwhile}%
+\algdef{SE}[FOR]{FOR}{ENDFOR}%
+ [2][default]{\algorithmicfor\ #2\ \algorithmicdo\ALG@compatcomm{#1}}%
+ {\algorithmicend\ \algorithmicfor}%
+\algdef{S}[FOR]{FORALL}%
+ [2][default]{\algorithmicforall\ #2\ \algorithmicdo\ALG@compatcomm{#1}}%
+\algdef{SE}[LOOP]{LOOP}{ENDLOOP}%
+ [1][default]{\algorithmicloop\ALG@compatcomm{#1}}%
+ {\algorithmicend\ \algorithmicloop}%
+\algdef{SE}[REPEAT]{REPEAT}{UNTIL}%
+ [1][default]{\algorithmicrepeat\ALG@compatcomm{#1}}%
+ [1]{\algorithmicuntil\ #1}%
+\algdef{SE}[IF]{IF}{ENDIF}%
+ [2][default]{\algorithmicif\ #2\ \algorithmicthen\ALG@compatcomm{#1}}%
+ {\algorithmicend\ \algorithmicif}%
+\algdef{C}[IF]{IF}{ELSIF}%
+ [2][default]{\algorithmicelse\ \algorithmicif\ #2\ \algorithmicthen\ALG@compatcomm{#1}}%
+\algdef{Ce}[ELSE]{IF}{ELSE}{ENDIF}%
+ [1][default]{\algorithmicelse\ALG@compatcomm{#1}}%
+\algnewcommand\REQUIRE{\item[\algorithmicrequire]}%
+\algnewcommand\ENSURE{\item[\algorithmicensure]}%
+\algnewcommand\STATE{\State}%
+\algnewcommand\STATEx{\Statex}%
+\algnewcommand\COMMENT{\Comment}%
+%
+\ifthenelse{\equal{\ALG@noend}{t}}%
+ {%
+ \algtext*{ENDWHILE}%
+ \algtext*{ENDFOR}%
+ \algtext*{ENDLOOP}%
+ \algtext*{ENDIF}%
+ }{}%
+%
+\algrenewcommand\algorithmicindent{1em}%
+%
diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algmatlab.sty b/Master/texmf-dist/tex/latex/algorithmicx/algmatlab.sty
index be33bf10b17..e274a7dfa99 100644
--- a/Master/texmf-dist/tex/latex/algorithmicx/algmatlab.sty
+++ b/Master/texmf-dist/tex/latex/algorithmicx/algmatlab.sty
@@ -1,4 +1,4 @@
-% Matlab ALGORITHMIC STYLE -- Released 18 MAR 2004
+% Matlab ALGORITHMIC STYLE -- Released 27 APR 2005
% for LaTeX version 2e
%
% Copyright Szasz Janos
@@ -10,14 +10,12 @@
\RequirePackage{algorithmicx}%
\typeout{Document Style - matlab environments for use with the `algorithmicx' style}%
%
-\def\ALG@setmatlab{t}%
-\DeclareOption{noset}{\def\ALG@setmatlab{}}%
-\DeclareOption{set}{\def\ALG@setmatlab{t}}%
\ProcessOptions%
%
% *** DECLARATIONS ***
%
\algnewlanguage{matlab}%
+\alglanguage{matlab}%
%
% *** KEYWORDS ***
%
@@ -31,7 +29,7 @@
\algdef{Se}[IF]{If}{End}[1]{\textkeyword{if}\ #1}%
\algdef{C}[IF]{IF}{ElseIf}[1]{\textkeyword{else}\textkeyword{if}\ #1}%
\algdef{Ce}[ELSE]{IF}{Else}{End}{\textkeyword{else}}%
-\algdef{LSxN}[FUNCTION]{Function}{End}{65535}%
+\algdef{LSxnE}[FUNCTION]{Function}{End}{65535}%
[2]{\textkeyword{function}\ \textfunc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}%
%
\algdef{SxE}[SWITCH]{Switch}{End}[1]{\let\Case\ALG@thecase\textkeyword{switch}\ #1}%
@@ -66,10 +64,5 @@
%
% *** OTHER DECLARATIONS ***
%
-\def\ALG@beginalgorithmic{\let\leftbr[\let\rightbr]\def\[{\textbf{\leftbr}}\def\]{\textbf{\rightbr}}}%
-%
-%
-%
-\ifthenelse{\equal{\ALG@setmatlab}{t}}{\alglanguage{matlab}}{}%
-\let\ALG@setmatlab\relax%
+\algrenewcommand\ALG@beginalgorithmic{\let\leftbr[\let\rightbr]\def\[{\textbf{\leftbr}}\def\]{\textbf{\rightbr}}}%
%
diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty b/Master/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty
index 0b681debab7..bfb7dabafe4 100644
--- a/Master/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty
+++ b/Master/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty
@@ -1,97 +1,88 @@
-% ALGORITHMIC STYLE -- Released 18 MAR 2004
+% ALGORITHMIC STYLE -- Released 27 APR 2005
% for LaTeX version 2e
%
% Copyright Szasz Janos
% E-mail szaszjanos@users.sourceforge.net
-% Based on Peter Williams's algorithmic.sty
%
%
% *** INITIALISING ***
%
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{algorithmicx}[2004/03/18 v1.1 Algorithmicx]
+\ProvidesPackage{algorithmicx}[2005/04/27 v1.2 Algorithmicx]
\RequirePackage{ifthen}
-\typeout{Document Style algorithmicx 1.1 - a greatly improved `algorithmic' style}
+\typeout{Document Style algorithmicx 1.2 - a greatly improved `algorithmic' style}
%
\newcounter{ALG@line}
\newcounter{ALG@rem}
+\newcounter{ALG@nested}
\newlength{\ALG@tlm}
-\newlength{\ALG@ctlm}
-\newlength{\algorithmicindent}
-\setlength{\algorithmicindent}{1.5em}
+\newlength{\ALG@thistlm}
+\newcounter{ALG@Lnr}% the number of defined languages
+\setcounter{ALG@Lnr}{0}
\newcounter{ALG@blocknr}% the number of defined blocks
\setcounter{ALG@blocknr}{0}
+\newcounter{ALG@storecount}% number of stored but not restored algorithmic environments
+\setcounter{ALG@storecount}{0}
\newcounter{ALG@tmpcounter}% only to decrement things
-\def\algorithmicnoindent{-\ALG@tlm}
-\def\algbackskipbegin{\hskip\ALG@ctlm}
-\def\algbackskip{\hskip\ALG@ctlm\hskip-\ALG@tlm}
-\def\algbackskipend{\hskip-\ALG@tlm}
+\newlength\ALG@tmplength%
+%\def\algorithmicnoindent{-\ALG@tlm}
+% \def\algbackskipbegin{\hskip\ALG@ctlm}
+%\def\algbackskip{\hskip-\ALG@thistlm}
+%\def\algbackskipend{\hskip-\ALG@tlm}
\def\ALG@defaultindent{\algorithmicindent}
%
+% conditional states
+%
+\def\ALG@newcondstate#1%
+ {%
+ \expandafter\edef\csname ALG@x@#1\endcsname%
+ {\expandafter\noexpand\csname @@ALG@x@#1\endcsname}%
+ }%
+\ALG@newcondstate{notext}%
+\ALG@newcondstate{default}%
+%
%
% *** ALGORITHMIC ***
%
%
-\newenvironment{ALG@g}[1]% a list for the iner loops
+\newcommand\ALG@beginblock[1]% #1 - indentation
{%
- \begin{list}%
- {\ALG@step}%
- {%
- \itemsep\z@%
- \itemindent\z@%
- \listparindent2em% the indent given to multiline lines...
- \rightmargin\z@%
- \topsep\z@%
- \partopsep\z@%
- \parskip\z@%
- \parsep\z@%
- \leftmargin#1%
- \ALG@ctlm#1%
- \addtolength{\ALG@tlm}{\leftmargin}%
- \labelsep\ALG@tlm%
- \addtolength{\labelsep}{0.5em}%
- }%
- \global\@newlistfalse% give no error, if the list is empty
+ \ALG@thistlm\ALG@tlm%
+ \addtolength\ALG@tlm{#1}%
+ \addtocounter{ALG@nested}{1}%
+ \setlength\ALG@tmplength{#1}%
+ \expandafter\edef\csname ALG@ind@\theALG@nested\endcsname{\the\ALG@tmplength}%
+ }%
+\newcommand\ALG@endblock%
+ {%
+ \addtolength\ALG@tlm{-\csname ALG@ind@\theALG@nested\endcsname}%
+ \addtocounter{ALG@nested}{-1}%
+ \ALG@thistlm\ALG@tlm%
}%
- {\end{list}}%
%
% algorithmic environment
%
-\let\ALG@beginalgorithmic\relax% for user overrides
-\let\ALG@endalgorithmic\relax% for user overrides
+\def\ALG@step%
+ {%
+ \addtocounter{ALG@line}{1}%
+ \addtocounter{ALG@rem}{1}%
+ \ifthenelse{\equal{\arabic{ALG@rem}}{\ALG@numberfreq}}%
+ {\setcounter{ALG@rem}{0}\alglinenumber{\arabic{ALG@line}}}%
+ {}%
+ }%
\newenvironment{algorithmic}[1][0]%
{%
+ \edef\ALG@numberfreq{#1}%
\def\@currentlabel{\theALG@line}%
- \newcommand{\ALG@step}%
- {%
- \addtocounter{ALG@line}{1}%
- \addtocounter{ALG@rem}{1}%
- \ifthenelse{\equal{\arabic{ALG@rem}}{#1}}%
- {\setcounter{ALG@rem}{0}{\footnotesize \arabic{ALG@line}:}}%
- {}%
- }%
%
\setcounter{ALG@line}{0}%
\setcounter{ALG@rem}{0}%
%
- \let\@listii\@listi%
- \let\@listiii\@listi%
- \let\@listiv\@listi%
- \let\@listv\@listi%
- \let\@listvi\@listi%
- \let\@listvii\@listi%
- \renewcommand{\@toodeep}{}%
+ \let\\\algbreak%
%
- \renewcommand{\\}% for multiline parameters !!! needs fix
- {%
- \item%
- \hskip\ALG@parindent%!!! not yet implemented
-% \hskip-\algorithmicindent%
- }%
- %
- \edef\ALG@currentitem{0}%
- \let\ALG@currentvalue\relax%
+ \expandafter\edef\csname ALG@currentblock@\theALG@nested\endcsname{0}%
+ \expandafter\let\csname ALG@currentlifetime@\theALG@nested\endcsname\relax%
%
\begin{list}%
{\ALG@step}%
@@ -99,23 +90,22 @@
\rightmargin\z@%
\itemsep\z@ \itemindent\z@ \listparindent2em%
\partopsep\z@ \parskip\z@ \parsep\z@%
- \labelsep 0.5em \topsep 0.0em%\skip 1.2em
+ \labelsep 0.5em \topsep 0.2em%\skip 1.2em
\ifthenelse{\equal{#1}{0}}%
{\labelwidth 0.5em}%
{\labelwidth 1.2em}%
\leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}% Ok. the perfect leftmargin :-))
- \ALG@tlm 0em%
- \ALG@ctlm\ALG@tlm%
+ \ALG@tlm\z@%
}%
+ \setcounter{ALG@nested}{0}%
\ALG@beginalgorithmic%
}%
{% end{algorithmic}
-% \global\@newlistfalse% protects against empty algorithms, not needed
% check if all blocks are closed
\ALG@closeloops%
- \ifnum0=\ALG@currentitem\relax%
+ \expandafter\ifnum\csname ALG@currentblock@\theALG@nested\endcsname=0\relax%
\else%
- \PackageError{algorithmicx}{Some blocks are not closed!!!}{Yes, you have some open blocks.}%
+ \PackageError{algorithmicx}{Some blocks are not closed!!!}{}%
\fi%
\ALG@endalgorithmic%
\end{list}%
@@ -125,107 +115,126 @@
% *** Functional core ***
%
%
-\def\ALG@makeentitie#1% execute the entitie (#1)
+\def\ALG@makeentity#1% execute the entity (#1)
{%
- \expandafter\ifx\csname ALG@b@#1@0\endcsname\relax%
- \ALG@makenobegin{#1}% this entitie ends or continues blocks
+ \def\ALG@thisentity{#1}%
+ \expandafter\ifx\csname ALG@b@\ALG@L @#1@0\endcsname\relax%
+ \let\ALG@makenobeginrepeat\ALG@makenobegin\ALG@makenobeginrepeat% this entitie ends or continues blocks
\else%
- \ALG@makebegin{#1}% this entitie can open blocks
+ \let\ALG@makebeginrepeat\ALG@makebegin\ALG@makebeginrepeat% this entitie can open blocks
\fi%
\ALG@entitiecommand%
}%
%
-\def\ALG@makebegin#1% executes an entitie (#1) that can open blocks
+\def\ALG@makebegin% executes an entitie that can open blocks
{%
- \ifx\ALG@currentvalue\relax%
- \ALG@openblock{0}{#1}% in infinite block I can open my block
+ \expandafter\let\expandafter\ALG@thislifetime\csname ALG@currentlifetime@\theALG@nested\endcsname%
+ \ifx\ALG@thislifetime\relax%
+ \let\ALG@makebeginrepeat\ALG@doentity% in infinite block I can open my block
\else%
- \ifnum0<\ALG@currentvalue\relax%
- \ifnum\ALG@currentvalue>65534\else%
- \setcounter{ALG@tmpcounter}{\ALG@currentvalue}% the block has 'space' for another included block
+ \ifnum\ALG@thislifetime>0\relax%
+ \ifnum\ALG@thislifetime>65534\else%
+ \setcounter{ALG@tmpcounter}{\ALG@thislifetime}% the block has 'space' for another included block
\addtocounter{ALG@tmpcounter}{-1}%
- \edef\ALG@currentvalue{\arabic{ALG@tmpcounter}}%
+ \expandafter\edef\csname ALG@currentlifetime@\theALG@nested\endcsname{\arabic{ALG@tmpcounter}}%
\fi%
- \ALG@openblock{0}{#1}%
+ \let\ALG@makebeginrepeat\ALG@doentity%
\else% the block needs to be closed
- \expandafter\ifx\csname ALG@b@#1@\ALG@currentitem\endcsname\relax%
- \end{ALG@g}% I can not close this block, continue after it is closed by force
- \ALG@makebegin{#1}%
+ \expandafter\ifx\csname ALG@b@\ALG@L @\ALG@thisentity @\csname ALG@currentblock@\theALG@nested\endcsname\endcsname\relax%
+ \ALG@closebyforce% I can not close this block, continue after it is closed by force
+% \ALG@makebegin%
\else%
- \ALG@changeblock{#1}% close this block
+ % the block would be closed automatically, but this entitie can close it, so let's do it with the entity
+ \let\ALG@makebeginrepeat\ALG@doentity%
\fi%
\fi%
\fi%
+ \ALG@makebeginrepeat%
}%
%
-\def\ALG@makenobegin#1% executes an entitie (#1) that can not open blocks
+\def\ALG@makenobegin% executes an entitie that can not open blocks
{%
- \ifx\ALG@currentvalue\relax%
- \ALG@changeblock{#1}% an infinite block must be broken
+ \expandafter\ifx\csname ALG@currentlifetime@\theALG@nested\endcsname\relax%
+ \let\ALG@makenobeginrepeat\ALG@doentity% an infinite block must be broken
\else%
- \expandafter\ifx\csname ALG@b@#1@\ALG@currentitem\endcsname\relax%
- \end{ALG@g}% the block must be ended by force,
- \ALG@makenobegin{#1}% the command still runs
+ \expandafter\ifx\csname ALG@b@\ALG@L @\ALG@thisentity @\csname ALG@currentblock@\theALG@nested\endcsname\endcsname\relax%
+ \ALG@closebyforce% the block must be ended by force,
\else%
- \ALG@changeblock{#1}% i can continue / end this block, let's do it
+ \let\ALG@makenobeginrepeat\ALG@doentity% I can continue / end this block, let's do it
\fi%
\fi%
+ \ALG@makenobeginrepeat%
}%
%
-\def\ALG@ifnotrelax#1#2#3% #1 - the number of the closed block, #2 - the entitie, #3 - things to be done
+\def\ALG@dobegin%
{%
- \edef\ALG@tmpcmd{\expandafter\noexpand\csname algorithmic#2\endcsname}%
- \expandafter\ifx\csname ALG@t@#1@#2\endcsname\relax\else%
- \expandafter\ifx\csname ALG@t@#1@#2\endcsname\ALG@tmpcmd%
- \expandafter\ifx\csname algorithmic#2\endcsname\relax\else%
- #3%
- \fi%
- \else%
- #3%
- \fi%
+ \ALG@beginblock{\csname ALG@i@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname}%
+ \expandafter\edef\csname ALG@currentblock@\theALG@nested\endcsname{\csname ALG@b@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname}%
+ \expandafter\ifx\csname ALG@c@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname\relax%
+ \expandafter\let\csname ALG@currentlifetime@\theALG@nested\endcsname\relax%
+ \else%
+ \expandafter\edef\csname ALG@currentlifetime@\theALG@nested\endcsname{\csname ALG@c@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname}%
\fi%
}%
%
-\def\ALG@closeblock#1#2% #1 - the number of the closed block, #2 - the entitie
+\def\ALG@doend%
{%
- \ALG@ifnotrelax{#1}{#2}{\item}%
- \expandafter\let\expandafter\ALG@entitiecommand\csname ALG@t@#1@#2\endcsname%
+ \ALG@endblock%
}%
%
-\def\ALG@openblock#1#2% #1 - the number of the closed block, #2 - the entitie
+\def\ALG@doentity% the number of the closed block, the entitie
{%
- \item[]%
- \begin{ALG@g}{\csname ALG@i@#2@#1\endcsname}%
- \edef\ALG@currentitem{\csname ALG@b@#2@#1\endcsname}%
- \expandafter\ifx\csname ALG@c@#2@#1\endcsname\relax%
- \let\ALG@currentvalue\relax%
+ \edef\ALG@thisblock{\csname ALG@currentblock@\theALG@nested\endcsname}%
+ \expandafter\ifx\csname ALG@b@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname\relax%
+ \def\ALG@thisblock{0}%
+ \fi%
+ \ALG@getentitytext%
+ \ifnum\ALG@thisblock=0\else\ALG@doend\fi%
+ \ifx\ALG@text\ALG@x@notext%
+ \item[]\nointerlineskip%\vskip-\prevdepth\nointerlineskip% bug: if there are no text and no lines, then this is wrong
\else%
- \edef\ALG@currentvalue{\csname ALG@c@#2@#1\endcsname}%
+ \item%
\fi%
- \ALG@ifnotrelax{#1}{#2}%
- {%
- \item\hskip-\ALG@ctlm% default spacing
- }%
- \expandafter\let\expandafter\ALG@entitiecommand\csname ALG@t@#1@#2\endcsname%
+ \noindent\hskip\ALG@tlm%
+ \expandafter\ifnum0=\csname ALG@b@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname\else%
+ \ALG@dobegin%
+ \fi%
+ \def\ALG@entitiecommand{\ALG@displayentity}%
}%
%
-\def\ALG@changeblock#1% #1 - the entitie
+\def\ALG@getentitytext%
{%
- \setcounter{ALG@tmpcounter}{\ALG@currentitem}%
- \expandafter\ifnum0=\csname ALG@b@#1@\ALG@currentitem\endcsname\relax%
- \end{ALG@g}%
- \ALG@closeblock{\arabic{ALG@tmpcounter}}{#1}%
- \else%
- \end{ALG@g}%
- \ALG@openblock{\arabic{ALG@tmpcounter}}{#1}%
+ \expandafter\let\expandafter\ALG@text\csname ALG@t@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname%
+ \ifx\ALG@text\ALG@x@default%
+ % block specific - default
+ \expandafter\let\expandafter\ALG@text\csname ALG@t@\ALG@L @\ALG@thisentity\endcsname%
+ \ifx\ALG@text\ALG@x@default%
+ % block specific - default, language specific - default
+ \def\ALG@text{\ALG@deftext{\ALG@thisentity}}%
+ \fi%
\fi%
}%
%
+\def\ALG@deftext{\csname ALG@deftext@\ALG@L\endcsname}%
+%
+\def\ALG@displayentity%
+ {%
+ \ifx\ALG@text\ALG@x@notext%
+ \let\ALG@text\relax%
+ \fi
+ \ALG@text%
+ }%
+%
+\def\ALG@closebyforce%
+ {%
+ \ALG@endblock%
+ }%
+%
\def\ALG@closeloops% closes all finite blocks
{%
- \ifx\ALG@currentvalue\relax%
+ \expandafter\ifx\csname ALG@currentlifetime@\theALG@nested\endcsname\relax%
\else% only if it is finite
- \end{ALG@g}% the block must be ended by force,
+ \ALG@closebyforce% the block must be ended by force,
\ALG@closeloops% the command still runs
\fi%
}%
@@ -241,40 +250,33 @@
%
\def\ALG@createblock#1% create the block #1, if it does not exists
{%
- \@ifundefined{ALG@bl@#1}% needs to be created?
+ \@ifundefined{ALG@bl@\ALG@Ld @#1}% needs to be created?
{%
\addtocounter{ALG@blocknr}{1}% increment the block counter
- \expandafter\edef\csname ALG@bl@#1\endcsname{\arabic{ALG@blocknr}}% set the block number
+ \expandafter\edef\csname ALG@bl@\ALG@Ld @#1\endcsname{\arabic{ALG@blocknr}}% set the block number
}%
{}%
}%
%
% Get the block number
%
-\def\ALG@getblocknumber#1{\csname ALG@bl@#1\endcsname}%
+\def\ALG@getblocknumber#1{\csname ALG@bl@\ALG@Ld @#1\endcsname}%
%
% Create an entitie
%
\def\ALG@createentitie#1% create the entitie #1, if it does not exists
{%
- \@ifundefined{#1}% needs to be created?
+ \expandafter\ALG@edefcmd\csname #1\endcsname{\noexpand\ALG@makeentity{#1}}%
+ \@ifundefined{ALG@t@\ALG@Ld @#1}% the entity text is defined in this language?
{%
- \expandafter\edef\csname #1\endcsname{\noexpand\ALG@makeentitie{#1}}%
- \@ifundefined{algorithmic#1}% \algorithmic#1 exists?
- {%
- \expandafter\edef\csname algorithmic#1\endcsname{\noexpand\textbf{#1}}%
- }%
- {}%
+ \expandafter\let\csname ALG@t@\ALG@Ld @#1\endcsname\ALG@x@default%
}%
{}%
}%
%
-\def\ALG@createtext#1#2% #1 = closed block; #2 = entitie; creates \ALG@t@#1@#2
+\def\ALG@createtext#1#2% #1 = closed block; #2 = entitie; creates \ALG@t@#2@#1
{%
- \expandafter\edef\csname ALG@t@#1@#2\endcsname%
- {%
- \expandafter\noexpand\csname algorithmic#2\endcsname%
- }%
+ \expandafter\let\csname ALG@t@\ALG@Ld @#2@#1\endcsname\ALG@x@default%
}%
%
% End and Continue block
@@ -286,31 +288,27 @@
\ALG@createentitie{#3}% create the entitie
\ALG@createblock{#2}% create the old block, if needed
\ifthenelse{\equal{#1}{}}% whe need to open a new block?
- {\expandafter\edef\csname ALG@b@#3@\ALG@getblocknumber{#2}\endcsname{0}}% no, just close the old one
+ {\expandafter\edef\csname ALG@b@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{0}}% no, just close the old one
{% yes,
\ALG@createblock{#1}% create the block
- \expandafter\edef\csname ALG@b@#3@\ALG@getblocknumber{#2}\endcsname{\ALG@getblocknumber{#1}}% ending the old block opens a new one
+ \expandafter\edef\csname ALG@b@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{\ALG@getblocknumber{#1}}% ending the old block opens a new one
\ifthenelse{\equal{#4}{}}% infinite or finite credits?
- {\expandafter\let\csname ALG@c@#3@\ALG@getblocknumber{#2}\endcsname\relax}% infinite credits
- {\expandafter\edef\csname ALG@c@#3@\ALG@getblocknumber{#2}\endcsname{#4}}% finite credits
+ {\expandafter\let\csname ALG@c@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname\relax}% infinite credits
+ {\expandafter\edef\csname ALG@c@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{#4}}% finite credits
\ifthenelse{\equal{#5}{}}% default or specified indentation
- {\expandafter\let\csname ALG@i@#3@\ALG@getblocknumber{#2}\endcsname\ALG@defaultindent}% default indentation
- {\expandafter\edef\csname ALG@i@#3@\ALG@getblocknumber{#2}\endcsname{#5}}% indentation is specified
+ {\expandafter\let\csname ALG@i@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname\ALG@defaultindent}% default indentation
+ {\expandafter\edef\csname ALG@i@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{#5}}% indentation is specified
}%
\ALG@createtext{\ALG@getblocknumber{#2}}{#3}%
}%
}%
%
-%
-% *** NEW VERSION ***
-%
-%
-% used macros
+% macros used in declarations
%
\def\ALG@p@endtext@E{\algrenewtext{\ALG@v@end}}%
\def\ALG@p@endtext@xE{\algrenewtext[\ALG@v@newblock]{\ALG@v@end}}%
-\def\ALG@p@endtext@N{\algnotext{\ALG@v@end}}%
-\def\ALG@p@endtext@xN{\algnotext[\ALG@v@newblock]{\ALG@v@end}}%
+\def\ALG@p@endtext@nE{\algnotext{\ALG@v@end}}%
+\def\ALG@p@endtext@xnE{\algnotext[\ALG@v@newblock]{\ALG@v@end}}%
\def\ALG@p@endtext@{}%
% starttext defines are more compex -- care must be taken for the optional parameters
\def\ALG@p@starttext@S{\ALG@p@s@process{\algrenewtext}}%
@@ -334,6 +332,9 @@
\def\ALG@p@s@param#1#2#3{#1{\ALG@v@start}[#2]{#3}\ALG@p@endtext}%
\def\ALG@p@s@defparam#1#2#3#4{#1{\ALG@v@start}[#2][#3]{#4}\ALG@p@endtext}%
% the rest of the crew
+\def\ALG@p@starttext@nS{\algnotext{\ALG@v@start}\ALG@p@endtext}%
+\def\ALG@p@starttext@nC{\algnotext{\ALG@v@start}\ALG@p@endtext}%
+\def\ALG@p@starttext@xnC{\algnotext[\ALG@v@oldblock]{\ALG@v@start}\ALG@p@endtext}%
\def\ALG@p@starttext@{\ALG@p@endtext}%
\def\ALG@p@indent@def#1{\def\ALG@v@indent{#1}\ALG@p@setup}%
\def\ALG@p@indent@{\def\ALG@v@indent{}\ALG@p@setup}%
@@ -381,40 +382,91 @@
\def\ALG@p@onS{\ALG@p@def{start}\ALG@p@def[S]{starttext}}%
\def\ALG@p@onc{\ALG@p@def{oldblock}\ALG@p@def{start}}%
\def\ALG@p@onC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[C]{starttext}}%
-\def\ALG@p@onxC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[xC]{starttext}}%
\def\ALG@p@one{\ALG@p@def{end}}%
\def\ALG@p@onE{\ALG@p@def{end}\ALG@p@def[E]{endtext}}%
+\def\ALG@p@onxC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[xC]{starttext}}%
\def\ALG@p@onxE{\ALG@p@def{end}\ALG@p@def[xE]{endtext}}%
-\def\ALG@p@onN{\ALG@p@def{end}\ALG@p@def[N]{endtext}}%
-\def\ALG@p@onxN{\ALG@p@def{end}\ALG@p@def[xN]{endtext}}%
+\def\ALG@p@onnS{\ALG@p@def{start}\ALG@p@def[nS]{starttext}}%
+\def\ALG@p@onnC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[nC]{starttext}}%
+\def\ALG@p@onnE{\ALG@p@def{end}\ALG@p@def[nE]{endtext}}%
+\def\ALG@p@onxnC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[xnC]{starttext}}%
+\def\ALG@p@onxnE{\ALG@p@def{end}\ALG@p@def[xnE]{endtext}}%
\def\ALG@p@onb{\def\ALG@v@credits{}}%
\def\ALG@p@onl{\def\ALG@v@credits{1}}%
\def\ALG@p@onL{\ALG@p@def{credits}}%
\def\ALG@p@oni{\ALG@p@def{indent}}%
-\expandafter\def\csname ALG@p@on]\endcsname{\let\ALG@p@rec\relax}%
-%
-% param processing
%
-\def\ALG@p@process#1%
+\def\ALG@p@main#1%
{%
- \@ifundefined{ALG@p@on#1}%
- {\typeout{algdef: Ignoring unknown token #1}}%
- {\csname ALG@p@on#1\endcsname}%
- \ALG@p@rec%
- }%
-%
-\def\ALG@p@onx{\let\ALG@p@rec\ALG@p@processx}%
-%
-\def\ALG@p@processx#1%
- {%
- \@ifundefined{ALG@p@onx#1}%
+ \@ifundefined{ALG@ps@\ALG@p@state @#1}%
+ {%
+ \csname ALG@ps@\ALG@p@state @other\endcsname{#1}%
+ }%
{%
- \typeout{algdef: Ignoring sole x}%
- \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@process\ALG@p@process#1}%
+ \csname ALG@ps@\ALG@p@state @#1\endcsname%
}%
- {\csname ALG@p@onx#1\endcsname\let\ALG@p@rec\ALG@p@process}%
\ALG@p@rec%
}%
+% STATE : <<starting state>>
+\expandafter\def\csname ALG@ps@@]\endcsname{\let\ALG@p@rec\relax}%
+\def\ALG@ps@@s{\ALG@p@ons}%
+\def\ALG@ps@@S{\ALG@p@onS}%
+\def\ALG@ps@@c{\ALG@p@onc}%
+\def\ALG@ps@@C{\ALG@p@onC}%
+\def\ALG@ps@@e{\ALG@p@one}%
+\def\ALG@ps@@E{\ALG@p@onE}%
+\def\ALG@ps@@N{\typeout{algdef: 'N' obsoloted, use 'nE'.}\ALG@p@onnE}%
+\def\ALG@ps@@b{\ALG@p@onb}%
+\def\ALG@ps@@l{\ALG@p@onl}%
+\def\ALG@ps@@L{\ALG@p@onL}%
+\def\ALG@ps@@i{\ALG@p@oni}%
+\def\ALG@ps@@x{\def\ALG@p@state{x}}%
+\def\ALG@ps@@n{\def\ALG@p@state{n}}%
+\def\ALG@ps@@other#1{\typeout{algdef: Ignoring unknown token #1}}%
+% STATE : x
+\def\ALG@ps@x@C{\def\ALG@p@state{}\ALG@p@onxC}%
+\def\ALG@ps@x@E{\def\ALG@p@state{}\ALG@p@onxE}%
+\def\ALG@ps@x@N{\def\ALG@p@state{}\typeout{algdef: 'xN' obsoloted, use 'xnE'.}\ALG@p@onxnE}%
+\def\ALG@ps@x@n{\def\ALG@p@state{xn}}%
+\def\ALG@ps@x@other#1%
+ {%
+ \typeout{algdef: Ignoring 'x' before '#1'.}%
+ \def\ALG@p@state{}%
+ \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}%
+ }%
+% STATE : n
+\def\ALG@ps@n@S{\def\ALG@p@state{}\ALG@p@onnS}%
+\def\ALG@ps@n@C{\def\ALG@p@state{}\ALG@p@onnC}%
+\def\ALG@ps@n@E{\def\ALG@p@state{}\ALG@p@onnE}%
+\def\ALG@ps@n@x{\def\ALG@p@state{nx}}%
+\def\ALG@ps@n@other#1%
+ {%
+ \typeout{algdef: Ignoring 'n' before '#1'.}%
+ \def\ALG@p@state{}%
+ \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}%
+ }%
+% STATE : xn
+\def\ALG@ps@xn@C{\def\ALG@p@state{}\ALG@p@onxnC}%
+\def\ALG@ps@xn@E{\def\ALG@p@state{}\ALG@p@onxnE}%
+\def\ALG@ps@xn@x{\typeout{algdef: Ignoring 'x' after 'xn'.}}%
+\def\ALG@ps@xn@n{\typeout{algdef: Ignoring 'n' after 'xn'.}}%
+\def\ALG@ps@xn@other#1%
+ {%
+ \typeout{algdef: Ignoring 'xn' before '#1'.}%
+ \def\ALG@p@state{}%
+ \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}%
+ }%
+% STATE : nx
+\def\ALG@ps@nx@C{\def\ALG@p@state{}\ALG@p@onxnC}%
+\def\ALG@ps@nx@E{\def\ALG@p@state{}\ALG@p@onxnE}%
+\def\ALG@ps@nx@x{\typeout{algdef: Ignoring 'x' after 'nx'.}}%
+\def\ALG@ps@nx@n{\typeout{algdef: Ignoring 'n' after 'nx'.}}%
+\def\ALG@ps@nx@other#1%
+ {%
+ \typeout{algdef: Ignoring 'nx' before '#1'.}%
+ \def\ALG@p@state{}%
+ \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}%
+ }%
%
%
% *** User level block/entitie commands ***
@@ -433,7 +485,8 @@
\ALG@p@undef{indent}%
\ALG@p@undef{starttext}%
\ALG@p@undef{endtext}%
- \let\ALG@p@rec\ALG@p@process%
+ \def\ALG@p@state{}%
+ \let\ALG@p@rec\ALG@p@main%
\ALG@p@rec#1]%
\ALG@p@newblock%
}%
@@ -465,70 +518,269 @@
{%
\ifthenelse{\equal{#2}{}}{}%
{%
- \algnotext[#1]{#2}%
\ifthenelse{\equal{#1}{}}%
{%
- \expandafter\newcommand\csname algorithmic#2\endcsname%
+ \expandafter\let\csname ALG@t@\ALG@Ld @#2\endcsname\relax%
+ \expandafter\newcommand\csname ALG@t@\ALG@Ld @#2\endcsname%
}%
{%
- \expandafter\newcommand\csname ALG@t@\ALG@getblocknumber{#1}@#2\endcsname%
+ \expandafter\let\csname ALG@t@\ALG@Ld @#2@\ALG@getblocknumber{#1}\endcsname\relax%
+ \expandafter\newcommand\csname ALG@t@\ALG@Ld @#2@\ALG@getblocknumber{#1}\endcsname%
}%
}%
}%
%
-\newcommand\algnotext[2][]% [block]{entity}
+\def\ALG@letentitytext#1#2% [block]{entity}
{%
\ifthenelse{\equal{#2}{}}{}%
{%
\ifthenelse{\equal{#1}{}}%
{%
- \expandafter\let\csname algorithmic#2\endcsname\relax%
+ \expandafter\let\csname ALG@t@\ALG@Ld @#2\endcsname%
}%
{%
- \expandafter\let\csname ALG@t@\ALG@getblocknumber{#1}@#2\endcsname\relax%
+ \expandafter\let\csname ALG@t@\ALG@Ld @#2@\ALG@getblocknumber{#1}\endcsname%
}%
}%
}%
%
+\newcommand\algnotext[2][]% [block]{entity}
+ {%
+ \ALG@letentitytext{#1}{#2}\ALG@x@notext%
+ }%
+%
\newcommand\algdefaulttext[2][]% [block]{entity}
{%
- \ifthenelse{\equal{#1}{}}%
+ \ALG@letentitytext{#1}{#2}\ALG@x@default%
+ }%
+%
+\def\ALG@notext*{\algnotext}%
+\def\algtext{\@ifnextchar{*}{\ALG@notext}{\algrenewtext}}%
+%
+%
+% *** LANGUAGE SWITCHING ***
+%
+%
+%
+\newcommand\algnewlanguage[1]%
+ {%
+ \@ifundefined{ALG@L@#1}% needs to be created?
+ {}%
{%
- \expandafter\def\csname algorithmic#2\endcsname{\textbf{#2}}%
+ \PackageError{algorithmicx}{Language '#1' already defined!}{}%
}%
+ \addtocounter{ALG@Lnr}{1}% increment the language counter
+ \expandafter\edef\csname ALG@L@#1\endcsname{\arabic{ALG@Lnr}}% set the language number
+ \edef\ALG@Ld{\csname ALG@L@#1\endcsname}%
+ \expandafter\let\csname ALG@bl@\ALG@Ld @\endcsname\ALG@bl@% the BIG block
+ \expandafter\let\csname ALG@bl@\ALG@Ld @@\endcsname\ALG@bl@% the BIG block
+ \algdef{SL}[STATE]{State}{0}{}%
+ \expandafter\def\csname ALG@deftext@\ALG@Ld\endcsname{\textbf}%
+ \algnewcommand\algorithmiccomment[1]{\hfill\(\triangleright\) ##1}%
+ \algnewcommand\algorithmicindent{1.5em}%
+ \algnewcommand\alglinenumber[1]{\footnotesize ##1:}%
+ \algnewcommand\ALG@beginalgorithmic\relax% for user overrides
+ \algnewcommand\ALG@endalgorithmic\relax% for user overrides
+ }%
+%
+\newcommand\algsetlanguage[1]%
+ {%
+ \@ifundefined{ALG@L@#1}% needs to be created?
{%
- \ALG@createtext{\ALG@getblocknumber{#1}}{#2}%
- }%
+ \PackageError{algorithmicx}{Language '#1' is not yet defined!}{}%
+ }{}%
+ \edef\ALG@L{\csname ALG@L@#1\endcsname}%
+ }%
+%
+\newcommand\algdeflanguage[1]%
+ {%
+ \@ifundefined{ALG@L@#1}% needs to be created?
+ {%
+ \PackageError{algorithmicx}{Language '#1' is not yet defined!}{}%
+ }{}%
+ \edef\ALG@Ld{\csname ALG@L@#1\endcsname}%
+ }%
+%
+\newcommand\alglanguage[1]%
+ {%
+ \algdeflanguage{#1}%
+ \algsetlanguage{#1}%
}%
%
-\def\ALG@notext*{\algnotext}%
-\def\algtext{\@ifnextchar{*}{\ALG@notext}{\algrenewtext}}%
+%
+% *** Defining language dependent stuff ***
+%
+%
+\def\ALG@eatoneparam#1{}%
+\def\ALG@defbasecmd#1#2%
+ {%
+ \edef\ALG@tmp{\expandafter\ALG@eatoneparam\string #2}%
+ \@ifundefined\ALG@tmp{\edef #2{\noexpand\csname ALG@cmd@\noexpand\ALG@L @\ALG@tmp\endcsname}}{}%
+ \expandafter#1\csname ALG@cmd@\ALG@Ld @\ALG@tmp\endcsname%
+ }%
+\newcommand\algnewcommand{\ALG@defbasecmd\newcommand}%
+\newcommand\algrenewcommand{\ALG@defbasecmd\renewcommand}%
+\def\ALG@letcmd{\ALG@defbasecmd\let}%
+\def\ALG@defcmd{\ALG@defbasecmd\def}%
+\def\ALG@edefcmd{\ALG@defbasecmd\edef}%
%
%
% *** OTHERS ***
%
%
-\algdef{SL}[STATE]{State}{0}{}%
\def\BState{\State \algbackskip}%
\def\Statex{\item[]}% an empty line
-\newcommand\algorithmiccomment[1]{\hfill\(\triangleright\) #1}%
+\newcommand\algrenewcomment{\algrenewcommand\algorithmiccomment}%
\def\Comment{\algorithmiccomment}%
\def\algref#1#2{\ref{#1}.\ref{#2}}%
+\algnewlanguage{default}%
+\algsetlanguage{default}%
%
%
-% *** LANGUAGE SWITCHING ***
+% *** Line breaks ***
%
%
-\newcommand\ALG@deflanguage[3]%#1#2#3%
+\newcommand\algbreak% for multiline parameters !!! needs fix
{%
- \ifthenelse{\equal{#2}{}}%
- {\expandafter\def\csname ALG@setlanguage@#1\endcsname{#3}}%
- {\def\ALG@tmp{\let\ALG@tmp\relax#3}\ALG@tmp}%
+ \item%
+% \hskip\ALG@parindent%!!! not yet implemented
+% \hskip-\algorithmicindent%
+ }%
+%
+\def\ALG@noputindents%
+ {%
+ \hskip\ALG@tlm%
}%
%
-\def\algsetlanguage#1%
+%
+% *** algorithm store / restore ***
+%
+%
+% store
+%
+\ALG@newcondstate{mustrestore}%
+\def\algstore%
{%
- \csname ALG@setlanguage@#1\endcsname%
+ \renewcommand\ALG@beginblock%
+ {%
+ \PackageError{algorithmicx}{The environment must be closed after store!}{}%
+ }%
+ \@ifstar{\ALG@starstore}{\ALG@nostarstore}%
+ }%
+\def\ALG@nostarstore#1% save all infos into #1 and terminate the algorithmic block
+ {%
+ \addtocounter{ALG@storecount}{1}%
+ \expandafter\global\expandafter\let\csname ALG@save@mustrestore@#1\endcsname\ALG@x@mustrestore%
+ \ALG@starstore{#1}%
+ }%
+\def\ALG@starstore#1%
+ {%
+ \@ifundefined{ALG@save@line@#1}{}%
+ {\PackageError{algorithmicx}{This save name '#1' is already used!}{}}%
+ \def\ALG@savename{#1}%
+ \expandafter\xdef\csname ALG@save@totalnr@\ALG@savename\endcsname{\theALG@nested}%
+ \expandafter\xdef\csname ALG@save@line@\ALG@savename\endcsname{\theALG@line}%
+ \expandafter\xdef\csname ALG@save@numberfreq@\ALG@savename\endcsname{\ALG@numberfreq}%
+ \expandafter\xdef\csname ALG@save@rem@\ALG@savename\endcsname{\theALG@rem}%
+ \let\ALG@storerepeat\ALG@store%
+ \ALG@storerepeat%
+ }%
+\def\ALG@store% simply terminate all open blocks
+ {%
+ \ifnum\theALG@nested=0\let\ALG@storerepeat\relax%
+ \else%
+ \expandafter\xdef\csname ALG@save@currentblock@\ALG@savename @\theALG@nested\endcsname%
+ {\csname ALG@currentblock@\theALG@nested\endcsname}%
+ \expandafter\ifx\csname ALG@currentlifetime@\theALG@nested\endcsname\relax%
+ \else%
+ \expandafter\xdef\csname ALG@save@currentlifetime@\ALG@savename @\theALG@nested\endcsname%
+ {\csname ALG@currentlifetime@\theALG@nested\endcsname}%
+ \fi%
+ \expandafter\xdef\csname ALG@save@ind@\ALG@savename @\theALG@nested\endcsname%
+ {\csname ALG@ind@\theALG@nested\endcsname}%
+ \ALG@closebyforce%
+ \fi%
+ \ALG@storerepeat%
}%
%
+% restore
%
+\def\algrestore%
+ {%
+ \@ifstar{\ALG@starrestore}{\ALG@nostarrestore}%
+ }%
+\def\ALG@starrestore%
+ {%
+ \let\ALG@restorerem\relax%
+ \let\ALG@restorereprem\relax%
+ \ALG@restoremain%
+ }%
+\def\ALG@nostarrestore%
+ {%
+ \let\ALG@restorerem\ALG@restoreremovesave%
+ \let\ALG@restorereprem\ALG@restorerepremovesave%
+ \ALG@restoremain%
+ }%
+\def\ALG@restoreremovesave%
+ {%
+ \expandafter\global\expandafter\let\csname ALG@save@totalnr@\ALG@savename\endcsname\relax%
+ \expandafter\global\expandafter\let\csname ALG@save@line@\ALG@savename\endcsname\relax%
+ \expandafter\global\expandafter\let\csname ALG@save@rem@\ALG@savename\endcsname\relax%
+ \expandafter\global\expandafter\let\csname ALG@save@totalnr@\ALG@savename\endcsname\relax%
+ \expandafter\global\expandafter\let\csname ALG@save@numberfreq@\ALG@savename\endcsname\relax%
+ }%
+\def\ALG@restorerepremovesave%
+ {%
+ \expandafter\global\expandafter\let\csname ALG@save@currentblock@\ALG@savename @\theALG@tmpcounter\endcsname\relax%
+ \expandafter\global\expandafter\let\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname\relax%
+ \expandafter\global\expandafter\let\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname\relax%
+ \expandafter\global\expandafter\let\csname ALG@save@ind@\ALG@savename @\theALG@tmpcounter\endcsname\relax%
+ }%
+\def\ALG@restoremain#1% restore all infos from #1 in an open algorithmic block
+ {%
+ \ifnum\theALG@line=0%
+ \else\PackageError{algorithmicx}{Restore might be used only at the beginning of the environment!}{}%
+ \fi%
+ \def\ALG@savename{#1}%
+ \expandafter\ifx\csname ALG@save@totalnr@\ALG@savename\endcsname\relax%
+ \PackageError{algorithmicx}{Save '\ALG@savename'\space not defined!!!}{}%
+ \fi%
+ \@ifundefined{ALG@save@mustrestore@\ALG@savename}{}%
+ {%
+ \addtocounter{ALG@storecount}{-1}%
+ \expandafter\global\expandafter\let\csname ALG@save@mustrestore@\ALG@savename\endcsname\relax%
+ }%
+ \setcounter{ALG@line}{\csname ALG@save@line@\ALG@savename\endcsname}%
+ \edef\ALG@numberfreq{\csname ALG@save@numberfreq@\ALG@savename\endcsname}%
+ \setcounter{ALG@rem}{\csname ALG@save@rem@\ALG@savename\endcsname}%
+ \setcounter{ALG@tmpcounter}{\csname ALG@save@totalnr@\ALG@savename\endcsname}%
+ \setcounter{ALG@nested}{0}%
+ \ALG@restorerem%
+ \let\ALG@restorerepeat\ALG@restore%
+ \ALG@restorerepeat%
+ }%
+\def\ALG@restore%
+ {%
+ \ifnum\theALG@tmpcounter>0%
+ \expandafter\edef\csname ALG@currentblock@\theALG@tmpcounter\endcsname%
+ {\csname ALG@save@currentblock@\ALG@savename @\theALG@tmpcounter\endcsname}%
+ \expandafter\ifx\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname\relax%
+ \expandafter\let\csname ALG@currentlifetime@\theALG@tmpcounter\endcsname\relax%
+ \else%
+ \expandafter\edef\csname ALG@currentlifetime@\theALG@tmpcounter\endcsname%
+ {\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname}%
+ \fi%
+ %
+ \ALG@beginblock{\csname ALG@save@ind@\ALG@savename @\theALG@tmpcounter\endcsname}%
+ \ALG@restorereprem%
+ \addtocounter{ALG@tmpcounter}{-1}%
+ \else\let\ALG@restorerepeat\relax%
+ \fi%
+ \ALG@restorerepeat%
+ }%
+\AtEndDocument%
+ {%
+ \ifnum\theALG@storecount>0\relax%
+ \PackageError{algorithmicx}{Some stored algorithms are not restored!}{}%
+ \fi%
+ }%
diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algpascal.sty b/Master/texmf-dist/tex/latex/algorithmicx/algpascal.sty
index df4c81e37e6..0c9a57779f4 100644
--- a/Master/texmf-dist/tex/latex/algorithmicx/algpascal.sty
+++ b/Master/texmf-dist/tex/latex/algorithmicx/algpascal.sty
@@ -1,8 +1,8 @@
-% A PASCAL LIKE ALGORITHMIC STYLE -- Released 18 MAR 2004
+% A PASCAL LIKE ALGORITHMIC STYLE -- Released 27 APR 2005
% for LaTeX version 2e
%
% Copyright Szasz Janos
-% E-mail szaszjanos@users.sourceforge.net
+% E-mail szaszjanos@sourceforge.net
%
\NeedsTeXFormat{LaTeX2e}%
\ProvidesPackage{algpascal}%
@@ -10,46 +10,35 @@
\RequirePackage{algorithmicx}%
\typeout{Document Style - pascal environments for the `algorithmicx' style}%
%
-\def\ALG@setpascal{t}%
-\DeclareOption{noset}{\def\ALG@setpascal{}}%
-\DeclareOption{set}{\def\ALG@setpascal{t}}%
\ProcessOptions%
%
%
% *** DECLARATIONS ***
%
%
-\ALG@deflanguage{pascal}{\ALG@setpascal}%
-{%
+\algnewlanguage{pascal}%
+\alglanguage{pascal}%
%
% *** KEYWORDS ***
%
-\newcommand\textkeyword{\textbf}%
+\algnewcommand\textkeyword{\textbf}%
%
% *** DECLARED BLOCKS AND LOOPS ***
%
\algdef{SEi}{Begin}{End}{0cm}{\textkeyword{begin}}{\textkeyword{end}}%
\algdef{Sei}{Asm}{End}{0cm}{\textkeyword{asm}}%
%
-\algdef{lS}{For}[2]{\textkeyword{for} \(##1\) \textkeyword{to} \(##2\) \textkeyword{do}}%
-\algdef{lS}{While}[1]{\textkeyword{while} \(##1\) \textkeyword{do}}%
-\algdef{lS}{With}[1]{\textkeyword{with}\ \(##1\) \textkeyword{do}}%
-\algdef{SE}{Repeat}{Until}{\textkeyword{repeat}}[1]{\textkeyword{until}\ \(##1\)}%
-\algdef{lS}{If}[1]{\textkeyword{if}\ \(##1\) \textkeyword{then}}%
+\algdef{lS}{For}[2]{\textkeyword{for} \(#1\) \textkeyword{to} \(#2\) \textkeyword{do}}%
+\algdef{lS}{While}[1]{\textkeyword{while} \(#1\) \textkeyword{do}}%
+\algdef{lS}{With}[1]{\textkeyword{with}\ \(#1\) \textkeyword{do}}%
+\algdef{SE}{Repeat}{Until}{\textkeyword{repeat}}[1]{\textkeyword{until}\ \(#1\)}%
+\algdef{lS}{If}[1]{\textkeyword{if}\ \(#1\) \textkeyword{then}}%
\algdef{lC}{If}{Else}{\textkeyword{else}}%
%
% *** OTHER DECLARATIONS ***
%
-\def\Procedure{\State\textkeyword{procedure}\space}%
-\def\Function{\State\textkeyword{function}\space}%
+\algnewcommand\Procedure{\State\textkeyword{procedure}\space}%
+\algnewcommand\Function{\State\textkeyword{function}\space}%
%
-\renewcommand\algorithmiccomment[1]{\hfill\{##1\}}%
-%
-%
-%
-}%
-%
-%
-%
-\let\ALG@setpascal\relax%
+\algrenewcomment[1]{\hfill\{#1\}}%
%
diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty b/Master/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty
index ba7a5d57329..fca966ac658 100644
--- a/Master/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty
+++ b/Master/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty
@@ -1,4 +1,4 @@
-% PSEUDOCODE ALGORITHMIC STYLE -- Released 18 MAR 2004
+% PSEUDOCODE ALGORITHMIC STYLE -- Released 27 APR 2005
% for LaTeX version 2e
%
% Copyright Szasz Janos
@@ -11,63 +11,59 @@
\RequirePackage{algorithmicx}%
\typeout{Document Style - pseudocode environments for use with the `algorithmicx' style}%
%
-\def\ALG@setpseudocode{t}%
-\newboolean{ALG@noend}%
-\setboolean{ALG@noend}{false}%
+\def\ALG@noend{f}%
\newboolean{ALG@compatible}%
\setboolean{ALG@compatible}{false}%
%
-\DeclareOption{noset}{\def\ALG@setpseudocode{}}%
-\DeclareOption{set}{\def\ALG@setpseudocode{t}}%
-\DeclareOption{noend}{\setboolean{ALG@noend}{true}}%
-\DeclareOption{end}{\setboolean{ALG@noend}{false}}%
-\DeclareOption{compatible}{\setboolean{ALG@compatible}{true}}%
+\DeclareOption{noend}{\def\ALG@noend{t}}%
+\DeclareOption{end}{\def\ALG@noend{f}}%
+\DeclareOption{compatible}{\typeout{For compatibility mode use algcompatible.sty!!!}\setboolean{ALG@compatible}{true}}%
\DeclareOption{noncompatible}{\setboolean{ALG@noncompatible}{false}}%
\ProcessOptions%
%
% *** DECLARATIONS ***
%
-\ALG@deflanguage{pseudocode}{\ALG@setpseudocode}%
-{%
+\algnewlanguage{pseudocode}%
+\alglanguage{pseudocode}%
%
% *** KEYWORDS ***
%
-\newcommand\algorithmicend{\textbf{end}}
-\newcommand\algorithmicdo{\textbf{do}}
-\newcommand\algorithmicwhile{\textbf{while}}
-\newcommand\algorithmicfor{\textbf{for}}
-\newcommand\algorithmicforall{\textbf{for all}}
-\newcommand\algorithmicloop{\textbf{loop}}
-\newcommand\algorithmicrepeat{\textbf{repeat}}
-\newcommand\algorithmicuntil{\textbf{until}}
-\newcommand\algorithmicprocedure{\textbf{procedure}}
-\newcommand\algorithmicfunction{\textbf{function}}
-\newcommand\algorithmicif{\textbf{if}}
-\newcommand\algorithmicthen{\textbf{then}}
-\newcommand\algorithmicelse{\textbf{else}}
-\newcommand\algorithmicrequire{\textbf{Require:}}
-\newcommand\algorithmicensure{\textbf{Ensure:}}
-\newcommand{\algorithmicreturn}{\textbf{return}}
-\newcommand\textproc{\textsc}
+\algnewcommand\algorithmicend{\textbf{end}}
+\algnewcommand\algorithmicdo{\textbf{do}}
+\algnewcommand\algorithmicwhile{\textbf{while}}
+\algnewcommand\algorithmicfor{\textbf{for}}
+\algnewcommand\algorithmicforall{\textbf{for all}}
+\algnewcommand\algorithmicloop{\textbf{loop}}
+\algnewcommand\algorithmicrepeat{\textbf{repeat}}
+\algnewcommand\algorithmicuntil{\textbf{until}}
+\algnewcommand\algorithmicprocedure{\textbf{procedure}}
+\algnewcommand\algorithmicfunction{\textbf{function}}
+\algnewcommand\algorithmicif{\textbf{if}}
+\algnewcommand\algorithmicthen{\textbf{then}}
+\algnewcommand\algorithmicelse{\textbf{else}}
+\algnewcommand\algorithmicrequire{\textbf{Require:}}
+\algnewcommand\algorithmicensure{\textbf{Ensure:}}
+\algnewcommand\algorithmicreturn{\textbf{return}}
+\algnewcommand\textproc{\textsc}
%
% *** DECLARED LOOPS ***
%
-\algdef{SE}[WHILE]{While}{EndWhile}[1]{\algorithmicwhile\ ##1\ \algorithmicdo}{\algorithmicend\ \algorithmicwhile}%
-\algdef{SE}[FOR]{For}{EndFor}[1]{\algorithmicfor\ ##1\ \algorithmicdo}{\algorithmicend\ \algorithmicfor}%
-\algdef{S}[FOR]{ForAll}[1]{\algorithmicforall\ ##1\ \algorithmicdo}%
+\algdef{SE}[WHILE]{While}{EndWhile}[1]{\algorithmicwhile\ #1\ \algorithmicdo}{\algorithmicend\ \algorithmicwhile}%
+\algdef{SE}[FOR]{For}{EndFor}[1]{\algorithmicfor\ #1\ \algorithmicdo}{\algorithmicend\ \algorithmicfor}%
+\algdef{S}[FOR]{ForAll}[1]{\algorithmicforall\ #1\ \algorithmicdo}%
\algdef{SE}[LOOP]{Loop}{EndLoop}{\algorithmicloop}{\algorithmicend\ \algorithmicloop}%
-\algdef{SE}[REPEAT]{Repeat}{Until}{\algorithmicrepeat}[1]{\algorithmicuntil\ ##1}%
-\algdef{SE}[IF]{If}{EndIf}[1]{\algorithmicif\ ##1\ \algorithmicthen}{\algorithmicend\ \algorithmicif}%
-\algdef{C}[IF]{IF}{ElsIf}[1]{\algorithmicelse\ \algorithmicif\ ##1\ \algorithmicthen}%
+\algdef{SE}[REPEAT]{Repeat}{Until}{\algorithmicrepeat}[1]{\algorithmicuntil\ #1}%
+\algdef{SE}[IF]{If}{EndIf}[1]{\algorithmicif\ #1\ \algorithmicthen}{\algorithmicend\ \algorithmicif}%
+\algdef{C}[IF]{IF}{ElsIf}[1]{\algorithmicelse\ \algorithmicif\ #1\ \algorithmicthen}%
\algdef{Ce}[ELSE]{IF}{Else}{EndIf}{\algorithmicelse}%
\algdef{SE}[PROCEDURE]{Procedure}{EndProcedure}%
- [2]{\algorithmicprocedure\ \textproc{##1}\ifthenelse{\equal{##2}{}}{}{(##2)}}%
+ [2]{\algorithmicprocedure\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}%
{\algorithmicend\ \algorithmicprocedure}%
\algdef{SE}[FUNCTION]{Function}{EndFunction}%
- [2]{\algorithmicfunction\ \textproc{##1}\ifthenelse{\equal{##2}{}}{}{(##2)}}%
+ [2]{\algorithmicfunction\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}%
{\algorithmicend\ \algorithmicfunction}%
%
-\ifthenelse{\boolean{ALG@noend}}%
+\ifthenelse{\equal{\ALG@noend}{t}}%
{%
\algtext*{EndWhile}%
\algtext*{EndFor}%
@@ -79,32 +75,18 @@
%
% *** OTHER DECLARATIONS ***
%
-\def\Require{\item[\algorithmicrequire]}
-\def\Ensure{\item[\algorithmicensure]}
-\def\Return{\algorithmicreturn{} }%
+\algnewcommand\Require{\item[\algorithmicrequire]}%
+\algnewcommand\Ensure{\item[\algorithmicensure]}%
+\algnewcommand\Return{\algorithmicreturn{} }%
+\algnewcommand\Call[2]{\textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}%
%
%
%
\ifthenelse{\boolean{ALG@compatible}}%
{%
- \let\WHILE\While\let\ENDWHILE\EndWhile%
- \let\FOR\For\let\FORALL\ForAll\let\ENDFOR\EndFor%
- \let\LOOP\Loop\let\ENDLOOP\EndLoop%
- \let\REPEAT\Repeat\let\UNTIL\Until%
- \let\PROCEDURE\Procedure\let\ENDPROCEDURE\EndProcedure%
- \let\FUNCTION\Function\let\ENDFUNCTION\EndFunction%
- \let\IF\If\let\ELSIF\ElsIf\let\ELSE\Else\let\ENDIF\EndIf%
- \let\REQUIRE\Require\let\ENSURE\Ensure%
- \let\STATE\State\let\STATEx\Statex%
- \let\COMMENT\Comment%
+ \ifthenelse{\equal{\ALG@noend}{t}}%
+ {\RequirePackage[noend]{algcompatible}}%
+ {\RequirePackage{algcompatible}}%
}%
{}%
%
-%
-%
-}%
-%
-%
-%
-\let\ALG@setpseudocode\relax%
-%