summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/gmdoc/gmdoc.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/gmdoc/gmdoc.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/gmdoc/gmdoc.sty')
-rw-r--r--macros/latex/contrib/gmdoc/gmdoc.sty4312
1 files changed, 4312 insertions, 0 deletions
diff --git a/macros/latex/contrib/gmdoc/gmdoc.sty b/macros/latex/contrib/gmdoc/gmdoc.sty
new file mode 100644
index 0000000000..a5bc976398
--- /dev/null
+++ b/macros/latex/contrib/gmdoc/gmdoc.sty
@@ -0,0 +1,4312 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.298 2011/02/02 18:35:58 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) gmail (dot) com
+%%
+%% 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|.
+\catcode`\^^U=\active % and for |^^U|.
+\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}
+ % \Define*{^^U}
+ % The |^^V| char is intended to mark parts of code commented out
+ % which are to be typeset verbatim. Lines are begun with narration
+ % marks (\%'s by default) and the narration-verbatim-typewriter font
+ % is used.
+ %
+ % The |^^U| char is intended for the lines commented out which are
+ % to be typeset as almost-invisible (second-class). They are marked
+ % with the narration mark as with |^^V| and a special font setting
+ % is used, which is a gray colour by default (in addition to the narration-verbatim-typewriter).
+ %
+ \pdef\gmd@UVdefs {%
+ \def\gmd@UV@percent{\global\let\verb@balance@group\@empty %
+ % ^^V \hyphenchar\font=\gmv@storedhyphenchar % it works back
+ % for the current paragraph so destroys our special hyphenchar.
+ \egroup\endgroup %
+ }% of |\gmd@UV@percent|
+ %
+ \@xa\def\@xa\verb@egroup@UV\@xa{%
+ \gmd@UV@percent ^^M%
+ }% of |\verb@egroup@UV|.
+ %
+ \addtomacro\gmd@UV@percent{\narrationmark}%
+ %
+ \pdef\gmd@QueerUV ##1{%
+ \scantokens\@xa{\code@delim %
+ \fooatletter{\@ifQueerEOL\@gobble}{}%
+ }% of |\scantokens|
+ %
+ \par%
+ {\codett\verbhyphen}\narrationmark %
+ \begingroup %
+ \catcode`\^^M=\active %
+ %
+ \let\verb@egroup=\verb@egroup@UV %
+ \verb^^M%
+ %
+ ##1% nothing in |^^V| case and a gray setting in the |^^U| case.
+ %
+ \begingroup %
+ \@xa\lccode\@xa`\@xa~\@xa`\code@delim%
+ \lowercase{\endgroup\let~\gmd@UV@percent }%
+ \@xa\catcode\@xa`\code@delim\active %
+ }% of |\gmd@QueerUV|
+ }% of |\gmd@UVdefs|
+ %
+ %
+ \pdef\QueerU {%
+ \unless\ifdefined\gmd@QueerU%
+ %
+ \gmd@UVdefs %
+ \pdef\gmd@QueerU {\gmd@QueerUV {\QueerUFont }}%
+ \let^^U\gmd@QueerU%
+ \catcode`\^^U=\active%
+ \fi %
+ }% of |\QueerU|
+ %
+ \pdef\QueerV {%
+ \unless\ifdefined\gmd@QueerV %
+ %
+ \gmd@UVdefs %
+ \pdef\gmd@QueerV {\gmd@QueerUV {}}%
+ \let^^V\gmd@QueerV%
+ \catcode`\^^V=\active%
+ \fi %
+ }% of |\QueerV|
+ %
+}% of |\foone|
+
+\QueerCharTwo
+\QueerV
+\QueerU
+\def\QueerUFont{\color{black!35}}
+
+\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}
+\endinput
+%%
+%% End of file `gmdoc.sty'.