%% 
%% \iffalse ^^A we skip the debug setting
\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
%% \fi
%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
%% This is file “gmampulex.sty” generated with the DocStrip utility.
%% 
%%
%% The original source files were:
%%
%% gmutils/gmutils.gmd  (with options: `ampulex')
%%
%% 
%% Copyright ©  
%% by Grzegorz ‘Natror’ Murzynowski
%% natror (at) o2 (dot) pl
%% 
%% This program is subject to the LaTeX Project Public License.
%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
%% for the details of that license.
%%
%% LPPL status: "author-maintained".
%%
%% 
%% 
%% For the documentation please refer to the file(s)
%% gmutils.{gmd,pdf}.
%% 
%% 
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{gmampulex}
    [2010/10/24 v0.993 Ampulex Compressa-like modifier of macros (GM)]


%%
%%
%%     ^^A\typeout{\unexpanded{#4}}%%

\RequirePackage{gmcommand}

\DeclareCommand\ampulexlet\long
{Q{\outer\long\global\protected}{} % (1)  (optional) prefix\:(es);
  % allowed is any sequence of them in any order, just like for the
  % original \TeX's \incmd\def.
  T{\def\edef\gdef\xdef\pdef}{\def} % (2) (optional) kind of definition; if
  % not specified, \incmd\def\ will be used.
  m % (3)  macro to be let to,
  m % (4) macro to provide the definition,
  O{} % (5) \cs{def}'s parameters string; empty by default,
  O{} % (6) definition body's parameters to be taken in a~one-step
  % expansion of the redefined macro; empty by default; the
  % undelimited parameters should be double-braced here.
  m % (7) start token(s),
  m % (8) end token(s)
  m % (9) the replacement of |#7|, |#8| and whatever between them.
}{%^^B
  % \changes{v0.93}{2008/08/29}{added}
  % \changes{v0.94}{2008/09/07}{made \pk{xparse}-ish and
  %   \cs{ampulexset} removed}
  % \chgs{2008/12/7 v0.98 first argument (the prefix) made of the
  %   \env{Q} type}
  % For the example of usage see \ref{ampulexset}. \HideDef
  %
  \long\def\gmu@ampulexlet@resa
  ##1#7% we put |#7| as a delimiter
  ##2#8% we put |#8| as a delimiter
  ##3\gmu@AmpulexDelimiter{%
    % We use a special (undefined) \CS  |\gmu@AmpulexDelimiter| as
    % the final delimiter because standard \LaTeX's |\@nil| isn't
    % probably a good idea since we
    % want to ampulex deep \LaTeX's macros and other |\gmu@›…|
    % macros too.
    \gmu@ifempty{##3}%
  }%
  % Now |\gmu@ampulexlet@resa| is redefined to produce an open |\gmu@ifempty|
  % depending on whether the start and end token(s) are found in the
  % meaning of \inverb|#4|.
  %
  % Before we proceed, we deal with a difficulty with a special case
  % when |#6| is “|#1|”, which occurs because of stripping braces of a
  % single-brace argument.
  \gmu@ifutokens{#6}{##1}%
  {\def\ampulex@Args{{%
          ####1}}%
  }%
  {\edef\ampulex@Args{\@nx\unexpanded{%
        \unexpanded{#6}}}}%
  \long  \def\gmu@ampulexlet@resc##1{%
    \@xa\@xa\@xa\@xa      \@xa\@xa\@xa\gmu@ampulexlet@resa
    \@xa\@xa\@xa#4%
    \ampulex@Args
    ##1% this parameter will be substituted with |#7#8| in
       % line~\ref{resc1} and with emptiness in line~\ref{resc2}.
    \gmu@AmpulexDelimiter
  }%
  %
  \gmu@ampulexlet@resc{#7#8}%\label{resc1}   % ^^V   \gmu@ampulexlet@resb
  % We've just applied the checker and it produces an open
  % |\gmu@ifempty{⁄<some tokens>}|
  %  if the delimiters are found in the meaning of |#4|
  % so, if \<some tokens> are none, we issue a warning
  {%
    \PackageWarning{gmampulex}{%
      \@nx#4 doesn't contain tokens
      \detokenize{#7} nor \detokenize{#8}. You better check if this is
      what you want to redefine.^^J%
      \@nx#4 is^^J%
      \meaning#4^^J%
    }}%
  % and we proceed if they are really some
  {%
  % We define a~temporary
  % macro with the parameters delimited with the `start' and `end' parameters
  % of \incs{ampulexdef}. It has to stand a double |\edef|.
  \edef\gmu@ampulexlet@resa{%
    \long\def\@nx\gmu@ampulexlet@resa
    ####1\unexpanded{#7}%
    ####2\unexpanded{#8}%
    ####3\@nx\gmu@AmpulexDelimiter{%
      \@nx\unexpanded{####1}%
      % we drop the part between the |#7| and |#8| delimiters
      % (including delimiters)
      \unexpanded{\unexpanded{#9}}% we replace the part of the
      % redefined macro's meaning with the replacement text.
      \@nx\unexpanded{####3}%
    }% of inner |\gmu@ampulexlet@resa|
  }% of outer |\gmu@ampulexlet@resa|
  \gmu@ampulexlet@resa
  % Now |\gmu@ampulexlet@resa| carries the modifier of |#4|'s
  % definition.
  %
  %
\unless\ifx\czat#4%
   \edef\gmu@ampulexlet@resb{% double definition for double hashes of expanded
     % |\unexpanded{#1›…}|
     #1#2%
     \@nx#3\unexpanded{#5}{%
       \gmu@ampulexlet@resc{}%\label{resc2}
 % Here we are sure the tokens sequences
 % |#7| and |#8| are in the one-level expansion of |#4| so we don't pass them
 % as sentinels (which \ac{BTW} would totally spoil the redefinition, what it
 % did indeed 2010/6/23).
     }% of |#3|'s definition body
   }% of inner |\gmu@ampulexlet@resb|
   \gmu@ampulexlet@resb
\else
    \gmu@ifxany#2{\gdef\xdef}{\global}{}%
    #1\edef#3#5{\gmu@ampulexlet@resc{}}%\label{resc2}
\fi
  }% of if the delimiters were found in the meaning.
}% of |\ampulexlet|

\DeclareCommand\ampulexdef\long{%
  % \chgs{2010/04/22 v0.994 rewritten not to use the arguments 7–9
  %   explicitly not to wrap them in a temporary macros, and to accept
  %   single hashes (instead of quadruple) in arguments 5 and 6. The
  %   temporary macros renamed
  %   to \cmd\gmu@reserveda and \cmd\gmu@reservedb. The body moved to
  %   \cmd\ampulexlet with adding another \CS argument to let let a
  %   macro not necessarily redefine it itself and this command made a
  %   particular case of that new one}
#1  Q{\outer\long\global\protected}{} % (1) as |\ampulexlet|
#2  T{\def\edef\gdef\xdef\pdef}{\def} % (2) ad |\ampulexlet|
#3  m % (3)  macro to be redefined,
#4  O{} % (4) as |\ampulexlet|'s |#5|,
#5  O{} % (5) as |\ampulexlet|'s |#6|,
#6  m % (6) start token(s),
#7  m % (7) end token(s),
#8  m % (8) the replacement
}{%
  \DCUse\ampulexlet{#1}{#2}{#3}{#3}{#4}{#5}{#6}{#7}{#8}%
}



\def\gmu@ENumLoop#1#2{% this is a~fully expandable loop generating |#2|${}-{}$|#1|
  % space tokens (cf. The  % \eTeX\ Manual p.~9).
  \ifnum#1<#2 %
    \gmu@tempa
    \@xa\gmu@ENumLoop
    \@xa{\number\numexpr#1+1\@xa}%
    \@xa{\number#2\@xa}%
  \fi}% of |\gmu@hashes|.

\long\def\defENumLoop
#1% the loop macro's name
#2% the replacement of |\gmu@tempa|
{%
  \ampulexlet#1\gmu@ENumLoop
  [##1##2][{##1}{##2}]%
  \gmu@tempa\@xa{#2\@xa}%
  %
  \ampulexdef#1%
  [##1##2][{##1}{##2}]%
  \gmu@ENumLoop\@xa{#1\@xa}%
}

\edef\GenericInfoToTerminal{%
  \unexpanded{%
    \@XA{\ampulexlet\protected\long\GenericInfo}\csname
    GenericInfo \endcsname[#1#2][{#1}{#2}]%
    \write\m@ne % we replace the token between these with:
    {\write\ifnum\tracingonline>\z@ \@unused\else\m@ne\fi}%
  }%
}

\ampulexdef\@starttoc[#1][#1]\makeatletter\@input{\makeatletter\NamedInput}


%%% (For my GNU Emacs:)
%%% Local Variables:
%%% mode: doctex
%%% coding: utf-8
%%% End:
\endinput
%%
%% End of file `gmampulex.sty'.
