%% 
%% \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 “gmdoc.sty” generated with the DocStrip utility.
%% 
%%
%% The original source files were:
%%
%% gmdoc/gmdoc.gmd  (with options: `doc')
%%
%% 
%% Copyright ©  2006, 2007, 2008, 2009, 2010
%% 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)
%% gmdoc.{gmd,pdf}.
%% 
%% 
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{gmdoc}
    [2010/09/25 v0.993 a documenting package (GM)]


%%
%% ^^A(
%% \chschange{v0.98j}{2006/10/19}{4372}
%% \chschange{v0.98j}{06/10/19}{4372}
%% \begin{macrocode}
%%\end{macrocode}
%% \skiplines we skip the driver
%%\endskiplines

\ifnum\catcode`\@=12

\errorcontextlines=100

\documentclass[countalllines, codespacesgrey, outeroff, debug, mwrep,
pagella, trebuchet, cursor, fontspec=quiet]{gmdocc}

\verbLongDashes

\DoNotIndex{\gmu@tempa \gmu@tempb \gmu@tempc \gmu@tempd \gmu@tempe \gmu@tempf}

\twocoltoc
\title{The \pk{gmdoc} Package\\ i.e., \pk{gmdoc.sty} and
  \pk{gmdocc.cls}}
\author{Grzegorz `Natror' Murzynowski}
\date{\ifcase\month\relax\or January\or February\or March\or April\or May\or
  June\or July\or August\or September\or October\or November\or
  December\fi\ \the\year}

\begin{document}

\emptify\udigits % because orig. def. raises an error `\cs{@secondoftwo} has
                 % an extra \}'
\maketitle

\setcounter{page}{2}% \pk{hyperref} cries if it sees two pages
\tableofcontents
\DoIndex\maketitle

\SelfInclude
\DocInclude{gmdocc}

\skipgmlonely[\stanza The remarks about installation and compiling
  of the documentation are analogous to those in the chapter
  \pk{gmdoc.sty} and therefore omitted.\stanza]
\DocInclude{gmutils}
\DocInclude{gmiflink}
\DocInclude{gmverb}
\DocInclude{gmoldcomm}
\typeout{%
  Produce change log with^^J%
  makeindex -r -s gmglo.ist -o \jobname.gls \jobname.glo^^J
  (gmglo.ist should be put into some texmf/makeindex directory.)^^J}
\PrintChanges
\typeout{%
  Produce index with^^J%
  makeindex -r \jobname^^J}
 \PrintIndex

\afterfi{%
\end{document}
  makeindex -r gmdoc
  makeindex -r -s gmglo.ist -o gmdocDoc.gls gmdocDoc.glo


}\fi% of |\ifnum\catcode`\@=12|, of the driver that is.

\catcode`\^^C=9\relax
\RequirePackage{gmutils}[2008/08/30]% includes redefinition of
\RequirePackage{xkeyval}% we need key-vals later, but maybe we'll make

\newif\if@linesnotnum

\DeclareOption{linesnotnum}{\@linesnotnumtrue}


\newif\if@uresetlinecount

\DeclareOption{uresetlinecount}{\@uresetlinecounttrue}


\newif\if@countalllines
\newif\if@printalllinenos

\DeclareOption{countalllines}{% to use the \incs{inputlineno}
  % primitive and print real line numbers  % in a~file.
  \@countalllinestrue
  \@printalllinenosfalse}

\DeclareOption{countalllines*}{%
  \@countalllinestrue
  \@printalllinenostrue}


\newif\if@noindex

\DeclareOption{noindex}{\@noindextrue}

\newif\if@pageindex

\DeclareOption{pageindex}{\@pageindextrue}


\newif\if@indexallmacros

\DeclareOption{indexallmacros}{\@indexallmacrostrue}


\@ifundefined{if@marginparsused}{\newif\if@marginparsused}{}

\@ifclassloaded{article}{\@marginparsusedtrue}{}

\@ifclassloaded{report}{\@marginparsusedtrue}{}

\@ifclassloaded{book}{\@marginparsusedtrue}{}
\DeclareOption{withmarginpar}{\@marginparsusedtrue}

\DeclareOption{nomarginpar}{\@marginparsusedfalse}

\DeclareOption{codespacesblank}{%
  \AtEndOfPackage{% to allow \inverb|codespacesgrey, codespacesblank|
  \AtBeginDocument{\CodeSpacesBlank}}}

\DeclareOption{codespacesgrey}{%
  % \changes{v0.99l}{2008/08/06}{added due to Will Robertson's
  %  suggestion}
  \AtEndOfPackage{% to put the declaration into the begin-document
    % hook after definition of \incs{visiblespace}.
    \AtBeginDocument{\CodeSpacesGrey}}}

\ProcessOptions

\RequirePackage{gmutils}[2008/08/08]

\RequirePackage{xcolor}
\definecolor{deepblue}{rgb}{0,0,.85}



\@ifpackageloaded{hyperref}{\hypersetup{colorlinks=true,
    linkcolor=deepblue, urlcolor=blue, filecolor=blue}}{%
  \RequirePackage[colorlinks=true, linkcolor=deepblue, urlcolor=blue,
  filecolor=blue, pdfstartview=FitH, pdfview=FitBH,
  pdfpagemode=UseNone]{hyperref}}


\RequirePackage{gmiflink}
\RequirePackage{gmverb}[2010/08/12]

\Store@Macros{\@verbatim\verb}

\if@noindex
  \AtBeginDocument{\gag@index}% for the latter macro see line
  % \ref{gag@index}.
\else
   \RequirePackage{makeidx}\makeindex
\fi

\def\CodeDelim{\@bsphack\gmu@ifstar\Code@Delim@St\Code@Delim}

\def\Code@Delim@St#1{%
  {\escapechar\m@ne
    \@xa\gdef\@xa\code@delim\@xa{\string#1}}%
  \@esphack}

\def\Code@Delim#1{\VerbHyphen{#1}\Code@Delim@St{#1}}

\CodeDelim\%

\pdef\narrationmark{{\codett\verbhyphen}{\normalfont\enspace}\ignorespaces}


\newtoks\gmd@preverypar

\newcommand*\settexcodehangi{%
  \hangindent=\verbatimhangindent \hangafter=\@ne}% we'll use
\@ifdefinable\@@settexcodehangi{\let\@@settexcodehangi=\settexcodehangi}


\newlength\TextIndent
\newlength\CodeIndent
\CodeIndent=1,5em\relax
\@ifundefined{stanzaskip}{\newlength\stanzaskip}{}
\stanzaskip=\medskipamount
 %^^A \advance\stanzaskip by-.25\medskipamount% to preserve the stretch- and
 %^^A % shrinkability.\par
\newskip\CodeTopsep
\newskip\MacroTopsep

\def\UniformSkips{%\label{UniformSkips}
  % \Define\CodeTopsep \Define\MacroTopsep
  \CodeTopsep=\stanzaskip
  \MacroTopsep=\stanzaskip
  \abovedisplayskip=\stanzaskip
  %\nostanza \leftskip0sp \gmdnoindent
  %  |%% \abovedisplayshortskip|
  % remains untouched as it is 0.0\,pt plus 3.0\,pt by default.
  % \nostanza
  \belowdisplayskip=\stanzaskip
  \belowdisplayshortskip=.5\stanzaskip% due to DEK's idea of making the
  % short below display skip half of the normal.
  \advance\belowdisplayshortskip by\smallskipamount
  \advance\belowdisplayshortskip by-1\smallskipamount% We advance
  % \incs{be\+low\+dis\+play\+short\+skip} forth and back to
  % give it the \incs{small\+skip\+am\+ount}'s shrink- and
  % stretchability components.
  \topsep=\stanzaskip
  \partopsep=\z@
}
\UniformSkips
\AtBeginDocument{\UniformSkips}

\newcommand*\NonUniformSkips{\@relaxen\UniformSkips}
\newcommand*\chunkskip{%
  \par\addvspace{%
  \glueexpr\MacroTopsep
  \if@codeskipput-\CodeTopsep\fi
  \relax
}\@codeskipputgtrue}

\pdef\stanza{%
  \par\addvspace{%
    \glueexpr\stanzaskip
    \if@codeskipput-\CodeTopsep\fi
    \relax}\@codeskipputgtrue}

\newcommand*\nostanza{% \changes{v0.99n}{2008/08/21}{added adding
  % negative skip if in vmode and \cs{par}}
  \par
  \if@codeskipput\unless\if@nostanza\vskip-\CodeTopsep\relax\fi\fi
  \@codeskipputgtrue\@nostanzagtrue
  \@afternarrgfalse\@aftercodegtrue}% In the `code
\newgif\if@newline
\newgif\if@dsdir


\begingroup\catcode`\^^M=\active%
\firstofone{\endgroup%
  \newcommand*{\DocInput}[1]{\begingroup%
    % \changes{v0.98}{06/09/05}{\cs{@makeother\protect\bslash_} added}
    % \DefIndex\gmd@inputname
    \edef\gmd@inputname{#1}% we'll use it in some notifications.
    %
    \NamedInput@prepare{#1}% to make this input “named”, as with |\NamedInput|.
    %
    % \DefIndex\gmd@currentlabel@before
    \let\gmd@currentlabel@before=\@currentlabel% we store it because
    % we'll do |\xdef|s of |\@currentlabel| to make proper references
    % to the line numbers so we want to restore current
    % |\@currentlabel| after our group.\
    % \CodeUsgIndex\clubpenalty \CodeUsgIndex\widowpenalty
    \gmd@setclubpenalty% we wrapped the assignment of |\clubpenalty|
    % in a~macro because we'll repeat it twice more.
    \@clubpenalty\clubpenalty \widowpenalty=3333 % Most paragraphs of the code will be
    % one-line most probably and many of the narration, too.\par\
    % \changes[\DocInput]{v0.95}{06/08/15}{\cs{club-}
    % and \cs{widowpenalty} set both to 3333}
    %\CodeUsgIndex\tolerance
    \tolerance=1000 % as in \docfm.
    % ^^A    \catcode`\^^M=\active% redundant with line 2304
    % \CodeUsgIndex\code@delim
    \@xa\@makeother\csname\code@delim\endcsname%
    % \CodeUsgIndex\gmd@resetlinecount
    \gmd@resetlinecount% due to the option |uresetlinecount|
    % we reset the line number counter or do nothing.
    % \Define*{^^M}
    \QueerEOL% \changes{v0.99m}{2008/08/09}{there was
    % \cs{let}\hathat{M} but \cs{QueerEOL} is better: it also
    % redefines \cs{}\hathat M} It has to be before the
    % begin-input-hook to allow change by that hook.
    % \CodeUsgIndex\@beginputhook
    \@beginputhook% my first use of it is to redefine |\maketitle|
    % just at this point not globally. \CodeUsgIndex\everypar
    \everypar=\@xa{\@xa\@codetonarrskip\the\everypar}%
    % \Define\gmd@guardedinput
    \edef\gmd@guardedinput{%
      \@nx\@@input #1\relax% |\@nx| is
      % |\noexpand|, see \pk{gmutils}.\DoNotIndex\@nx
      % \incs{@@input} is the
      % true \TeX's \incs{input}. \CodeUsgIndex\EOFMark
      \gmd@iihook% cf.\ line \ref{iihook}
      \@nx\EOFMark% to pretty finish the input, see
      % line~\ref{eofMark}.\CodeUsgIndex\code@delim
      \@nx\CodeDelim\@xanxcs{\code@delim}% to
      % ensure the code delimiter is the same as at the beginning of
      % input.
      % \changes[\DocInput]{v0.99c}{2007/03/02}{added ensuring the
      % code delimiter to be the same at the end as at the beginning}
      \@nx^^M\code@delim%
      % \label{guardians}
    }% we add guardians after
    % |\input|ing a~file; somehow an error occurred without them.
    \catcode`\%=9 % for \docfm -compatibility.\label{ignorePercent}
    \setcounter{CheckSum}{0}% we initialise the counter for the number
    % of the escape chars (the assignment is |\global|).
    \everyeof{\relax}% |\@nx| moved not to spoil input of toc e.g.
    \@xa\@xa\@xa^^M\gmd@guardedinput%\label{eeeEOL}
    \par%
    % \CodeUsgIndex\@endinputhook
    \@endinputhook% It's a~hook to let postpone
    % some stuff till the end of input. We use it e.g.\ for the
    % \docfm-(not)likeliness notifications.
    \glet\@currentlabel=\gmd@currentlabel@before% we restore
    % value from before this group. In a~very special case this could
    % cause unexpected behaviour of cross-refs, but anyway we acted
    % globally and so acts \pk{hyperref}.
    %
    \NamedInput@finish% to clean up after a “named” input, as with |\NamedInput|.
    %
    \endgroup%
  }% end of |\Doc@Input|'s definition.
}% end of |\firstofone|'s argument.


\pdef\gmd@textEOL{ % a~space just like in normal
  % \TeX. We put it first to  % cooperate with \inverb|\^^M|'s
  % |\expandafter\ignorespaces|. It's  % no  % problem since a~space
  % | |${}_{10}$ doesn't drive \TeX\ out of  % the vmode.
  \ifhmode\@afternarrgtrue\@codeskipputgfalse\fi% being in
  % the horizontal mode means we've just typeset some narration so we
  % turn the respective switches: the one bringing the message `we are
  % after narration' to True (|@afternarr|) and the `we have put the
  % code-narration glue' to False (|@codeskipput|). Since we are in
  % a~verbatim group and the information should be brought outside it,
  % we switch the switches globally (the letter |g| in both).
  \@newlinegtrue% to |\refstep| the lines' counter at the proper
  % point.
  \@dsdirgtrue% to handle the \ds\ directives.
  \@xa\@trimandstore\the\everypar\@trimandstore%we store the
  % previous value of |\everypar| register to restore it at
  % a~proper point. See line \ref{@trimandstore} for the details.
  \begingroup%^^A ##### maybe we prefer to restore the genuine |\par|
  % ^^A~before the group?
  \gmd@setclubpenalty% Most paragraphs will be
  % one-line most probably. Since some sectioning commands may change
  % \incs{clubpenalty}, we set it again here and also after this
  % group.
  \aftergroup\gmd@setclubpenalty%
  \let\par\@@par% inside the verbatim group we wish |\par| to be genuine.
  % \CodeUsgIndex\ttverbatim
  \let\verbatimfont\codett %
  \ttverbatim% it applies the code-layer font (|\tt| by default) and makes specials
  % other or |\active|-and-breakable.
  % to turn verbatim specials off in
  % \incmd\scanverb s.
  \gmd@DoTeXCodeSpace%
  \@makeother\|% because |\ttverbatim| doesn't do that.
  \MakePrivateLetters% see line \ref{MPL}.\par
  \@xa\@makeother\code@delim% we are
  % almost sure the code comment char is among the chars having
  % been \catother ed already. For `almost' see the
  % \gmiflink[IndexInput]{\cs{IndexInput}} macro's definition.\par
  % So, we've opened a~verbatim group and want to peek at the next
  % character. If it's |%|, then we just continue narration, else we
  % process the leading spaces supposed there are any and, if after
  % them is a~|%|, we just continue the commentary as in the
  % previous case or else we typeset the \TeX\ code.
  \texcode@hook% we add some special stuff, e.g.\ in \pk{gmdocc.cls} we
  % make star low.
  \@xa\@ifnextcharRS\@xa{\code@delim}{%\label{ifContNarr}
    % \CodeUsgIndex\gmd@continuenarration
    \gmd@continuenarration}{% \CodeUsgIndex\gmd@dolspaces
    \gmd@dolspaces% it will launch |\gmd@typesettexcode|.
  }% end of |\@ifnextcharRS|'s else.
}% end of |\gmd@textEOL|'s definition.

\emptify\texcode@hook

\def\gmd@setclubpenalty{\clubpenalty=3333 }

\def\AtEndInput{\g@addto@macro\@endinputhook}
\def\@endinputhook{}
\def\AtBegInput{\g@addto@macro\@beginputhook}
\def\@beginputhook{}

\emptify\gmd@iihook

\AtBegInput{\let\gmd@@toc\tableofcontents
  \def\tableofcontents{% \label{straighttoc}
    \@ifQueerEOL
    {\StraightEOL\gmd@@toc\QueerEOL}%
    {\gmd@@toc}%
  }%
}


\def\@ifEOLactive{%\
  % \begin{enumargs}
  % \item what if end of line is active,
  % \item what if not.
  % \end{enumargs}
  \ifnum\catcode`\^^M=\active \@xa\@firstoftwo\else\@xa\@secondoftwo\fi}

\foone\obeylines{%
  \def\@ifQueerEOL{%\
    % \begin{enumargs}
    % \item what if line end is ‘queer’,
    % \item what if not ‘queer’.
    % \end{enumargs}
    % \changes{v0.98a}{06/09/06}{added}
    \@ifEOLactive{%
      \ifx^^M\gmd@textEOL\@xa\@firstoftwo\else\@xa\@secondoftwo\fi}%
    {\@secondoftwo}}% of \cs{@ifQueerEOL}
}% of \cs{foone}

\pdef\qfootnote{%
  \@ifQueerEOL
  {\begingroup\StraightEOL\qfootnote@}%
  {\footnote}}

\DeclareCommand\qfootnote@{o>Lm}{%
  \endgroup % yes, we close the group: the arguments are already
  % parsed and passed to this macro.
  \edef\gmu@tempa{%
    \@nx\footnote \IfValueT{#1}{[#1]}}%
  \gmu@tempa{#2}%
}

\pdef\qemph{%
  \@ifQueerEOL
  {\begingroup\StraightEOL\qemph@}%
  {\emph}}

\pdef\qemph@#1{\endgroup\emph{#1}}

\@emptify\gmd@ABIOnce
\AtEndOfPackage{\AtBegInput\gmd@ABIOnce}

\long\def\AtBegInputOnce#1{%
  \gaddtomacro\gmd@ABIOnce{\g@emptify\gmd@ABIOnce#1}}


\def\EOFMark{\<eof>}
\begin{obeyspaces}%
\gdef\CodeSpacesVisible{%
\def\gmd@DoTeXCodeSpace{%
\obeyspaces\let =\breakablevisspace}}%
\gdef\CodeSpacesBlank{%
\let\gmd@DoTeXCodeSpace\gmobeyspaces%
\let\gmd@texcodespace=\ }% the latter |\let| is for the |\if›…|s.
\gdef\CodeSpacesSmall{%
\def\gmd@DoTeXCodeSpace{%
\obeyspaces\def {\,\hskip\z@}}%
\def\gmd@texcodespace{\,\hskip\z@}}%
\end{obeyspaces}

\def\CodeSpacesGrey{%
  % \changes{v0.99l}{2008/08/06}{added due to Will Robertson's
  %   suggestion}
  \CodeSpacesVisible
  \VisSpacesGrey% defined in \pk{gmverb}
}%


\CodeSpacesVisible

\def\gmd@continuenarration{%
  \endgroup
  \gmd@cpnarrline% see \gmiflink[countnarr]{below}.
  \@xa\@trimandstore\the\everypar\@trimandstore
  \everypar=\@xa{\@xa\@codetonarrskip\the\everypar}%
  \@xa\gmd@checkifEOL\@gobble}

\if@countalllines

  \def\gmd@countnarrline@{%
      \gmd@grefstep{codelinenum}\@newlinegfalse
      \everypar=\@xa{%
        \@xa\@codetonarrskip\the\gmd@preverypar}%^^A
      % the \cs{hy\+p\+er\+lab\+el\+@\+li\+ne} macro puts
      % a~hypertarget in a~|\raise| i.e., drives \TeX\ into the
      % horizontal mode so |\everypar| shall be issued. Therefore we
      % should restore it.
    }% of \cs{gmd@countnarrline@}

    \def\gmd@grefstep#1{% instead of diligent redefining all possible
      % commands and environments we just assign the current value of
      % the respective \TeX's primitive to the \env{codelinenum}
      % counter. Note we decrease it by $-1$ to get the proper value
      % for the next line. (Well, I~don't quite know why, but it
      % works.) %^^A~we'll step its value by 1 because it will be put
      % ^^Aat the beginning of the \emph{next} line.
      \ifnum\value{#1}<\inputlineno
        \csname c@#1\endcsname\numexpr\inputlineno-1\relax
        \ifvmode\leavevmode\fi% this line is added 2008/08/10 after an
        % ^^A(
        % all-night debuggery ;-) that showed that at one point
        % \incs{gmd@grefstep} was called in vmode which caused adding
        % \incs{penalty 10000} to the main vertical list and thus
        % forbidding page break during entire \inenv{oldmc}.
        \grefstepcounter{#1}%
      \fi}% We wrap stepping the counter in an \incs{ifnum} to avoid
    % repetition of the same ref-value (what would result in the
    % ``multiply defined labels'' warning).\par\
    % The
    % \cs{grefstepcounter} macro, defined in \pk{gmverb}, is
    % a~global
    % version of \cs{ref\-step\-count\-er}, observing the redefinition
    % made
    % to \incs{refstepcounter} by \pk{hyperref}.

    \if@printalllinenos% Note that checking this switch makes only
    % sense when |countalllines| is true.
      \def\gmd@cpnarrline{% count and print narration line
        \if@newline
          \gmd@countnarrline@
          \hyperlabel@line
          {\LineNumFont\thecodelinenum}\,\ignorespaces}%
        \fi}
      \else% not |printalllinenos|
        \emptify\gmd@cpnarrline
      \fi

\def\gmd@ctallsetup{% In the \inenv{oldmc} environments and with the
  % \incs{FileInfo} declaration (when % \inenv{countalllines} option
  % is in force) the  % code is gobbled as an argument of a~macro and
  % % then processed at one place (at the end of  % \inenv{oldmc}
  % % e.g.) so if we used  % \incs{inputlineno}, we would have got all
  % % the  % lines with the same number. But we only set the counter
  % % not \incs{refstep} it to avoid putting a~hypertarget.
  \setcounter{codelinenum}{\inputlineno}% it's global.
  \let\gmd@grefstep\hgrefstepcounter}

\else% not |countalllines| (and therefore we won't print the narration
     % lines' numbers either)
  \@emptify\gmd@cpnarrline
  \let\gmd@grefstep\hgrefstepcounter% \label{let grefstep} if we don't
  % want to count all the  lines, we only \incs{ref}-increase the
  % counter in the code layer.
  \emptify\gmd@ctallsetup
\fi% of |\if@countalllines|

\def\skiplines{\bgroup
  \let\do\@makeother \dospecials % not \incs{@sanitize} because the
  % latter doesn't recatcode braces and we want all to be quieten.\ilrr
  \gmd@skiplines}

  \edef\gmu@tempa{%
    \long\def\@nx\gmd@skiplines##1\bslash endskiplines{\egroup}}
  \gmu@tempa

\foone\obeylines{% \DefIndex\gmd@typesettexcode
  \def\gmd@typesettexcode{%
    \gmd@parfixclosingspace% it's to eat a~space closing the
    % paragraph, see \gmiflink[closingspace]{below}. It contains
    % |\par|.
    %
    % ^^A\special{color push gray 0.2645}%
    % A~verbatim group has already been opened by \cs{ttverb\+at\+im} and
    % additional \cs{cat\-code}.
    \everypar={\@@settexcodehangi}% At first attempt we thought
    % of giving the user a~|\toks| list to insert at the beginning of
    % every code line, but what for?
    % \Define*{^^M}^^A
    \def^^M{% \TeX\ code \acro{EOL}
      \@newlinegtrue% to |\refstep| the counter in proper place.
      \@dsdirgtrue% to handle the \ds\ directives.
      \global\gmd@closingspacewd=\z@% \label{noclosingspace}we
      % don't wish to eat a~closing space after a~codeline, because
      % there isn't any and a~negative rigid |\hskip| added to
      % |\parfillskip| would produce a~blank line.
      \ifhmode\par\@codeskipputgfalse\else%
        \if@codeskipput%
        \else\addvspace{\stanzaskip}\@codeskipputgtrue%
        \fi% if we've just met a~blank (code) line, we insert
        % a~|\stanzaskip| glue.
        % \label{codeskip}
      \fi%
      \prevhmodegfalse% we want to know later that now we are in the
      % vmode.
      % ^^A\special{color push gray 0.2666}%
      \@ifnextcharRS{\gmd@texcodespace}{%
        \@dsdirgfalse\gmd@dolspaces}{\gmd@charbychar}%
    }% end of |^^M|'s definition.\label{debug!2}
    % \DefIndex\gmd@texcodeEOL
    \let\gmd@texcodeEOL=^^M% for further checks inside |\gmd@charbychar|.
    \raggedright\leftskip=\CodeIndent%
    \if@aftercode%
      \gmd@nocodeskip1{iaC}%
    \else%
      \if@afternarr%
      % ^^A~\def^^C{\showthe\hyphenpenalty\showthe\rightskip}
        \if@codeskipput\else%
          \gmd@codeskip1\@aftercodegfalse%
        \fi% \label{codeskip3}
      \else\gmd@nocodeskip1{naN}%
      \fi%
    \fi% if now we are
    % switching from the narration into the code, we insert a~proper
    % vertical space.
    \@aftercodegtrue\@afternarrgfalse%
    %^^A\special{color push gray 0.2682}% before that penalty
    \ifdim\gmd@ldspaceswd>\z@% and here the leading spaces.
      \leavevmode\@dsdirgfalse%
      \if@newline\gmd@grefstep{codelinenum}\@newlinegfalse%
      \fi%
      \printlinenumber% if we don't want the lines to be numbered,
      % the respective option \incs{let}s this \CS to \incs{relax}.
      \hyperlabel@line%
      %^^A\special{color push gray 0.2689}% seems O.K.
      \mark@envir% index and/or marginize an environment if there is
      % some to be done so, see line \ref{mark@envir}.
      \hskip\gmd@ldspaceswd%
      \advance\hangindent by\gmd@ldspaceswd%
      \xdef\settexcodehangi{%
        \@nx\hangindent=\the\hangindent% and also set the
        % hanging indent setting for the same line comment case. \acro{BTW}.,
        % this |%| or rather lack of it costed me five hours of
        % debugging and rewriting. Active line ends require extreme
        % caution.
        \@nx\hangafter=1\space}%^^A~\@nx\relax
    \else%
      \glet\settexcodehangi=\@@settexcodehangi%\\
      %|%| |\printlinenumber| here produced line numbers for blank lines
      % which is what we don't want.
    \fi% of |\ifdim|
    \gmd@ldspaceswd=\z@%
    \prevhmodegfalse% we have done |\par| so we are not in the
    % hmode.
    \@aftercodegtrue% we want to know later that now we are
    % typesetting a~codeline.
    \if@ilgroup\aftergroup\egroup\@ilgroupfalse\fi% when we are in the in-line
    % comment group (for ragged right or justified), we want
    % to \label{inline.egroup.2}
    % close it. But if we did it
    % here, we would close the verbatim group for the code. But we set
    % the switch false not to repeat \inverb|\aftergroup\egroup|.
    % ^^A\special{color push gray 0.2712}% before that penalty
    \gmd@charbychar% we'll eat the code char by char to scan all the
    % macros and thus to deal properly with the case |\%| in which the
    % |%| will be scanned and won't
    % launch closing of the verbatim group.
  }% of |\gmd@typesettexcode|.
}% of |\foone\obeylines|.
\newlength\gmd@spacewd% to store the width of a~(leading)
\newlength\gmd@ldspaceswd% to store total length of gobbled leading
                          %spaces.

\let\gmd@texcodespace=\breakablevisspace

\def\gmd@dolspaces{%
  \ifx\gmd@texcodespace\@let@token
    \@dsdirgfalse
    \afterfi{\settowidth{\gmd@spacewd}{\visiblespace}%
    \gmd@ldspaceswd=\z@
    \gmd@eatlspace}%
  \else\afterfi{% about this smart macro and other of its family see
    % \pk{gmutils} sec.\,3.
    % ^^A \special{color push gray 0.2748}% debug of \penalty10000
    % ^^A~2008/08/10 was far
    % ^^A \ifnum\inputlineno>1016 \ifnum\inputlineno<1050 \show\par\fi\fi
    % ^^A~O.K.
    \if@afternarr\if@aftercode
        \ifilrr\bgroup \gmd@setilrr\fi
    \fi\fi
    \par% possibly after narration
    \if@afternarr\if@aftercode
        \ifilrr\egroup\fi
    \fi\fi
    \gmd@typesettexcode}%
  \fi}


\def\gmd@eatlspace#1{%
  \ifx\gmd@texcodespace#1%
    \advance\gmd@ldspaceswd by\gmd@spacewd% we don't
    % \incs{advance} it \incs{global}ly because the current group may be closed
    % iff we meet \inverb|%| and then we'll won't indent the line anyway.\ilrr
    \afteriffifi\gmd@eatlspace
  \else
    \if\code@delim\@nx#1%
      \gmd@ldspaceswd=\z@
      \afterfifi{\gmd@continuenarration\narrationmark}%\label{ContNarr2}
      % \changes{v0.99n}{2008/08/30}{\cs{afterfifi} added---a~bug fix}
    \else \afterfifi{\gmd@typesettexcode#1}%
    \fi
  \fi}%


\newgif\ifprevhmode


\def\gmd@charbychar#1{%
  \ifhmode\prevhmodegtrue
  \else\prevhmodegfalse
  % ^^A~\special{color push gray 0.2789}%
  \fi
  \if\code@delim\@nx#1%
    \def\next{% occurs when next a~\cs{hskip4.875pt} is to be put
      % ^^A\special{color push gray 0.2791}% O.K.
      \gmd@percenthack% to typeset |%| if a~comment
    % continues the~codeline.
    \endgroup%
    \gmd@checkifEOLmixd}% to see if next is |^^M| and then do |\par|.
  \else% i.e., we've not met the code delimiter
    \ifx\relax#1\def\next{%
      % ^^A\special{color push gray 0.2798}%
      \endgroup}% special case of end of file thanks to |\everyeof|.
    \else
      \if\code@escape@char\@nx#1%
        \@dsdirgfalse% yes, just here not before the whole |\if| because
        % then we would discard checking for \ds\ directives doable by
        % the active |%| at the `old macrocode' setting.
        \def\next{%
          \gmd@counttheline#1\scan@macro}%
      \else
        \def\next{%
          \gmd@EOLorcharbychar#1}%
      \fi
    \fi
  \fi\next}

\def\debug@special#1{%
  \ifhmode\special{color push gray 0.#1}%
  \else\special{color push gray 0.#1000}\fi}

\def\gmd@EOLorcharbychar#1{%
                             %^^A \debug@special{2829}%
  \ifx\gmd@texcodeEOL#1%
    \if@newline
    % ^^A\special{color push gray 0.281600}% no occurrence
    % ^^A      \if@countalllines\global\advance\c@codelinenum by\@ne obsolete
    % ^^A\fi
      \@newlinegfalse
    \fi
    \afterfi{#1}%\label{printhashone1}here we print |#1|.
  \else% i.e., |#1| is \emph{not} a~(very active) line end,
    \afterfi
    {%^^A \debug@special{2839}% this occurs frequently
\gmd@counttheline#1\gmd@charbychar}% \label{printhashone2}or here
    % we print |#1|. Here we would also possibly mark an environment
    % but there's no need of it because declaring an environment to
    % be marked requires a~bit of commentary and here we are after
    % a~code |^^M| with no commentary.
 \fi}

\def\gmd@counttheline{%
  \ifvmode
    \if@newline
      \leavevmode
      %^^A \debug@special{2851}%
      \gmd@grefstep{codelinenum}\@newlinegfalse
      \hyperlabel@line
    \fi
    %^^A\debug@special{2853}%
    \printlinenumber
    % ^^A\debug@special{2855}%
    \mark@envir
  \else% not vmode
    \if@newline
    % ^^A\special{color push gray 0.2842}% didn't occur
      \gmd@grefstep{codelinenum}\@newlinegfalse
      \hyperlabel@line
    \fi
  \fi}


\def\gmd@percenthack{%%
  \ifprevhmode\aftergroup\narrationmark% We add a~space after |%|,
  % because I~think it looks better. It's done |\aftergroup| to make
  % the spaces possible after the |%| not to be
  % typeset.
  % \changes{v0.99n}{2008/08/21}{\cs{space} replaced with a~tilde to
  % forbid a~line break before an in-line comment}
  \else\aftergroup\gmd@dsNarrChecker% remember that
  % \cs{gmd\-@\-pre\-cent\-hack} is only called when we've the code
  % delimiter and soon we'll close the verbatim group and right after
  % |\endgroup| there waits |\gmd@checkifEOLmixd|.
  \fi}


\newif\ifgmd@dsVerb

\foone{\obeylines}%
{%
  \def\gmd@dsVerbChecker%
  #1% stuff for checking normal directive
  #2% line contents
  ^^M{%%
\typeout{verb checker l.\the\inputlineno}%
    \ifnum\strcmp{\detokenize{#2}}{\gmd@dsVerbDelim}=\z@%
      \global\gmd@dsVerbfalse%
      \def\gmd@modulehashone{%
        \ModuleVerbClose{\gmd@dsVerbDelim}%
        \global\emptify\gmd@dsVerbDelim%
        \@afternarrgfalse\@aftercodegtrue%
        \@codeskipputgfalse %
      }%
      \@xa\@firstoftwo%
    \else \@xa\@secondoftwo %
    \fi%
    {\gmd@textEOL\gmd@modulehashone^^M}%
    {\begingroup%
      \endlinechar=\m@ne %
      \@XA{%
        \endgroup#1}\scantokens{#2}^^M% note that |\scantokens| adds
      % char |\endlinechar| which we assure to be |^^M|
    }%
  }% of |\gmd@dsVerbChecker|
}% of |\obeylines|

\def\gmd@dsChecker#1{%
  \@dsdirgfalse
  \ifgmd@dsVerb
    \@xa\@firstofone
  \else
    \@xa\@secondoftwo
  \fi
  {\gmd@dsVerbChecker}%
  {#1}%
}% of |\gmd@dsChecker|

\def\gmd@dsNarrChecker#1{%%
  \gmd@dsChecker
  {\@ifnextcharRS<{%
      \@xa\gmd@docstripdirective\@gobble}{#1}}%
}% of |\gmd@dsNarrChecker|


\def\gmd@checkifEOL{%
  \gmd@cpnarrline
  \everypar=\@xa{\@xa\@codetonarrskip% we add the
    % macro that'll insert a~vertical space if we leave the code and
    % enter the narration.
    \the\gmd@preverypar}%
  \@ifnextcharRS{\gmd@textEOL}{%
  %^^A\@ifnextMac{%^^A}
    \@dsdirgfalse
    \par\ignorespaces}{%
    \gmd@narrcheckifds}}%

\def\gmd@narrcheckifds{%^^A\typeout{narr if ds \on@line}%
  \gmd@dsNarrChecker{\ignorespaces}}


\def\gmd@checkifEOLmixd{%
  \gmd@cpnarrline
  \everypar=\@xa{\@xa\@codetonarrskip\the\gmd@preverypar}%
  %
  % \label{longlinethatshouldbebroken}
  \@afternarrgfalse\@aftercodegtrue
  \ifhmode\@codeskipputgfalse\fi
  \@ifnextcharRS{\gmd@textEOL}{%
  %^^A\@ifnextMac{%^^A}
    {\raggedright\gmd@endpe\par}% without \incs{raggedright} this
    % \incs{par}
    % would be justified which is not appropriate for a~long codeline
    % that should be broken, e.g., \ref{longlinethatshouldbebroken}.
    \prevhmodegfalse
    \gmd@endpe\ignorespaces}{%
    % If a~codeline ends with |%|
    % (|prevhmode|${}=={}$True) first |\gmd@endpe| sets the parameters
    % at the \TeX\ code values and |\par| closes a~paragraph and the
    % latter |\gmd@endpe| sets the parameters at the narration values.
    % In the other case both |\gmd@endpe|s do the same
    % and |\par| between them does nothing.
    % \DefIndex\par
    \def\par{% the narration \cs{par}.
      \ifhmode% (I~added this |\ifhmode| as a~result of a~heavy
      % debug.)
        \if@afternarr\if@aftercode
            \unless\if@ilgroup\bgroup\@ilgrouptrue\fi
            \ifilrr\gmd@setilrr\fi
        \fi\fi
        \@@par
        \if@afternarr
          \if@aftercode
          \if@ilgroup\egroup\fi% \label{inline.egroup.1}if we are both after code
            % and after narration it means we are after an in-line
            % comment. Then we probably end a~group opened in line
            % \ref{inline.bgroup}
            \if@codeskipput\else\gmd@codeskip2\@aftercodegfalse\fi
            %\label{codeskip4}
          \else\gmd@nocodeskip2{naC}%
          \fi
        \else\gmd@nocodeskip2{naN}%
        \fi
        \prevhmodegfalse\gmd@endpe% when taken out of |\ifhmode|, this
        % line caused some codeline numbers were typeset with
        % |\leftskip|${}=0$.
        \everypar=\@xa{%
          \@xa\@codetonarrskip\the\gmd@preverypar}%
        \let\par\@@par%
      \fi}% of \cs{par}.
    \gmd@endpe\ignorespaces}}


\def\gmd@endpe{%
  \ifprevhmode
    \settexcodehangi%\unskip ndent
    \leftskip=\CodeIndent
  \else
    \leftskip=\TextIndent
    \hangindent=\z@
    \everypar=\@xa{%
      \@xa\@codetonarrskip\the\gmd@preverypar}%
  \fi}

\newif\ifilrr

\def\ilrr{%\changes{v0.99n}{2008/08/21}{added}
  \if@aftercode
    \unless\if@ilgroup\bgroup\@ilgrouptrue\fi% \label{inline.bgroup} If we are
    % `aftercode', then we are in an in-line comment. Then we open
    % a~group to be able to declare e.g.\ \cs{raggedright} for that
    % comment only. This group is closed in line \ref{inline.egroup.1}
    % or \ref{inline.egroup.2}.
    \ilrrtrue
  \fi}

\newif\if@ilgroup

\def\gmd@setilrr{\rightskip0ptplus\textwidth}

\def\ilju{% when in-line comments are ragged right in general but we
  % want just this one to be justified.
  \if@aftercode
    \unless\if@ilgroup\bgroup\@ilgrouptrue\fi
    \ilrrfalse
  \fi}

\def\verbcodecorr{%\changes{v0.99n}{2008/08/21}{added}
  % a~correction of vertical spaces between a~\env{verbatim} and
  % code. We put also a~\cs{par} to allow parindent in the next
  % commentary.
  \vskip-\lastskip\vskip-4\CodeTopsep\vskip3\CodeTopsep\par}

\if@uresetlinecount% with |uresetlinecount| option\dots
  \@relaxen\gmd@resetlinecount% \dots\  we turn
  % resetting the counter by \cs{Doc\+In\+put} off\dots
  \newcommand*\resetlinecountwith[1]{%
    \newcounter{codelinenum}[#1]}% \dots\ and provide a~new
  % declaration of the counter.
\else% With the option turned off\dots
  \newcounter{DocInputsCount}%
  \newcounter{codelinenum}[DocInputsCount]% \dots\ we declare the
  % |\DocInput|s' number counter and the codeline counter
  % to be reset with stepping of it.
  % \changes[\c@DocInputsCount]{v0.98c}{06/9/8}{added for fixing
  % duplication of \pk{hyperref} labels in the case of a~multiple
  % \cs{DocInput}}
  \newcommand*\gmd@resetlinecount{\stepcounter{DocInputsCount}}% \dots
  % and let the |\DocInput| increment the |\DocInput|s number count
  % and thus reset the codeline count. It's for unique naming of the
  % \pk{hyperref} labels.
\fi

\newcommand*\printlinenumber{%
  \leavevmode\llap{\rlap{\LineNumFont$\phantom{999}$\llap{\thecodelinenum}}%
    \hskip\leftskip}}

\def\LineNumFont{\normalfont\tiny}

\if@linesnotnum\@relaxen\printlinenumber\fi

\newcommand*\hyperlabel@line{%
  \if@pageindex% It's good to be able to switch it any time not just
  % define it once according to the value of the switch set by the
  % option.
  \else
    \raisebox{2ex}[1ex][\z@]{\gmhypertarget[clnum.%
      \HLPrefix\arabic{codelinenum}]{}}%
  \fi}

\newcommand*\gmd@codeskip[1]{%
  \@@par\addvspace\CodeTopsep
  \@codeskipputgtrue\@nostanzagfalse}

\newgif\if@codeskipput

\newgif\if@nostanza

\newcommand*\gmd@nocodeskip[2]{}

\if1 1
  \renewcommand*\gmd@codeskip[1]{%
    \hbox{\rule{1cm}{3pt} #1!!!}}
  \renewcommand*\gmd@nocodeskip[2]{%
    \hbox{\rule{1cm}{0.5pt} #1: #2 }}
\fi

\newgif\if@aftercode
\newgif\if@afternarr

\def\@codetonarrskip{%
  \if@codeskipput\else
    \if@afternarr\gmd@nocodeskip4{iaN}\else
      \if@aftercode
        % We are at the beginning of |\everypar|, i.e., \TeX\ has just entered
        % the hmode and put the |\parindent| box. Let's remove it then.
        {\setbox0=\lastbox}%
        % Now we can put the vertical space and state we are not `aftercode'.
        \gmd@codeskip4%
        % \label{codeskip5}
      \else\gmd@nocodeskip4{naC}%
      \fi
    \fi
  \fi
  \leftskip\TextIndent% this line is a~patch against
  % a~bug-or-feature that in certain cases the narration |\leftskip|
  % is left equal the code leftskip. (It happens when there are
  % subsequent code lines after an in-line comment not ended with
  % an explicit |\par|.) Before v0.99n it was just after line \ref{codeskip5}.
  \@aftercodegfalse\@nostanzagtrue
  % \changes{v0.99o}{2008/09/04}{a~bug fix: added \cs{@nostanzagtrue}}
}

\long\def\@trimandstore#1\@trimandstore{%
  \def\@trimandstore@hash{#1}%
  \ifx\@trimandstore@hash\@empty% we check if |#1| is
  % nonempty. The \incs{if} \inverb*|\relax#1\relax| trick is not
  % recommended here because using it we couldn't avoid expanding |#1|
  % if it'd be expandable.
    \gmd@preverypar={}%
  \else
    \afterfi{\@xa\@trimandstore@ne\the\everypar\@trimandstore}%
  \fi}

\long\def\@trimandstore@ne#1#2\@trimandstore{%\label{@trimandstore}
  \def\trimmed@everypar{#2}%
  \ifx\@codetonarrskip#1%
    \gmd@preverypar=\@xa{\trimmed@everypar}%
  \else
    \gmd@preverypar=\@xa{\the\everypar}%
  \fi}
\catcode`\^^B=\active% note we re|\catcode| \<char2> globally, for the
\catcode`\^^V=\active % the same for |^^V|.
\foone{\obeylines}%% \Define*{^^B}
{\pdef\QueerCharTwo{%
    \protected\def^^B##1^^M{%
      %^^A\@newlinegtrue\gmd@countnarrline
      \ifhmode\unskip\space\ignorespaces\fi}}% It shouldn't be \incs{ } not to
  % drive \TeX\ into hmode.
  %
  % \Define*{^^V}
  \pdef\QueerV{%
    \unless\ifdefined\gmd@QueerV%
      %
      \def\gmd@V@percent{\global\let\verb@balance@group\@empty  %
        \egroup\endgroup %
      }% of |\gmd@V@percent|
      %
      \@xa\def\@xa\verb@egroup@V\@xa{%
        \gmd@V@percent ^^M%
      }% of |\verb@egroup@V|.
      %
      \addtomacro\gmd@V@percent{\narrationmark}%
      %
      \pdef\gmd@QueerV{%
        \scantokens\@xa{\code@delim %
          \fooatletter{\@ifQueerEOL\@gobble}{}%
        }% of |\scantokens|
        %
        \par%
        {\codett\verbhyphen}\narrationmark %
        \begingroup %
        \catcode`\^^M=\active %
        %
        \let\verb@egroup=\verb@egroup@V %
        \verb^^M%%
        %
        \begingroup %
        \@xa\lccode\@xa`\@xa~\@xa`\code@delim%
        \lowercase{\endgroup\let~\gmd@V@percent }%
        \@xa\catcode\@xa`\code@delim\active %
      }%
      %
      %
    \fi% of unless  |\gmd@QueerV| defined
    \let^^V\gmd@QueerV%
    \catcode`\^^V=\active%
  }% of |\QueerV|
}% of |\foone|

\QueerCharTwo
\QueerV

\AtBegInput{\@ifEOLactive{\catcode`\^^B\active}{}\QueerCharTwo}% \label{QCh2}
\catcode`\^^A=\active% note we re|\catcode| \<char1> globally, for the
\foone\obeylines{%%\DefIndex\QueerCharOne \Define*{^^A}
  \def\QueerCharOne{%
    \def^^A{%^^A no need to write \incs{gmd@countnarrline} because
      % ^^A \inverb|^^M| will contain it if \inenv{countalllines} is in force.
      \bgroup\let\do\@makeother\dospecials\gmd@gobbleuntilM}}%
  \def\gmd@gobbleuntilM#1^^M{\egroup\ignorespaces^^M}%
}

\QueerCharOne

\AtBegInput{\@ifEOLactive{\catcode`\^^A\active}\QueerCharOne}% see note

\def\StraightEOL{%\label{StraightEOL}
  \catcode`\^^M=5
  \catcode`\^^A=14
  \catcode`\^^B=14
  \def\^^M{\ }}


\foone\obeylines{%
  \def\QueerEOL{%\label{QueerEOL}
    \catcode`\^^M=\active%
    \let^^M\gmd@textEOL%
    \catcode`\^^A=\active%
    \catcode`\^^B=\active% I~only re|\catcode| \<char1> and \<char2>
    % hoping no one but me is \emph{that} perverse to make them
    % |\active| and (re)define. (Let me know if I'm wrong at this point.)
    \let\^^M=\gmd@bslashEOL}%
}


\def\gmd@parfixclosingspace{{%
    \advance\parfillskip by-\gmd@closingspacewd
    \if@aftercode\ifilrr \gmd@setilrr \fi\fi
    \par}%
  \if@ilgroup\aftergroup\egroup\@ilgroupfalse\fi% we are in the
  % verbatim group so we
  % close the in-line comment group after it if the closing is not yet set.
}
\newskip\gmd@closingspacewd
\newcommand*\gmd@setclosingspacewd{%
  \global\gmd@closingspacewd=\fontdimen2\font%
    plus\fontdimen3\font minus\fontdimen4\font\relax}

\foone\obeylines{%\DefIndex*{\^^M}
  \if 1 1%
    \protected\def\gmd@bslashEOL{\ \@xa\ignorespaces^^M}%
  }% of \cs{foone}. Note we interlace here \incs{if} with a~group.
\else%
  \protected\def\gmd@bslashEOL{%
    \ifhmode\unskip\fi\ \ignorespaces}
    %^^A~\if@countalllines\@newlinegtrue\gmd@cpnarrline\fi%
  \fi

\gaddtomacro\@verbatim{\leftskip=\CodeIndent}

\AtBegInput{\long\def\check@percent#1{%
    \gmd@cpnarrline% to count the verbatim lines and possibly print
    % their numbers. This macro is used only by the verbatim end of line.
    \@xa\ifx\code@delim#1\else\afterfi{#1}\fi}}
\def\AddtoPrivateOthers#1{%
  \@xa\def\@xa\doprivateothers\@xa{%
    \doprivateothers\do#1}}%


\begingroup
\obeylines% \DefIndex\gm@verb@eol
\AtBegInput{\def\gm@verb@eol{\obeylines%
    \def^^M{\verb@egroup\@latex@error{%
        \@nx\verb ended by end of line}%
      \@ifEOLactive{^^M}{\@ehc}}}}%
\endgroup


\def\verbatimfont{\narrativett}
\def\codett{\tt}

\pdef\texttt#1{{\narrativett#1}}


\VerbatimPitch

\def\ResultsIn{results in:}

\DeclareEnvironment{verbatim@p}{}
{\begingroup
  \verbatim
}
{\endverbatim
  \endgroup
  \ResultsIn
  \[\parbox{0,85\textwidth}{%
    \newlinechar=\endlinechar
    \StraightEOL
    \scantokens\@xa{\VerbatimContents}%
  }% of parbox
  \]%
}





\edef\actualchar{\string @}
\edef\quotechar{\string "}
\edef\encapchar{\xiiclub}
\edef\levelchar{\string !}
\def\CodeEscapeChar#1{%
  \begingroup
  \escapechar\m@ne
  \xdef\code@escape@char{\string#1}%
  \endgroup}
\CodeEscapeChar\\

\@ifundefined{MakePrivateLetters}{%\label{MPL}
  \def\MakePrivateLetters{\makeatletter\catcode`\*=11 }}{}
\def\MakePrivateOthers{\let\do=\@makeother \doprivateothers}
\def\doprivateothers{\do\ \do\^}


\foone\obeylines{%
  \def\scan@macro#1{%
    \ifx#1^^M\@xa#1\else\afterfi{\scan@macro@#1}\fi%
  }% of |\scan@macro|,
}% of |\foone|.

\def\scan@macro@#1{% we are sure to scan at least one token which is
  % not the line end and
  % therefore we define this macro as one-parameter.\par
  \step@checksum% \label{checksumUse}(see line \ref{checksum} for
  % details),\par
  % Then, unlike in \docfm , we do \emph{not} check if the scanning is
  % allowed, because here it's always allowed and required.\par
  % Of course, I~can imagine horrible perversities, but I~don't think
  % they should really be taken into account.  Giving the letter |a|
  % |\catcode| other than \catletter\ surely would be one of those
  % perversities. Therefore I~feel safe to take the character |a| as
  % a~benchmark letter.
  \ifcat a\@nx#1%
    \quote@char#1%
    \xdef\macro@iname{\gmd@maybequote#1}% global for symmetry with
    % line \ref{x474}.
    \xdef\macro@pname{\string#1}%\label{stringing0} we'll print entire
    % name of the macro later.\par
    % We |\string| it here and in the lines \ref{stringing1} and
    % \ref{stringing2} to be sure it is whole \catother\ for easy
    % testing for special index entry formats, see line
    % \ref{pnametestDef} etc. Here we are sure the result of |\string|
    % is \catother\ since its argument is \catletter.
    \afterfi{\@ifnextcat{a}{\gmd@finishifstar#1}{\finish@macroscan}}%
  \else% |#1| is not a~letter, so we have just scanned a~one-char
  % \CS.\par
  % Another reasonable |\catcode|s assumption seems to be that the
  % digits are \catother. Then we don't have to
  % type (|%|)|\expandafter\@gobble\string\a|. We do the |\uccode|
  % trick to be sure that the char we write as the macro's name is
  % \catother.
    {\uccode`9=`#1%
      \uppercase{\xdef\macro@iname{9}}%\label{x474}
    }%
    \quote@char#1%
    \xdef\macro@iname{\gmd@maybequote\macro@iname}%
    \xdef\macro@pname{\xiistring#1}%\label{stringing1}
    \afterfi \finish@macroscan
  \fi}% of |\scan@macro@|.
\def\continue@macroscan#1{%
  \quote@char#1%
  \xdef\macro@iname{\macro@iname \gmd@maybequote#1}%
  \xdef\macro@pname{\macro@pname \string#1}%\label{stringing2} we know
  % \inverb*|#1| to be \catletter, so
  % we don't need \incs{xiistring}.
  \@ifnextcat{a}{\gmd@finishifstar#1}{\finish@macroscan}%
}

\def\gmd@finishifstar#1{%
  \if*\@nx#1\afterfi\finish@macroscan% note we protect |#1| against
  % expansion. In \pk{gmdoc} verbatim scopes some chars are active
  % (e.g.\ \inverb|\|\,).
  \else\afterfi\continue@macroscan
  \fi}


\def\quote@char#1{{\uccode`9=`#1% at first I~took digit 1 for this
    % |\uccode|ing but then |#1| meant |#|\<\#1> in |\uppercase|'s
    % argument, of course.
    \uppercase{% \DefIndex\gmd@maybequote
      \@ifinmeaning 9\of \indexcontrols
      {\glet\gmd@maybequote\quotechar}%
      {\g@emptify\gmd@maybequote}%
    }%
  }}


\AtBeginDocument{\xdef\indexcontrols{%
    \bslash\levelchar\encapchar\actualchar\quotechar}}

\newif\ifgmd@glosscs% we use this switch to keep the information

\newcommand*\finish@macroscan{%\label{506}\par
  % First we check if the current \CS is not just being defined. The
  % switch may be set true in line \ref{519}
  \ifgmd@adef@cshook% if so, we throw  it into marginpar and index as
    % a~def entry\dots
    \gmu@ifundefined{gmd/iexcl/\macro@pname\space}{% \dots\ if it's not excluded
      % from indexing.
       \@xa\Code@MarginizeMacro\@xa{\macro@pname}%
      \@xa\@defentryze\@xa{\macro@pname}{1}}{}%% here we declare the kind of
    % index entry and define |\last@defmark| used by \cs{changes}
    \global\gmd@adef@cshookfalse% we falsify the hook that was set
    % true just for this \CS.
  \fi
  % We have the \CS's name for indexing in |\macro@iname| and
  % for print in |\macro@pname|. So we index it. We do it a~bit
  % counter-crank way because we wish to use more general indexing
  % macro.
  \if\verbatimchar\macro@pname% \label{3039}it's important that |\verbatimchar|
  % comes before the macro's name: when it was reverse, the |\tt| \CS
  % turned this test true and left the |\verbatimchar| what resulted
  % with `|\+tt|' typeset. Note that this test should turn true iff
  % the scanned macro name shows to be the default
  % |\verb|'s delimiter. In such a~case we give
  % |\verb| another delimiter, namely |$|: ^^A$
    \def\im@firstpar{[$%^^A$
      ]}%
  \else\def\im@firstpar{}%
  \fi
  \@xa \index@macro\im@firstpar\macro@iname\macro@pname
  % \label{3049}
  \maybe@marginpar\macro@pname
  \if\xiispace\macro@pname\relax\gmd@texcodespace
  \else
    {\noverbatimspecials\Restore@Macro\verb
      \@xa\scanverb\@xa{\macro@pname}}% we typeset scanned \CS.
  \fi
  % \changes[\finish@macroscan]{v0.99n}{2008/09/30}{the case of
  %   \cs{\vs}  taken care of}
  \let\next\gmd@charbychar
  \gmd@detectors% \label{519} for automatic detection of
  % definitions. Defined and
  % explained in the next section. It redefines
  % |\next| if detects a~definition command and thus
  % sets the switch of line \ref{506} true.
  \next
  % \label{next 3690}
}

\def\maybe@marginpar#1{%
  \gmu@ifundefined{gmd/2marpar/\@xa\detokenize\@xa{#1}}{}{%
    \edef\gmu@tempa{%
      \unexpanded{\Text@Marginize*}%
      {\bslash\@xa\unexpanded\@xa{#1}}% ^^A
    }\gmu@tempa
    % ^^A %    |\expandafter|s
    % ^^A     % \possfil because the |\Text@Marginize| command applies |\string| to its
    % ^^A     % argument.
    % \incs{macro@pname}, which will be the only possible
    % argument to
    % \incs{may\+be\+@mar\+g\+in\+par},
    % contains the macro's name
    % without the escape char so we added it here.
    \@xa\g@relaxen
    \csname gmd/2marpar/\@xa\detokenize\@xa{#1}\endcsname% we reset the switch.
  }}

\outer\def\DeclareDefining{\begingroup
  \MakePrivateLetters
  \gmu@ifstar
    {\gdef\gmd@adef@defaulttype{text}\Declare@Dfng}%
    {\gdef\gmd@adef@defaulttype{cs}\Declare@Dfng}%
}

\newcommand*\Declare@Dfng[2][]{%
  \endgroup
  \Declare@Dfng@inner{#1}{#2}%
  \ifgmd@adef@star% this switch may be set false in first
  % \incs{Declare@Dfng@inner} (it's the |star| key).
    \Declare@Dfng@inner{#1}{#2*}% The catcode of |*| doesn't matter since
    % it's in
    % \incs{csname\+…\+\bslash end\+cs\+na\+me}
    % everywhere.
  \fi}

\def\Declare@Dfng@inner#1#2{%
  \edef\gmd@resa{%
    \@nx\setkeys[gmd]{adef}{type=\gmd@adef@defaulttype}}%
  \gmd@resa
  {\escapechar\m@ne
    \xdef\gmd@adef@currdef{\string#2}%
    % ^^A~\typeout{@@@ gmd@adef@currdef:::\gmd@adef@currdef::::}%
  }%
  \gmd@adef@setkeysdefault
  \setkeys[gmd]{adef}{#1}%
  \@xa\@ifinmeaning
    \csname gmd@detect@\gmd@adef@currdef\endcsname
    % \label{550}
    \of\gmd@detectors{}{%
      \@xa\gaddtomacro\@xa\gmd@detectors\@xa{%
        \csname gmd@detect@\gmd@adef@currdef\endcsname}}% we add a~\CS\\
    % |%| |\gmd@detect@|\<def name> (a~\textbf{detector}) to the
    % meaning of the \textbf{detectors' carrier}. And we define it to
    % detect the \inverb|#2| command.
  \@xa\xdef\csname gmd@detectname@\gmd@adef@currdef\endcsname{%
    \gmd@adef@currdef}%
  \edef\gmu@tempa{% this |\edef| is to expand |\gmd@adef@TYPE|.
    \global\@nx\@namedef{gmd@detect@\gmd@adef@currdef}{%
      \@nx\ifx
        \@xanxcs{gmd@detectname@\gmd@adef@currdef}%
        \@nx\macro@pname
        \@nx\n@melet{next}{gmd@adef@\gmd@adef@TYPE}%
        \@nx\n@melet{gmd@adef@currdef}{gmd@detectname@\gmd@adef@currdef}%
      \@nx\fi}}%
  \gmu@tempa
  \SMglobal\Store@MacroSt {gmd@detect@\gmd@adef@currdef}% we store the \CS to
  % allow its temporary discarding later.
}

\def\gmd@adef@setkeysdefault{%
  \setkeys[gmd]{adef}{star,prefix,KVpref}}

\define@boolkey[gmd]{adef}{star}[true]{}

\define@key[gmd]{adef}{prefix}[]{%
  \edef\gmd@resa{%
    \def\@xanxcs{gmd@adef@prefix@\gmd@adef@currdef }{%
      #1}}%
  \gmd@resa}

\def\gmd@KVprefdefault{KV}% in a~separate macro because we'll need
                            % it in \cs{ifx}.

\define@key[gmd]{adef}{KVpref}[\gmd@KVprefdefault]{%
  \edef\gmd@resa{#1}%
  \ifx\gmd@resa\gmd@KVprefdefault
  \else
    \@namedef{gmd@adef@KVprefixset@\gmd@adef@currdef}{1}%
    \gmd@adef@setKV% whenever the |KVpref|fix is set (not default), the
    % declared command is assumed to be \pk{keyval}ish.
  \fi
  \edef\gmd@resa{#1}% because |\gmd@adef@setKV| redefined it.
  \edef\gmd@resa{%
    \def\@xanxcs{gmd@adef@KVpref@\gmd@adef@currdef}{%
      \ifx\gmd@resa\empty
      \else#1@\fi}}% as in \pk{xkeyval}, if the \acro{KV} prefix is not
  % empty, we add \inverb|@| to it.
  \gmd@resa}

\define@key[gmd]{adef}{KVfam}[]{%
  \edef\gmd@resa{#1}%
  \@namedef{gmd@adef@KVfamset@\gmd@adef@currdef}{1}%
  \edef\gmd@resa{%
    \def\@xanxcs{gmd@adef@KVfam@\gmd@adef@currdef}{%
      \ifx\gmd@resa\empty
      \else#1@\fi}}%
  \gmd@resa
  \gmd@adef@setKV}% whenever the |KVfam|ily is set, the declared command is
                  % assumed to be \pk{keyval}ish.

\define@choicekey[gmd]{adef}{type}
  [\gmd@adef@typevals\gmd@adef@typenr]
  {% the list of possible types of defining commands
    def,
    newcommand,
    cs,% equivalent to the two above, covers all the cases of defining
          % a~\CS, including the \PlainTeX\ \inverb|\new›…| and
          % \LaTeX\ |\newlength|.
    newenvironment,
    text,% equivalent to the one above, covers all the commands defining
         % its first mandatory argument that should be text,
         % \inverb|\DeclareOption| e.g.
    define@key,% special case of more arguments important; covers the
    % \pk{xkeyval} defining commands.
    dk,% a~shorthand for the one above.
    DeclareOptionX,% another case of special arguments configuration,
    % covers the \pk{xkeyval} homonym.
    dox,% a~shorthand for the one above.
    kvo% one of option defining commands of the \pk{kvoptions} package
       % by Heiko Oberdiek (a~package available o~\acro{CTAN} in the
       % \pk{oberdiek} bundle).
  }
  {% In fact we collapse all the types just to four so far:
    \ifcase\gmd@adef@typenr% if |def|
      \gmd@adef@settype{cs}{0}%
    \or% when |newcommand|
      \gmd@adef@settype{cs}{0}%
    \or% when |cs|
      \gmd@adef@settype{cs}{0}%
    \or% when |newenvironment|
      \gmd@adef@settype{text}{0}%
    \or% when |text|
      \gmd@adef@settype{text}{0}%
    \or% when |define@key|
      \gmd@adef@settype{dk}{1}%
    \or% when |dk|
      \gmd@adef@settype{dk}{1}%
    \or% when |DeclareOptionX|
      \gmd@adef@settype{dox}{1}%
    \or% when |dox|
      \gmd@adef@settype{dox}{1}%
    \or% when |kvo|
      \gmd@adef@settype{text}{1}%% The \pk{kvoptions} option
      %% definitions take first mandatory
      % argument as the option name and they define a~\pk{keyval} key
      % whose macro's name begins with the prefix/family, either default or
      % explicitly declared. The \pk{kvoptions} prefix/family is
      % supported in \pk{gmdoc} with \inverb|[KVpref=, KVfam=|\<family>|]|.
    \fi}

\def\gmd@adef@settype#1#2{%
  \def\gmd@adef@TYPE{#1}%
  \ifnum1=#2 % now we define (or not) a~quasi-switch that fires for
             % the \pk{keyval}ish definition commands.
    \gmd@adef@setKV
  \fi}

\def\gmd@adef@setKV{%
  \edef\gmd@resa{%
    \def\@xanxcs{gmd@adef@KV@\gmd@adef@currdef}{1}%
  }%
  \gmd@resa}

\emptify\gmd@detectors

\newif\ifgmd@adef@cshook

\def\gmd@adef@cs{\global\gmd@adef@cshooktrue\gmd@charbychar}


\def\gmd@adef@text{\gdef\gmd@lbracecase{1}\gmd@charbychar}

\foone{%
  \catcode`\[\active
  % ^^A>\]
  \catcode`\<\active}
{%\par
  % The detector of \pk{xkeyval} |\define@›«[…]»key|:
  \def\gmd@adef@dk{%
    \let[\gmd@adef@scanKVpref
    \catcode`\[\active
    % ^^A\]]
    \gdef\gmd@lbracecase{2}%
    \gmd@adef@dfKVpref\gmd@KVprefdefault% We set the default value of
    % the \pk{xkeyval} prefix. Each time again because an assignment
    % in \inverb|\gmd@adef@dfKVpref| is global.\ilrr
    \gmd@adef@checklbracket}

  % The detector of \pk{xkeyval} |\DeclareOptionX|:
  \def\gmd@adef@dox{%
    \let[\gmd@adef@scanKVpref
    \let<\gmd@adef@scanDOXfam
    \catcode`[\active
    % ^^A]]
    \catcode`<\active
    \gdef\gmd@lbracecase{1}%
    \gmd@adef@dfKVpref\gmd@KVprefdefault% We set the default values of
                                % the \pk{xkeyval} prefix\dots
    \edef\gmd@adef@fam{\gmd@inputname}% \dots\ and family.
    \gmd@adef@dofam
    % \label{defDOXfam}
    \gmd@adef@checkDOXopts}%
}

\def\gmd@adef@checklbracket{%
  \@ifnextchar[%^^A]
  \gmd@adef@scanKVpref\gmd@charbychar}% note that

\def\gmd@adef@checkDOXopts{%
  \@ifnextchar[\gmd@adef@scanKVpref%^^A]
  {\@ifnextchar<\gmd@adef@scanDOXfam\gmd@charbychar}}

\def\gmd@adef@scanKVpref#1#2]{%
  \gmd@adef@dfKVpref{#2}%
  [#2]\gmd@charbychar}

\def\gmd@adef@dfKVpref#1{%
  \ifnum1=0\csname gmd@adef@KVprefixset@\gmd@adef@currdef\endcsname
    \relax
  \else
    \edef\gmu@resa{%
    \gdef\@xa\@nx
    \csname gmd@adef@KVpref@\gmd@adef@currdef\endcsname{%
      \ifx\relax#1\relax
      \else#1@%
      \fi}}%
    \gmu@resa
  \fi}

\def\gmd@adef@scanDOXfam{%
  \ifnum12=\catcode`\>\relax
    \let\next\gmd@adef@scanfamoth
  \else
    \ifnum13=\catcode`\>\relax
      \let\next\gmd@adef@scanfamact
    \else
      \PackageError{gmdoc}{> neither `other' nor `active'! Make it
        `other' with \bslash AddtoPrivateOthers\bslash\>.}{}%
    \fi
  \fi
  \next}

\def\gmd@adef@scanfamoth#1>{%
    \edef\gmd@adef@fam{\@gobble#1}% there is always
    % \cs{gmd@charbychar} first.
    \gmd@adef@dofam
    <\gmd@adef@fam>%
  \gmd@charbychar}

\foone{\catcode`\>\active}
  {\def\gmd@adef@scanfamact#1>{%
      \edef\gmd@adef@fam{\@gobble#1}% there is always
      % \cs{gmd@charbychar} first.
      \gmd@adef@dofam
      <\gmd@adef@fam>%
      \gmd@charbychar}%
  }

\def\gm@lbracehook{%
  \ifcase\gmd@lbracecase\relax
  \or% when  1
    \afterfi{%
      \gdef\gmd@lbracecase{0}%
      \gmd@adef@scanname}%
  \or% when 2---the first mandatory argument of two (|\define@›«[…]»key|)
    \afterfi{%
    \gdef\gmd@lbracecase{3}%
     \gmd@adef@scanDKfam}%
  \or% when 3---the second mandatory argument of two (the key name).
    \afterfi{%
      \gdef\gmd@lbracecase{0}%
      \gmd@adef@scanname}%
  \fi}

\def\gmd@lbracecase{0}% we initialise the hook caser.


\foone{\catcode`\[1 \catcode`\]2 \catcode`\}12 }
  [% Note that till line \ref{738} the square brackets are grouping
   % and the right brace is `other'. ^^A{
  \def\gmd@adef@scanDKfam#1}[%^^A{
    \edef\gmd@adef@fam[\@gobble#1]% there is always
    % \cs{gmd@charbychar} first.
    \gmd@adef@dofam
    \gmd@adef@fam}%
  \gmd@charbychar]

  % ^^A{
  \def\gmd@adef@scanname#1}[%^^A{
    \@makeother\[%^^A\]
    \@makeother\<%
    % The scanned name begins with |\gmd@charbychar|, we have to be
    % careful.
    \gmd@adef@deftext[#1]%
    \@gobble#1}%
    \gmd@charbychar]
  ]

\def\gmd@adef@dofam{%
  \ifnum1=0\csname gmd@adef@KVfamset@\gmd@adef@currdef\endcsname
    \relax% a~family declared with |\DeclareDefining| overrides the
          % one currently scanned.
  \else
    \edef\gmu@resa{%
      \gdef\@xa\@nx
      \csname gmd@adef@KVfam@\gmd@adef@currdef\endcsname
      {\ifx\gmd@adef@fam\empty
        \else\gmd@adef@fam @%
        \fi}}%
    \gmu@resa
  \fi}

\def\gmd@adef@deftext#1{%
  \@xa\def\@xa\macro@pname\@xa{\@gobble#1}%% we gobble |\gmd@charbychar|, cf. above.
  \edef\macro@pname{\@xa\detokenize\@xa{\macro@pname} }% note the
  % space at the end.
  \edef\macro@pname{\@xa\@xiispaces\macro@pname\@nil}%
  \@xa\Text@Marginize\@xa{\macro@pname}%
  \gmd@adef@indextext
  \edef\gmd@adef@altindex{%
    \csname gmd@adef@prefix@\gmd@adef@currdef \endcsname}%
  %\hskip-\parindent and we add the \pk{xkeyval} header if we are in \pk{xkeyval}
  % definition.
  \ifnum1=0\csname gmd@adef@KV@\gmd@adef@currdef \endcsname\relax% The\\ \CS
  % \inverb|\gmd@adef@KV@|\<def. command> is defined |{1}| (so \cs{ifnum}
  % gets |1=01\relax|---\hskip0sptrue) iff \<def. command> is a~\pk{keyval}
  % definition. In that case we check for the \inverb|KVpref|ix and
  % \inverb|KVfam|ily. (Otherwise |\gmd@adef@KV@|\<def. command> is undefined
  % so \cs{ifnum} gets |1=0\relax|---false.)\ilrr
    \edef\gmd@adef@altindex{%
      \gmd@adef@altindex
      \csname gmd@adef@KVpref@\gmd@adef@currdef \endcsname}%
    \edef\gmd@adef@altindex{%
      \gmd@adef@altindex
      \csname gmd@adef@KVfam@\gmd@adef@currdef \endcsname}%
  \fi
  \ifx\gmd@adef@altindex\empty
  \else% we make another index entry of the definiendum with prefix/KVheader.
    \edef\macro@pname{\gmd@adef@altindex\macro@pname}%
    \gmd@adef@indextext
  \fi}

\def\gmd@adef@indextext{%
  \@xa\@defentryze\@xa{\macro@pname}{0}% declare the definiendum has to
  % have a~definition entry and  should appear
  % without backslash in the changes history.
  \gmd@doindexingtext% redefine |\do| to an indexing macro.
  \@xa\do\@xa{\macro@pname}}




\DeclareDefining[star=false]\def
\DeclareDefining[star=false]\pdef% it's a~\pk{gmutils}' shorthand for \inverb|\protected\def|.
\DeclareDefining[star=false]\provide% a~\pk{gmutils}' conditional \incs{def}.
\DeclareDefining[star=false]\pprovide% a~\pk{gmutils}' conditional \incs{pdef}.


\def\UnDef{{% \changes{v0.99n}{2008/08/30}{a~bug fixed:
    % \cs{gmd@charbychar} appended to \cs{next}---without it
    % a~subsequent in-line comment was typeset verbatim}
    % \UnDef
    \gmd@adef@selfrestore\def
  }}

\def\UnPdef{{\gmd@adef@selfrestore\pdef}}

\Store@Macro\UnDef% because the `hiding' commands relax it.

\def\HideDef{% \changes{v0.99n}{2008/08/30}{added the starred version
             % that calls \cs{UnDef}}
  \gmu@ifstar\UnDef{\HideDefining\def\relaxen\UnDef}}

\def\ResumeDef{%
  \ResumeDefining\def
  \Restore@Macro\UnDef}

\DeclareDefining[star=false]\newcount
\DeclareDefining[star=false]\newdimen
\DeclareDefining[star=false]\newskip
\DeclareDefining[star=false]\newif
\DeclareDefining[star=false]\newtoks
\DeclareDefining[star=false]\newbox
\DeclareDefining[star=false]\newread
\DeclareDefining[star=false]\newwrite
\DeclareDefining[star=false]\newlength
\DeclareDefining[star=false]\DeclareDocumentCommand
\DeclareDefining[star=false]\DeclareCommand

\DeclareDefining\newcommand
\DeclareDefining\renewcommand
\DeclareDefining\providecommand
\DeclareDefining\DeclareRobustCommand
\DeclareDefining\DeclareTextCommand
\DeclareDefining\DeclareTextCommandDefault

\DeclareDefining*\newenvironment
\DeclareDefining*\renewenvironment
\DeclareDefining*[star=false]\DeclareOption


\DeclareDefining*[prefix=\bslash c@]\newcounter% \label{newcounter}

\DeclareDefining[type=dk, prefix=\bslash]\define@key
\DeclareDefining[type=dk, prefix=\bslash if]\define@boolkey% the
                                % alternate index entry will be
                                % \cs{if}\<KVpref>|@|\<KVfam>|@|\<key name>
\DeclareDefining[type=dk, prefix=\bslash]\define@choicekey

\DeclareDefining[type=dox, prefix=\bslash]\DeclareOptionX% the
\newcommand*\DeclareDOXHead[2][\gmd@KVprefdefault]{%
  \csname DeclareDefining\endcsname
  [type=dox, prefix=\bslash, KVpref=#1, KVfam=#2]% \HideDefining\DeclareOptionX
  \DeclareOptionX
}

\iffalse
\DeclareOptionX[Berg]<Lulu>{EvelynLear}{}
\DeclareOptionX<AntonW>{ChneOelze}
\fi
\DeclareDefining[type=kvo, prefix=\bslash, KVpref=]\DeclareStringOption
\DeclareDefining[type=kvo, prefix=\bslash, KVpref=]\DeclareBoolOption
\DeclareDefining[type=kvo, prefix=\bslash, KVpref=]\DeclareComplementaryOption
\DeclareDefining[type=kvo, prefix=\bslash, KVpref=]\DeclareVoidOption

\def\DeclareKVOFam#1{%
  \def\do##1{%
    \csname DeclareDefining\endcsname
    [type=kvo, prefix=\bslash, KVpref=, KVfam=#1]##1}%
  \do\DeclareStringOption
  \do\DeclareBoolOption
  \do\DeclareComplementaryOption
  \do\DeclareVoidOption
}


\def\HideAllDefining{%
  \ifnum0=0\csname gmd@adef@allstored\endcsname
    \SMglobal\Store@Macro\gmd@detectors
    \global\@namedef{gmd@adef@allstored}{1}%
  \fi
  \global\emptify\gmd@detectors}% we make the carrier |\empty| not |\relax| to
                         % be able to declare new defining command in
                         % the scope of |\HideAll›…|

\def\ResumeAllDefining{%
  \ifnum1=0\csname gmd@adef@allstored\endcsname\relax
    \SMglobal\Restore@Macro\gmd@detectors
    \SMglobal\Restore@Macro\UnDef
    \global\@namedef{gmd@adef@allstored}{0}%
  \fi}

\def\HideDefining{\begingroup
  % \changes{v0.99n}{2008/08/30}{Added the starred version that hides
  % the defining command only once}
  \MakePrivateLetters
  \gmu@ifstar\Hide@DfngOnce\Hide@Dfng}

\def\Hide@Dfng#1{%%\UnDef
  \escapechar\m@ne
  \gn@melet{gmd@detect@\string#1}{relax}%
  \gn@melet{gmd@detect@\string#1*}{relax}%
  \ifx\def#1\global\relaxen\UnDef\fi
  \endgroup}

\def\Hide@DfngOnce#1{%%\UnDef
  \gmd@adef@selfrestore#1%
  \endgroup}

\def\gmd@adef@selfrestore#1{%
  \@ifundefined{gmd@detect@\strip@bslash{#1}}{%
    \SMglobal\@xa\Store@Macro
    \csname gmd@detect@\strip@bslash{#1}\endcsname}{}%
  % ^^A\typeout{:::::::::::::::gmd@detect@\string#1:::::::::::::}%
  \global\@nameedef{gmd@detect@\strip@bslash{#1}}{%
    \@nx\gmu@if x%
    {\@xanxcs{gmd@detectname@\strip@bslash{#1}}%
      \@nx\macro@pname}% we compare the detect(ed) name with
                       % |\macro@pname|.
    %
    {\def\@nx\next{% this \incs{next} will be executed in line
        % % \ref{next 3690}.
        \SMglobal\Restore@Macro % they both are \incs{protected}.
        \@xanxcs{gmd@detect@\string#1}%
        \@nx\gmd@charbychar}%^^A we define
      % ^^A \inverb|\next| not restore the macro here just in case of
      % ^^A multiple declaration of |\def| (in that case there would
      % ^^A~be
      % ^^A multiple occurrences of the macro to be restored in the
      % ^^A~carrier
      % ^^A \inverb|\gmd@detectors| and we wish
      % ^^A all of them not to fire this one time) That's probably too
      % ^^A much care since there's the test in line \ref{550}.
      \@nx}%
    {}% or do nothing if the \CS' names are unequal.
  }% of \cs{@nameedef}.
}% of \cs{gmd@adef@selfrestore}.

\def\ResumeDefining{\begingroup
  \MakePrivateLetters
  \gmd@ResumeDfng}

\def\gmd@ResumeDfng#1{%
  \escapechar\m@ne
  \SMglobal\Restore@MacroSt{gmd@detect@\string#1}%
  \SMglobal\Restore@MacroSt{gmd@detect@\string#1*}%
  \endgroup}

\newcommand*\index@macro[3][\verbatimchar]{{%
    \gmu@ifundefined{gmd/iexcl/\@xa\detokenize\@xa{#3 }}%\label{iexcltest}
    {% |#3| is not excluded from index
      % ^^A\typeout{@@@ :::\@xa\string\csname gmd/iexcl/\@xa\detokenize\@xa{#3 }\endcsname::::}%
      \gmu@ifundefined{gmd/defentry/\@xa\detokenize\@xa{#3 }}% \label{pnametestDef}
      {% |#3| is not def entry
        \gmu@ifundefined{gmd/usgentry/\@xa\detokenize\@xa{#3 }}%\label{pnametestUsg}
        {% |#3| is not usg.\ entry
          \edef\kind@fentry{\CommonEntryCmd}}%\label{CECmd}
        {% |#3| is usg.\ entry
          \def\kind@fentry{UsgEntry}%
          \un@usgentryze{#3}}%\label{usgentryrs}
      }%
      {% |#3| is def entry
        \def\kind@fentry{DefEntry}%
        \un@defentryze{#3}%\label{defentryrs}
      }% of |gmd/defentry/| test's `else'
      \if@pageindex\@pageinclindexfalse\fi% should it be here or
      % there? Definitely here because we'll wish to switch the switch
      % with a~declaration.
      \if@pageinclindex
        \edef\gmu@tempa{gmdindexpagecs{\HLPrefix}{\kind@fentry}{\EntryPrefix}}%
      \else
        \edef\gmu@tempa{gmdindexrefcs{\HLPrefix}{\kind@fentry}{\EntryPrefix}}%
      \fi
      \edef\gmu@tempa{\IndexPrefix#2\actualchar%
        \quotechar\bslash verb*#1\quoted@eschar#2#1% The last macro in
        % this line usually means the first two, but in some cases
        % it's redefined to be empty (when we use |\index@macro| to
        % index not a~\CS).
        \encapchar\gmu@tempa}%
      \@xa\special@index\@xa{\gmu@tempa}% We give the
      % indexing macro the argument expanded so that \pk{hyperref} may
      % see the explicit encap-char in order not to add its own
      % encapsulation of \verb+|hyperpage+ when the (default)
      % |hyperindex=true|\TextCommonIndex*{hyperindex} option is in
      % force. (After this setting the |\edef|s in the above may be
      % changed to |\def|s.)
      % \changes[\index@macro]{v0.98f}{06/9/30}{explicit MakeIndex
      %   controls changed to corresponding macros. Therefore
      %   \cs[]{hyperindex} option of \pk{hyperref} didn't see the
      %   encapsulation and added its own. So I~expanded the
      %   argument of the very indexing macro}
    }{}% closing of |gmd/iexcl/| test.
    }}

\def\un@defentryze#1{%
  \ifcsname gmd/defentry/\@xa\detokenize\@xa{#1 }\endcsname
  \@xa\g@relaxen\csname gmd/defentry/\@xa\detokenize\@xa{#1 }\endcsname
  \fi
  \ifx\gmd@detectors\empty
    \g@relaxen\last@defmark
  \fi}% the last macro (assuming \cs{fi} is not a~macro :-)
  % is only used by \cs{changes}. If we are in the scope of automatic
  % detection of definitions, we want to be able not to use \inverb|\Define|
  % but write |\changes| after a~definition and get proper entry. Note
  % that in case of automatic detection of definitions
  % |\last@defmark|'s value keeps until the next definition.

\def\un@usgentryze#1{%
  \ifcsname gmd/usgentry/\@xa\detokenize\@xa{#1 }\endcsname
  \@xa\g@relaxen\csname gmd/usgentry/\@xa\detokenize\@xa{#1 }\endcsname
  \fi}

\@emptify\EntryPrefix% this macro seems to be obsolete now

\newif\if@pageinclindex

\newcommand*\quoted@eschar{\quotechar\bslash}% we'll redefine it when

\def\IndexPrefix{}

\if@linesnotnum\@pageindextrue\fi
\AtBeginDocument{%
  \if@pageindex
    \def\gmdindexrefcs#1#2#3#4{\csname#2\endcsname{\hyperpage{#4}}}%^^A
    % in the page case we gobble the third argument that is supposed
    % to be the entry prefix.\ilrr
    \let\gmdindexpagecs=\gmdindexrefcs
  \else
    \def \gmdindexrefcs#1#2#3#4{\gmiflink[clnum.#4]{%
        \csname#2\endcsname{#4}}}%
    \def \gmdindexpagecs#1#2#3#4{\hyperlink{page.#4}{%
        \csname#2\endcsname{\gmd@revprefix{#3}#4}}}%
    % \stanza \DefIndex\gmd@revprefix
    \def\gmd@revprefix#1{%
      \def\gmu@tempa{#1}%
      \ifx\gmu@tempa\@empty p.\,\fi}

    \providecommand*\HLPrefix{}% it'll be the hypertargets names' prefix
    % in mul\-ti-docs. Moreover, it showed that if it was empty,
    % \pk{hyperref} saw duplicates of the hyper destinations, which
    % was perfectly understandable (|codelinenum.123| made by
    % |\refstepcounter| and |codelinenum.123| made by
    % |\gmhypertarget|). But since v0.98 it is not a~problem anymore
    % because during the automatic \inverb|\hypertarget|ing the
    % lines are labelled |clnum.|\<number>. When |\HLPrefix| was
    % defined as dot, MakeIndex rejected the entries as `illegal page
    % number'.  \changes[\HLPrefix]{v0.98a}{06/09/05}{again
    %   \cs{@empty}fied since \cs{hypertarget}ing the codelines names
    %   them \cs[]{clnum} (since v0.98).}
  \fi}

\def\DefEntry#1{\underline{#1}}
\def\UsgEntry#1{\textit{#1}}
\def\CommonEntryCmd{relax}



\outer\def\DefIndex{\begingroup
  \MakePrivateLetters
  \gmu@ifstar
  {\@sanitize\MakePrivateOthers%^^A\verbatim@specials
    \Code@DefIndexStar}%
  {\Code@DefIndex}}

\long\def\Code@DefIndex#1{\endgroup{%
    \escapechar\m@ne% because we will compare the macro's name with
    % a~string without the backslash.
    \@defentryze{#1}{1}}}

\long\def\Code@DefIndexStar#1{%
  \endgroup{%
  \addto@estoindex{#1}%
  \@defentryze{#1}{0}}%
}

\def\gmd@justadot{.}

\long\def\@defentryze#1#2{%
  \@xa\glet\csname gmd/defentry/\detokenize{#1 }\endcsname\gmd@justadot% The\\
  % \LaTeX\ \inverb|\@namedef| macro could not be used since it's not
  % `long'. The space to sound with the checker.  \ilrr
  % \Define\last@defmark
  \ifcat\relax\@xa\@nx\@firstofmany#1\@nil
  % \nostanza if we meet a~\CS, then maybe it's a~\CS to be
  % ‘defentryzed’ or maybe it's a~‘verbatim special’ \CS. The only way
  % to distinguish those cases is to assume there shouldn't be
  % a~verbatim containing only a~‘verbatim special’ \CS.
    \@xa\def\@xa\gmu@tempa\@xa{\@allbutfirstof#1\@nil}%
    \ifx\gmu@tempa\@empty
      \afterfifi\@firstoftwo% if |#1| is a~single \CS, we
      % \incmd\xiistring\ it. Otherwise we \incmd\detokenize\ it.
    \else\afterfifi\@secondoftwo
    \fi
  \else\@xa\@secondoftwo
  \fi
  {\xdef\last@defmark{\xiistring#1}}% we |\string| the argument just in case it's
  % a~control sequence. But when it can be a~\CS, we |\@defentryze| in
  % a~scope of |\escapechar=-1|, so there will never be a~backslash at
  % the beginning of |\last@defmark|'s meaning (unless we
  % |\@defentryze| |\\|).
  {\xdef\last@defmark{\detokenize{#1}}}%
  \@xa\gdef\csname gmd/isaCS/\last@defmark\endcsname{#2}% |#2| is
}% of |\@defentryze|.

\long\def\@usgentryze#1{%
  \@xa\let\csname gmd/usgentry/\detokenize{#1}\endcsname\gmd@justadot}

\@emptify\envirs@toindex

\outer\def\CodeUsgIndex{\begingroup
  \MakePrivateLetters
  \gmu@ifstar
  {\@sanitize\MakePrivateOthers%^^A\verbatim@specials
    \Code@UsgIndexStar}%
  {\Code@UsgIndex}}
\long\def\Code@UsgIndex#1{%
  \endgroup{%
    \escapechar\m@ne
    \global\@usgentryze{#1}}}

\long\def\Code@UsgIndexStar#1{%
  \endgroup
  {%^^A\verbatim@specials
  \addto@estoindex{#1}%
  \@usgentryze{#1}}%
}

\outer\def\CodeCommonIndex{\begingroup
  \MakePrivateLetters
  \gmu@ifstar
  {\MakePrivateOthers\@sanitize\Code@CommonIndexStar}%
  {\Code@CommonIndex}}

\long\def\Code@CommonIndex#1{\endgroup}

\long\def\Code@CommonIndexStar#1{%
  \endgroup\addto@estoindex{#1}}

\long\def\text@indexmacro#1{%
  {\escapechar\m@ne \xdef\macro@pname{\xiistring#1}}%
  % ^^A   \typeout{@@@@ 4803}%
  \@xa\quote@mname\macro@pname\relax% we process the \CS's
  % name char by char and quote MakeIndex controls. |\relax| is the
  % iterating macro's stopper. The scanned \CS's quoted name shall be the
  % expansion of |\macro@iname|.
  \if\verbatimchar\macro@pname
    \def\im@firstpar{[$]}%^^A$
  \else\def\im@firstpar{}%
  \fi
  {\do@properindex% see line \ref{do@properindex}.
    \@xa \index@macro\im@firstpar\macro@iname\macro@pname}}

\def\quote@mname{%
  \def\macro@iname{}%
  \quote@charbychar}

\def\quote@charbychar#1{%
  \ifx\relax#1% finish quoting when you meet |\relax| or:
  \else
    \ifnum0\ifcat\@nx#1\@nx~1\fi\ifcat\@nx#1\relax1\fi>0 % we can meet
    % active char and/or control sequences (made by) verbatim
    % specials, therefore we check whether \inhash1 is an active char
    % and if it is a~\CS.
      \afterfifi{% we can meet an active char or a~\CS iff we use
        % verbatim specials.
        \ifdefined\verbatim@specials@list
        \afterfi{%
          \begingroup
          \escapechar\@xa\@xa\@xa`\@xa\@firstofmany\verbatim@specials@list\@nil
          \@xa\endgroup
          \@xa\quote@charbychar\detokenize{#1}%% for a~\CS\
        % \incs{detokenize} adds a~space but if so, it will be ignored
        % by the argument scanner.
        }% of |\afterfi|.
        \else\PackageError{gmdoc}{Please report a\space bug in
          \bslash quote@charbychar in line 4934}{}%
        \fi% of |\ifdefined\verbatim@specials@list|.
      }% of |\afterfifi|.
    \else
      \quote@char#1%
      \xdef\macro@iname{\macro@iname \gmd@maybequote#1}%
      \afterfifi\quote@charbychar
    \fi
  \fi}

\def\TextUsgIndex{\begingroup
  \MakePrivateLetters
  \gmu@ifstar{\MakePrivateOthers\Text@UsgIndexStar}{\Text@UsgIndex}}

\long\def\Text@UsgIndex#1{%
  \endgroup\@usgentryze#1%
  \text@indexmacro#1}

\long\def\Text@UsgIndexStar#1{\endgroup\@usgentryze{#1}%
  \text@indexenvir{#1}}

\long\def\text@indexenvir#1{%
  {\verbatim@specials
  \edef\macro@pname{\xiistring#1}%
  \if\bslash\@xa\@firstofmany\macro@pname\@nil% if
  % |\string|ed |#1| begins with a~backslash, we will gobble it
  % to make MakeIndex not see it.
    \edef\gmu@tempa{\@xa\@gobble\macro@pname}%
    \@tempswatrue
  \else
    \let\gmu@tempa\macro@pname
    \@tempswafalse
  \fi
  % ^^A   \typeout{@@@@@ 4858}%
  \@xa\quote@mname\gmu@tempa\relax% \label{quote@mname comm}we
  % process |\string|ed |#1| char by char and quote MakeIndex
  % controls. |\relax| is the iterating macro's stopper. The quoted
  % |\string|ed |#1| shall be the meaning of |\macro@iname|.
  \if@tempswa
    \def\quoted@eschar{\quotechar\bslash}%
    \else\@emptify\quoted@eschar\fi% we won't print any backslash before
    % an environment's name, but we will before a~\CS's name.
    \do@properindex% see line \ref{do@properindex}.
    \index@macro\macro@iname\macro@pname}}

\def\TextCommonIndex{\begingroup
  \MakePrivateLetters
  \gmu@ifstar{\MakePrivateOthers\Text@CommonIndexStar}{\Text@CommonIndex}}

\long\def\Text@CommonIndex#1{\endgroup
  \text@indexmacro#1}

\long\def\Text@CommonIndexStar#1{\endgroup
  \text@indexenvir{#1}}


\outer\def\CodeMarginize{\begingroup
  \MakePrivateLetters
  \gmu@ifstar
    {\MakePrivateOthers\egCode@MarginizeEnvir}
    {\egCode@MarginizeMacro}}

\long\def\egCode@MarginizeMacro#1{\endgroup
  \Code@MarginizeMacro#1}

\long\def\Code@MarginizeMacro#1{{% |#1| is always a~\CS.
    % ^^A   \typeout{@@@@ :::\xiistring#1:::}%
    % ^^A   \show\detokenize
    \escapechar\m@ne
    \@xa\glet\csname gmd/2marpar/\xiistring#1\endcsname\gmd@justadot
  }}

\long\def\egCode@MarginizeEnvir#1{\endgroup
  \Code@MarginizeEnvir{#1}}

\long\def\Code@MarginizeEnvir#1{\addto@estomarginpar{#1}}

\def\mark@envir{%\label{mark@envir}
  \ifx\envirs@tomarginpar\@empty
  \else
    \def\do{\Text@Marginize*}%
    \envirs@tomarginpar%
    \g@emptify\envirs@tomarginpar%
  \fi
  \ifx\envirs@toindex\@empty
  \else
    {\verbatim@specials
      \gmd@doindexingtext
      \envirs@toindex
      \g@emptify\envirs@toindex}%
  \fi}

\def\gmd@doindexingtext{%
  \def\do##1{% the |\envirs@toindex| list contains |\string|ed
    % macros or environments' names in braces and each  preceded
    % with |\do|. We extract the definition because we use it also in
    % line \ref{gmd@doindexingtext 2nd use}.
    \if\bslash\@firstofmany##1\@nil% if
    % |##1| begins with a~backslash, we will gobble it for
    % MakeIndex not see it.
    \edef\gmd@resa{\@gobble##1}%
    \@tempswatrue
    \else
    \edef\gmd@resa{##1}\@tempswafalse
    \fi
    \@xa\quote@mname\gmd@resa\relax% see line
    % \ref{quote@mname comm} \& subs. for commentary.
    {\if@tempswa
        \def\quoted@eschar{\quotechar\bslash}%
        \else\@emptify\quoted@eschar
      \fi
      \index@macro\macro@iname{##1}}}%
}

\@emptify\envirs@tomarginpar
\@emptify\envirs@toindex

\outer\def\Define{% note that since it's |\outer|, it doesn't have to
  % be \incmd\protected.
  \begingroup
  \MakePrivateLetters
  \gmu@ifstar{\@sanitize%^^A\verbatim@specials
    \Code@DefEnvir}{\Code@DefMacro}}

\outer\def\CodeUsage{\begingroup
  \MakePrivateLetters
  \gmu@ifstar{%
    \@sanitize%^^A\verbatim@specials
    \MakePrivateOthers
    \Code@UsgEnvir}{\Code@UsgMacro}}

\DeclareCommand\Code@DefMacro\long{om}{%
  \Code@DefIndex#2% we use the internal macro; it'll close the group.
  \IfValueTF{#1}%
  {\Code@MarginizeMacro#1}%
  {\Code@MarginizeMacro#2}%
}

\DeclareCommand\Code@UsgMacro\long{om}{%
  \Code@UsgIndex#2% here also the internal macro; it'll close the
  % group
  \IfValueTF{#1}%
  {\Code@MarginizeMacro#1}%
  {\Code@MarginizeMacro#2}%
}

\def\codeline@wrindex#1{\if@filesw
  \immediate\write\@indexfile
  {\string\indexentry{#1}%
    {\HLPrefix\number\c@codelinenum}}\fi}

\def\codeline@glossary#1{% It doesn't need to establish a~group since
  % it is always called in a~group.
  \if@pageinclindex
    \edef\gmu@tempa{gmdindexpagecs{\HLPrefix}{relax}{\EntryPrefix}}%
  \else
    \edef\gmu@tempa{gmdindexrefcs{\HLPrefix}{relax}{\EntryPrefix}}% \inverb|relax| stands for the formatting command. But we don't want to do anything special with the change history entries. \ilrr
  \fi
  \protected@edef\gmu@tempa{%
    \@nx\protected@write\@nx\@glossaryfile{}%
    {\string\glossaryentry{#1\encapchar\gmu@tempa}%
    {\HLPrefix\number\c@codelinenum}}}%
  \gmu@tempa
}


\AtBeginDocument{%
  \if@pageindex
    \let\special@index=\index
    \let\gmd@glossary\glossary
  \else
  % \DefIndex\special@index
    \let\special@index=\codeline@wrindex
    \let\gmd@glossary\codeline@glossary
    % \label{codeline indexnumber declaration}
  \fi}% postponed till |\begin{document}| with respect of \docfm-like

\def\gag@index{\let\index=\@gobble
  %\label{gag@index}
  \let\codeline@wrindex=\@gobble}
\Store@Macros{\index\codeline@wrindex}

\def\ungag@index{\Restore@Macros {\index\@@codeline@wrindex}}
  %\label{ungag@index}

\DeclareCommand\Code@DefEnvir\long{om}{%
  \endgroup
  % ^^A   \typeout{@@@@@ 5069: \unexpanded{#1}}%
  {%^^A\verbatim@specials
    \IfValueTF{#1}%
    {\addto@estomarginpar{#1}}%
    {\addto@estomarginpar{#2}}%
    \addto@estoindex{#2}%
    \@defentryze{#2}{0}}}

\DeclareCommand\Code@UsgEnvir\long{om}{%
  \endgroup
  {%^^A~\verbatim@specials
    \IfValueTF{#1}%
    {\addto@estomarginpar{#1}}%
    {\addto@estomarginpar{#2}}%
    \addto@estoindex{#2}%
    \@usgentryze{#2}}}

\long\def\addto@estomarginpar#1{%
  % ^^A   \def\gmu@tempa{\do{#1}}% we |\string|ed the argument to
  % ^^A   % allow it to be a~control sequence but now (2008/12/14) it's not
  % ^^A   % necessary because |#1| is sanitised.
  % ^^A   \@xa\gaddtomacro\@xa\envirs@tomarginpar\@xa{\gmu@tempa}
\gaddtomacro\envirs@tomarginpar{\do{#1}}}

\long\def\addto@estoindex#1{%
  % ^^A \typeout{@@@@ \unexpanded{#1}}%
  % ^^A   \edef\gmu@tempa{\@nx\do{\xiistring#1}}
  % ^^A   \@xa\gaddtomacro\@xa\envirs@toindex\@xa{\gmu@tempa}
  \gaddtomacro\envirs@toindex{\do{#1}}}

\def\TextUsage{\begingroup
  % \chgs{2008/12/8 v0.99s added \cmd\@sanitize\ in the starred
  %   version}
  % \label{TextUsage}
  \MakePrivateLetters
  \gmu@ifstar{\@sanitize\MakePrivateOthers
    \Text@UsgEnvir}{\Text@UsgMacro}}

\DeclareCommand\Text@UsgMacro\long{om}{%
  \endgroup
  % \chgs[\narrativett]{2008/12/12 v0.99s introduced in \pk{gmutils}
  %   and employed in the narrative verbatims, including \cs{ampulexdef}
  %   of the \pk{gmverb} macros}
  \IfValueTF{#1}%
  {\Text@Marginize*{#1}{\scanverb*{#1}}}%
  {\Text@Marginize*{#2}{\scanverb*{#2}}}%
  \begingroup\Code@UsgIndex#2% we declare the kind of formatting of the entry.
  \text@indexmacro#2}

\DeclareCommand\Text@UsgEnvir\long{om}{%
  \endgroup
  % ^^A   \typeout{@@@@ :::\detokenize{#1}::::}%
  % ^^A   \typeout{@@@@ :::\detokenize{#2}::::}%
  \IfValueTF{#1}%
  {\Text@Marginize*{#1}{\scanverb*{#1}}}%
  {\Text@Marginize*{#2}{\scanverb*{#2}}}%
  \@usgentryze{#2}% we declare the `usage' kind of formatting of the
  % entry and index the sequence |#1|.
  \text@indexenvir{#2}}

\pdef\TextMarginize{\@bsphack\begingroup
  % \chgs{2008/12/8 v0.99s added \cmd\@sanitize\ in the starred
  %   version}
  \MakePrivateLetters
  \gmu@ifstar{%
    \MakePrivateOthers\egText@MarginizeEnv}{\egText@MarginizeCS}}

\long\def\egText@MarginizeEnv#1{\endgroup
  \Text@Marginize*{#1}% \chgs{2008/12/07 v0.99s a~bug fixed: braces
  % added around \hash1}
  \@esphack}

\long\def\egText@MarginizeCS#1{%
  \endgroup
  \Text@Marginize*{#1}%
}

\if@marginparsused
  \reversemarginpar
  \marginparpush\z@
  \marginparwidth8pc\relax
  % ^^A  \settowidth{\marginparsep}{\ \ }%
  %
  % You may wish to put not only macros and environments to
  % a~marginpar.
  \long\def\gmdmarginpar#1{%
    \marginpar{\raggedleft\strut
      \hskip0ptplus100ptminus100pt%
      #1}}%\stanza
  %
\else
  \long\def\gmdmarginpar#1{}%
\fi

\let\gmu@tempa\all@stars
\@xa\addtomacro\@xa\gmu@tempa\@xa{\all@unders}
\@xa\DeclareCommand\@xa\Text@Marginize\@xa!%
\@xa{\@xa Q\@xa{\gmu@tempa}m}{%
  \gmdmarginpar{%
    \addtomacro\verb@lasthook{\marginpartt}%
    \IfValueTF{#1}{\scanverb#1}{\scanverb}{#2}}%
}% of |\Text@Marginize|.
\let\marginpartt\narrativett

\def\do@properindex{%\label{do@properindex}
  \if@printalllinenos\else
    \@pageinclindextrue
    \let\special@index=\index
  \fi}


\newenvironment*{macrocode*}{%\label{macrocode*}
  \if@codeskipput\else\par\addvspace\CodeTopsep\@codeskipputgtrue\fi
  \QueerEOL}%^^A\docstrips
  {\par\addvspace\CodeTopsep\CodeEscapeChar\\}
  % Let's remind that the starred version makes | |

\newenvironment*{macrocode}{%\label{macrocode}
  \if@codeskipput\else\par\addvspace\CodeTopsep\@codeskipputgtrue\fi
  \QueerEOL}% \changes{v0.99l}{2008/08/06}{removed \cs{CodeSpacesBlank}}
  {\par\addvspace\CodeTopsep\CodeEscapeChar\\}
\let\oldmc\macrocode
\let\endoldmc\endmacrocode
\n@melet{oldmc*}{macrocode*}
\n@melet{endoldmc*}{endmacrocode*}

\addtomacro\oldmc{\@oldmacrocode@launch}%
\@xa\addtomacro\csname oldmc*\endcsname{%
  \@oldmacrocode@launch}

\def\@oldmacrocode@launch{%
  \emptify\gmd@textEOL% to disable it in |\gmd@docstripdirective|
  % launched within the code.
  \gmd@ctallsetup
  \glet\stored@code@delim\code@delim
  \@makeother\^^B\CodeDelim*\^^B%
  \ttverbatim \gmd@DoTeXCodeSpace
  \@makeother\|% because |\ttverbatim| doesn't do that.
  \MakePrivateLetters% see line \ref{MPL}.\par
  % ^^A  \@xa\@makeother\code@delim
  \docstrips@percent \@makeother\>%
  % sine qua non of the automatic delimiting is replacing possible
  % |*|\catother in the environment's name with |*|\catletter.
  % Not to complicate assume |*| may occur at most once and only at
  % the end. We also assume the environment's name consists only of
  % character tokens whose catcodes (except of |*|) will be the same
  % in the verbatim text.
  \@xa\gmd@currenvxistar\@currenvir*\relax
  \@oldmacrocode}

\foone{\catcode`*11 }
{\def\gmu@xistar{*}}

\def\gmd@currenvxistar#1*#2\relax{%
  \edef\@currenvir{#1\if*#2\gmu@xistar\fi}}

\foone{%
\catcode`[=1 \catcode`]=2
\catcode`\{=\active \@makeother\}
\@makeother\^^B
\catcode`/=0 \catcode`\\=\active
\catcode`&=14 \catcode`*=11
\catcode`\%=\active \obeyspaces}& % \CodeEscapeChar\/ \CDAnd
[& here the \cs{foone}'s second pseudo-argument begins
&%\stanza
/def/@oldmacrocode[&
/bgroup/let =/relax&% to avoid writing |/@nx | four times.
/xdef/oldmc@def[&
/def/@nx/oldmc@end####1/@nx%    /@nx\end&
/@nx{/@currenvir}[&
####1^^B/@nx/gmd@oldmcfinis]]&
/egroup&% now |\oldmc@edef| is defined to have one parameter delimited
&% with \incmd\end\arg{current env.'s name}
/oldmc@def&
/oldmc@end]&% \CDPerc
]

\def\gmd@oldmcfinis{%
  \def\gmu@tempa{\end{\@currenvir}}%
   \@xa\gmu@tempa\@xa\def\@xa\gmd@lastenvir\@xa{\@currenvir}%
  \@xa\CodeDelim\@xa*\stored@code@delim
  \gmd@mchook}% see line \ref{gmd@mchook}

\def\OldMacrocodes{%% \changes{v0.99m}{2008/08/10}{renamed from
  %% \cs{VerbMacrocodes}}
  \let\macrocode\oldmc
  \n@melet{macrocode*}{oldmc*}}


\foone{\catcode`\%\active}
{\def\docstrips@percent{\catcode`\%\active
    \let%\gmd@codecheckifds}}

\def\gmd@codecheckifds#1#2{% note that |#1| is just to gobble
  % \inverb|\gmd@charbychar| token.
\typeout{@@@@@ codecheckifds hash 1: »\unexpanded{#1}«, 2: »\unexpanded{#2}«}%
 \ifnum  \if@dsdir 1\else 0\fi\ifgmd@dsVerb 1\fi>\z@
    \afterfi{%
      \gmd@dsChecker{%
        \if\@nx<\@nx#2\afterfi\gmd@docstripdirective
        \else\afterfi{\xiipercent#1#2}%
        \fi}% of the checker's arg
      }% of |\afterfi|
  \else\afterfi{\xiipercent#1#2}%
  \fi}
\newenvironment{macro}{%\label{macro}
  \@tempskipa=\MacroTopsep
  \if@codeskipput\advance\@tempskipa by-\CodeTopsep\fi
  \par\addvspace{\@tempskipa}\@codeskipputgtrue
  \begingroup\MakePrivateLetters\MakePrivateOthers% we make also the
  % `private others' to cover the case of other sequence in the
  % argument. (We'll use the |\macro| macro also in the environment
  % for describing and defining environments.)
  \gmd@ifonetoken\Hybrid@DefMacro\Hybrid@DefEnvir}%
  {\par\addvspace\MacroTopsep\@codeskipputgtrue}
  % It came out that the \docfm's author(s) give the \env{macro}
  % environment also starred versions of commands as argument. It's \acro{OK}
  % since (the default version of) |\MakePrivateLetters| makes |*|
  % a~letter and therefore such a~starred version is just one \CS.
  % However, in \pk{doc.dtx} occur \env{macro}s that mark
  % \emph{implicit} definitions i.e., such that the defined \CS is not
  % scanned in the subsequent code.
\@namedef{macro*}{\let\gmd@ifonetoken\@secondoftwo\macro}
\@xa\let\csname endmacro*\endcsname\endmacro
\def\gmd@ifsingle#1#2\@nil{%
  \def\gmu@tempa{#2}%
  \ifx\gmu@tempa\@empty}
\def\gmd@ifonetoken#1#2#3{%
  \def\gmu@tempb{#3}% We hide |#3| from \TeX\ in case it's |\if›…| or
  % so. \inverb|\gmu@tempa| is used in \inverb|\gmd@ifsingle|. \ilrr
  \gmd@ifsingle#3\@nil
    \afterfi{\@xa#1\gmu@tempb}%
  \else
    \edef\gmu@tempa{\@xa\string\gmu@tempb}%
    \afterfi{\@xa#2\@xa{\gmu@tempa}}%
  \fi}
\long\def\Hybrid@DefMacro#1{%
  \Code@DefIndex{#1}% this macro closes the group opened by |\macro|.
  \Text@MarginizeNext{*{#1}}}

\long\def\Hybrid@DefEnvir#1{%
  \Code@DefIndexStar{#1}% this macro also closes the group begun by
  % |\macro|.
  \Text@MarginizeNext{*{#1}}}

\long\def\Text@MarginizeNext#1{%
  \gmd@evpaddonce{\Text@Marginize#1\ignorespaces}}

\long\def\gmd@evpaddonce#1{%
  \global\advance\gmd@oncenum\@ne
  \@xa\long\@xa\edef% \CodeUsgIndex*{NeuroOncer}
    \csname gmd/evp/NeuroOncer\the\gmd@oncenum\endcsname{%
      \@nx\g@relaxen
      \csname gmd/evp/NeuroOncer\the\gmd@oncenum\endcsname}% Why does it
    % work despite it shouldn't? Because when the \CS got with
    % \inverb|\csname›…\endcsname| is undefined, it's equivalent to
    % |\relax| and therefore unexpandable. That's why it passes
    % \inverb|\edef| and is able to be assigned.\ilrr
  \@xa\addtomacro\csname gmd/evp/NeuroOncer\the\gmd@oncenum\endcsname{#1}%
  \@xa\addto@hook\@xa\everypar\@xa{%
    \csname gmd/evp/NeuroOncer\the\gmd@oncenum\endcsname}%
}

\newcount\gmd@oncenum

\@xa\let\@xa\environment\csname macro*\endcsname
\@xa\let\@xa\endenvironment\csname endmacro*\endcsname

\def\DoNotIndex{\bgroup\MakePrivateLetters\DoNot@Index}

\long\def\DoNot@Index#1{\egroup% we close the group,
  \let\gmd@iedir\gmd@justadot% we declare the direction of the \<?>cluding
  % to be \emph{ex}cluding. We act this way to be able to reverse the
  % exclusions easily later.\ilrr
  \dont@index#1.}

\long\def\dont@index#1{%
  \def\gmu@tempa{\@nx#1}% My \TeX\ Guru's trick to deal with |\fi|
  % and such, i.e., to hide from \TeX\ when it is processing a~test's
  % branch without expanding.
  \if\gmu@tempa.% a~dot finishes expelling
  \else
    \if\gmu@tempa,% The list this macro is put before may
    % contain commas and that's O.K., we just continue the work.
      \afterfifi\dont@index
    \else% what is else shall off the Index be expelled.
      {\escapechar\m@ne
        \xdef\gmu@tempa{\string#1 }}% its to sound with
      % \incs{detokenize}s in tests.
      \@xa\let%
      \csname gmd/iexcl/\gmu@tempa\endcsname=\gmd@iedir% In the default
      % case explained e.g.\ by the macro's name, the last macro's
      % meaning is such that the test in line \ref{iexcltest} will
      % turn false and the subject \CS shall not be indexed.
      % We |\let| not |\def| to spare \TeX's memory.
      \afterfifi\dont@index
    \fi
  \fi}

\DoNotIndex\{ \DoNotIndex\}% \label{DNIbraces}the index entries of

\begin{MakePrivateLetters}% Yes, |\DoNotIndex| does
  % |\MakePrivateLetters| on its own but No, it won't have any effect
  % if it's given in another macro's |\def|.
  % \HideAllDefining
  \gdef\DefaultIndexExclusions{%
    \DoNotIndex{\@ \@@par \@beginparpenalty \@empty}%\label{DIE1}
    \DoNotIndex{\@flushglue \@gobble \@input}%
    \DoNotIndex{\@makefnmark \@makeother \@maketitle}%
    \DoNotIndex{\@namedef \@ne \@spaces \@tempa}%
    \DoNotIndex{\@tempb \@tempswafalse \@tempswatrue}%
    \DoNotIndex{\@thanks \@thefnmark \@topnum}%
    \DoNotIndex{\@@ \@elt \@forloop \@fortmp \@gtempa \@totalleftmargin}%
    \DoNotIndex{\" \/ \@ifundefined \@nil \@verbatim \@vobeyspaces}%
    \DoNotIndex{\| \~ \  \active \advance \aftergroup \begingroup \bgroup}%
    \DoNotIndex{\mathcal \csname \def \documentstyle \dospecials \edef}%
    \DoNotIndex{\egroup}%
    \DoNotIndex{\else \endcsname \endgroup ⵢendinput \endtrivlist}%
    \DoNotIndex{\expandafter \fi \fnsymbol \futurelet \gdef \global}%
    \DoNotIndex{\hbox \hss \if \if@inlabel \if@tempswa \if@twocolumn}%
    \DoNotIndex{\ifcase}%
    \DoNotIndex{\ifcat \iffalse \ifx \ignorespaces \index \input \item}%
    \DoNotIndex{\jobname \kern \leavevmode \leftskip \let \llap \lower}%
    \DoNotIndex{\m@ne \next \newpage \nobreak \noexpand \nonfrenchspacing}%
    \DoNotIndex{\obeylines \or \protect \raggedleft \rightskip \rm \sc}%
    \DoNotIndex{\setbox \setcounter \small \space \string \strut}%
    \DoNotIndex{\strutbox}%
    \DoNotIndex{\thefootnote \thispagestyle \topmargin \trivlist \tt}%
    \DoNotIndex{\twocolumn \typeout \vss \vtop \xdef \z@}%
    \DoNotIndex{\, \@bsphack \@esphack \@noligs \@vobeyspaces \@xverbatim}%
    \DoNotIndex{\` \catcode \end \escapechar \frenchspacing \glossary}%
    \DoNotIndex{\hangindent \hfil \hfill \hskip \hspace \ht \it \langle}%
    \DoNotIndex{\leaders \long \makelabel \marginpar \markboth \mathcode}%
    \DoNotIndex{\mathsurround \mbox}%\verb+% \newcount \newdimen \newskip+
    \DoNotIndex{\nopagebreak}%
    \DoNotIndex{\parfillskip \parindent \parskip \penalty \raise \rangle}%
    \DoNotIndex{\section \setlength \TeX \topsep \underline \unskip}%
    \DoNotIndex{\vskip \vspace \widetilde \\ \% \@date \@defpar}%
    \DoNotIndex{\[ \]}% see line \ref{DNIbraces}.
    \DoNotIndex{\count@ \ifnum \loop \today \uppercase \uccode}%
    \DoNotIndex{\baselineskip \begin \tw@}%
    \DoNotIndex{\a \b \c \d \e \f \g \h \i \j \k \l \m \n \o \p \q}%
    \DoNotIndex{\r \s \t \u \v \w \x \y \z \A \B \C \D \E \F \G \H}%
    \DoNotIndex{\I \J \K \L \M \N \O \P \Q \R \S \T \U \V \W \X \Y \Z}%
    \DoNotIndex{\1 \2 \3 \4 \5 \6 \7 \8 \9 \0}%
    \DoNotIndex{\! \# \$ \& \' \( \) \. \: \; \< \= \> \? \_}% |\+|
    % seems to be so rarely used that it may be advisable to index it.
    \DoNotIndex{\discretionary \immediate \makeatletter \makeatother}%
    \DoNotIndex{\meaning \newenvironment \par \relax \renewenvironment}%
    \DoNotIndex{\repeat \scriptsize \selectfont \the \undefined}%
    \DoNotIndex{\arabic \do \makeindex \null \number \show \write \@ehc}%
    \DoNotIndex{\@author \@ehc \@ifstar \@sanitize \@title}%
    \DoNotIndex{\if@minipage \if@restonecol \ifeof \ifmmode}%
    \DoNotIndex{\lccode %|%\newtoks|
      \onecolumn \openin \p@ \SelfDocumenting}%
    \DoNotIndex{\settowidth \@resetonecoltrue \@resetonecolfalse \bf}%
    \DoNotIndex{\clearpage \closein \lowercase \@inlabelfalse}%
    \DoNotIndex{\selectfont \mathcode \newmathalphabet \rmdefault}%
    \DoNotIndex{\bfdefault}%
    % From the above list I~removed some |\new›…| declarations because
    % I~think it may be useful to see gathered the special |\new›…|s of
    % each kind. For the same reason I~would not recommend excluding
    % from the index such declarations as |\AtBeginDocument|,
    % |\AtEndDocument|, |\AtEndOfPackage|, |\DeclareOption|,
    % |\DeclareRobustCommand| etc. But the
    % common definitions, such as |\›(new⁄|provide›)command| and
    % |\›(e⁄|g⁄|x›)def|s, as the most common, in my opinion excluded should
    % be.^^A\)
    %
    % \stanza
    % And some my exclusions:
    \DoNotIndex{\@@input \@auxout \@currentlabel \@dblarg}%
    \DoNotIndex{\@ifdefinable \@ifnextchar \@ifpackageloaded}%
    \DoNotIndex{\@indexfile \@let@token \@sptoken \^}% the latter comes
    % from \CSs like |\^^M|, see sec. \ref{Tasks}.
    \DoNotIndex{\addto@hook \addvspace}%
    \DoNotIndex{\CurrentOption}%
    \DoNotIndex{\emph \empty \firstofone}%
    \DoNotIndex{\font \fontdimen \hangindent \hangafter}%
    \DoNotIndex{\hyperpage \hyperlink \hypertarget}%
    \DoNotIndex{\ifdim \ifhmode \iftrue \ifvmode \medskipamount}%
    \DoNotIndex{\message}%
    \DoNotIndex{\NeedsTeXFormat \newcommand \newif}%
    \DoNotIndex{\newlabel}%
    \DoNotIndex{\of}%
    % ^^A\PassOptionsToClass\PassOptionsToPackage
    \DoNotIndex{\phantom \ProcessOptions \protected@edef}%
    \DoNotIndex{\protected@xdef \protected@write}%
    \DoNotIndex{\ProvidesPackage \providecommand}%
    \DoNotIndex{\raggedright}%
    \DoNotIndex{\raisebox \refstepcounter \ref \rlap}% ^^A\RequirePackage
    \DoNotIndex{\reserved@a \reserved@b \reserved@c \reserved@d}%
    \DoNotIndex{\stepcounter \subsection \textit \textsf \thepage \tiny}%
    \DoNotIndex{\copyright \footnote \label \LaTeX}%
    % \changes[\DefaultIndexExclusions]{v0.98a}{06/09/06}{more
    % macros added to the `exclude list'}
    \DoNotIndex{\@eha \@endparenv \if@endpe \@endpefalse \@endpetrue}%
    \DoNotIndex{\@evenfoot \@oddfoot \@firstoftwo \@secondoftwo}%
    \DoNotIndex{\@for \@gobbletwo \@idxitem \@ifclassloaded}%
    \DoNotIndex{\@ignorefalse \@ignoretrue \if@ignore}%
    \DoNotIndex{\@input@ \@input}%
    \DoNotIndex{\@latex@error \@mainaux \@nameuse}%
    \DoNotIndex{\@nomath \@oddfoot}%|%\@onlypreamble| should be indexed
    % \acro{IMHO}.
    \DoNotIndex{\@outerparskip \@partaux \@partlist \@plus}%
    \DoNotIndex{\@sverb \@sxverbatim}%
    \DoNotIndex{\@tempcnta \@tempcntb \@tempskipa \@tempskipb}%\\
    % I~think the layout parameters  even the kernel, should not be
    % excluded: \inverb|\@topsep| \inverb|\@topsepadd|^^B
    % \ \inverb|\abovedisplayskip| \inverb|\clubpenalty| etc.
    \DoNotIndex{\@writeckpt}%
    \DoNotIndex{\bfseries \chapter \part \section \subsection}%
    \DoNotIndex{\subsubsection}%
    \DoNotIndex{\char \check@mathfonts \closeout}%
    \DoNotIndex{\fontsize \footnotemark \footnotetext \footnotesize}%
    \DoNotIndex{\g@addto@macro \hfilneg \Huge \huge}%
    \DoNotIndex{\hyphenchar \if@partsw \IfFileExists }%
    \DoNotIndex{\include \includeonly \indexspace}%
    \DoNotIndex{\itshape \language \LARGE \Large \large}%
    \DoNotIndex{\lastbox \lastskip \m@th \makeglossary}%
    \DoNotIndex{\maketitle \math@fontsfalse \math@fontstrue \mathsf}%
    \DoNotIndex{\MessageBreak \noindent \normalfont \normalsize}%
    \DoNotIndex{\on@line \openout \outer}%
    \DoNotIndex{\parbox \part \rmfamily \rule \sbox}%
    \DoNotIndex{\sf@size \sffamily \skip}%
    \DoNotIndex{\textsc \textup \toks@ \ttfamily \vbox}%
    % \changes[\DoNotIndex]{v0.97}{06/09/04}{Excluding some star-versions of
    %   commands}
    % \nostanza\noindent
    % |%% \DoNotIndex{\begin*}| maybe in the future, if the idea gets
    % popular\dots \nostanza
    \DoNotIndex{\hspace* \newcommand* \newenvironment* \providecommand*}%
    \DoNotIndex{\renewenvironment* \section* \chapter*}%\label{DIE2}
  }% of |\DefaultIndexExclusions|.\par
  % I~put all the expellings into a~macro because I~want them
  % to be optional.
\end{MakePrivateLetters}

\if@indexallmacros\else
  \DefaultIndexExclusions
\fi

\def\DoIndex{\bgroup\MakePrivateLetters\Do@Index}

\long\def\Do@Index#1{\egroup\@relaxen\gmd@iedir\dont@index#1.}% note

\def\UndoDefaultIndexExclusions{%
  \Store@Macro\DoNotIndex
  % ^^A\dont@index
  \let\DoNotIndex\DoIndex
  % ^^A  \let\dont@index=\do@index
  \DefaultIndexExclusions
  % ^^A  \RestoreMacro\dont@index
  \Restore@Macro\DoNotIndex}

\long\def\IndexPrologue#1{\@bsphack\def\index@prologue{#1}\@esphack}

\def\indexdiv{\@ifundefined{chapter}{\section*}{\chapter*}}

\@ifundefined{index@prologue} {\def\index@prologue{\indexdiv{Index}%
    \markboth{Index}{Index}%
    Numbers written in italic refer to the \if@pageindex pages \else
    code lines \fi where the
    corresponding entry is described; numbers underlined refer to the
    \if@pageindex\else code line of the \fi definition; numbers in
    roman refer to the \if@pageindex pages\else code lines \fi where
    the entry is used.
    \if@pageindex\else
      \ifx\HLPrefix\@empty
        The numbers preceded with `p.' are page numbers.
      \else The numbers with no prefix are page numbers.
    \fi\fi
    \ifx\IndexLinksBlack\relax\else
      All the numbers are hyperlinks.
      % ^^A, they are made black just to let Adobe Reader work
      % ^^A~faster.
    \fi
    \gmd@dip@hook% this hook is intended to let a~user add
    % something without redefining the entire prologue, see below.
  }}{}

\@emptify\gmd@dip@hook
\long\def\AtDIPrologue#1{\g@addto@macro\gmd@dip@hook{#1}}

\AtDIPrologue{%\label{verb:ampulex:index}
  \ampulexdef\verb\ttverbatim\verbatim@specials
  {\ttverbatim\verbatim@specials}}

\RequirePackage{multicol}

\newdimen\IndexMin \IndexMin = 133pt\relax% originally it was set
\newcount\c@IndexColumns \c@IndexColumns = 3
\renewenvironment{theindex}
  {\begin{multicols}\c@IndexColumns[\index@prologue][\IndexMin]%
      \IndexLinksBlack
      \IndexParms \let\item\@idxitem \ignorespaces}%
    {\end{multicols}}

\def\IndexLinksBlack{\hypersetup{linkcolor=black}}% To make Adobe

\@ifundefined{IndexParms}
  {\def\IndexParms{%
      % \label{IndexParms}
      \parindent \z@
      \columnsep 15pt
      \parskip 0pt plus 1pt
      \rightskip 15pt
      \mathsurround \z@
      \parfillskip=-15pt plus 1 fil % \docfm\ defines this parameter
      % rigid but that's because of the stretchable space (more
      % precisely, a~|\dotfill|) between the item and the entries. But
      % in \pk{gmdoc} we define no such special delimiters, so we add
      % an infinite stretch.
      \small
      \def\@idxitem{\par\hangindent 30pt}%
      \def\subitem{\@idxitem\hspace*{15pt}}%
      \def\subsubitem{\@idxitem\hspace*{25pt}}%
      \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}%
      \ifx\EntryPrefix\@empty\else\raggedright\fi% long (actually,
      % a~quite \emph{short but nonempty} entry prefix) made space
      % stretches so terribly large in the justified paragraphs that
      % we should make |\raggedright| rather.
      \ifnum\c@IndexColumns>\tw@\raggedright\fi% the numbers in narrow
      % col\-umns look better when they are |\raggedright| in my opinion.
    }}{}

\def\PrintIndex{% we ensure the standard meaning of the line end
  % character not to cause a~disaster.
  \@ifQueerEOL{\StraightEOL\printindex\QueerEOL}%
  {\printindex}}


\foone{\@makeother\<\@makeother\>
  \glet\sgtleftxii=<}
{
  \def\gmd@docstripdirective{%
    \begingroup\let\do=\@makeother
    \do\*\do\/\do\+\do\-\do\,\do\&\do\|\do\!\do\(\do\)\do\>\do\<% ^^Ayes, we
    % ^^A make \inverb|<|\catother\ since a~directive |<<|\<any text till ^^B>>
    % ^^A~the end of line> theoretically may occur.
    \@ifnextchar{<}{%
      \let\do=\@makeother \dospecials
      \gmd@docstripverb}
    {\gmd@docstripinner}}%

  \def\gmd@docstripinner#1>{%
    \endgroup
    \def\gmd@modulehashone{%
      \Module{#1}\space
      \@afternarrgfalse\@aftercodegtrue\@codeskipputgfalse}%
    % ^^A    \gmd@docstripshook
    \gmd@textEOL\gmd@modulehashone}
  % A~word of explanation: first of all, we
  % close the group for changed |\catcode|s; the directive's text has its
  % |\catcode|s fixed. Then we put the directive's text wrapped with the
  % formatting macro into one macro in order to give just one token
  % the \gmdoc's \TeX\ code scanner.
  % ^^A But before we launch the \TeX\ code
  % ^^A  scanning with all the b\&w, we virtually restore the meaning of
  % ^^A  further |<|s to let them start further \ds\ directives,
  % ^^A  and after this possible restore (if it \emph{actually} takes place
  % ^^A  depends on the declaration used: |\docstrip| or |\docstrips|) we
  % Then launch this big \TeX\ code scanning machinery by calling
  % |\gmd@textEOL| which is an alias for the `narrative' meaning of the
  % line end. This macro opens the verbatim group and launches the
  % char-by-char scanner. That is this scanner because of what we
  % encapsulated the directive's text with the formatting into one
  % macro: to let it pass the scanner.
  %
  % That's why in the `old' macrocodes case the active |%| closes the
  % group before launching |\gmd@docstripdirective|.
  %
  % \stanza
  % The `verbatim' directive macro works very similarly.
}

\foone{\@makeother\<\@makeother\>
  \glet\sgtleftxii=<
  \catcode`\^^M=\active}%
{%
  \def\gmd@docstripverb<#1^^M{%
    \endgroup%
    \def\gmd@modulehashone{%
      \ModuleVerb{#1}\@afternarrgfalse\@aftercodegtrue%
      \@codeskipputgfalse}%
    \xdef\gmd@dsVerbDelim{\detokenize{#1}}%
    \gmd@textEOL\gmd@modulehashone^^M}%
}

\edef\gmd@dsVerbDelim{\detokenize{#@$$$$#_()(_)*981-71092519-40^^A^^B}}


\pdef\dsVerbClose{%
  \global\gmd@dsVerbtrue}

\providecommand*\Module[1]{{%
    \mod@math@codes$\langle\mathsf{#1}\rangle$}}

\providecommand*\ModuleVerb[1]{{%
    \mod@math@codes$\langle\langle\mathsf{#1}$}}

\def\ModuleVerbClose#1{{%
    \xiipercent
    \mod@math@codes$\mathsf{#1}$
    {\normalfont[\ds\ verbatim closing dir.]}}}

\def\mod@math@codes{\mathcode`\|="226A \mathcode`\&="2026 }

\def\gmd@DefineChanges{%
  \outer\long\def\changes{%
    \gmd@changes@init
    \changes@}}

\def\gmd@changes@init{%
  \@bsphack\begingroup\@sanitize
  \catcode`\\\z@ \catcode`\ 10 \MakePercentIgnore
\catcode`\^=7
  \MakePrivateLetters \StraightEOL
  \MakeGlossaryControls}

\newcommand\changes[4][]{\PackageWarningNoLine{gmdoc}{%
    ^^JThe \bslash changes command used \on@line
    ^^Jwith no \string\RecordChanges\space declared.
    ^^JI shall not warn you again about it}%
  %^^A\gmd@countlines{#4}%
  \renewcommand\changes[4][]{%^^A\gmd@countlines{#4}
  }}

\def\MakeGlossaryControls{%
  \edef\actualchar{\string=}\edef\quotechar{\string!}%
  \edef\levelchar{\string>}\edef\encapchar{\xiiclub}}%for the glossary the
  % `actual', the `quote' and the `level' chars are respectively |=|,
  % |!| and |>|, the `encap' char remains untouched. I~decided to
  % preserve the \docfm's settings for the compatibility.

\newcommand\changes@[4][\generalname]{%
  \if@RecentChange{#3}% if the date is later than the one stored in
  % \cs{c@Chang\+es\+Start\+Date},
    \@tempswafalse
    \ifx\generalname#1% then we check whether a~\CS-entry is given
    % in the optional first argument or is it unchanged.
      \ifx\last@defmark\relax\else% if no particular \CS is
      % specified in |#1|, we check whether |\last@defmark| contains
      % something and if so, we put it into |\gmu@tempb| scratch macro.
        \@tempswatrue
        \edef\gmu@tempb{% it's a~bug fix: while typesetting traditional
          % \file{.dtx}es, \inverb|\last@defmark| came out with \inverb|\| at the
          % beginning (which resulted with \inverb|\\|\<name> in the change
          % log) but while typesetting the `new' way, it occurred
          % without the bslash. So we gobble the bslash if it's
          % present and two lines below we handle the exception of
          % \inverb|\last@defmark|\equals|{\}| (what would happen if
          % a~definition of \inverb|\\| was marked in new way \gmdoc ing).%^^A]
          \if\bslash\last@defmark\else\last@defmark\fi}%
        \ifx\last@defmark\bslash\let\gmu@tempb\last@defmark\fi%
        \n@melet{gmd@glossCStest}{gmd/isaCS/\last@defmark}%
      \fi
    \else%the first argument isx not |\generalname| i.e.,
         %a~particular \CS is specified by it (if some day one
    % wishes to |\changes| |\generalname|, \heshe\ should type
    % |\changes[generalname]|\dots)
      \@tempswatrue
      {\escapechar\m@ne
        \xdef\gmu@tempb{\string#1}}%
      \if\bslash\@xa\@firstofmany\string#1\relax\@nil% we check
      % whether \inverb|#1| is a~\CS\dots\ilrr
        \def\gmd@glossCStest{1}%\dots\ and tell the glossary if so.
      \fi
    \fi
    \@ifundefined{gmd@glossCStest}{\def\gmd@glossCStest{0}}{}%
    \protected@edef\gmu@tempa{\@nx\gmd@glossary{%
        \if\relax\GeneralName\relax\else
          \GeneralName% it's for the |\DocInclude| case to precede
          % every |\changes| of the same file with the file name, cf.\ line
          % \ref{GeneralName}.
        \fi
        #2\levelchar%
        \if@tempswa% If the macro |\last@defmark|
        % doesn't contain any \CS name (i.e., is empty) nor |#1|
        % specifies a~\CS, the current
        % changes entry was done at top-level.  In this case we precede
        % it by |\generalname|.
          \gmu@tempb
          \actualchar\bslash verb*%
          \if\verbatimchar\gmu@tempb$\else\verbatimchar\fi
          \if1\gmd@glossCStest\quotechar\bslash\fi \gmu@tempb
          \if\verbatimchar\gmu@tempb$\else\verbatimchar\fi
        \else
          \space\actualchar\generalname
        \fi
        :\levelchar%^^A\gmd@deeolize{
        #4%^^A}
      }}%
    \gmu@tempa
    \grelaxen\gmd@glossCStest
  \fi% of |\if@recentchange|
  %^^A\gmd@countlines{#4}%
  \endgroup\@esphack}

\@relaxen\last@defmark
\@emptify\GeneralName

\def\ChangesGeneral{\grelaxen\last@defmark}% If automatic detection of

\AtBegInput{\ChangesGeneral}

\newcount\c@ChangesStartDate

\def\if@RecentChange#1{%
  \gmd@setChDate#1\@nil\@tempcnta
  \ifnum\@tempcnta>\c@ChangesStartDate}

\def\gmd@setChDate#1/#2/#3\@nil#4{% the last parameter will be a~|\count|
  % register.
  #4=\numexpr#1*\@M+#2*100+#3\relax
  %\CH{2010/06/23  changed from \TeX's arithmetic to \cmd\numexpr}
}


\def\ChangesStart#1#2{%
  \gmd@setChDate#2\@nil\c@ChangesStartDate
  \typeout{^^JPackage gmdoc info: ^^JChanges' start date #1 memorised
    as \string<\the\c@ChangesStartDate\string> \on@line.^^J}
  \advance\c@ChangesStartDate\m@ne% we shall show the changes \emph{at ^^B
  % the specified day} and later.
  \ifnum\c@ChangesStartDate>19820900 %\unskip\StraightEOL\footnote{^^A
  % DEK writes in \textit{\TeX, The Program} of September 1982 as the
  % date of \TeX\ Version 0.}\QueerEOL\label{TeXVer0}
  % see \gmiflink[personalchanges]{below}.
    \edef\gmu@tempa{%
      \@nx\g@addto@macro\@nx\glossary@prologue{%
        The changes
        \if\relax\GeneralName\relax\else of \GeneralName\space\fi
        earlier than
        #1 \if\relax#1\relax #2\else(#2)\fi\space are not shown.}}%
    \gmu@tempa
  \fi}
\def\generalname{General}

\def\RecordChanges{\makeglossary\gmd@DefineChanges
  \@relaxen\RecordChanges}

\newdimen\GlossaryMin         \GlossaryMin       = 80pt
\newcount\c@GlossaryColumns   \c@GlossaryColumns = 2
\newenvironment{theglossary}{%
  \begin{multicols}\c@GlossaryColumns
    [\glossary@prologue][\GlossaryMin]%
    \GlossaryParms \IndexLinksBlack
    \let\item\@idxitem \ignorespaces}%
  {\end{multicols}}

\long\def\GlossaryPrologue#1{\@bsphack
  \def\glossary@prologue{#1}%
  \@esphack}
\@ifundefined{glossary@prologue}
  {\def\glossary@prologue{\indexdiv{{Change History}}%
      \markboth{{Change History}}{{Change History}}%
    }}{}
\AtBeginDocument{%
  \@ifundefined{GlossaryParms}{\let\GlossaryParms\IndexParms}{}}

\def\PrintChanges{% to avoid a~disaster among queer EOLs:
  \@ifQueerEOL
    {\StraightEOL\@input@{\jobname.gls}\QueerEOL}%
    {\@input@{\jobname.gls}}%
    \g@emptify\PrintChanges}

\pdef\toCTAN{%\
  % \begin{enumargs}
  % \item  \<year/month/day>\textvisiblespace\<version number>
   % \end{enumargs}
  % \changes{v0.99r}{2008/11/22}{added}
  % \chgs{2008/11/30 v0.99s made a~shorthand for \cs{chgs} not
  %   \cs{changes}}
  \gmd@changes@init
 \gmd@toCTAN@}

\def\gmd@toCTAN@#1{%
  \edef\gmu@tempa{\gmd@chgs@parse#1 \@nil}%
  \edef\gmu@tempa{%
    \unexpanded{\changes@[\generalname]}%
    {\@xa\@firstofthree\gmu@tempa}%
    {\@xa\@secondofthree\gmu@tempa}%
    {put to \acro{CTAN} on \@xa\@secondofthree\gmu@tempa}}%
  \gmu@tempa}


\outer\pdef\chgs{\gmd@changes@init\gmd@chgs}

\DeclareCommand\gmd@chgs{%
  o % the optional \CS the change refers to
  >!m % change's date, version and text
}{%
  \IfValueTF{#1}{%%
    \edef\gmu@tempa{\@nx\changes@[\unexpanded{#1}]%
      \@xa\unexpanded\@xa{\gmd@chgs@parse#2\@nil}}}%
  {\edef\gmu@tempa{\@nx\changes@
      \@xa\unexpanded\@xa{\gmd@chgs@parse#2\@nil}}}%
  \gmu@tempa}% of |\gmd@chgs|

\long\def\gmd@chgs@parse#1 #2 #3\@nil{{#2}{#1}{#3}}%

\outer\pdef\CH{%
  \gmd@changes@init\gmd@chgsplus}

\DeclareCommand\gmd@chgsplus{\SameAs\gmd@chgs}{%
  \DCUse\gmd@chgs{#1}{#2}%
  \gmd@threeway{#1}#2\@nil
}

\long\def\gmd@threeway
#1% opt. \CS that |\CH| refers to
#2 % (delimd.\ with a blank) date
#3 %  (delimd.\ with a blank) version
#4\@nil % text
{%
  \par (#2, #3\IfValueT{#1}{, \texttt{\detokenize\@xa{\string#1}}}:)
  #4\scantokens{}% to provide proper line end which'll take care of
                 % |\par| \&c.
}

\newcount\check@sum

\def\CheckSum#1{\@bsphack\global\check@sum#1\relax\@esphack}

\newcounter{CheckSum}

\newcommand*\step@checksum{\stepcounter{CheckSum}}
\AtEndInput{\check@checksum}

\def\check@checksum{\relax
  \ifnum\check@sum=\z@
    \edef\gmu@tempa{% why \cs{edef}---see line \ref{wypis sumy}
      \@nx\typeout{**********************************^^J%
        * The input file \gmd@inputname\space has no Checksum
        stated.^^J%
        * The current checksum is \the\c@CheckSum.^^J%
        \gmd@chschangeline% a~check sum changes history entry, see below.
        * (package gmdoc info.)^^J%
        **********************************^^J}}
    \else
    \ifnum\check@sum=\c@CheckSum
      \edef\gmu@tempa{%
        \@nx\typeout{*****+*+*+*+*+*+*+*+*+*+^^J%
          * The input file \gmd@inputname: Checksum passed.^^J%
          \gmd@chschangeline
          * (package gmdoc info.)^^J%
          *****+*+*+*+*+*+*+*+*+*+^^J}}
    \else
      \edef\gmu@tempa{%
        \@nx\typeout{********\gmd@wykrzykniki^^J%
          *! The input file \gmd@inputname:^^J%
          *! The CheckSum stated: \the\check@sum\space<> my
          count: \the\c@CheckSum.^^J%
          \gmd@chschangeline
          *! (package gmdoc info.)^^J%
          ********\gmd@wykrzykniki^^J}}%
      % \chgs{2008/11/30 v0.99s
      % \env{\quotechar!*\quotechar!*\quotechar!…} sequence changed to
      %   \env{\quotechar! \quotechar! \quotechar!…} for better
      %   distinction}
    \fi
  \fi
  \gmu@tempa
  \@xa\AtEndDocument\@xa{\gmu@tempa}%\label{wypis sumy} we print
  % the checksum notification on the terminal immediately and at end
  % of \TeX ing not to have to scroll the output far nor search the log.
  \global\check@sum\z@}

\def\gmd@wykrzykniki{! ! ! ! ! ! ! ! ! ! ! !}

\def\gmd@chschangeline{%
  \xiipercent\space\string\chschange
  {\@ifundefined{fileversion}{v???}{\fileversion}}%
  {\the\year/\the\month/\the\day}%
  {\the\c@CheckSum}^^J%
  \xiipercent\space\string\chschange
  {\@ifundefined{fileversion}{v???}{\fileversion}}%
  {\@xa\@gobbletwo\the\year/\the\month/\the\day}%
  {%  with two di\-g\-it year in case you use |\ChangesStart|.
    \the\c@CheckSum}^^J}

\outer\pdef\chschange{% \
  % \begin{enumargs}
  %   \dc m file version,
  %   \dc m date,
  %   \dc checksum,
  %   \dc o the reason of check sum change, possibly short.
  % \end{enumargs}
  \@ifQueerEOL
  {\def\EOLwasQueer{11}}{\def\EOLwasQueer{10}}%
  \gmd@changes@init
  \chschange@}

\DeclareCommand\chschange@{mmmo}{%\label{chschange}
  \changes@{#1}{#2}{CheckSum #3
    \IfValueT{#4}{because of #4}%
  }% |\csname›…| because
  % \incs{cha\+n\+g\+es} is \inverb|\outer|.
  \CheckSum{#3}%
  \IfValueF{#4}{%
    \if\EOLwasQueer
    \afterfi{%
      \@ifnextchar\par{%
        \@xa\gmd@textEOL\gobble}%
      {}%
    }% of |\afterfi|,
    \fi}% of no value of |#4|,
}% of |\chschange@|.\nostanza

\newcommand*\ltxPageLayout{%
  \setlength{\textwidth}{355pt}%
 \setlength\marginparwidth{95pt}%
 \setlength\oddsidemargin{82pt}%
 \setlength\evensidemargin{82pt}}


\DeclareCommand\DocInclude{O{}mO{}}{%\
  % \begin{enumargs}
  %   \dc o path (with closing slash), will not be printed
  % \dc m file name without extension, will be printed
  % \dc o file extension (with dot) if not \file{.sty}, \file{.cls},
  % \file{.tex}, \file{.dtx} nor \file{.fdd}
  % \end{enumargs}\
  % originally it took just one
  % argument. Here we make it take two, first of which is intended to
  % be the path (with the closing \inverb |/|). This is intended not to print
  % the path in the page footers only the filename.\par
  % \CodeUsage\HLPrefix
  \gdef\HLPrefix{\filesep}%
  \gdef\EntryPrefix{\filesep}% we define two rather kernel parameters
  % to expand to the file marker. The first will bring the information
  % to one of the default \inverb|\IndexPrologue|'s
  % |\if|s. Therefore the
  % definition is global. The latter is such for symmetry.
  \def\GeneralName{#2\actualchar\pk{#2} }% \label{GeneralName} for the
    % changes' history main level entry.
    %
    % Now we check whether we try to include ourselves and if
    % so---we'll (create and) read an \file{.auxx} file instead of
    % (the main) \file{.aux} to avoid an infinite recursion of |\input|s.
    %
    \edef\gmd@jobname{\jobname}%
    \edef\gmd@difilename{% we want the filename all `other', just as
      % in \inverb|\jobname|.
      \@xa\@xa\@xa\@gobble\@xa\string\csname#2\endcsname}%
    \ifx\gmd@jobname\gmd@difilename
      \def\gmd@auxext{auxx}%
    \else
      \def\gmd@auxext{aux}%
    \fi
  \relax
  %^^A\if@ltxDocInclude
  \clearpage
  % ^^A\fi
  \gmd@docincludeaux \def\currentfile{gmdoc-IncludeFileNotFound.000}%
  \let\fullcurrentfile\currentfile
  \@ifnonempty{#3}%
  {%
    \unless\if.\@firstofmany#3\relax\@nil
      \PackageError{gmdoc}{Optional \xiihash3 of
        \string\DocInclude\space
        if present has to begin with a dot (.)}{}%
    \fi
    \edef\currentfile{#2#3}%
  \IfFileExists{#1\currentfile}{}%
  {\PackageError{gmdoc}{\string\DocInclude\space file
      \currentfile\space not found}{}}%
  }% of if extension given.
  {% if extension not given:
    \IfFileExists{#1#2.fdd}{\edef\currentfile{#2.fdd}}{% it's not \pk{.fdd},
      \IfFileExists{#1#2.dtx}{\edef\currentfile{#2.dtx}}{% it's not \pk{.dtx}
        % either,
        \IfFileExists{#1#2.sty}{\edef\currentfile{#2.sty}}{% it's not
          % \pk{.sty},
          \IfFileExists{#1#2.cls}{\edef\currentfile{#2.cls}}{% it's
            % not \pk{.cls},
            \IfFileExists{#1#2.tex}{\edef\currentfile{#2.tex}}{% it's
              % not \pk{.tex},
              \IfFileExists{#1#2.fd}{\edef\currentfile{#2.fd}}{% so it
                % must be \pk{.fd} or error.
                \PackageError{gmdoc}{\string\DocInclude\space file
                  #1#2.fdd/dtx/sty/cls/tex/fd not found.}{}%
              }}}}}}%
  }% of if no extension given
  % \changes{v0.98j}{06/10/16}{\pk{.fdd} added in \cs{DocInclude}'s
  %   search for the extension.}
  \edef\currentfile{\@xa\detokenize\@xa{\currentfile}}%
  \edef\fullcurrentfile{#1\currentfile}%
  \ifnum\@auxout=\@partaux
    \@latexerr{\string\DocInclude\space cannot be nested}\@eha
  \else \@docinclude{#1}#2#3 \fi}% Why is |#2| delimited with | | not

\def\@docinclude#1#2 {% To match the macro's parameter string, is an
  % answer. But why is |\@docinclude| defined so? Originally, in
  % \pk{ltxdoc} it takes one argument and it's delimited with a~space
  % probably in resemblance to the true |\input| \nlpercent(|\@@input| in
  % \LaTeX). ^^A\if@ltxDocInclude
  \clearpage
  %^^A\fi
  \if@filesw \gmd@writemauxinpaux{#2.\gmd@auxext}\fi% this strange macro with
  % a~long name is another spurious thing to allow |_| in the filenames (see
  % line \ref{gmd@writemauxinpaux}). which are allowed anyway unless
  % active or \cat14.
  \@tempswatrue
  \if@partsw \@tempswafalse\edef\gmu@tempb{#2}%
    \@for \gmu@tempa:=\@partlist\do{\ifx\gmu@tempa\gmu@tempb\@tempswatrue\fi}%
  \fi
  \if@tempswa% the file is on |\@partlist|
    \let\@auxout\@partaux
    \if@filesw
      \immediate\openout\@partaux #2.\gmd@auxext\relax% Yes, only |#2|. It's to
      % create and process the partial \pk{.aux(x)} files always in the main
      % document's (driver's) directory.
      % \changes[\DocInclude]{v0.97}{06/09/04}{\protect\TeX forced to
      %   process the partial \pk{.aux}es in the main document directory}
      \immediate\write\@partaux{\relax}%
    \fi
    % \begin{quotation}We need to save (and later restore) various
    %   index-related commands which might be changed by the included
    %   file.\end{quotation}
    % \changes{v0.98a}{06/09/06}{\cs{MacroStoringDo} renamed (in
    %   \pk{gmutils}) to \cs{StoringAndRelaxingDo}, and
    %   \cs{MacroRestoringDo} to \cs{RestoringDo}.}
    \StoringAndRelaxingDo\gmd@doIndexRelated
    \if@ltxDocInclude\part{\currentfile}% In the \pk{ltxdoc}-like setup
    % we make a~part title page with only the filename and the file's
    % |\maketitle| will typeset an \pk{article}-like title.
    \else\let\maketitle=\InclMaketitle
    \fi% In the default setup we
    % redefine |\maketitle| to typeset a~common chapter or part heading.
    \if@ltxDocInclude\xdef@filekey\fi
    \GetFileInfo{\currentfile}% it's my (GM) addition with the account
    % of using file info in the included files' title/\:heading etc.
    \incl@DocInput{\fullcurrentfile}% originally just |\currentfile|.
    \if@ltxDocInclude\else\xdef@filekey\fi% in the default case we add
    % new file to the file key \emph{after} the input because in this
    % case it's the files own |\maketitle| what launches the
    % sectioning command that increases the counter.
    % \par And here is the moment to restore the index-related
    % commands.
    \RestoringDo\gmd@doIndexRelated
    % ^^A\if@ltxDocInclude
    \clearpage
    % ^^A\fi
    \gmd@writeckpt{#1#2}%
    \if@filesw \immediate\closeout\@partaux \fi
  \else% the file isn't on     |\@partlist|
    \@nameuse{cp@#1#2}%
    \g@emptify\gmd@ABIOnce
  \fi
  \let\@auxout\@mainaux}% end of |\@docinclude|.
\def\xdef@filekey{{\@relaxen\narrativett% \label{LetTTFRelax}This
    % assignment is very trickily crafted: it makes \emph{all}
    % |\narrativett|s present in the |\filekey|'s expansion unexpandable
    % not only the one added in this step.
    \xdef\filekey{\filekey, \thefilediv={\narrativett\currentfile}}}}

\def\gmd@writemauxinpaux#1{% \label{gmd@writemauxinpaux}
  % this name comes from `\emph{write} out to \emph main
  % \emph{\pk{.aux}} to \emph{in}put \emph partial
  % \emph{\pk{.aux}}'.\par
  % We wrap |\@input{|\<partial \pk{.aux}>|}| in a~|_|\catother\
  % hacked scope. This hack is especially recommended here since the
  % \pk{.aux} file may contain a~non-|\global| stuff that should not
  % be localised by a~group that we would have to establish if we
  % didn't use the hack. (Hope you understand it. If not, notify me
  % and for now I'll only give a~hint: ``Look at it with the \TeX's
  % eyes''. More uses of this hack are to be seen in \pk{gmutils}
  % where they are a~bit more explained.)
  \immediate\write\@mainaux{%
    \unexpanded{%
      \bgroup
      \@makeother\_% to allow underscore
      \@makeother\~% to allow paths beginning with |~/|
      \firstofone}{\egroup
      \string\@input{#1}}}}

\def\gmd@writeckpt#1{%
  \immediate\write\@partaux{%
    \unexpanded{%
      \bgroup
      \@makeother\_%
      \@makeother\~%
      \firstofone}\@charlb\egroup}%
  \@writeckpt{#1}%
  \immediate\write\@partaux{\@charrb}}

\def\gmd@doIndexRelated{%
  \do\tableofcontents \do\makeindex \do\EnableCrossrefs
  \do\PrintIndex \do\printindex \do\RecordChanges \do\PrintChanges
  \do\theglossary \do\endtheglossary}

\@emptify\filesep
\def\aalph#1{\@aalph{\csname c@#1\endcsname}}
\def\@aalph#1{%
  \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or
         j\or k\or l\or m\or n\or o\or p\or q\or r\or s\or
         t\or u\or v\or w\or x\or y\or z\or A\or B\or C\or
         D\or E\or F\or G\or H\or I\or J\or K\or L\or M\or
         N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or
         X\or Y\or Z\else\@ctrerr\fi}

\def\gmd@docincludeaux{%
  % We set the things for including the files only once.
  \global\@relaxen\gmd@docincludeaux
  % By default, we will include multiple files into one document
  % as chapters in the classes that provide |\chapter| and as parts
  % elsewhere.
  \ifx\filediv\relax
    \ifx\filedivname\relax% (nor |\filediv| neither
    % |\filedivname| is defined by the user)
    % \changes[\filediv]{v0.98a}{06/09/06}{definition moved into
    % \cs{DocInclude} and let \cs{relax} by default ($\quotechar=$a~bug fix).}
      \@ifundefined{chapter}{%
        \SetFileDiv{part}}%\changes[\DocInclude]{v0.98f}{06/9/29}{\cs{filediv(name)}
      % defined as \cs[]{(\protect\bslash)part} for the classes that
      % don't know \cs{chapter}}
      {\SetFileDiv{chapter}}%
    \else% (|\filedivname| is defined by the user, |\filediv| is not)
      \SetFileDiv{\filedivname}% why not? Inside is |\edef| so it'll work.
    \fi
  \else% (|\filediv| is defined by the user
    \ifx\filedivname\relax% and |\filedivname| is not)
    %^^A~I~deleted a~six level test which one sectioning command
    %^^A~|\filedivname| isx.
      \PackageError{gmdoc}{You've redefined \string\filediv\space
        without redefining \string\filedivname.}{Please redefine the
        two macros accordingly. You may use \string\SetFileDiv{name
          without bslash}.}%
    \fi
  \fi
  % \changes[\DocInclude]{v0.99m}{2008/08/09}{
  %   resetting of codeline number with every
  % \cs{filedivname} commented out because with the
  % \env{countalllines} option it caused that reset at \cs{maketitle}
  % after some lines of file}
  % ^^A  \@addtoreset{codelinenum}{\filedivname}% remember it has
  % ^^A~a~|\global| effect in fact. For each file we'll reset
  % ^^A~\env{codelinenum}.
  \def\thefilediv{\aalph{\filedivname}}% The files will be numbered
  % with letters, lowercase first.
  \@xa\let\csname the\filedivname\endcsname=\thefilediv% This
  % li\-ne lets |\the|\<chapter> etc.\ equal |\thefilediv|.
  \def\filesep{\thefilediv-}% File separator (identifier) for the index.
  \let\filekey=\@gobble
  \g@addto@macro\index@prologue{%
    \gdef\@oddfoot{\parbox{\textwidth}{\strut\footnotesize
        \raggedright{\bfseries File Key:} \filekey}}% The footer for
    % the pages of index.
    \glet\@evenfoot\@oddfoot}% \label{oneside}anyway, it's intended to
  % be oneside.
  \g@addto@macro\glossary@prologue{%
    \gdef\@oddfoot{\strut Change History\hfill\thepage}% The footer
    % for the changes history.
    \glet\@evenfoot\@oddfoot}%
  % \changes[\DocInclude]{v0.98c}{06/9/10}{Change History footer
  % defined}
  \gdef\@oddfoot{% The footer of the file pages will be its name and,
    % if there is a~file info, also the date and version.
    \@xa\ifx\csname ver@\currentfile\endcsname\relax
      File \thefilediv: {\narrativett\currentfile} %
    \else
      \GetFileInfo{\currentfile}%
      File \thefilediv: {\narrativett\filename} %
      Date: \filedate\ %
      Version \fileversion
    \fi
    \hfill\thepage}%
  \glet\@evenfoot\@oddfoot% see line \ref{oneside}.
  % ^^A  \show\filedivname% for debug
  \@xa\def\csname\filedivname name\endcsname{File}% we
  % redefine the name of the proper division to `File'.
  \ifx\filediv\section
    \let\division=\subsection
    \let\subdivision=\subsubsection
    \let\subsubdivision=\paragraph
    % If |\filediv| is higher than
    % |\section| we don't change the three divisions (they are
    % |\section|, |\subsection| and |\subsubsection| by default).
    % |\section| seems to me the lowest reasonable sectioning command
    % for the file. If |\filediv| is lower you should rather rethink
    % the level of a~file in your documentation not redefine the two
    % divisions.
  \fi}% end of |\gmd@docincludeaux|.

\def\SetFileDiv#1{%
  \edef\filedivname{#1}%
  \@xa\let\@xa\filediv\csname#1\endcsname}

\def\SelfInclude{\DocInclude{\jobname}}

\newif\if@ltxDocInclude

\newcommand*\ltxLookSetup{%
  \SetFileDiv{part}%
  \ltxPageLayout
  \@ltxDocIncludetrue
}

\@onlypreamble\ltxLookSetup

\let\incl@DocInput=\DocInput

\@emptify\currentfile% for the pages outside the

\newcommand*\olddocIncludes{%
  \let\incl@DocInput=\OldDocInput}

\newcommand*\gmdocIncludes{%
  \let\incl@DocInput=\DocInput
  \AtBegInput{\QueerEOL}}% to move back the |\StraightEOL| declaration put
\AtBegInput{%^^A~ why provide not just \cs{def}?
  \providecommand*\maketitle{\par
    \begingroup \def \thefootnote {\fnsymbol {footnote}}%
    \setcounter {footnote}\z@
    \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
    \long\def\@makefntext##1{\parindent 1em\noindent
      \hb@xt@1.8em{%
        \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
    \if@twocolumn \twocolumn [\@maketitle ]%
    \else \newpage \global \@topnum \z@ \@maketitle \fi
    \thispagestyle{titlepage}\@thanks \endgroup
    \setcounter {footnote}\z@
    \gdef\@date{\today}\g@emptify\@thanks%
    \g@relaxen\@author\g@relaxen\@title%
  }%\par
  % \begin{quotation}When a number of articles are concatenated into
  % a~journal, for example, it is not usual for the title pages of
  % such documents to be formatted differently. Therefore, a class
  % such as \pk{ltugboat} can define this macro in advance. However,
  % if no such definition exists, we use page style plain for title
  % pages.\end{quotation}
  \@ifundefined{ps@titlepage}{\let\ps@titlepage=\ps@plain}{}%
  % \par And let's provide |\@maketitle| just in case:  an error occurred
  % without it at \TeX ing with \pk{mwbk.cls} because this class with the
  % default options does not define |\@maketitle|. The below definitions
  % are taken from \pk{report.cls} and \pk{mwrep.cls}.
  \providecommand*\@maketitle{%
    \newpage\null \vskip 2em\relax%
    \begin{center}%
      \titlesetup
      \let \footnote \thanks
      {\LARGE \@title \par}%
      \vskip 1.5em%
      {\large \lineskip .5em%
        \begin{tabular}[t]{c}%
          \strut \@author
        \end{tabular}\par}%
      \vskip 1em%
      {\large \@date}%
    \end{center}%
    \par \vskip 1.5em\relax}%\par
  % We'd better restore the primary meanings of the macros making
  % a~title. (\LaTeXe\ source, File F: ltsect.dtx Date: 1996/12/20 Version
  % v1.0z, lines 3.5.7.9--12.14--17.)
  \providecommand*\title[1]{\gdef\@title{#1}}
  \providecommand*\author[1]{\gdef\@author{#1}}
  \providecommand*\date[1]{\gdef\@date{#1}}
  \providecommand*\thanks[1]{\footnotemark
    \protected@xdef\@thanks{\@thanks
      \protect\footnotetext[\the\c@footnote]{#1}}%
  }%
  \providecommand*\and{%| % \begin{tabular}|
    \end{tabular}%
    \hskip 1em \@plus.17fil%
    \begin{tabular}[t]{c}}%| % \end{tabular}|
    % And finally, let's initialise \cs{tit\+le\+set\+up} if it is not yet.
    \providecommand*\titlesetup{}%
}% end of |\AtBegInput|.
\@relaxen\filediv
\@relaxen\filedivname
\@relaxen\thefilediv


\def\InclMaketitle{%
  % \changes{v0.98a}{06/09/05}{renamed from \cs{incl@maketitle} because
  %   I~needed it in self-input hacks.}
  % \chgs{2008/12/10 v0.99s a~bug fixed: \cmd\if\cmd\relax\cmd\@date\
  %   changed to \cmd\ifx}
  %
  {\def\and{, }% we make |\and| just a~comma.
    {\let\thanks=\@gobble% for the toc version of the heading we
      % discard |\thanks|.
      \protected@xdef\incl@titletotoc{%
        \@title\@ifauthor{%
          \protect\space(\@author)}{}}% we add the author iff the `files have
      % different authors' \emph{and} author exists \nlpercent(|@variousauthors|)
    }%
    \def\thanks##1{\footnotemark
      \protected@xdef\@thanks{\@thanks% to keep the previous |\thanks|
        % if there were any.
        \protect\footnotetext[\the\c@footnote]{##1}}}% for some
    % mysterious reasons so defined |\thanks| do typeset the footnote
    % mark and text but they don't hyperlink it
    % properly. A~\pk{hyperref} bug?
    \@emptify\@thanks
    \protected@xdef\incl@filedivtitle{%
      [{\incl@titletotoc}]% braces to allow |[| and
      % |]| in the title to toc.
      {\protect\@title
        {\protect\smallerr% this macro is provided by the \pk{gmutils}
          % package after the \pk{relsize} package.
          \@ifauthor
          {\protect\\[0.15em]\@nx\@author
            \ifx\relax\@date\else, \fi}% after use, |\@date| is let to
          % \incmd\relax.
          {\ifx\relax\@date\else\protect\\[0.15em]\fi}
          % The default is that all the included files have the same
          % author(s). In this case we won't print the author(s) in
          % the headings. Otherwise we wish to print them.  The
          % information which case are we in is brought by the
          % |\if@variousauthors| switch defined in line \ref{@variousauthors}.
          \protect\@date}}% end of |\incl@filedivtitle|'s brace (2nd
      % or 3rd argument).
    }% end of |\incl@filedivtitle|'s |\protected@xdef|.\par
    % We |\protect| all the title components to avoid expanding
    % |\footnotemark| hidden in |\thanks| during  |\protected@xdef|
    % (and to let it be executed during the typesetting, of course).
    }% end of the comma-|\and|'s group.
    \@xa\filediv\incl@filedivtitle
    \@thanks
    \g@relaxen\@author \g@relaxen\@title \g@relaxen\@date
    \g@emptify\@thanks
}% end of |\InclMaketitle|.


\newif\if@variousauthors

\newcommand*\PrintFilesAuthors{\@variousauthorstrue}
\newcommand*\SkipFilesAuthors{\@variousauthorsfalse}

\def\@ifauthor{%\
  % \begin{enumargs}
  % \item what if true
  % \item what if false
  % \end{enumargs}
  \ifnum\numexpr\if@variousauthors1\else0\fi*
      \ifx\@author\relax0\else\ifx\@author\@empty0\else1\fi\fi>0
    \@xa\@firstoftwo
  \else
    \@xa\@secondoftwo
  \fi
}


\def\GetFileInfo#1{%
  \def\filename{#1}%
  \def\gmu@tempb##1 ##2 ##3\relax##4\relax{%
    \def\filedate{##1}%
    \def\fileversion{##2}%
    \def\fileinfo{##3}}%
  \edef\gmu@tempa{\csname ver@#1\endcsname}%
  \@xa\gmu@tempb\gmu@tempa\relax? ? \relax\relax}


\newcommand*\FileInfo{%
  \bgroup
  \gmd@ctallsetup
  \bgroup% yes, we open two groups because we want to rescan tokens in
  % `usual' catcodes. We cannot put \incs{gmd@ctallsetup} into the
  % inner macro because when that will be executed, the
  % \incs{inputlineno} will be too large (the last not the first line).
  \let\do\@makeother
  \do\ \do\{\do\}\do\^^M\do\\%
  \gmd@fileinfo}

\foone{%
  \catcode`!\z@
  \catcode`(\@ne
  \catcode`)\tw@
  \let\do\@makeother
  \do\ % we make space `other' to keep it for scanning the code where
  % it may be leading.
  \do\{\do\}\do\^^M\do\\}%\CodeEscapeChar\!
(%
!def!gmd@fileinfo#1Provides#2{#3}#4[#5]#6^^M%
(!egroup% we close the group of changed catcodes, the catcodes
!gmd@writeFI(#2)(#3)(#5)%
!gmd@FIrescan(#1Provides#2{#3}#4[#5]#6)% this macro will close the group.
)% \CodeEscapeChar\\
)

\def\gmd@writeFI#1#2#3{%
  % ^^A  \typeout{@@@ write FI}\show\relax
  {\newlinechar=\endlinechar% \chgs{2008/11/30 v0.99s added assignment
    % of \cmd\newlinechar}
    \immediate\write\@auxout{%
      \global\@nx\@namedef{%
        ver@#2.\if P\@firstofmany#1\@nil sty\else cls\fi}{#3}}}}

\foone\obeylines{%
  \def\gmd@FIrescan#1{%
 % \changes{v0.99l}{2008/08/06}{\cs{scantokens} used instead of
 %   \cs{write} and \cs{@@input} which simplified the macro}
 % ^^A  \newwrite\gmd@docrescanfile
 % ^^A  \immediate\openout\gmd@docrescanfile=\jobname.docrescan\relax
 {\newlinechar=\endlinechar\scantokens{#1}}\egroup^^M}}


\def\ProvideFileInfo#1{%
  \begingroup
    \catcode`\ 10 \catcode\endlinechar 10 %
    \@makeother\/\@makeother\&%
    \kernel@ifnextchar[{\gmd@providefii{#1}}{\gmd@providefii{#1}[]}%^^A]
  }

  % \DefIndex\gmd@providefii
\def\gmd@providefii#1[#2]{%\\
  % (we \emph{don't} write the file info to \pk{.log})
  \@xa\xdef\csname ver@#1\endcsname{#2}%
  \endgroup}

\def\ProvideSelfInfo{\ProvideFileInfo{\jobname.tex}}


\def\gmd@upperDIV#1{%
  \if d#1D\fi
  \if i#1I\fi
  \if v#1V\fi
}

\def\edefInfo
#1% name
#2% datum
{%
  \edef\gmd@edefInfo@resa{\gmd@upperDIV #2}%
  \@nameedef{file#2}{%
    \ifcsname #1Leaf\gmd@edefInfo@resa\endcsname % e.g.~|gmbaseLeafVersion|
      \xA\xA\xA\detokenize\xA\xA\xA{%
        \csname #1Leaf\gmd@edefInfo@resa\endcsname
      }%
    \else
      \ifcsname #1\gmd@edefInfo@resa\endcsname % e.g.~|gmbaseVersion|
        \xA\xA\xA\detokenize\xA\xA\xA{%
          \csname #1\gmd@edefInfo@resa\endcsname
        }%
      \else
        \ifcsname \gmBundleFile \gmd@edefInfo@resa\endcsname % e.g.~|gmutilsVersion|
          \xA\xA\xA\detokenize\xA\xA\xA{%
            \csname \gmBundleFile \gmd@edefInfo@resa\endcsname
          }%
        \fi
      \fi
    \fi
  }% of edefined macro
}% of |\edefInfo|

\def\FileInfoFromName#1{%
  \edefInfo{#1}{date}%
  \edefInfo{#1}{version}%
  \edefInfo{#1}{info}%
  \def\GeneralName{#1\actualchar\pk{#1} }% for the changes' history.
}

\def\BundleInfoFromName#1{%
  \def\gmBundleFile{#1}%
  \Store@MacroSt {#1LeafDate}%
  \Store@MacroSt {#1LeafVersion}%
  \Store@MacroSt {#1LeafInfo}%
  \n@melet{#1LeafDate}{@undefined}%
  \n@melet{#1LeafVersion}{@undefined}%
  \n@melet{#1LeafInfo}{@undefined}%
  \FileInfoFromName{#1}%
  \Restore@MacroSt {#1LeafDate}%
  \Restore@MacroSt {#1LeafVersion}%
  \Restore@MacroSt {#1LeafInfo}%
}

\pdef\filenote{This file has version number \fileversion{} dated \filedate{}.}
\pdef\thfileinfo{\thanks\filenote}

\pdef\fnfileinfo{%
  \gmu@ifedetokens{\@currext}{toc}%
  {}%
  {\footnote\filenote}%
}

\foone{\obeylines}%
{%
  \pdef\IndexInput#1{% \changes{v0.98b}{06/09/07}{\cs{StoreMacro}ing
    %% and \cs{RestoreMacro}ing
    % \cs{code@delim} added}
    \Store@Macro\code@delim%
    \CodeDelim*\^^Z%
    \def\gmd@iihook{% \label{iihook}this hook is |\edef|ed!
      \@nx^^M%
      \code@delim\relax\@nx\let\@nx\EOFMark\relax}%^^A\@nx^^M
    \DocInput{#1}\Restore@Macro\code@delim}%
}
\newenvironment{gmlonely}{\StraightEOL}{}

\newcommand\skipgmlonely[1][]{%
  \def\gmu@tempa{%\DefIndex\gmd@skipgmltext
    \def\gmd@skipgmltext{%
      \g@emptify\gmd@skipgmltext
      % ^^A      \gmd@deeolize{
      #1%^^A}
    }}% not to count the lines of the substituting
  % text but only of the text omitted
  \gmu@tempa
  \@xa\AtBegInput\@xa{\gmu@tempa}%
  \renewenvironment{gmlonely}{%
    \StraightEOL
    \@fileswfalse% to forbid writing to \pk{.toc}, \pk{.idx} etc.
    \setbox0=\vbox\bgroup}{\egroup\gmd@skipgmltext}}


\foone{\catcode`\_=8 }% we ensure the standard |\catcode| of |_|.
{%
  \newcommand*\catother{${}_{12}$}%\par
  % Similarly, if we need to say some char is of category 13 (`active'),
  % we'll write \catactive, got by |\catactive|
  \newcommand*\catactive{${}_{13}$}%\par
  % and a~letter, \catletter
  \newcommand*\catletter{${}_{11}$}%.
}
\newenvironment*{copyrnote}{%
  \StraightEOL\everypar{\hangindent3em\relax\hangafter1 }%
  \par\addvspace\medskipamount\parindent\z@\obeylines}{%
  \@codeskipputgfalse\stanza}
\StoreEnvironment{quotation}
\def\gmd@quotationname{quotation}
\renewenvironment{quotation}{%
  % \changes{v0.99j}{2008/08/03}{Improved behaviour of redefined
  %   \env{quotation} to be the original if used by another environment.}
  % The first non-me user complained that \env{abstract} comes out in
  % quotation marks. That is because \env{abstract} uses \env{quotation}
  % internally. So we first check whether the current environment is
  % \env{quotation} or something else.
  \ifx\@currenvir\gmd@quotationname
  \afterfi{\par``\ignorespaces}%
  \else\afterfi{\storedcsname{quotation}}%
  \fi}
{\ifx\@currenvir\gmd@quotationname
  \afterfi{\ifhmode\unskip\fi''\par}%
  \else\afterfi{\storedcsname{endquotation}}%
  \fi}

\def\gmdnoindent{%
  \ifvmode\leavevmode\hskip-\parindent\ignorespaces
  \fi}% \incs{ignorespaces} is added to eat a~space inserted% by
\pdef\inverb{%
  % \changes{v0.99g}{2007/11/12}{added}
  \gmu@ifstar{%
    \def\gmu@tempa{\verbhyphen}% the pre-break.
    \@emptify\gmu@tempb% the no-break.
    \gmd@inverb}%
  {\@emptify\gmu@tempa% the pre-break empty
    \def\gmu@tempb{\gmboxedspace}% the no-break boxed space.
    \gmd@inverb}}

\newcommand*\gmboxedspace{\hbox{\normalfont{ }}}

\pdef\gmd@nlperc{% \changes{v0.99n}{2008/08/22}{% added
  % \cs{hbox}es in \cs{discretionary} to score \cs{hyphenpenalty} not
  % \cs{exhyphenpenalty}}
  % \chgs{2008/12/06 v0.99s \cs{newcommand*} replaced with \cs{pdef}
  % and optional argument's declaration removed since nothing is done
  % to \texttt{\#1} in the body of now-macro. Wrapped in a~group for
  % setting \cmd\hyphenpenalty}
  \ifhmode\unskip\fi
  \begingroup\hyphenpenalty\inverbpenalty\relax
  \discretionary{\hbox{\gmu@tempa}}% (pre-break).  I~always put
  % a~\incs{hbox} here to make this discretionary score the
  % \incs{hyphenpenalty} not \incs{exhyphenpenalty} (\TB\ p.~96) since
  % the latter may be 10,000 in Polish typesetting.
  {\hbox{\narrationmark}}% (post-break)
  {\gmu@tempb}% (no-break).
  \endgroup
  \penalty10000\hskip0sp\relax}

\def\inverbpenalty{-1000}

\pdef\gmd@inverb{%
  \gmd@nlperc
  \ifmmode\hbox\else\leavevmode\null\fi
  \bgroup
  \ttverbatim
  \narrativett
  \def\breakablevisspace{%
    \discretionary{\visiblespace}{\narrationmark}{\visiblespace}}%
  \def\breakbslash{%
    \discretionary{}{\narrationmark\type@bslash}{\type@bslash}}%
  \def\breaklbrace{%
    \discretionary
      {\xiilbrace\verbhyphen}%
      {\narrationmark}%
      {\xiilbrace}}%
  \gm@verb@eol
  %^^A  \gmu@ifstar {\@sverb@chbsl}
  %^^A~ {\gmobeyspaces\frenchspacing\@sverb@chbsl}
  \@sverb@chbsl% It's always with visible spaces.
}

\pdef\nlperc{\newline\narrationmark\ignorespaces}

\pdef\nlpercent{%
  % ^^A   \gmu@ifstar{\def\gmu@tempa{{\tt\xiipercent}}%
  %   ^^A     \@emptify\gmu@tempb
  %   ^^A     \gmd@nlperc}%
  % ^^A  {
  % \chgs{200/12/7 v0.99s starred version discarded as never used and
  %   undocumented}
  % \UnDef
  \@emptify\gmu@tempa
  \def\gmu@tempb{\gmboxedspace}%
  \gmd@nlperc
  % ^^A}
}

\pdef\incs{% an in-line \cs{cs}
  % \changes{v0.99m}{008/08/07}{added}
  % \chgs{200/12/7 v0.99s starred version discarded as never used and
  %   undocumented}
  % ^^A   \gmu@ifstar{\def\gmu@tempa{{\tt\xiipercent}}%
  %   ^^A     \@emptify\gmu@tempb
  %   ^^A     \gmd@nlperc\cs}%
  % ^^A   {
  % \UnDef
  \@emptify\gmu@tempa
  \def\gmu@tempb{\gmboxedspace}%
  \gmd@nlperc\cs
  % ^^A}
}

\def\inenv{\incs[]}% an in-line \cs{env}

\def\incmd{% it has to be |\def| to let it expand to let \incmd\cmd\
           % convert its argument to a~safe string.
           \nlpercent\cmd}

\def\inhash{\nlpercent\hash}


\@xa\ampulexdef\csname\@dc@InnerName\cs\endcsname
[#1] [#1] {\begingroup} {\ifdefined}
{\begingroup \def\+{\discre{\gmv@hyphen}{\narrationmark}{}}%
  \ifdefined}


\providecommand*\ds{DocStrip}


\newcommand*\CDAnd{\CodeDelim\&}

\newcommand*\CDPerc{\CodeDelim\%}

\let\division=\section

\let\subdivision=\subsection

\let\subsubdivision=\subsubsection
\newcounter{gmd@mc}

\def\gmd@mchook{\stepcounter{gmd@mc}% \label{gmd@mchook}
  \gmd@mcdiag
  \ifcsname gmd@mchook\the\c@gmd@mc\endcsname
  \afterfi{\csname gmd@mchook\the\c@gmd@mc\endcsname}%
  \fi}

\long\def\AfterMacrocode#1#2{\@namedef{gmd@mchook#1}{#2}}

\@emptify\gmd@mcdiag

\def\mcdiagOn{\def\gmd@mcdiag{%
    \typeout{^^J\bslash end{\gmd@lastenvir} No.\the\c@gmd@mc
    \space\on@line, cln.\the\c@codelinenum.}}}

\def\mcdiagOff{\@emptify\gmd@mcdiag}
\DeclareEnvironment{enumargs}{o}%\
{%
  \StraightEOL
  \if@aftercode
    \edef\gmu@tempa{\the\leftskip}%
    \edef\gmu@tempb{\the\hangindent}%
  \fi
  \enumerate
  \if@aftercode
    \leftskip=\glueexpr\gmu@tempa+\gmu@tempb\relax
  \fi
  \edef\gmd@ea@hashes{%
    \#\ifcase\IfValueTF{#1}{#1}{1}\relax
    \or\or\#\or\or\#\#\#\fi}%
  %\stanza
  \@namedef{label\@enumctr}{%
    \env{\if@aftercode\narrationmark\fi
      \relax% to stop |\ignorespaces|
      \gmd@ea@bwrap
      \gmd@ea@hashes
      \csname the\@enumctr\endcsname
      \gmd@ea@ewrap}}% of |\label⁄<@enumctr>|.
  \let\mand\item
  \provide\gmd@ea@wraps{%
    \emptify\gmd@ea@ewrap
    \emptify\gmd@ea@bwrap}%
  \gmd@ea@wraps
  \def\opt{%\HideDef
    \def\gmd@ea@bwrap{[}\def\gmd@ea@ewrap{]}%
  \item
    \gmd@ea@wraps}%
  %\stanza
  \settowidth{\@tempdima}{\narrativett x\gmd@ea@hashes7x}%
  \edef\gmd@ea@xxxwd{\the\@tempdima}%
  %\stanza
  \DeclareCommand\dc !{%
    Q{*>} % (1) we check whether there's a~sergeant right of the prefix or
          % a~star to suppress parentheses,
    Q{P!lL\long iI} % (2) an optional ‘bare’ prefix for a~‘long’ argument
    % or for ignored
    b %  (3) prefix(es) in curly braces
    % ( % This way we allow the prefix(es) to be braced or not
    % at the author's option),
    >\@xa T{\@dc@argtypes} % (4)  (optional) argument type
    % specifier,
    b %  (5) (optional) default value of the specified argument or
      %  (for |K| and |G|) mandatory.
    b % (6) default of |K| and |G|.
  }{%
     \gmu@ifxany *{##1}%
    {% a~|*| suppresses bracket/brace/parentheses decoration.
      \def\gmd@ea@bwrap{\hbox to \gmd@ea@xxxwd\bgroup\hss}%
      \def\gmd@ea@ewrap{\hss\egroup}%
    }%
    {% if there's no |*| in \hash1, be wrap the item label in
     % braces/brackets/parentheses.
      \gmu@ifxany ##4{bB}{% I~decide not to print |m| type
        % arguments in braces because the braces are not mandatory for
        % this type.
        \def\gmd@ea@bwrap{\{}%
        \def\gmd@ea@ewrap{\}}%
      }{}%
      \gmu@ifxany ##4{cC}{%
        \def\gmd@ea@bwrap{(}%
        \def\gmd@ea@ewrap{)}%
      }{}%
      \gmu@ifxany ##4{oO}{%
        \def\gmd@ea@bwrap{[}%
        \def\gmd@ea@ewrap{]}%
      }{}%
      \gmu@ifxany ##4{G}{%
        \def\gmd@ea@bwrap{\detokenize\@xa{\@firstoftwo##5}}%
        \def\gmd@ea@ewrap{\detokenize\@xa{\@secondoftwo##5}}%%
      }{}%
      \gmu@ifxany ##4{A}{%
        \def\gmd@ea@bwrap{<}%
        \def\gmd@ea@ewrap{>}%
      }{}%
    }% of if no |*| in \hash1.
    \gmu@ifxany ##4{mQsSTK\afterassignment}{%
      \def\gmd@ea@bwrap{\hbox to \gmd@ea@xxxwd\bgroup\hss}%
      \def\gmd@ea@ewrap{\hss\egroup}%
    }{}%
    % we add a~normal space
    \addtomacro\gmd@ea@ewrap{{\normalfont\ }}%
    \IfValueT{##2}{%
      \addtomacro\gmd@ea@ewrap{>\{\string##2\}}}%
    \IfValueT{##3}{%
      \addtomacro\gmd@ea@ewrap{>\{##3\}}}%
    \IfValueT{##4}{%
      \ifx s##4%
        \addtomacro\gmd@ea@ewrap{%
          \llap{\metachar[}\scanverb{*}\metachar]}%
      \else\addtomacro\gmd@ea@ewrap{##4}%
      \fi}%
    \IfValueT{##5}{%
      \addtomacro\gmd@ea@ewrap{\{%
        %\nostanza|%\ttverbatim| breakable chars won't work because we are in
        % the item's label's \incmd\hbox. \nostanza
        \scanverb*{##5}%
        \}}}%
    \IfValueT{##6}{%
      \addtomacro\gmd@ea@ewrap{\{%
        %\nostanza|%\ttverbatim| breakable chars won't work because we are in
        % the item's label's \incmd\hbox. \nostanza
        \scanverb*{##6}%
        \}}}%
    \def\gmd@blubra{%
      \addtomacro\gmd@ea@bwrap{%
        \begingroup
        \relaxen\gmd@ea@hashes
        \@namedef{the\@enumctr}{\<ign.>}%
      }%
      \prependtomacro\gmd@ea@ewrap{%
        \endgroup}%
      \addtomacro\gmd@ea@ewrap{%
        \global \advance \csname c@\@enumctr\endcsname \m@ne
      }%
      \emptify\gmd@blubra
    }%
    \gmu@ifsbintersect {##2}{Ii}{\gmd@blubra}{}%
    \gmu@ifsbintersect {##3}{Ii}{\gmd@blubra}{}%
    \gmu@ifxany ##4{\afterassignment}{\gmd@blubra}{}%
  \item\relax}%
  % \stanza
    \IfNoValueT{#1}{\@ifnextac\@gobble{}}% to gobble a~possible active line end or
    % active \hathat{A} or \hathat{B} that might
    % have occurred because of \incmd\futurelet\ of the optional
    % argument checker.
  }% of begin definition \ResumeDef
{\endenumerate}

\newenvironment*{enumargs*}{%
  \def\gmd@ea@wraps{% \HideDef
    \def\gmd@ea@bwrap{ }\def\gmd@ea@ewrap{ }}% \ResumeDef
  \enumargs}{\endenumargs}


\def\CharacterTable{\begingroup
  \@makeother\{\@makeother\}%
  \Character@Table}

\foone{%
  \catcode`\[=1 \catcode`\]=2 %
  \@makeother\{\@makeother\}}%
[
  \def\Character@Table#1{#2}[\endgroup
     \message[^^J^^J gmdoc.sty package:^^J
     ==== The input file contains the \bslash CharacterTable.^^J
     ==== If you really need to check the correctness of the chars,^^J
     ==== please notify the author of gmdoc.sty at the email address^^J
     ==== given in the legal notice in gmdoc.sty.^^J^^J]%
     %^^A~\gmd@countlines[#1]\gmd@countlines[#2]
  ]]
\outer\def\DescribeMacro{%
  \@bsphack
  \begingroup\MakePrivateLetters
  \gmd@ifonetoken\Describe@Macro\Describe@Env}
\outer\def\DescribeEnv{%
  \@bsphack
  \begingroup\MakePrivateOthers\Describe@Env}

\outer\def\Describe{% It doesn't typeset its argument in the point of
  % occurrence.
  \leavevmode
  \@bsphack
  \begingroup\MakePrivateLetters
  \gmu@ifstar{\MakePrivateOthers\Describe@Env}{\Describe@Macro}}

\long\def\Describe@Macro#1{%
  \endgroup
  \strut\Text@Marginize*{#1}%
  \@usgentryze#1% we declare kind of formatting the entry
  \text@indexmacro#1%
  \@esphack}

\def\Describe@Env#1{%
  \endgroup
  \strut\Text@Marginize*{#1}%
  \@usgentryze{#1}% we declare the `usage' kind of
  % formatting the entry and index the sequence |#1|.
  \text@indexenvir{#1}%
  \@esphack}


\let\MacroFont\tt

\let\MacroIndent\CodeIndent
\let\MacrocodeTopsep\CodeTopsep
\let\SpecialEscapechar\CodeEscapeChar


\AtEndInput{\@ifundefined{theCodelineNo}{}{\PackageInfo{gmdoc}{The
      \string\theCodelineNo\space macro has no effect here, please use
      \string\LineNumFont\space for setting the font and/or
      \string\thecodelinenum\space to set the number format.}}}
\def\noeffect@info#1{\@ifundefined{#1}{}{\PackageInfo{gmdoc}{^^J%
      The \bslash#1 macro is not supported by this package^^J
      and therefore has no effect but this notification.^^J
      If you think it should have, please contact the maintainer^^J
      indicated in the package's legal note.^^J}}}

\AtEndInput{%
  \noeffect@info{PrintDescribeMacro}%
  \noeffect@info{PrintMacroName}%
  \noeffect@info{PrintDescribeEnv}%
  \noeffect@info{PrintEnvName}}

\def\CodelineNumbered{\AtBeginDocument{\gag@index}}
\@onlypreamble\CodelineNumbered
\let\CodelineIndex\@pageindexfalse
\@onlypreamble\CodelineIndex

\let\PageIndex\@pageindextrue
\@onlypreamble\PageIndex

\def\DisableCrossrefs{\@bsphack\gag@index\@esphack}

\def\EnableCrossrefs{\@bsphack\ungag@index
  \def\DisableCrossrefs{\@bsphack\@esphack}\@esphack}
\newcommand*\AlsoImplementation{\@bsphack
  \long\def\StopEventually##1{\gdef\Finale{##1}}% we define
  % \incs{Fi\+n\+a\+le} just to expand to the argument of \incs{StopEventually} not
  % to to add anything to the end input hook because \incs{Finale} should
  % only be executed if entire document is typeset.\nostanza\par
  %
  % \hangindent\verbatimhangindent \hangafter1\relax
  % \gmdnoindent \leftskip\CodeIndent
  % |%\init@checksum| is obsolete in
  % \pk{gmdoc} at this point: the \env{CheckSum} counter is reset just at
  % the beginning of (each of probably numerous) input(s).
  % \nostanza\par
    \@esphack}

\AlsoImplementation


\def\OnlyDescription{\@bsphack\long\def\StopEventually##1{%
    % \begin{quotation} In this case the argument of |\StopEventually|
    %   should be set and afterwards \TeX\ should stop reading from
    %   this file. Therefore we finish this macro with\end{quotation}
    ##1ⵢendinput}\@esphack}


\@relaxen\Finale

\let\SpecialMainIndex=\DefIndex

\def\SpecialMainEnvIndex{\csname CodeDefIndex\endcsname*}% we don't

\let\SpecialIndex=\CodeCommonIndex

\let\SpecialUsageIndex=\TextUsgIndex

\def\SpecialEnvIndex{\csname TextUsgIndex\endcsname*}

\def\SortIndex#1#2{\index{#1\actualchar#2}}
\def\verbatimchar{&}



\@ifundefined{main}{}{\let\DefEntry=\main}

\@ifundefined{usage}{}{\let\UsgEntry=\usage}

\newcounter{StandardModuleDepth}

\noeffect@info{DocstyleParms}

\@emptify\DontCheckModules \noeffect@info{DontCheckModules}
\@emptify\CheckModules \noeffect@info{CheckModules}
\@emptify\AltMacroFont \noeffect@info{AltMacroFont}

\def\MakePercentIgnore{\catcode`\%9\relax}
\def\MakePercentComment{\catcode`\%14\relax}
\def\OldDocInput{% \changes{v0.99g}{2007/11/11}{obsolete redefinition
  % of the \env{macro} environment removed}
  \AtBegInputOnce{\StraightEOL
    \let\@MakeShortVerb=\old@MakeShortVerb
    % \label{oldmkshvrrb}
    \OldMacrocodes}%
  \bgroup\@makeother\_% it's to allow |_| in the filenames. The next
  % macro will close the group.
  \Doc@Input}
%% \AVerySpecialMacro % delete the first % when.\unskip|..|\CDPerc

\DeclareCommand\OCRInclude{O{}mO{}}{%
  \Store@Macro\incl@DocInput
  \def\incl@DocInput##1{%
    \begingroup
    \CodeSpacesBlank
    \@beginputhook
    \title{\currentfile}\maketitle
    \noverbatimspecials
    \relaxen\@xverbatim
    \relaxen\check@percent
    \Restore@Macro\@verbatim
    \verbatimleftskip\z@skip
    \verbatim
    \@makeother\|% because |\ttverbatim| doesn't do that.
    \texcode@hook% we add some special stuff, e.g.\ in \pk{gmdocc.cls} we
    \@input{##1}%
    \endgroup}%
  \csname\@dc@InnerName\DocInclude\endcsname{#1}{#2}{#3}%
  \Restore@Macro\incl@DocInput
}


\foone{\catcode`\^^M\active }{%
  \def\@NoEOF#1^^M{%
    \@relaxen\EOFMarkⵢendinput}%
  \def\@EOF#1^^M{ⵢendinput}}

\def\NoEOF{\QueerEOL\@NoEOF}
\def\EOF{\QueerEOL\@EOF}
%%% (For my GNU Emacs:)
%%% Local Variables:
%%% mode: doctex
%%% coding: utf-8
%%% End:
\endinput
%%
%% End of file `gmdoc.sty'.
