summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/docmfp
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/docmfp
Initial commit
Diffstat (limited to 'macros/latex/contrib/docmfp')
-rw-r--r--macros/latex/contrib/docmfp/README66
-rw-r--r--macros/latex/contrib/docmfp/docmfp.dtx746
-rw-r--r--macros/latex/contrib/docmfp/docmfp.ins72
-rw-r--r--macros/latex/contrib/docmfp/docmfp.pdfbin0 -> 175153 bytes
4 files changed, 884 insertions, 0 deletions
diff --git a/macros/latex/contrib/docmfp/README b/macros/latex/contrib/docmfp/README
new file mode 100644
index 0000000000..4a938bd5ba
--- /dev/null
+++ b/macros/latex/contrib/docmfp/README
@@ -0,0 +1,66 @@
+__________________
+The DOCMFP package
+
+ The docmfp package extends the doc package to cater for documenting
+non-LaTeX code, such as Metafont and Metapost, or even C code.
+
+______________
+Change History
+
+Version 1.2d
+- New maintainer (Will Robertson)
+
+Version 1.2a/b
+- Changed license from LPPL v1.0 to v1.3
+- Fixed minor typos
+
+Version 1.1
+- Added a general \Describe macro
+- Added a general Code environment
+
+-----------------------------------------------------------------
+ Author: Peter Wilson (Herries Press)
+ Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+ Copyright 1999--2005 Peter R. Wilson
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any
+ later version: <http://www.latex-project.org/lppl.txt>
+
+ This work has the LPPL maintenance status "maintained".
+ The Current Maintainer of this work is Will Robertson.
+
+ This work consists of the files:
+README (this file)
+docmfp.dtx
+docmfp.ins
+docmfp.pdf (user manual)
+ and the derived files:
+docmfp.sty
+
+ The distribution consists of the following files:
+README (this file)
+docmfp.ins
+docmfp.dtx
+docmfp.pdf
+
+-----------------------------------------------------------------
+
+ To install the package:
+- run: latex docmfp.ins (which will generate docmfp.sty)
+- Move docmfp.sty to a location where LaTeX will find it
+ (typically in a local texmf tree at tex/latex/docmfp) and refresh the
+ file database. See the FAQ on CTAN at help/uk-tex-faq or
+ http://www.tug.ac.uk/faq for more information on this.
+
+ To process the user manual:
+- run: latex docmfp.dtx
+- run: makeindex -s gind.ist docmfp
+- run: latex docmfp.dtx
+- Print docmfp.dvi for a hardcopy of the package manual
+
+2005/03/23
+Peter Wilson
+
+
diff --git a/macros/latex/contrib/docmfp/docmfp.dtx b/macros/latex/contrib/docmfp/docmfp.dtx
new file mode 100644
index 0000000000..4c099c9a30
--- /dev/null
+++ b/macros/latex/contrib/docmfp/docmfp.dtx
@@ -0,0 +1,746 @@
+% \iffalse meta-comment
+%
+% docmfp.dtx
+% Author: Peter Wilson (Herries Press)
+% Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+% Copyright 1999--2005 Peter R. Wilson
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any
+% later version: <http://www.latex-project.org/lppl.txt>
+%
+% This work has the LPPL maintenance status "maintained".
+% The Current Maintainer of this work is Will Robertson.
+%
+% This work consists of the files listed in the README file.
+%
+%
+%
+%<*driver>
+\documentclass[twoside]{ltxdoc}
+%% %% %%\usepackage{docmfp}
+\usepackage{url}
+\usepackage[draft=false,
+ plainpages=false,
+ pdfpagelabels,
+ bookmarksnumbered,
+ hyperindex=false
+ ]{hyperref}
+\makeatletter
+ \@mparswitchfalse
+\makeatother
+\renewcommand{\MakeUppercase}[1]{#1}
+\pagestyle{headings}
+\EnableCrossrefs
+\CodelineIndex
+%%% \OnlyDescription
+\setcounter{StandardModuleDepth}{1}
+\begin{document}
+ \DocInput{docmfp.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{322}
+%
+% \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath}
+% \DoNotIndex{\@centercr,\@cite}
+% \DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+% \DoNotIndex{\@input,\@ixpt,\@m}
+% \DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint}
+% \DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+% \DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+% \DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+% \DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+% \DoNotIndex{\advance,\Alph,\alph}
+% \DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+% \DoNotIndex{\bullet}
+% \DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+% \DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+% \DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+% \DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+% \DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+% \DoNotIndex{\fbox}
+% \DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+% \DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+% \DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
+% \DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
+% \DoNotIndex{\input}
+% \DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+% \DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+% \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+% \DoNotIndex{\NeedsTeXFormat,\newdimen}
+% \DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+% \DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+% \DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+% \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+% \DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+% \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font}
+% \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman}
+% \DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength}
+% \DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+% \DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+% \DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+% \DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+% \DoNotIndex{\wd,\xiipt,\year,\z@}
+%
+% \changes{v1.0}{1999/04/11}{First public release}
+% \changes{v1.1}{2000/10/28}{Added general marking commands}
+% \changes{v1.2}{2001/02/11}{Revised the doc check sum code}
+% \changes{v1.2a}{2004/04/22}{Changed license from LPPL v1.0 to v1.3}
+% \changes{v1.2b}{2004/05/14}{Minor fix for checksum}
+% \changes{v1.2c}{2005/03/26}{Fixed some typos in the description part, no code changes}
+% \changes{v1.2d}{2009/09/02}{New maintainer (Will Robertson)}
+%
+% \def\dtxfile{docmfp.dtx}
+% \def\fileversion{v1.0} \def\filedate{1999/04/11}
+% \def\fileversion{v1.1} \def\filedate{2000/10/28}
+% \def\fileversion{v1.2} \def\filedate{2001/02/11}
+% \def\fileversion{v1.2a} \def\filedate{2004/04/22}
+% \def\fileversion{v1.2b} \def\filedate{2004/05/14}
+% \def\fileversion{v1.2c} \def\filedate{2005/03/26}
+% \def\fileversion{v1.2d} \def\filedate{2009/09/02}
+% \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package
+% \newcommand*{\Lopt}[1]{\textsf {#1}} ^^A typeset an option
+% \newcommand*{\file}[1]{\texttt {#1}} ^^A typeset a file
+% \newcommand*{\Lcount}[1]{\textsl {\small#1}} ^^A typeset a counter
+% \newcommand*{\pstyle}[1]{\textsl {#1}} ^^A typeset a pagestyle
+% \newcommand*{\Lenv}[1]{\texttt {#1}} ^^A typeset an environment
+% \newcommand*{\Mfp}{Metafont/post}
+%
+% \title{The \Lpack{docmfp} package\thanks{This
+% file (\texttt{\dtxfile}) has version number \fileversion, last revised
+% \filedate.}}
+%
+% \author{%
+% Author: Peter Wilson, Herries Press\\
+% Maintainer: Will Robertson\\
+% \texttt{will dot robertson at latex-project dot org}
+% }
+% \date{\filedate}
+% \maketitle
+% \begin{abstract}
+% The \Lpack{docmfp} package extends the \Lpack{doc} package to cater for
+% documentation of non-\LaTeX{} code, such as Metafont and Metapost code,
+% or C or Java code.
+% \end{abstract}
+% \tableofcontents
+%
+%
+% \section{Introduction}
+%
+% It is common practice to document \LaTeX{} packages using the
+% \Lpack{doc} system~\cite{GOOSSENS94}.
+% The \Lpack{docmfp} package extends the \Lpack{doc}
+% package so that similar facilities are provided for the documentation
+% of non-LaTeX{} code, such as Metafont and Metapost code, or code in
+% other more common programming languages.
+% For example, a single \file{.dtx} file
+% can contain the documented sources of both the Metafont code for a new
+% font, together with the documented \LaTeX{} code for the accompanying
+% package.
+%
+% This manual is typeset according to the conventions of the
+% \LaTeX{} \textsc{docstrip} utility which enables the automatic
+% extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}.
+%
+% Section~\ref{sec:usc} describes the usage of the package.
+% Commented source code for the package is in Section~\ref{sec:code}.
+%
+% \section{The package} \label{sec:usc}
+%
+% I have assumed that if you are reading this then you are familiar with
+% the facilities provided by the \Lpack{doc} package.
+%
+% \DescribeMacro{\DescribeRoutine}
+% The |\DescribeRoutine{|\meta{name}|}| command is equivalent to the \Lpack{doc}
+% package |\DescribeEnv{|\meta{name}|}| command, except that it
+% is intended to introduce the description of a \Mfp{} macro (or
+% character or picture ). It typesets \meta{name}
+% in the margin and also generates an index entry for \meta{name}.
+%
+% \DescribeEnv{routine}
+% The |routine| environment is equivalent to the \Lpack{doc} package
+% |macro| environment. It takes one argument, which is the name of the
+% \Mfp{} macro (or character or picture) that is being defined.
+% It typesets the argument in the margin and makes an index entry for it.
+%
+% \DescribeMacro{\routinestring}
+% \DescribeMacro{\routineheadname}
+% These two commands contain the texts that are used in indexing
+% routine names. They can be changed via |\renewcommand|. Their default
+% definitions are:
+% \begin{verbatim}
+% \newcommand{\routinestring}{\space(routine)}
+% \newcommand{\routineheadname}{routines:}
+% \end{verbatim}
+%
+% \DescribeMacro{\DescribeVariable}
+% The |\DescribeVariable{|\meta{name}|}| is like the \Lpack{doc}
+% |\DescribeMacro{|\meta{name}|}| command, except that it is intended
+% to introduce the description, and definition, of a variable
+% or parameter. It typesets \meta{name} in the margin and makes an index entry
+% for it.
+%
+% \DescribeEnv{variable}
+% The |variable| environment is equivalent to the \Lpack{doc} package
+% |macro| environment. It takes one argument, which is the name of the
+% variable or parameter that is being defined.
+% It typesets the argument in the margin and makes an index entry for it.
+%
+% \DescribeMacro{\variablestring}
+% \DescribeMacro{\variableheadname}
+% These two commands contain the texts that are used in indexing
+% variable names. They can be changed via |\renewcommand|. Their default
+% definitions are:
+% \begin{verbatim}
+% \newcommand{\variablestring}{\space(variable)}
+% \newcommand{\variableheadname}{variables:}
+% \end{verbatim}
+%
+% A routine or variable \meta{name} can include the underscore and
+% hash characters (i.e., |_| and |#|), so that names like |a_variable#| can
+% be used.
+%
+% \DescribeMacro{\Describe}
+% This is a generalization of the |\Describe...| commands.
+%
+% |\Describe{|\meta{head}|}{|\meta{flag}|}{|\meta{name}|}| typesets
+% \meta{name} in the margin and makes index entries for it. One
+% entry will be a main entry as |name flag|, and the other will
+% be a subsidiary entry of |name| under the main heading |head|.
+%
+% Essentially, |\DescribeVariable{name}| is equivalent to: \\
+% |\Describe{\variableheadname}{\variablestring}{name}|
+%
+% \DescribeEnv{Code}
+% This is a generalization of the |variable| and |routine| environments.
+%
+% |\begin{Code}{|\meta{head}|}{|\meta{flag}|}{|\meta{name}|}| typesets
+% \meta{name} in the margin and makes index entries for it. One
+% entry will be a main entry as |name flag|, and the other will
+% be a subsidiary entry of |name| under the main heading |head|.
+%
+% Essentially, |\begin{routine}{name}| is equivalent to: \\
+% |\begin{Code}{\routineheadname}{\routinestring}{name}|
+%
+% For example, if you are documenting Java code, then you may wish
+% to use commands like: \\
+% |\newcommand{\cvar}{class variables}| \\
+% |\newcommand{\fcvar}{ (variable)}| \\
+% |\newcommand{\ofield}{object fields}| \\
+% |\newcommand{\ffield}{ (field)}| \\
+% |\newcommand{\cmeth}{class methods}| \\
+% |\newcommand{\ometh}{object methods}| \\
+% |\newcommand{\meth}{ (method)}| \\
+% |\Describe{\cvar}{\fcvar}{...}| for class variables \\
+% |\Describe{\ofield}{\ffield}{...}| for object fields \\
+% |\begin{Code}{\cmeth}{\meth}{...}| for class methods \\
+% |\begin{Code}{\ometh}{\meth}{...}| for object methods. \\
+%
+%
+%
+% \subsection{Usage with \file{.dtx} and \file{.ins} files}
+%
+% I assume that the major use of the \Lpack{docmfp} package will be in
+% \file{.dtx} file(s) that will be processed via a corresponding \file{.ins} file.
+% The \Lpack{ltxdoc} class also automatically calls the \Lpack{doc} package.
+%
+% As an example, if the \Lpack{docmfp} package was needed for the document
+% you are now reading, then I would have started it off like this (but look at
+% the start of the source for details that I ignore here):
+% \begin{verbatim}
+% %<*driver>
+% \documentclass{ltxdoc}
+% \usepackage{docmfp}
+% \EnableCrossrefs
+% \CodelineIndex
+% \setcounter{StandardModuleDepth}{1}
+% \begin{document}
+% \DocInput{docmfp.dtx}
+% \end{document}
+% %</driver>
+% \end{verbatim}
+%
+% The source of this document also includes several calls of the
+% \Lpack{docmfp} commands, which I have commented out (use your editor
+% to look for the occurences of the string |^^A| after this point). You can
+% edit the source to include the |\usepackage{docmfp}| command and uncomment
+% the \Lpack{docmfp} commands if you want to sample the package in use.
+%
+% ^^A \DescribeVariable{a_variable#}
+% ^^A \DescribeRoutine{an_mfp_macro}
+% ^^A \DescribeVariable{aN_variable#l9e[24]}
+% ^^A \DescribeRoutine{another_macro}
+%
+%
+% The source of an \file{.ins} file might look like this:
+% \begin{verbatim}
+% %% file myfile.ins
+% \def\batchfile{myfile.ins}
+% \input docstrip.tex
+% \preamble
+% Copyright and other notices
+% \endpreamble
+% \generate{\file{myfile.drv}{\from{myfile.dtx}{driver}}}
+% \generate{\file{mypackage.sty}{\from{myfile.dtx}{pack}}}
+%
+% \endinput
+% \end{verbatim}
+% By default, the documentation system will put an |\endinput| command
+% at the end of each file it generates (\file{myfile.drv} and \file{mypackage.sty}
+% in the example above). This is fine provided the generated files are to be
+% processed by \LaTeX{} which understands |\endinput|. If a generated file is
+% to be processed by something that treats |\endinput| as an error, as \Mfp{}
+% will, then there is a problem.
+%
+% \DescribeMacro{\usepostamble}
+% \DescribeMacro{\empty}
+% \DescribeMacro{\defaultpostamble}
+% The documentation system provides these three commands which can be used
+% within an \file{.ins} file to
+% either prevent or enable the addition of |\endinput| to the generated files.
+% Extending the above example \file{.ins} file to include both Metafont and
+% and \LaTeX{} files we can have:
+% \begin{verbatim}
+% %% file myfile.ins
+% \def\batchfile{myfile.ins}
+% \input docstrip.tex
+% \preamble
+% Copyright and other notices
+% \endpreamble
+% \generate{\file{myfile.drv}{\from{myfile.dtx}{driver}}}
+% \usepostamble\empty % switch off writing \endinput
+% \generate{\file{myfont.mf}{\from{myfile.dtx}{font}}}
+% \usepostamble\defaultpostamble % switch on writing \endinput
+% \generate{\file{mypackage.sty}{\from{myfile.dtx}{pack}}}
+%
+% \endinput
+% \end{verbatim}
+%
+% \DescribeMacro{\usepreamble}
+% \DescribeMacro{\defaultpreamble}
+% The documentation system provides these commands which can be used
+% within an \file{.ins} file to
+% either prevent or enable the addition of preamble information at the
+% beginning of the generated files. The preamble information is in
+% the form of LaTeX comment lines (i.e., lines starting with \%).
+% Other languages that you may wish to document probably have other
+% different commenting conventions, in which cases it is desireable
+% to inhibit the preamble output.
+% Extending the above example \file{.ins} file to turn off the preamble
+% for the driver file we can have:
+% \begin{verbatim}
+% %% file myfile.ins
+% \def\batchfile{myfile.ins}
+% \input docstrip.tex
+% \usepreamble\empty % switch off all preamble info
+% \generate{\file{myfile.drv}{\from{myfile.dtx}{driver}}}
+% \usepreamble\defaultpreamble % switch on normal preambling
+% \preamble
+% Copyright and other notices
+% \endpreamble
+% \usepostamble\empty % switch off writing \endinput
+% \generate{\file{myfont.mf}{\from{myfile.dtx}{font}}}
+% \usepostamble\defaultpostamble % switch on writing \endinput
+% \generate{\file{mypackage.sty}{\from{myfile.dtx}{pack}}}
+%
+% \endinput
+% \end{verbatim}
+%
+% There is no intrinsic reason why the use of this package should be limited
+% to documenting \Mfp{} code. It could just as well be used for documenting C,
+% C++, Java, or practically any other kind of code.
+%
+% \StopEventually{}
+%
+%
+% \section{The package code} \label{sec:code}
+%
+% Announce the name and version of the package, which requires
+% \LaTeXe.
+% \begin{macrocode}
+%<*usc>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{docmfp}[2009/09/02 v1.2d General coding extension to the doc package]
+
+% \end{macrocode}
+%
+% In order to try and avoid name clashes with other packages, each internal
+% name will include the character string \texttt{m@fp}.
+%
+% \begin{macro}{\m@fpmakeuscoreletter}
+% \begin{macro}{\m@fpmakehashletter}
+% \begin{macro}{\Makem@fpPrivateLetters}
+% \Mfp{} names can include underscores and hash characters. The special
+% meanings of these have to be turned off.
+% \begin{macrocode}
+\newcommand{\m@fpmakeuscoreletter}{\catcode`\_11\relax}
+\newcommand{\m@fpmakehashletter}{\catcode`\#11\relax}
+\newcommand{\Makem@fpPrivateLetters}{\m@fpmakeuscoreletter\m@fpmakehashletter}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% ^^A \begin{routine}{an_mfp_macro}
+% ^^A \begin{variable}{macro_variable}
+% ^^A \begin{routine}{nested_macro}
+% ^^A \end{routine}
+% ^^A \end{variable}
+% ^^A \end{routine}
+%
+%
+% \begin{environment}{routine}
+% The |routine| environment code is similar to the \Lpack{doc} package's
+% |environment| code.
+% \begin{macrocode}
+\def\routine{\begingroup
+ \catcode`\\12
+ \Makem@fpPrivateLetters \m@fpm@cro@ \iffalse}
+\let\endroutine\endtrivlist
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{variable}
+% The |variable| environment code is almost identical to the code for the
+% |routine| environment.
+% \begin{macrocode}
+\def\variable{\begingroup
+ \catcode`\\12
+ \Makem@fpPrivateLetters \m@fpm@cro@ \iftrue}
+\let\endvariable\endroutine
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\m@fpm@cro@}
+% This command does all the work for both the |routine| and |variable|
+% environments. The first part is a straight copy of the \Lpack{doc}
+% package |\m@cro@| command.
+% \begin{macrocode}
+\long\def\m@fpm@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
+ \def\makelabel##1{\llap{##1}}%
+ \if@inlabel
+ \let\@tempa\@empty \count@\macro@cnt
+ \loop \ifnum\count@>\z@
+ \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
+ \edef\makelabel##1{\llap{\vtop to\baselineskip
+ {\@tempa\hbox{##1}\vss}}}%
+ \advance \macro@cnt \@ne
+ \else
+ \macro@cnt\@ne
+ \fi
+% \end{macrocode}
+% The rest of the code is for this package, and is a simplified and modified
+% version of the corresponding code for |\m@cro@|.
+% \begin{macrocode}
+ \edef\@tempa{\noexpand\item[\noexpand\PrintMfpName{\string#2}]}%
+ \@tempa
+ \global\advance\c@CodelineNo\@ne
+ #1%
+% \end{macrocode}
+% Do the indexing for the |variable| environment.
+% \begin{macrocode}
+ \SpecialMainMfpIndex{#2}{\variablestring}{\variableheadname}\nobreak
+ \else
+% \end{macrocode}
+% Do the indexing for the |routine| environment.
+% \begin{macrocode}
+ \SpecialMainMfpIndex{#2}{\routinestring}{\routineheadname}\nobreak
+ \fi
+% \end{macrocode}
+% and finish off the definition.
+% \begin{macrocode}
+ \global\advance\c@CodelineNo\m@ne
+ \ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\routinestring}
+% \begin{macro}{\routineheadname}
+% These two commands store the default indexing strings for routines.
+% \begin{macrocode}
+\newcommand{\routinestring}{\space(routine)}
+\newcommand{\routineheadname}{routines:}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\variablestring}
+% \begin{macro}{\variableheadname}
+% These two commands store the default indexing strings for variables.
+% \begin{macrocode}
+\newcommand{\variablestring}{\space(variable)}
+\newcommand{\variableheadname}{variables:}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Describe}
+% This is a generic description macro, and is similar to those
+% defined later.
+% \changes{v1.1}{2000/10/28}{Added Describe and Describem@fp macros}
+% \begin{macrocode}
+\def\Describe{\leavevmode\@bsphack\begingroup\Makem@fpPrivateLetters
+ \Describem@fp}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Describem@fp}
+% The workhorse for |\Describe|. It processes the three apparent arguments
+% to |\Describe|.
+% \begin{macrocode}
+\def\Describem@fp#1#2#3{\endgroup
+ \marginpar{\raggedleft\PrintMfpName{#3}}%
+ \SpecialMfpIndex{#3}{#2}{#1}\@esphack\ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{Code}
+% This is a generalization of the previous environments.
+% \changes{v1.1}{2000/10/28}{Added m@fpm@c macro}
+% \begin{macrocode}
+\def\Code{\begingroup
+ %% \catcode`\\12
+ \Makem@fpPrivateLetters \m@fpm@c}
+\let\endCode\endtrivlist
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\m@fpm@c}
+% This is the workhorse for the |Code| environment and processes
+% the 3 arguments apparently taken by the environment.
+% \begin{macrocode}
+\long\def\m@fpm@c#1#2#3{\endgroup \topsep\MacroTopsep \trivlist
+ \def\makelabel##1{\llap{##1}}%
+ \if@inlabel
+ \let\@tempa\@empty \count@\macro@cnt
+ \loop \ifnum\count@>\z@
+ \edef\@tempa{\@tempa\hbox{\strut}}%
+ \advance\count@\m@ne \repeat
+ \edef\makelabel##1{\llap{\vtop to\baselineskip
+ {\@tempa\hbox{##1}\vss}}}%
+ \advance\macro@cnt\@ne
+ \else
+ \macro@cnt\@ne
+ \fi
+ \edef\@tempa{\noexpand\item[\noexpand\PrintMfpName{\string#3}]}%
+ \@tempa
+ \global\advance\c@CodelineNo\@ne
+ \SpecialMainMfpIndex{#3}{#2}{#1}\nobreak
+ \global\advance\c@CodelineNo\m@ne
+ \ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\PrintMfpName}
+% This typesets the name of a \Mfp{} routine or variable, or in general
+% \meta{name}. If there is a pre-existing
+% definition, then the package does not modify it.
+% \begin{macrocode}
+\providecommand{\PrintMfpName}[1]{\strut \MacroFont \string #1\ }
+
+% \end{macrocode}
+% \end{macro}
+%
+% Now for the command that writes out the index entries for the |routine| and
+% |variable| environments. It is also used for the |Code| environment.
+%
+% \begin{macro}{\SpecialMainMfpIndex}
+% The command
+% |\SpecialMainMfpIndex{|\meta{name}|}{|\meta{string}|}{|\meta{heading}|}|
+% writes \meta{name} to the \file{.idx} file, firstly as a `main' entry (flagged
+% with \meta{string}) and then as a subsidiary entry under \meta{heading}.
+% Both entries are treated as definitional.
+% \changes{v1.1}{2000/10/28}{Changed subsidiary environment index entry to be definitional}
+% \begin{macrocode}
+\newcommand{\SpecialMainMfpIndex}[3]{\@bsphack
+% \end{macrocode}
+% Here is the main index entry.
+% \begin{macrocode}
+ \special@index{%
+ \string#1\actualchar
+ \string\verb\quotechar*\verbatimchar\string#1\verbatimchar
+ #2 \encapchar main}%
+% \end{macrocode}
+% Here is the subsidiary index entry.
+% \begin{macrocode}
+ \special@index{#3\levelchar
+ \string#1\actualchar
+ \string\verb\quotechar*\verbatimchar\string#1\verbatimchar
+ \encapchar main}
+ \@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DescribeRoutine}
+% The command |\DescribeRoutine{|\meta{name}|}| typesets a marginal heading and
+% an index entry for the description of a routine called \meta{name}. It
+% is based on the \Lpack{doc} |\DescribeMacro| command.
+% \begin{macrocode}
+\def\DescribeRoutine{\leavevmode\@bsphack\begingroup\Makem@fpPrivateLetters
+ \Describem@fpRoutine}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Describem@fpRoutine}
+% This is the macro that does the work for |\DescribeRoutine|.
+% \begin{macrocode}
+\def\Describem@fpRoutine#1{\endgroup
+ \marginpar{\raggedleft\PrintMfpName{#1}}%
+ \SpecialMfpIndex{#1}{\routinestring}{\routineheadname}\@esphack\ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DescribeVariable}
+% The command |\DescribeVariable{|\meta{name}|}| typesets a marginal heading and
+% an index entry for the description of a variable called \meta{name}. It
+% is based on the |\DescribeRoutine| command.
+% \begin{macrocode}
+\def\DescribeVariable{\leavevmode\@bsphack\begingroup\Makem@fpPrivateLetters
+ \Describem@fpVariable}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Describem@fpVariable}
+% This is the macro that does the work for |\DescribeVariable|.
+% \begin{macrocode}
+\def\Describem@fpVariable#1{\endgroup
+ \marginpar{\raggedleft\PrintMfpName{#1}}%
+ \SpecialMfpIndex{#1}{\variablestring}{\variableheadname}\@esphack\ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SpecialMfpIndex}
+% The command
+% |\SpecialMfpIndex{|\meta{name}|}{|\meta{string}|}{|\meta{heading}|}|
+% writes \meta{name} to the \file{.idx} file, firstly as a `main' entry (flagged
+% with \meta{string}) and then as a subsidiary entry under \meta{heading}. Both
+% entries are treated as `usages' of the \meta{name}.
+% \begin{macrocode}
+\newcommand{\SpecialMfpIndex}[3]{\@bsphack
+% \end{macrocode}
+% Here is the main index entry.
+% \begin{macrocode}
+ \index{%
+ \string#1\actualchar
+ \string\verb\quotechar*\verbatimchar\string#1\verbatimchar
+ #2 \encapchar usage}%
+% \end{macrocode}
+% Here is the subsidiary index entry.
+% \begin{macrocode}
+ \index{#3\levelchar
+ \string#1\actualchar
+ \string\verb\quotechar*\verbatimchar\string#1\verbatimchar
+ \encapchar usage}
+ \@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\check@checksum}
+% After some experience with using \Lpack{docmfp} for code that had
+% no resemblence at all to \LaTeX, I found that if there were no
+% backslashes present, then \Lpack{doc} whined about there being no
+% checksum and said that the |\CheckSum| should be set to zero, which
+% it was. This is the relevent code from the \Lpack{doc} package.
+% \changes{v1.2}{2001/02/11}{Redefined the \cs{check@checksum} command}
+% \changes{v1.2b}{2004/05/14}{Fixed \cs{checksum} typo, thanks to Dan Luecking}
+% \begin{verbatim}
+% \def\check@checksum{\relax
+% \ifnum\check@sum=\z@
+% \typeout{**********************************}%
+% \typeout{* This macro file has no checksum!}%
+% \typeout{* The checksum should be \the\bslash@cnt!}%
+% \typeout{**********************************}%
+% \else
+% \ifnum\check@sum=\bslash@cnt
+% \typeout{*******************}%
+% \typeout{* Checksum passed *}%
+% \typeout{*******************}%
+% \else
+% \PackageError{doc}{Checksum not passed
+% (\the\check@sum<>\the\bslash@cnt)}%
+% {The file currently documented seems to be wrong.^^J%
+% Try to get a correct version.}%
+% \fi
+% \fi
+% \global\check@sum\z@}
+% \end{verbatim}
+% For the purposes of the \Lpack{docmfp} package this needs redefining
+% as a zero check sum is acceptable.
+% \begin{macrocode}
+\renewcommand{\check@checksum}{\relax
+ \ifnum\check@sum=\bslash@cnt
+ \typeout{*******************}%
+ \typeout{* Checksum passed *}%
+ \typeout{*******************}%
+ \else
+ \PackageError{docmfp}{Checksum not passed
+ (\the\check@sum<>\the\bslash@cnt)}%
+ {The file currently documented seems to be wrong.^^J%
+ Try to get a correct version.}%
+ \fi
+ \global\check@sum\z@}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% The end of this package.
+% \begin{macrocode}
+%</usc>
+% \end{macrocode}
+%
+%
+% \bibliographystyle{alpha}
+%
+% \begin{thebibliography}{GMS94}
+%
+% \bibitem[GMS94]{GOOSSENS94}
+% Michel Goossens, Frank Mittelbach, and Alexander Samarin.
+% \newblock {\em The LaTeX Companion}.
+% \newblock Addison-Wesley Publishing Company, 1994.
+%
+% \end{thebibliography}
+%
+%
+% \Finale
+% \PrintIndex
+%
+\endinput
+
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+
+
diff --git a/macros/latex/contrib/docmfp/docmfp.ins b/macros/latex/contrib/docmfp/docmfp.ins
new file mode 100644
index 0000000000..ac2901e472
--- /dev/null
+++ b/macros/latex/contrib/docmfp/docmfp.ins
@@ -0,0 +1,72 @@
+%% docmfp.ins
+%% Author: Peter Wilson (Herries Press)
+%% Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+%% Copyright 1999--2005 Peter R. Wilson
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any
+%% later version: <http://www.latex-project.org/lppl.txt>
+%%
+%% This work has the LPPL maintenance status "maintained".
+%% The Current Maintainer of this work is Will Robertson.
+%%
+%% This work consists of the files listed in the README file.
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this work when run through
+%% LaTeX.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{docmfp.ins}
+\input docstrip.tex
+\preamble
+
+-----------------------------------------------------------------
+ Author: Peter Wilson (Herries Press)
+ Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+ Copyright 1999--2005 Peter R. Wilson
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any
+ later version: <http://www.latex-project.org/lppl.txt>
+
+ This work has the LPPL maintenance status "maintained".
+ The Current Maintainer of this work is Will Robertson.
+
+ This work consists of the files listed in the README file.
+-----------------------------------------------------------------
+
+\endpreamble
+
+\askforoverwritefalse
+\keepsilent
+
+%%% \Msg{*** Generating the driver file ***}
+%%% \generate{\file{docmfp.drv}{\from{docmfp.dtx}{driver}}}
+
+\Msg{*** Generating the LaTeX2e package files ***}
+
+\generate{\file{docmfp.sty}{\from{docmfp.dtx}{usc}}}
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* file(s) into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space docmfp.sty}
+\Msg{*}
+\Msg{*}
+\Msg{* To produce the documentation run the files ending with}
+\Msg{* `.dtx' through LaTeX.}
+\Msg{* Process any name.idx file by:}
+\Msg{* \space\space\space\space makeindex -s gind.ist name}
+\Msg{* Process any name.glo file by:}
+\Msg{* \space\space\space\space makeindex -s gglo.ist -o name.gls name.glo}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+
+\endinput
diff --git a/macros/latex/contrib/docmfp/docmfp.pdf b/macros/latex/contrib/docmfp/docmfp.pdf
new file mode 100644
index 0000000000..e6c80d1c39
--- /dev/null
+++ b/macros/latex/contrib/docmfp/docmfp.pdf
Binary files differ