diff --git a/Doc/lib/libaifc.tex b/Doc/lib/libaifc.tex
index 8bb88a1..f86b1d8 100644
--- a/Doc/lib/libaifc.tex
+++ b/Doc/lib/libaifc.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{aifc}}
+\section{Standard Module \module{aifc}}
 \label{module-aifc}
 \stmodindex{aifc}
 
@@ -6,6 +6,9 @@
 files.  AIFF is Audio Interchange File Format, a format for storing
 digital audio samples in a file.  AIFF-C is a newer version of the
 format that includes the ability to compress the audio data.
+\index{Audio Interchange File Format}
+\index{AIFF}
+\index{AIFF-C}
 
 Audio files have a number of parameters that describe the audio data.
 The sampling rate or frame rate is the number of times per second the
@@ -21,9 +24,8 @@
 frames/second.  This gives a frame size of 4 bytes (2*2), and a
 second's worth occupies 2*2*44100 bytes, i.e.\ 176,400 bytes.
 
-Module \code{aifc} defines the following function:
+Module \module{aifc} defines the following function:
 
-\setindexsubitem{(in module aifc)}
 \begin{funcdesc}{open}{file, mode}
 Open an AIFF or AIFF-C file and return an object instance with
 methods that are described below.  The argument file is either a
@@ -32,159 +34,161 @@
 when the file must be opened for writing.  When used for writing, the
 file object should be seekable, unless you know ahead of time how many
 samples you are going to write in total and use
-\code{writeframesraw()} and \code{setnframes()}.
+\method{writeframesraw()} and \method{setnframes()}.
 \end{funcdesc}
 
-Objects returned by \code{aifc.open()} when a file is opened for
+Objects returned by \function{open()} when a file is opened for
 reading have the following methods:
 
-\setindexsubitem{(aifc object method)}
-\begin{funcdesc}{getnchannels}{}
+\begin{methoddesc}[aifc]{getnchannels}{}
 Return the number of audio channels (1 for mono, 2 for stereo).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getsampwidth}{}
+\begin{methoddesc}[aifc]{getsampwidth}{}
 Return the size in bytes of individual samples.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getframerate}{}
+\begin{methoddesc}[aifc]{getframerate}{}
 Return the sampling rate (number of audio frames per second).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getnframes}{}
+\begin{methoddesc}[aifc]{getnframes}{}
 Return the number of audio frames in the file.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getcomptype}{}
+\begin{methoddesc}[aifc]{getcomptype}{}
 Return a four-character string describing the type of compression used
 in the audio file.  For AIFF files, the returned value is
 \code{'NONE'}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getcompname}{}
+\begin{methoddesc}[aifc]{getcompname}{}
 Return a human-readable description of the type of compression used in
 the audio file.  For AIFF files, the returned value is \code{'not
 compressed'}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getparams}{}
+\begin{methoddesc}[aifc]{getparams}{}
 Return a tuple consisting of all of the above values in the above
 order.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getmarkers}{}
+\begin{methoddesc}[aifc]{getmarkers}{}
 Return a list of markers in the audio file.  A marker consists of a
 tuple of three elements.  The first is the mark ID (an integer), the
 second is the mark position in frames from the beginning of the data
 (an integer), the third is the name of the mark (a string).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getmark}{id}
-Return the tuple as described in \code{getmarkers} for the mark with
-the given id.
-\end{funcdesc}
+\begin{methoddesc}[aifc]{getmark}{id}
+Return the tuple as described in \method{getmarkers()} for the mark
+with the given \var{id}.
+\end{methoddesc}
 
-\begin{funcdesc}{readframes}{nframes}
+\begin{methoddesc}[aifc]{readframes}{nframes}
 Read and return the next \var{nframes} frames from the audio file.  The
 returned data is a string containing for each frame the uncompressed
 samples of all channels.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{rewind}{}
-Rewind the read pointer.  The next \code{readframes} will start from
+\begin{methoddesc}[aifc]{rewind}{}
+Rewind the read pointer.  The next \method{readframes()} will start from
 the beginning.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setpos}{pos}
+\begin{methoddesc}[aifc]{setpos}{pos}
 Seek to the specified frame number.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{tell}{}
+\begin{methoddesc}[aifc]{tell}{}
 Return the current frame number.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}[aifc]{close}{}
 Close the AIFF file.  After calling this method, the object can no
 longer be used.
-\end{funcdesc}
+\end{methoddesc}
 
-Objects returned by \code{aifc.open()} when a file is opened for
-writing have all the above methods, except for \code{readframes} and
-\code{setpos}.  In addition the following methods exist.  The
-\code{get} methods can only be called after the corresponding
-\code{set} methods have been called.  Before the first
-\code{writeframes()} or \code{writeframesraw()}, all parameters except
-for the number of frames must be filled in.
+Objects returned by \function{open()} when a file is opened for
+writing have all the above methods, except for \method{readframes()} and
+\method{setpos()}.  In addition the following methods exist.  The
+\method{get*()} methods can only be called after the corresponding
+\method{set*()} methods have been called.  Before the first
+\method{writeframes()} or \method{writeframesraw()}, all parameters
+except for the number of frames must be filled in.
 
-\begin{funcdesc}{aiff}{}
+\begin{methoddesc}[aifc]{aiff}{}
 Create an AIFF file.  The default is that an AIFF-C file is created,
 unless the name of the file ends in \code{'.aiff'} in which case the
 default is an AIFF file.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{aifc}{}
+\begin{methoddesc}[aifc]{aifc}{}
 Create an AIFF-C file.  The default is that an AIFF-C file is created,
 unless the name of the file ends in \code{'.aiff'} in which case the
 default is an AIFF file.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setnchannels}{nchannels}
+\begin{methoddesc}[aifc]{setnchannels}{nchannels}
 Specify the number of channels in the audio file.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setsampwidth}{width}
+\begin{methoddesc}[aifc]{setsampwidth}{width}
 Specify the size in bytes of audio samples.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setframerate}{rate}
+\begin{methoddesc}[aifc]{setframerate}{rate}
 Specify the sampling frequency in frames per second.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setnframes}{nframes}
+\begin{methoddesc}[aifc]{setnframes}{nframes}
 Specify the number of frames that are to be written to the audio file.
 If this parameter is not set, or not set correctly, the file needs to
 support seeking.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setcomptype}{type, name}
+\begin{methoddesc}[aifc]{setcomptype}{type, name}
 Specify the compression type.  If not specified, the audio data will
 not be compressed.  In AIFF files, compression is not possible.  The
 name parameter should be a human-readable description of the
 compression type, the type parameter should be a four-character
 string.  Currently the following compression types are supported:
 NONE, ULAW, ALAW, G722.
-\end{funcdesc}
+\index{u-LAW}
+\index{A-LAW}
+\index{G.722}
+\end{methoddesc}
 
-\begin{funcdesc}{setparams}{nchannels, sampwidth, framerate, comptype, compname}
+\begin{methoddesc}[aifc]{setparams}{nchannels, sampwidth, framerate, comptype, compname}
 Set all the above parameters at once.  The argument is a tuple
 consisting of the various parameters.  This means that it is possible
-to use the result of a \code{getparams()} call as argument to
-\code{setparams()}.
-\end{funcdesc}
+to use the result of a \method{getparams()} call as argument to
+\method{setparams()}.
+\end{methoddesc}
 
-\begin{funcdesc}{setmark}{id, pos, name}
+\begin{methoddesc}[aifc]{setmark}{id, pos, name}
 Add a mark with the given id (larger than 0), and the given name at
 the given position.  This method can be called at any time before
-\code{close()}.
-\end{funcdesc}
+\method{close()}.
+\end{methoddesc}
 
-\begin{funcdesc}{tell}{}
+\begin{methoddesc}[aifc]{tell}{}
 Return the current write position in the output file.  Useful in
-combination with \code{setmark()}.
-\end{funcdesc}
+combination with \method{setmark()}.
+\end{methoddesc}
 
-\begin{funcdesc}{writeframes}{data}
+\begin{methoddesc}[aifc]{writeframes}{data}
 Write data to the output file.  This method can only be called after
 the audio file parameters have been set.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{writeframesraw}{data}
-Like \code{writeframes()}, except that the header of the audio file is
-not updated.
-\end{funcdesc}
+\begin{methoddesc}[aifc]{writeframesraw}{data}
+Like \method{writeframes()}, except that the header of the audio file
+is not updated.
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}[aifc]{close}{}
 Close the AIFF file.  The header of the file is updated to reflect the
 actual size of the audio data. After calling this method, the object
 can no longer be used.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/lib/libal.tex b/Doc/lib/libal.tex
index 1126f83..fb31ffa 100644
--- a/Doc/lib/libal.tex
+++ b/Doc/lib/libal.tex
@@ -1,4 +1,4 @@
-\section{Built-in Module \sectcode{al}}
+\section{Built-in Module \module{al}}
 \label{module-al}
 \bimodindex{al}
 
@@ -10,10 +10,11 @@
 specific function is available on your platform.
 
 All functions and methods defined in this module are equivalent to
-the C functions with \samp{AL} prefixed to their name.
+the \C{} functions with \samp{AL} prefixed to their name.
 
-Symbolic constants from the C header file \file{<audio.h>} are defined
-in the standard module \code{AL}, see below.
+Symbolic constants from the \C{} header file \code{<audio.h>} are
+defined in the standard module \module{AL}\refstmodindex{AL}, see
+below.
 
 \strong{Warning:} the current version of the audio library may dump core
 when bad argument values are passed rather than returning an error
@@ -25,145 +26,146 @@
 
 The module defines the following functions:
 
-\setindexsubitem{(in module al)}
 
 \begin{funcdesc}{openport}{name, direction\optional{, config}}
-The name and direction arguments are strings.  The optional config
-argument is a configuration object as returned by
-\code{al.newconfig()}.  The return value is an \dfn{port object};
-methods of port objects are described below.
+The name and direction arguments are strings.  The optional
+\var{config} argument is a configuration object as returned by
+\function{newconfig()}.  The return value is an \dfn{audio port
+object}; methods of audio port objects are described below.
 \end{funcdesc}
 
 \begin{funcdesc}{newconfig}{}
-The return value is a new \dfn{configuration object}; methods of
-configuration objects are described below.
+The return value is a new \dfn{audio configuration object}; methods of
+audio configuration objects are described below.
 \end{funcdesc}
 
 \begin{funcdesc}{queryparams}{device}
 The device argument is an integer.  The return value is a list of
-integers containing the data returned by ALqueryparams().
+integers containing the data returned by \cfunction{ALqueryparams()}.
 \end{funcdesc}
 
 \begin{funcdesc}{getparams}{device, list}
-The device argument is an integer.  The list argument is a list such
-as returned by \code{queryparams}; it is modified in place (!).
+The \var{device} argument is an integer.  The list argument is a list
+such as returned by \function{queryparams()}; it is modified in place
+(!).
 \end{funcdesc}
 
 \begin{funcdesc}{setparams}{device, list}
-The device argument is an integer.  The list argument is a list such
-as returned by \code{al.queryparams}.
+The \var{device} argument is an integer.  The \var{list} argument is a
+list such as returned by \function{queryparams()}.
 \end{funcdesc}
 
+
 \subsection{Configuration Objects}
+\label{al-config-objects}
 
-Configuration objects (returned by \code{al.newconfig()} have the
+Configuration objects (returned by \function{newconfig()} have the
 following methods:
 
-\setindexsubitem{(audio configuration object method)}
-
-\begin{funcdesc}{getqueuesize}{}
+\begin{methoddesc}[audio configuration]{getqueuesize}{}
 Return the queue size.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setqueuesize}{size}
+\begin{methoddesc}[audio configuration]{setqueuesize}{size}
 Set the queue size.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getwidth}{}
+\begin{methoddesc}[audio configuration]{getwidth}{}
 Get the sample width.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setwidth}{width}
+\begin{methoddesc}[audio configuration]{setwidth}{width}
 Set the sample width.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getchannels}{}
+\begin{methoddesc}[audio configuration]{getchannels}{}
 Get the channel count.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setchannels}{nchannels}
+\begin{methoddesc}[audio configuration]{setchannels}{nchannels}
 Set the channel count.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getsampfmt}{}
+\begin{methoddesc}[audio configuration]{getsampfmt}{}
 Get the sample format.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setsampfmt}{sampfmt}
+\begin{methoddesc}[audio configuration]{setsampfmt}{sampfmt}
 Set the sample format.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getfloatmax}{}
+\begin{methoddesc}[audio configuration]{getfloatmax}{}
 Get the maximum value for floating sample formats.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setfloatmax}{floatmax}
+\begin{methoddesc}[audio configuration]{setfloatmax}{floatmax}
 Set the maximum value for floating sample formats.
-\end{funcdesc}
+\end{methoddesc}
+
 
 \subsection{Port Objects}
+\label{al-port-objects}
 
-Port objects (returned by \code{al.openport()} have the following
+Port objects, as returned by \function{openport()}, have the following
 methods:
 
-\setindexsubitem{(audio port object method)}
-
-\begin{funcdesc}{closeport}{}
+\begin{methoddesc}[audio port]{closeport}{}
 Close the port.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getfd}{}
+\begin{methoddesc}[audio port]{getfd}{}
 Return the file descriptor as an int.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getfilled}{}
+\begin{methoddesc}[audio port]{getfilled}{}
 Return the number of filled samples.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getfillable}{}
+\begin{methoddesc}[audio port]{getfillable}{}
 Return the number of fillable samples.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{readsamps}{nsamples}
+\begin{methoddesc}[audio port]{readsamps}{nsamples}
 Read a number of samples from the queue, blocking if necessary.
 Return the data as a string containing the raw data, (e.g., 2 bytes per
 sample in big-endian byte order (high byte, low byte) if you have set
 the sample width to 2 bytes).
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{writesamps}{samples}
+\begin{methoddesc}[audio port]{writesamps}{samples}
 Write samples into the queue, blocking if necessary.  The samples are
-encoded as described for the \code{readsamps} return value.
-\end{funcdesc}
+encoded as described for the \method{readsamps()} return value.
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getfillpoint}{}
+\begin{methoddesc}[audio port]{getfillpoint}{}
 Return the `fill point'.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{setfillpoint}{fillpoint}
+\begin{methoddesc}[audio port]{setfillpoint}{fillpoint}
 Set the `fill point'.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getconfig}{}
+\begin{methoddesc}[audio port]{getconfig}{}
 Return a configuration object containing the current configuration of
 the port.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{setconfig}{config}
+\begin{methoddesc}[audio port]{setconfig}{config}
 Set the configuration from the argument, a configuration object.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getstatus}{list}
+\begin{methoddesc}[audio port]{getstatus}{list}
 Get status information on last error.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\section{Standard Module \sectcode{AL}}
+
+\section{Standard Module \module{AL}}
 \nodename{AL (uppercase)}
 \stmodindex{AL}
 
 This module defines symbolic constants needed to use the built-in
-module \code{al} (see above); they are equivalent to those defined in
-the C header file \file{<audio.h>} except that the name prefix
+module \module{al} (see above); they are equivalent to those defined
+in the \C{} header file \code{<audio.h>} except that the name prefix
 \samp{AL_} is omitted.  Read the module source for a complete list of
 the defined names.  Suggested use:
 
diff --git a/Doc/lib/libaudioop.tex b/Doc/lib/libaudioop.tex
index 887cac9..774a92e 100644
--- a/Doc/lib/libaudioop.tex
+++ b/Doc/lib/libaudioop.tex
@@ -1,19 +1,25 @@
-\section{Built-in Module \sectcode{audioop}}
+\section{Built-in Module \module{audioop}}
 \label{module-audioop}
 \bimodindex{audioop}
 
-The \code{audioop} module contains some useful operations on sound fragments.
-It operates on sound fragments consisting of signed integer samples
-8, 16 or 32 bits wide, stored in Python strings.  This is the same
-format as used by the \code{al} and \code{sunaudiodev} modules.  All
-scalar items are integers, unless specified otherwise.
+The \module{audioop} module contains some useful operations on sound
+fragments.  It operates on sound fragments consisting of signed
+integer samples 8, 16 or 32 bits wide, stored in Python strings.  This
+is the same format as used by the \module{al} and \module{sunaudiodev}
+modules.  All scalar items are integers, unless specified otherwise.
+
+% This para is mostly here to provide an excuse for the index entries...
+This module provides support for u-LAW and Intel/DVI ADPCM encodings.
+\index{Intel/DVI ADPCM}
+\index{ADPCM, Intel/DVI}
+\index{u-LAW}
 
 A few of the more complicated operations only take 16-bit samples,
-otherwise the sample size (in bytes) is always a parameter of the operation.
+otherwise the sample size (in bytes) is always a parameter of the
+operation.
 
 The module defines the following variables and functions:
 
-\setindexsubitem{(in module audioop)}
 \begin{excdesc}{error}
 This exception is raised on all errors, such as unknown number of bytes
 per sample, etc.
@@ -28,14 +34,14 @@
 
 \begin{funcdesc}{adpcm2lin}{adpcmfragment, width, state}
 Decode an Intel/DVI ADPCM coded fragment to a linear fragment.  See
-the description of \code{lin2adpcm} for details on ADPCM coding.
+the description of \function{lin2adpcm()} for details on ADPCM coding.
 Return a tuple \code{(\var{sample}, \var{newstate})} where the sample
 has the width specified in \var{width}.
 \end{funcdesc}
 
 \begin{funcdesc}{adpcm32lin}{adpcmfragment, width, state}
-Decode an alternative 3-bit ADPCM code.  See \code{lin2adpcm3} for
-details.
+Decode an alternative 3-bit ADPCM code.  See \function{lin2adpcm3()}
+for details.
 \end{funcdesc}
 
 \begin{funcdesc}{avg}{fragment, width}
@@ -60,26 +66,25 @@
 
 \begin{funcdesc}{findfactor}{fragment, reference}
 Return a factor \var{F} such that
-\code{rms(add(fragment, mul(reference, -F)))} is minimal, i.e.,
-return the factor with which you should multiply \var{reference} to
-make it match as well as possible to \var{fragment}.  The fragments
-should both contain 2-byte samples.
+\code{rms(add(\var{fragment}, mul(\var{reference}, -\var{F})))} is
+minimal, i.e., return the factor with which you should multiply
+\var{reference} to make it match as well as possible to
+\var{fragment}.  The fragments should both contain 2-byte samples.
 
-The time taken by this routine is proportional to \code{len(fragment)}. 
+The time taken by this routine is proportional to
+\code{len(\var{fragment})}.
 \end{funcdesc}
 
 \begin{funcdesc}{findfit}{fragment, reference}
-This routine (which only accepts 2-byte sample fragments)
-
 Try to match \var{reference} as well as possible to a portion of
 \var{fragment} (which should be the longer fragment).  This is
 (conceptually) done by taking slices out of \var{fragment}, using
-\code{findfactor} to compute the best match, and minimizing the
+\function{findfactor()} to compute the best match, and minimizing the
 result.  The fragments should both contain 2-byte samples.  Return a
 tuple \code{(\var{offset}, \var{factor})} where \var{offset} is the
 (integer) offset into \var{fragment} where the optimal match started
 and \var{factor} is the (floating-point) factor as per
-\code{findfactor}.
+\function{findfactor()}.
 \end{funcdesc}
 
 \begin{funcdesc}{findmax}{fragment, length}
@@ -88,7 +93,7 @@
 \code{rms(fragment[i*2:(i+length)*2])} is maximal.  The fragments
 should both contain 2-byte samples.
 
-The routine takes time proportional to \code{len(fragment)}.
+The routine takes time proportional to \code{len(\var{fragment})}.
 \end{funcdesc}
 
 \begin{funcdesc}{getsample}{fragment, width, index}
@@ -106,11 +111,12 @@
 Intel/DVI ADPCM algorithm has been selected for use by the IMA, so it
 may well become a standard.
 
-\code{State} is a tuple containing the state of the coder.  The coder
+\var{state} is a tuple containing the state of the coder.  The coder
 returns a tuple \code{(\var{adpcmfrag}, \var{newstate})}, and the
-\var{newstate} should be passed to the next call of lin2adpcm.  In the
-initial call \code{None} can be passed as the state.  \var{adpcmfrag}
-is the ADPCM coded fragment packed 2 4-bit values per byte.
+\var{newstate} should be passed to the next call of
+\function{lin2adpcm()}.  In the initial call, \code{None} can be
+passed as the state.  \var{adpcmfrag} is the ADPCM coded fragment
+packed 2 4-bit values per byte.
 \end{funcdesc}
 
 \begin{funcdesc}{lin2adpcm3}{fragment, width, state}
@@ -121,8 +127,8 @@
 \end{funcdesc}
 
 \begin{funcdesc}{lin2ulaw}{fragment, width}
-Convert samples in the audio fragment to U-LAW encoding and return
-this as a Python string.  U-LAW is an audio encoding format whereby
+Convert samples in the audio fragment to u-LAW encoding and return
+this as a Python string.  u-LAW is an audio encoding format whereby
 you get a dynamic range of about 14 bits using only 8 bit samples.  It
 is used by the Sun audio hardware, among others.
 \end{funcdesc}
@@ -147,15 +153,18 @@
 silently ignored.
 \end{funcdesc}
 
-\begin{funcdesc}{ratecv}{fragment, width, nchannels, inrate, outrate, state\optional{, weightA, weightB}}
+\begin{funcdesc}{ratecv}{fragment, width, nchannels, inrate, outrate,
+                         state\optional{, weightA\optional{, weightB}}}
 Convert the frame rate of the input fragment.
 
-\code{State} is a tuple containing the state of the converter.  The
+\var{state} is a tuple containing the state of the converter.  The
 converter returns a tupl \code{(\var{newfragment}, \var{newstate})},
-and \var{newstate} should be passed to the next call of ratecv.
+and \var{newstate} should be passed to the next call of
+\function{ratecv()}.
 
-The \code{weightA} and \code{weightB} arguments are parameters for a
-simple digital filter and default to 1 and 0 respectively.
+The \var{weightA} and \var{weightB} arguments are parameters for a
+simple digital filter and default to \code{1} and \code{0}
+respectively.
 \end{funcdesc}
 
 \begin{funcdesc}{reverse}{fragment, width}
@@ -164,9 +173,12 @@
 
 \begin{funcdesc}{rms}{fragment, width}
 Return the root-mean-square of the fragment, i.e.
+%begin{latexonly}
 \iftexi
+%end{latexonly}
 the square root of the quotient of the sum of all squared sample value,
 divided by the sumber of samples.
+%begin{latexonly}
 \else
 % in eqn: sqrt { sum S sub i sup 2  over n }
 \begin{displaymath}
@@ -174,6 +186,7 @@
 \sqrt{\frac{\sum{{S_{i}}^{2}}}{n}}
 \end{displaymath}
 \fi
+%end{latexonly}
 This is a measure of the power in an audio signal.
 \end{funcdesc}
 
@@ -191,16 +204,17 @@
 \end{funcdesc}
 
 \begin{funcdesc}{ulaw2lin}{fragment, width}
-Convert sound fragments in ULAW encoding to linearly encoded sound
-fragments.  ULAW encoding always uses 8 bits samples, so \var{width}
+Convert sound fragments in u-LAW encoding to linearly encoded sound
+fragments.  u-LAW encoding always uses 8 bits samples, so \var{width}
 refers only to the sample width of the output fragment here.
 \end{funcdesc}
 
-Note that operations such as \code{mul} or \code{max} make no
-distinction between mono and stereo fragments, i.e.\ all samples are
-treated equal.  If this is a problem the stereo fragment should be split
-into two mono fragments first and recombined later.  Here is an example
-of how to do that:
+Note that operations such as \function{mul()} or \function{max()} make
+no distinction between mono and stereo fragments, i.e.\ all samples
+are treated equal.  If this is a problem the stereo fragment should be
+split into two mono fragments first and recombined later.  Here is an
+example of how to do that:
+
 \begin{verbatim}
 def mul_stereo(sample, width, lfactor, rfactor):
     lsample = audioop.tomono(sample, width, 1, 0)
@@ -211,26 +225,27 @@
     rsample = audioop.tostereo(rsample, width, 0, 1)
     return audioop.add(lsample, rsample, width)
 \end{verbatim}
-%
+
 If you use the ADPCM coder to build network packets and you want your
 protocol to be stateless (i.e.\ to be able to tolerate packet loss)
 you should not only transmit the data but also the state.  Note that
 you should send the \var{initial} state (the one you passed to
-\code{lin2adpcm}) along to the decoder, not the final state (as returned by
-the coder).  If you want to use \code{struct} to store the state in
-binary you can code the first element (the predicted value) in 16 bits
-and the second (the delta index) in 8.
+\function{lin2adpcm()}) along to the decoder, not the final state (as
+returned by the coder).  If you want to use \function{struct.struct()}
+to store the state in binary you can code the first element (the
+predicted value) in 16 bits and the second (the delta index) in 8.
 
 The ADPCM coders have never been tried against other ADPCM coders,
 only against themselves.  It could well be that I misinterpreted the
 standards in which case they will not be interoperable with the
 respective standards.
 
-The \code{find...} routines might look a bit funny at first sight.
+The \function{find*()} routines might look a bit funny at first sight.
 They are primarily meant to do echo cancellation.  A reasonably
 fast way to do this is to pick the most energetic piece of the output
 sample, locate that in the input sample and subtract the whole output
 sample from the input sample:
+
 \begin{verbatim}
 def echocancel(outputdata, inputdata):
     pos = audioop.findmax(outputdata, 800)    # one tenth second
diff --git a/Doc/lib/libbasehttp.tex b/Doc/lib/libbasehttp.tex
index 2a4a7d0..7ee55df 100644
--- a/Doc/lib/libbasehttp.tex
+++ b/Doc/lib/libbasehttp.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{BaseHTTPServer}}
+\section{Standard Module \module{BaseHTTPServer}}
 \label{module-BaseHTTPServer}
 \stmodindex{BaseHTTPServer}
 
@@ -23,18 +23,21 @@
 \begin{verbatim}
 def run(server_class=BaseHTTPServer.HTTPServer,
         handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
-  server_address = ('', 8000)
-  httpd = server_class(server_address, handler_class)
-  httpd.serve_forever()
+    server_address = ('', 8000)
+    httpd = server_class(server_address, handler_class)
+    httpd.serve_forever()
 \end{verbatim}
 
-The \class{HTTPServer} class builds on the \class{TCPServer} class by
+\begin{classdesc}{HTTPServer}{server_address, RequestHandlerClass}
+This class builds on the \class{TCPServer} class by
 storing the server address as instance
 variables named \member{server_name} and \member{server_port}. The
 server is accessible by the handler, typically through the handler's
 \member{server} instance variable.
+\end{classdesc}
 
-The module's second class, \class{BaseHTTPRequestHandler}, is used
+\begin{classdesc}{BaseHTTPRequestHandler}{request, client_address, server}
+This class is used
 to handle the HTTP requests that arrive at the server. By itself,
 it cannot respond to any actual HTTP requests; it must be subclassed
 to handle each request method (e.g. GET or POST).
@@ -43,69 +46,69 @@
 
 The handler will parse the request and the headers, then call a
 method specific to the request type. The method name is constructed
-from the request. For example, for the request \samp{SPAM}, the
+from the request. For example, for the request method \samp{SPAM}, the
 \method{do_SPAM()} method will be called with no arguments. All of
-the relevant information is stored into instance variables of the
-handler.
+the relevant information is stored in instance variables of the
+handler.  Subclasses should not need to override or extend the
+\method{__init__()} method.
+\end{classdesc}
 
-\setindexsubitem{(BaseHTTPRequestHandler attribute)}
 
 \class{BaseHTTPRequestHandler} has the following instance variables:
 
-\begin{datadesc}{client_address}
+\begin{memberdesc}{client_address}
 Contains a tuple of the form \code{(\var{host}, \var{port})} referring
 to the client's address.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{command}
+\begin{memberdesc}{command}
 Contains the command (request type). For example, \code{'GET'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{path}
+\begin{memberdesc}{path}
 Contains the request path.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{request_version}
+\begin{memberdesc}{request_version}
 Contains the version string from the request. For example,
 \code{'HTTP/1.0'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{headers}
+\begin{memberdesc}{headers}
 Holds an instance of the class specified by the \member{MessageClass}
 class variable. This instance parses and manages the headers in
 the HTTP request.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{rfile}
+\begin{memberdesc}{rfile}
 Contains an input stream, positioned at the start of the optional
 input data.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{wfile}
+\begin{memberdesc}{wfile}
 Contains the output stream for writing a response back to the client.
 Proper adherance to the HTTP protocol must be used when writing
 to this stream.
-\end{datadesc}
+\end{memberdesc}
 
-\setindexsubitem{(BaseHTTPRequestHandler attribute)}
 
-\code{BaseHTTPRequestHandler} has the following class variables:
+\class{BaseHTTPRequestHandler} has the following class variables:
 
-\begin{datadesc}{server_version}
+\begin{memberdesc}{server_version}
 Specifies the server software version.  You may want to override
 this.
 The format is multiple whitespace-separated strings,
 where each string is of the form name[/version].
 For example, \code{'BaseHTTP/0.2'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{sys_version}
+\begin{memberdesc}{sys_version}
 Contains the Python system version, in a form usable by the
 \member{version_string} method and the \member{server_version} class
 variable. For example, \code{'Python/1.4'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{error_message_format}
+\begin{memberdesc}{error_message_format}
 Specifies a format string for building an error response to the
 client. It uses parenthesized, keyed format specifiers, so the
 format operand must be a dictionary. The \var{code} key should
@@ -115,103 +118,102 @@
 explanation of the error code number. Default \var{message}
 and \var{explain} values can found in the \var{responses}
 class variable.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{protocol_version}
+\begin{memberdesc}{protocol_version}
 This specifies the HTTP protocol version used in responses.
 Typically, this should not be overridden. Defaults to
 \code{'HTTP/1.0'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{MessageClass}
+\begin{memberdesc}{MessageClass}
 Specifies a \class{rfc822.Message}-like class to parse HTTP
 headers. Typically, this is not overridden, and it defaults to
 \class{mimetools.Message}.
 \withsubitem{(in module mimetools)}{\ttindex{Message}}
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{responses}
+\begin{memberdesc}{responses}
 This variable contains a mapping of error code integers to two-element
 tuples containing a short and long message. For example,
 \code{\{\var{code}: (\var{shortmessage}, \var{longmessage})\}}. The
 \var{shortmessage} is usually used as the \var{message} key in an
 error response, and \var{longmessage} as the \var{explain} key
 (see the \member{error_message_format} class variable).
-\end{datadesc}
+\end{memberdesc}
 
-\setindexsubitem{(BaseHTTPRequestHandler method)}
 
 A \class{BaseHTTPRequestHandler} instance has the following methods:
 
-\begin{funcdesc}{handle}{}
+\begin{methoddesc}{handle}{}
 Overrides the superclass' \method{handle()} method to provide the
 specific handler behavior. This method will parse and dispatch
-the request to the appropriate \code{do_*()} method.
-\end{funcdesc}
+the request to the appropriate \method{do_*()} method.
+\end{methoddesc}
 
-\begin{funcdesc}{send_error}{code\optional{, message}}
+\begin{methoddesc}{send_error}{code\optional{, message}}
 Sends and logs a complete error reply to the client. The numeric
 \var{code} specifies the HTTP error code, with \var{message} as
 optional, more specific text. A complete set of headers is sent,
 followed by text composed using the \member{error_message_format}
 class variable.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{send_response}{code\optional{, message}}
+\begin{methoddesc}{send_response}{code\optional{, message}}
 Sends a response header and logs the accepted request. The HTTP
 response line is sent, followed by \emph{Server} and \emph{Date}
 headers. The values for these two headers are picked up from the
 \method{version_string()} and \method{date_time_string()} methods,
 respectively.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{send_header}{keyword, value}
+\begin{methoddesc}{send_header}{keyword, value}
 Writes a specific MIME header to the output stream. \var{keyword}
 should specify the header keyword, with \var{value} specifying
 its value.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{end_headers}{}
+\begin{methoddesc}{end_headers}{}
 Sends a blank line, indicating the end of the MIME headers in
 the response.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{log_request}{\optional{code\optional{, size}}}
+\begin{methoddesc}{log_request}{\optional{code\optional{, size}}}
 Logs an accepted (successful) request. \var{code} should specify
 the numeric HTTP code associated with the response. If a size of
 the response is available, then it should be passed as the
 \var{size} parameter.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{log_error}{...}
+\begin{methoddesc}{log_error}{...}
 Logs an error when a request cannot be fulfilled. By default,
 it passes the message to \method{log_message()}, so it takes the
 same arguments (\var{format} and additional values).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{log_message}{format, ...}
+\begin{methoddesc}{log_message}{format, ...}
 Logs an arbitrary message to \code{sys.stderr}. This is typically
 overridden to create custom error logging mechanisms. The
 \var{format} argument is a standard printf-style format string,
 where the additional arguments to \method{log_message()} are applied
 as inputs to the formatting. The client address and current date
 and time are prefixed to every message logged.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{version_string}{}
+\begin{methoddesc}{version_string}{}
 Returns the server software's version string. This is a combination
 of the \member{server_version} and \member{sys_version} class variables.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{date_time_string}{}
+\begin{methoddesc}{date_time_string}{}
 Returns the current date and time, formatted for a message header.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{log_data_time_string}{}
+\begin{methoddesc}{log_data_time_string}{}
 Returns the current date and time, formatted for logging.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{address_string}{}
+\begin{methoddesc}{address_string}{}
 Returns the client address, formatted for logging. A name lookup
 is performed on the client's IP address.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/lib/libbinhex.tex b/Doc/lib/libbinhex.tex
index 560b401..6a7d3c6 100644
--- a/Doc/lib/libbinhex.tex
+++ b/Doc/lib/libbinhex.tex
@@ -1,15 +1,13 @@
-\section{Standard Module \sectcode{binhex}}
+\section{Standard Module \module{binhex}}
 \label{module-binhex}
 \stmodindex{binhex}
 
 This module encodes and decodes files in binhex4 format, a format
-allowing representation of Macintosh files in ASCII. On the macintosh,
+allowing representation of Macintosh files in \ASCII{}. On the Macintosh,
 both forks of a file and the finder information are encoded (or
 decoded), on other platforms only the data fork is handled.
 
-The \code{binhex} module defines the following functions:
-
-\setindexsubitem{(in module binhex)}
+The \module{binhex} module defines the following functions:
 
 \begin{funcdesc}{binhex}{input, output}
 Convert a binary file with filename \var{input} to binhex file
@@ -31,7 +29,8 @@
 decoder, see the source for details.
 
 If you code or decode textfiles on non-Macintosh platforms they will
-still use the macintosh newline convention (carriage-return as end of
+still use the Macintosh newline convention (carriage-return as end of
 line).
 
-As of this writing, \var{hexbin} appears to not work in all cases.
+As of this writing, \function{hexbin()} appears to not work in all
+cases.
diff --git a/Doc/lib/libcd.tex b/Doc/lib/libcd.tex
index e2571cc..fc32da5 100644
--- a/Doc/lib/libcd.tex
+++ b/Doc/lib/libcd.tex
@@ -1,4 +1,4 @@
-\section{Built-in Module \sectcode{cd}}
+\section{Built-in Module \module{cd}}
 \label{module-cd}
 \bimodindex{cd}
 
@@ -113,32 +113,34 @@
 objects (see below).
 \end{datadesc}
 
+
+\subsection{Player Objects}
+\label{player-objects}
+
 Player objects (returned by \function{open()}) have the following
 methods:
 
-\setindexsubitem{(CD player method)}
-
-\begin{funcdesc}{allowremoval}{}
+\begin{methoddesc}[CD player]{allowremoval}{}
 Unlocks the eject button on the CD-ROM drive permitting the user to
 eject the caddy if desired.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{bestreadsize}{}
+\begin{methoddesc}[CD player]{bestreadsize}{}
 Returns the best value to use for the \var{num_frames} parameter of
 the \method{readda()} method.  Best is defined as the value that
 permits a continuous flow of data from the CD-ROM drive.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}[CD player]{close}{}
 Frees the resources associated with the player object.  After calling
 \method{close()}, the methods of the object should no longer be used.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{eject}{}
+\begin{methoddesc}[CD player]{eject}{}
 Ejects the caddy from the CD-ROM drive.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getstatus}{}
+\begin{methoddesc}[CD player]{getstatus}{}
 Returns information pertaining to the current state of the CD-ROM
 drive.  The returned information is a tuple with the following values:
 \var{state}, \var{track}, \var{rtime}, \var{atime}, \var{ttime},
@@ -150,24 +152,24 @@
 The value of \var{state} is one of the following: \constant{ERROR},
 \constant{NODISC}, \constant{READY}, \constant{PLAYING},
 \constant{PAUSED}, \constant{STILL}, or \constant{CDROM}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{gettrackinfo}{track}
+\begin{methoddesc}[CD player]{gettrackinfo}{track}
 Returns information about the specified track.  The returned
 information is a tuple consisting of two elements, the start time of
 the track and the duration of the track.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{msftoblock}{min, sec, frame}
+\begin{methoddesc}[CD player]{msftoblock}{min, sec, frame}
 Converts a minutes, seconds, frames triple representing a time in
 absolute time code into the corresponding logical block number for the
 given CD-ROM drive.  You should use \function{msftoframe()} rather than
 \method{msftoblock()} for comparing times.  The logical block number
 differs from the frame number by an offset required by certain CD-ROM
 drives.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{play}{start, play}
+\begin{methoddesc}[CD player]{play}{start, play}
 Starts playback of an audio CD in the CD-ROM drive at the specified
 track.  The audio output appears on the CD-ROM drive's headphone and
 audio jacks (if fitted).  Play stops at the end of the disc.
@@ -175,71 +177,73 @@
 CD; if \var{play} is 0, the CD will be set to an initial paused
 state.  The method \method{togglepause()} can then be used to commence
 play.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{playabs}{minutes, seconds, frames, play}
+\begin{methoddesc}[CD player]{playabs}{minutes, seconds, frames, play}
 Like \method{play()}, except that the start is given in minutes,
 seconds, and frames instead of a track number.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{playtrack}{start, play}
+\begin{methoddesc}[CD player]{playtrack}{start, play}
 Like \method{play()}, except that playing stops at the end of the
 track.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{playtrackabs}{track, minutes, seconds, frames, play}
+\begin{methoddesc}[CD player]{playtrackabs}{track, minutes, seconds, frames, play}
 Like \method{play()}, except that playing begins at the spcified
 absolute time and ends at the end of the specified track.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{preventremoval}{}
+\begin{methoddesc}[CD player]{preventremoval}{}
 Locks the eject button on the CD-ROM drive thus preventing the user
 from arbitrarily ejecting the caddy.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{readda}{num_frames}
+\begin{methoddesc}[CD player]{readda}{num_frames}
 Reads the specified number of frames from an audio CD mounted in the
 CD-ROM drive.  The return value is a string representing the audio
 frames.  This string can be passed unaltered to the
 \method{parseframe()} method of the parser object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{seek}{minutes, seconds, frames}
+\begin{methoddesc}[CD player]{seek}{minutes, seconds, frames}
 Sets the pointer that indicates the starting point of the next read of
 digital audio data from a CD-ROM.  The pointer is set to an absolute
 time code location specified in \var{minutes}, \var{seconds}, and
 \var{frames}.  The return value is the logical block number to which
 the pointer has been set.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{seekblock}{block}
+\begin{methoddesc}[CD player]{seekblock}{block}
 Sets the pointer that indicates the starting point of the next read of
 digital audio data from a CD-ROM.  The pointer is set to the specified
 logical block number.  The return value is the logical block number to
 which the pointer has been set.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{seektrack}{track}
+\begin{methoddesc}[CD player]{seektrack}{track}
 Sets the pointer that indicates the starting point of the next read of
 digital audio data from a CD-ROM.  The pointer is set to the specified
 track.  The return value is the logical block number to which the
 pointer has been set.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{stop}{}
+\begin{methoddesc}[CD player]{stop}{}
 Stops the current playing operation.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{togglepause}{}
+\begin{methoddesc}[CD player]{togglepause}{}
 Pauses the CD if it is playing, and makes it play if it is paused.
-\end{funcdesc}
+\end{methoddesc}
+
+
+\subsection{Parser Objects}
+\label{cd-parser-objects}
 
 Parser objects (returned by \function{createparser()}) have the
 following methods:
 
-\setindexsubitem{(CD parser method)}
-
-\begin{funcdesc}{addcallback}{type, func, arg}
+\begin{methoddesc}[CD parser]{addcallback}{type, func, arg}
 Adds a callback for the parser.  The parser has callbacks for eight
 different types of data in the digital audio data stream.  Constants
 for these types are defined at the \module{cd} module level (see above).
@@ -268,15 +272,15 @@
   \lineii{control}{Integer giving the control bits from the CD
 subcode data}
 \end{tableii}
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{deleteparser}{}
+\begin{methoddesc}[CD parser]{deleteparser}{}
 Deletes the parser and frees the memory it was using.  The object
 should not be used after this call.  This call is done automatically
 when the last reference to the object is removed.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{parseframe}{frame}
+\begin{methoddesc}[CD parser]{parseframe}{frame}
 Parses one or more frames of digital audio data from a CD such as
 returned by \method{readda()}.  It determines which subcodes are
 present in the data.  If these subcodes have changed since the last
@@ -284,14 +288,14 @@
 appropriate type passing to it the subcode data found in the frame.
 Unlike the \C{} function, more than one frame of digital audio data
 can be passed to this method.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{removecallback}{type}
+\begin{methoddesc}[CD parser]{removecallback}{type}
 Removes the callback for the given \var{type}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{resetparser}{}
+\begin{methoddesc}[CD parser]{resetparser}{}
 Resets the fields of the parser used for tracking subcodes to an
 initial state.  \method{resetparser()} should be called after the disc
 has been changed.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/lib/libfl.tex b/Doc/lib/libfl.tex
index 4716e7b..a0e0076 100644
--- a/Doc/lib/libfl.tex
+++ b/Doc/lib/libfl.tex
@@ -1,4 +1,4 @@
-\section{Built-in Module \sectcode{fl}}
+\section{Built-in Module \module{fl}}
 \label{module-fl}
 \bimodindex{fl}
 
@@ -37,7 +37,7 @@
 function \cfunction{foreground()} and to the FORMS routine
 \cfunction{fl_init()}.
 
-\subsection{Functions Defined in Module \sectcode{fl}}
+\subsection{Functions Defined in Module \module{fl}}
 \nodename{FL Functions}
 
 Module \module{fl} defines the following functions.  For more
@@ -83,7 +83,8 @@
 It returns \code{1} if the user pressed YES, \code{0} if NO.
 \end{funcdesc}
 
-\begin{funcdesc}{show_choice}{str1, str2, str3, but1\optional{, but2, but3}}
+\begin{funcdesc}{show_choice}{str1, str2, str3, but1\optional{,
+                              but2\optional{, but3}}}
 Show a dialog box with a three-line message and up to three buttons.
 It returns the number of the button clicked by the user
 (\code{1}, \code{2} or \code{3}).
@@ -136,116 +137,117 @@
 \end{funcdesc}
 
 \subsection{Form Objects}
+\label{form-objects}
 
-Form objects (returned by \function{fl.make_form()} above) have the
+Form objects (returned by \function{make_form()} above) have the
 following methods.  Each method corresponds to a \C{} function whose
 name is prefixed with \samp{fl_}; and whose first argument is a form
 pointer; please refer to the official FORMS documentation for
 descriptions.
 
-All the \code{add_*()} functions return a Python object
-representing the FORMS object.  Methods of FORMS objects are described
-below.  Most kinds of FORMS object also have some methods specific to
-that kind; these methods are listed here.
+All the \method{add_*()} methods return a Python object representing
+the FORMS object.  Methods of FORMS objects are described below.  Most
+kinds of FORMS object also have some methods specific to that kind;
+these methods are listed here.
 
 \begin{flushleft}
-\setindexsubitem{(form method)}
-\begin{funcdesc}{show_form}{placement, bordertype, name}
+
+\begin{methoddesc}[form]{show_form}{placement, bordertype, name}
   Show the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{hide_form}{}
+\begin{methoddesc}[form]{hide_form}{}
   Hide the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{redraw_form}{}
+\begin{methoddesc}[form]{redraw_form}{}
   Redraw the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{set_form_position}{x, y}
+\begin{methoddesc}[form]{set_form_position}{x, y}
 Set the form's position.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{freeze_form}{}
+\begin{methoddesc}[form]{freeze_form}{}
 Freeze the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unfreeze_form}{}
+\begin{methoddesc}[form]{unfreeze_form}{}
   Unfreeze the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{activate_form}{}
+\begin{methoddesc}[form]{activate_form}{}
   Activate the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{deactivate_form}{}
+\begin{methoddesc}[form]{deactivate_form}{}
   Deactivate the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{bgn_group}{}
+\begin{methoddesc}[form]{bgn_group}{}
   Begin a new group of objects; return a group object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{end_group}{}
+\begin{methoddesc}[form]{end_group}{}
   End the current group of objects.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{find_first}{}
+\begin{methoddesc}[form]{find_first}{}
   Find the first object in the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{find_last}{}
+\begin{methoddesc}[form]{find_last}{}
   Find the last object in the form.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_box}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_box}{type, x, y, w, h, name}
 Add a box object to the form.
 No extra methods.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_text}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_text}{type, x, y, w, h, name}
 Add a text object to the form.
 No extra methods.
-\end{funcdesc}
+\end{methoddesc}
 
-%\begin{funcdesc}{add_bitmap}{type, x, y, w, h, name}
+%\begin{methoddesc}[form]{add_bitmap}{type, x, y, w, h, name}
 %Add a bitmap object to the form.
-%\end{funcdesc}
+%\end{methoddesc}
 
-\begin{funcdesc}{add_clock}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_clock}{type, x, y, w, h, name}
 Add a clock object to the form. \\
 Method:
 \method{get_clock()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_button}{type, x, y, w, h,  name}
+\begin{methoddesc}[form]{add_button}{type, x, y, w, h,  name}
 Add a button object to the form. \\
 Methods:
 \method{get_button()},
 \method{set_button()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_lightbutton}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_lightbutton}{type, x, y, w, h, name}
 Add a lightbutton object to the form. \\
 Methods:
 \method{get_button()},
 \method{set_button()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_roundbutton}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_roundbutton}{type, x, y, w, h, name}
 Add a roundbutton object to the form. \\
 Methods:
 \method{get_button()},
 \method{set_button()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_slider}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_slider}{type, x, y, w, h, name}
 Add a slider object to the form. \\
 Methods:
 \method{set_slider_value()},
@@ -256,9 +258,9 @@
 \method{set_slider_size()},
 \method{set_slider_precision()},
 \method{set_slider_step()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_valslider}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_valslider}{type, x, y, w, h, name}
 Add a valslider object to the form. \\
 Methods:
 \method{set_slider_value()},
@@ -269,18 +271,18 @@
 \method{set_slider_size()},
 \method{set_slider_precision()},
 \method{set_slider_step()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_dial}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_dial}{type, x, y, w, h, name}
 Add a dial object to the form. \\
 Methods:
 \method{set_dial_value()},
 \method{get_dial_value()},
 \method{set_dial_bounds()},
 \method{get_dial_bounds()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_positioner}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_positioner}{type, x, y, w, h, name}
 Add a positioner object to the form. \\
 Methods:
 \method{set_positioner_xvalue()},
@@ -291,9 +293,9 @@
 \method{get_positioner_yvalue()},
 \method{get_positioner_xbounds()},
 \method{get_positioner_ybounds()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_counter}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_counter}{type, x, y, w, h, name}
 Add a counter object to the form. \\
 Methods:
 \method{set_counter_value()},
@@ -302,30 +304,30 @@
 \method{set_counter_step()},
 \method{set_counter_precision()},
 \method{set_counter_return()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_input}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_input}{type, x, y, w, h, name}
 Add a input object to the form. \\
 Methods:
 \method{set_input()},
 \method{get_input()},
 \method{set_input_color()},
 \method{set_input_return()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_menu}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_menu}{type, x, y, w, h, name}
 Add a menu object to the form. \\
 Methods:
 \method{set_menu()},
 \method{get_menu()},
 \method{addto_menu()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_choice}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_choice}{type, x, y, w, h, name}
 Add a choice object to the form. \\
 Methods:
 \method{set_choice()},
@@ -337,9 +339,9 @@
 \method{get_choice_text()},
 \method{set_choice_fontsize()},
 \method{set_choice_fontstyle()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_browser}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_browser}{type, x, y, w, h, name}
 Add a browser object to the form. \\
 Methods:
 \method{set_browser_topline()},
@@ -360,16 +362,16 @@
 \method{set_browser_fontsize()},
 \method{set_browser_fontstyle()},
 \method{set_browser_specialkey()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_timer}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_timer}{type, x, y, w, h, name}
 Add a timer object to the form. \\
 Methods:
 \method{set_timer()},
 \method{get_timer()}.
-\end{funcdesc}
+\end{methoddesc}
 \end{flushleft}
 
 Form objects have the following data attributes; see the FORMS
@@ -388,49 +390,49 @@
 \end{tableiii}
 
 \subsection{FORMS Objects}
+\label{forms-objects}
 
 Besides methods specific to particular kinds of FORMS objects, all
 FORMS objects also have the following methods:
 
-\setindexsubitem{(FORMS method)}
-\begin{funcdesc}{set_call_back}{function, argument}
+\begin{methoddesc}[FORMS object]{set_call_back}{function, argument}
 Set the object's callback function and argument.  When the object
 needs interaction, the callback function will be called with two
 arguments: the object, and the callback argument.  (FORMS objects
 without a callback function are returned by \function{fl.do_forms()}
 or \function{fl.check_forms()} when they need interaction.)  Call this
 method without arguments to remove the callback function.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{delete_object}{}
+\begin{methoddesc}[FORMS object]{delete_object}{}
   Delete the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{show_object}{}
+\begin{methoddesc}[FORMS object]{show_object}{}
   Show the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{hide_object}{}
+\begin{methoddesc}[FORMS object]{hide_object}{}
   Hide the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{redraw_object}{}
+\begin{methoddesc}[FORMS object]{redraw_object}{}
   Redraw the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{freeze_object}{}
+\begin{methoddesc}[FORMS object]{freeze_object}{}
   Freeze the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unfreeze_object}{}
+\begin{methoddesc}[FORMS object]{unfreeze_object}{}
   Unfreeze the object.
-\end{funcdesc}
+\end{methoddesc}
 
-%\begin{funcdesc}{handle_object}{} XXX
-%\end{funcdesc}
+%\begin{methoddesc}[FORMS object]{handle_object}{} XXX
+%\end{methoddesc}
 
-%\begin{funcdesc}{handle_object_direct}{} XXX
-%\end{funcdesc}
+%\begin{methoddesc}[FORMS object]{handle_object_direct}{} XXX
+%\end{methoddesc}
 
 FORMS objects have these data attributes; see the FORMS documentation:
 
@@ -460,7 +462,7 @@
   \lineiii{automatic}{int (read-only)}{(see FORMS docs)}
 \end{tableiii}
 
-\section{Standard Module \sectcode{FL}}
+\section{Standard Module \module{FL}}
 \label{module-FLuppercase}
 \stmodindex{FL}
 
@@ -475,7 +477,7 @@
 from FL import *
 \end{verbatim}
 
-\section{Standard Module \sectcode{flp}}
+\section{Standard Module \module{flp}}
 \label{module-flp}
 \stmodindex{flp}
 
diff --git a/Doc/lib/libftplib.tex b/Doc/lib/libftplib.tex
index cda8b66..7f0aeda 100644
--- a/Doc/lib/libftplib.tex
+++ b/Doc/lib/libftplib.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{ftplib}}
+\section{Standard Module \module{ftplib}}
 \label{module-ftplib}
 \stmodindex{ftplib}
 \indexii{FTP}{protocol}
@@ -30,7 +30,8 @@
 
 The module defines the following items:
 
-\begin{classdesc}{FTP}{\optional{host\optional{, user\optional{, passwd\optional{, acct}}}}}
+\begin{classdesc}{FTP}{\optional{host\optional{, user\optional{,
+                       passwd\optional{, acct}}}}}
 Return a new instance of the \code{FTP} class.  When
 \var{host} is given, the method call \code{connect(\var{host})} is
 made.  When \var{user} is given, additionally the method call
@@ -63,37 +64,37 @@
 not begin with a digit in the range 1--5.
 \end{excdesc}
 
+
 \subsection{FTP Objects}
+\label{ftp-objects}
 
 \class{FTP} instances have the following methods:
 
-\setindexsubitem{(FTP method)}
-
-\begin{funcdesc}{set_debuglevel}{level}
+\begin{methoddesc}{set_debuglevel}{level}
 Set the instance's debugging level.  This controls the amount of
 debugging output printed.  The default, \code{0}, produces no
 debugging output.  A value of \code{1} produces a moderate amount of
 debugging output, generally a single line per request.  A value of
 \code{2} or higher produces the maximum amount of debugging output,
 logging each line sent and received on the control connection.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{connect}{host\optional{, port}}
+\begin{methoddesc}{connect}{host\optional{, port}}
 Connect to the given host and port.  The default port number is \code{21}, as
 specified by the FTP protocol specification.  It is rarely needed to
 specify a different port number.  This function should be called only
 once for each instance; it should not be called at all if a host was
 given when the instance was created.  All other methods can only be
 used after a connection has been made.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getwelcome}{}
+\begin{methoddesc}{getwelcome}{}
 Return the welcome message sent by the server in reply to the initial
 connection.  (This message sometimes contains disclaimers or help
 information that may be relevant to the user.)
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{login}{\optional{user\optional{, passwd\optional{, acct}}}}
+\begin{methoddesc}{login}{\optional{user\optional{, passwd\optional{, acct}}}}
 Log in as the given \var{user}.  The \var{passwd} and \var{acct}
 parameters are optional and default to the empty string.  If no
 \var{user} is specified, it defaults to \code{'anonymous'}.  If
@@ -106,25 +107,25 @@
 should not be called at all if a host and user were given when the
 instance was created.  Most FTP commands are only allowed after the
 client has logged in.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{abort}{}
+\begin{methoddesc}{abort}{}
 Abort a file transfer that is in progress.  Using this does not always
 work, but it's worth a try.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{sendcmd}{command}
+\begin{methoddesc}{sendcmd}{command}
 Send a simple command string to the server and return the response
 string.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{voidcmd}{command}
+\begin{methoddesc}{voidcmd}{command}
 Send a simple command string to the server and handle the response.
 Return nothing if a response code in the range 200--299 is received.
 Raise an exception otherwise.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{retrbinary}{command, callback\optional{, maxblocksize}}
+\begin{methoddesc}{retrbinary}{command, callback\optional{, maxblocksize}}
 Retrieve a file in binary transfer mode.  \var{command} should be an
 appropriate \samp{RETR} command, i.e.\ \code{'RETR \var{filename}'}.
 The \var{callback} function is called for each block of data received,
@@ -133,73 +134,73 @@
 read on the low-level socket object created to do the actual transfer
 (which will also be the largest size of the data blocks passed to
 \var{callback}).  A reasonable default is chosen.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{retrlines}{command\optional{, callback}}
+\begin{methoddesc}{retrlines}{command\optional{, callback}}
 Retrieve a file or directory listing in \ASCII{} transfer mode.
 \var{command} should be an appropriate \samp{RETR} command (see
 \method{retrbinary()} or a \samp{LIST} command (usually just the string
 \code{'LIST'}).  The \var{callback} function is called for each line,
 with the trailing CRLF stripped.  The default \var{callback} prints
 the line to \code{sys.stdout}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{storbinary}{command, file, blocksize}
+\begin{methoddesc}{storbinary}{command, file, blocksize}
 Store a file in binary transfer mode.  \var{command} should be an
 appropriate \samp{STOR} command, i.e.\ \code{"STOR \var{filename}"}.
 \var{file} is an open file object which is read until \EOF{} using its
 \method{read()} method in blocks of size \var{blocksize} to provide the
 data to be stored.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{storlines}{command, file}
+\begin{methoddesc}{storlines}{command, file}
 Store a file in \ASCII{} transfer mode.  \var{command} should be an
 appropriate \samp{STOR} command (see \method{storbinary()}).  Lines are
 read until \EOF{} from the open file object \var{file} using its
 \method{readline()} method to privide the data to be stored.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{nlst}{argument\optional{, \ldots}}
+\begin{methoddesc}{nlst}{argument\optional{, \ldots}}
 Return a list of files as returned by the \samp{NLST} command.  The
 optional \var{argument} is a directory to list (default is the current
 server directory).  Multiple arguments can be used to pass
 non-standard options to the \samp{NLST} command.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{dir}{argument\optional{, \ldots}}
+\begin{methoddesc}{dir}{argument\optional{, \ldots}}
 Return a directory listing as returned by the \samp{LIST} command, as
 a list of lines.  The optional \var{argument} is a directory to list
 (default is the current server directory).  Multiple arguments can be
 used to pass non-standard options to the \samp{LIST} command.  If the
 last argument is a function, it is used as a \var{callback} function
 as for \method{retrlines()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{rename}{fromname, toname}
+\begin{methoddesc}{rename}{fromname, toname}
 Rename file \var{fromname} on the server to \var{toname}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{cwd}{pathname}
+\begin{methoddesc}{cwd}{pathname}
 Set the current directory on the server.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{mkd}{pathname}
+\begin{methoddesc}{mkd}{pathname}
 Create a new directory on the server.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{pwd}{}
+\begin{methoddesc}{pwd}{}
 Return the pathname of the current directory on the server.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{quit}{}
+\begin{methoddesc}{quit}{}
 Send a \samp{QUIT} command to the server and close the connection.
 This is the ``polite'' way to close a connection, but it may raise an
 exception of the server reponds with an error to the \samp{QUIT}
 command.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}{close}{}
 Close the connection unilaterally.  This should not be applied to an
 already closed connection (e.g.\ after a successful call to
 \method{quit()}.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/lib/libhttplib.tex b/Doc/lib/libhttplib.tex
index d578ae2..55ec9b98 100644
--- a/Doc/lib/libhttplib.tex
+++ b/Doc/lib/libhttplib.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{httplib}}
+\section{Standard Module \module{httplib}}
 \label{module-httplib}
 \stmodindex{httplib}
 \indexii{HTTP}{protocol}
@@ -9,7 +9,10 @@
 \module{urllib}\refstmodindex{urllib} uses it to handle URLs that use
 HTTP.
 
-The module defines one class, \class{HTTP}.  An \class{HTTP} instance
+The module defines one class, \class{HTTP}:
+
+\begin{classdesc}{HTTP}{\optional{host\optional{, port}}}
+An \class{HTTP} instance
 represents one transaction with an HTTP server.  It should be
 instantiated passing it a host and optional port number.  If no port
 number is passed, the port is extracted from the host string if it has
@@ -45,50 +48,50 @@
 file object that it returns.
 
 \end{enumerate}
+\end{classdesc}
 
 \subsection{HTTP Objects}
 
 \class{HTTP} instances have the following methods:
 
-\setindexsubitem{(HTTP method)}
 
-\begin{funcdesc}{set_debuglevel}{level}
+\begin{methoddesc}{set_debuglevel}{level}
 Set the debugging level (the amount of debugging output printed).
 The default debug level is \code{0}, meaning no debugging output is
 printed.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{connect}{host\optional{, port}}
+\begin{methoddesc}{connect}{host\optional{, port}}
 Connect to the server given by \var{host} and \var{port}.  See the
 intro for the default port.  This should be called directly only if
 the instance was instantiated without passing a host.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{send}{data}
+\begin{methoddesc}{send}{data}
 Send data to the server.  This should be used directly only after the
 \method{endheaders()} method has been called and before
 \method{getreply()} has been called.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{putrequest}{request, selector}
+\begin{methoddesc}{putrequest}{request, selector}
 This should be the first call after the connection to the server has
 been made.  It sends a line to the server consisting of the
 \var{request} string, the \var{selector} string, and the HTTP version
 (\code{HTTP/1.0}).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{putheader}{header, argument\optional{, ...}}
+\begin{methoddesc}{putheader}{header, argument\optional{, ...}}
 Send an \rfc{822} style header to the server.  It sends a line to the
 server consisting of the header, a colon and a space, and the first
 argument.  If more arguments are given, continuation lines are sent,
 each consisting of a tab and an argument.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{endheaders}{}
+\begin{methoddesc}{endheaders}{}
 Send a blank line to the server, signalling the end of the headers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getreply}{}
+\begin{methoddesc}{getreply}{}
 Complete the request by shutting down the sending end of the socket,
 read the reply from the server, and return a triple
 \code{(\var{replycode}, \var{message}, \var{headers})}.  Here,
@@ -98,13 +101,13 @@
 an instance of the class \class{mimetools.Message} containing the
 headers received from the server.  See the description of the
 \module{mimetools}\refstmodindex{mimetools} module.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getfile}{}
+\begin{methoddesc}{getfile}{}
 Return a file object from which the data returned by the server can be
 read, using the \method{read()}, \method{readline()} or
 \method{readlines()} methods.
-\end{funcdesc}
+\end{methoddesc}
 
 \subsection{Example}
 \nodename{HTTP Example}
@@ -123,5 +126,4 @@
 >>> f = h.getfile()
 >>> data = f.read() # Get the raw HTML
 >>> f.close()
->>> 
 \end{verbatim}
diff --git a/Doc/lib/libimageop.tex b/Doc/lib/libimageop.tex
index 4a93487..c21be48 100644
--- a/Doc/lib/libimageop.tex
+++ b/Doc/lib/libimageop.tex
@@ -1,16 +1,14 @@
-\section{Built-in Module \sectcode{imageop}}
+\section{Built-in Module \module{imageop}}
 \label{module-imageop}
 \bimodindex{imageop}
 
-The \code{imageop} module contains some useful operations on images.
-It operates on images consisting of 8 or 32 bit pixels
-stored in Python strings.  This is the same format as used
-by \code{gl.lrectwrite} and the \code{imgfile} module.
+The \module{imageop} module contains some useful operations on images.
+It operates on images consisting of 8 or 32 bit pixels stored in
+Python strings.  This is the same format as used by
+\function{gl.lrectwrite()} and the \module{imgfile} module.
 
 The module defines the following variables and functions:
 
-\setindexsubitem{(in module imageop)}
-
 \begin{excdesc}{error}
 This exception is raised on all errors, such as unknown number of bits
 per pixel, etc.
@@ -21,11 +19,11 @@
 Return the selected part of \var{image}, which should by
 \var{width} by \var{height} in size and consist of pixels of
 \var{psize} bytes. \var{x0}, \var{y0}, \var{x1} and \var{y1} are like
-the \code{lrectread} parameters, i.e.\ the boundary is included in the
-new image.  The new boundaries need not be inside the picture.  Pixels
-that fall outside the old image will have their value set to zero.  If
-\var{x0} is bigger than \var{x1} the new image is mirrored.  The same
-holds for the y coordinates.
+the \function{gl.lrectread()} parameters, i.e.\ the boundary is
+included in the new image.  The new boundaries need not be inside the
+picture.  Pixels that fall outside the old image will have their value
+set to zero.  If \var{x0} is bigger than \var{x1} the new image is
+mirrored.  The same holds for the y coordinates.
 \end{funcdesc}
 
 \begin{funcdesc}{scale}{image, psize, width, height, newwidth, newheight}
@@ -46,7 +44,7 @@
 \begin{funcdesc}{grey2mono}{image, width, height, threshold}
 Convert a 8-bit deep greyscale image to a 1-bit deep image by
 tresholding all the pixels.  The resulting image is tightly packed and
-is probably only useful as an argument to \code{mono2grey}.
+is probably only useful as an argument to \function{mono2grey()}.
 \end{funcdesc}
 
 \begin{funcdesc}{dither2mono}{image, width, height}
@@ -74,8 +72,8 @@
 
 \begin{funcdesc}{dither2grey2}{image, width, height}
 Convert an 8-bit greyscale image to a 2-bit greyscale image with
-dithering.  As for \code{dither2mono}, the dithering algorithm is
-currently very simple.
+dithering.  As for \function{dither2mono()}, the dithering algorithm
+is currently very simple.
 \end{funcdesc}
 
 \begin{funcdesc}{grey42grey}{image, width, height}
diff --git a/Doc/lib/libjpeg.tex b/Doc/lib/libjpeg.tex
index 745fe32..201a142 100644
--- a/Doc/lib/libjpeg.tex
+++ b/Doc/lib/libjpeg.tex
@@ -1,10 +1,12 @@
-\section{Built-in Module \sectcode{jpeg}}
+\section{Built-in Module \module{jpeg}}
 \label{module-jpeg}
 \bimodindex{jpeg}
 
 The module \module{jpeg} provides access to the jpeg compressor and
-decompressor written by the Independent JPEG Group. JPEG is a (draft?)
-standard for compressing pictures.  For details on jpeg or the
+decompressor written by the Independent JPEG Group%
+\index{Independent JPEG Group}%
+. JPEG is a (draft?)
+standard for compressing pictures.  For details on JPEG or the
 Independent JPEG Group software refer to the JPEG standard or the
 documentation provided with the software.
 
@@ -18,19 +20,19 @@
 \begin{funcdesc}{compress}{data, w, h, b}
 Treat data as a pixmap of width \var{w} and height \var{h}, with
 \var{b} bytes per pixel.  The data is in SGI GL order, so the first
-pixel is in the lower-left corner. This means that \code{gl.lrectread}
+pixel is in the lower-left corner. This means that \function{gl.lrectread()}
 return data can immediately be passed to \function{compress()}.
 Currently only 1 byte and 4 byte pixels are allowed, the former being
 treated as greyscale and the latter as RGB color.
 \function{compress()} returns a string that contains the compressed
-picture, in JFIF format.
+picture, in JFIF\index{JFIF} format.
 \end{funcdesc}
 
 \begin{funcdesc}{decompress}{data}
-Data is a string containing a picture in JFIF format. It returns a
-tuple \code{(\var{data}, \var{width}, \var{height},
+Data is a string containing a picture in JFIF\index{JFIF} format. It
+returns a tuple \code{(\var{data}, \var{width}, \var{height},
 \var{bytesperpixel})}.  Again, the data is suitable to pass to
-\code{gl.lrectwrite}.
+\function{gl.lrectwrite()}.
 \end{funcdesc}
 
 \begin{funcdesc}{setoption}{name, value}
diff --git a/Doc/lib/libmimetools.tex b/Doc/lib/libmimetools.tex
index 0d4e40f..54d1fe0 100644
--- a/Doc/lib/libmimetools.tex
+++ b/Doc/lib/libmimetools.tex
@@ -1,8 +1,7 @@
-\section{Standard Module \sectcode{mimetools}}
+\section{Standard Module \module{mimetools}}
 \label{module-mimetools}
 \stmodindex{mimetools}
 
-\setindexsubitem{(in module mimetools)}
 
 This module defines a subclass of the \class{rfc822.Message} class and
 a number of utility functions that are useful for the manipulation for
@@ -53,9 +52,7 @@
 The \class{Message} class defines the following methods in
 addition to the \class{rfc822.Message} methods:
 
-\setindexsubitem{(mimetool.Message method)}
-
-\begin{funcdesc}{getplist}{}
+\begin{methoddesc}{getplist}{}
 Return the parameter list of the \code{content-type} header.  This is
 a list if strings.  For parameters of the form
 \samp{\var{key}=\var{value}}, \var{key} is converted to lower case but
@@ -63,36 +60,36 @@
 \samp{Content-type: text/html; spam=1; Spam=2; Spam} then
 \method{getplist()} will return the Python list \code{['spam=1',
 'spam=2', 'Spam']}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getparam}{name}
+\begin{methoddesc}{getparam}{name}
 Return the \var{value} of the first parameter (as returned by
 \method{getplist()} of the form \samp{\var{name}=\var{value}} for the
 given \var{name}.  If \var{value} is surrounded by quotes of the form
 `\code{<}...\code{>}' or `\code{"}...\code{"}', these are removed.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getencoding}{}
+\begin{methoddesc}{getencoding}{}
 Return the encoding specified in the \code{content-transfer-encoding}
 message header.  If no such header exists, return \code{'7bit'}.  The
 encoding is converted to lower case.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{gettype}{}
+\begin{methoddesc}{gettype}{}
 Return the message type (of the form \samp{\var{type}/\var{subtype}})
 as specified in the \code{content-type} header.  If no such header
 exists, return \code{'text/plain'}.  The type is converted to lower
 case.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getmaintype}{}
+\begin{methoddesc}{getmaintype}{}
 Return the main type as specified in the \code{content-type} header.
 If no such header exists, return \code{'text'}.  The main type is
 converted to lower case.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getsubtype}{}
+\begin{methoddesc}{getsubtype}{}
 Return the subtype as specified in the \code{content-type} header.  If
 no such header exists, return \code{'plain'}.  The subtype is
 converted to lower case.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/lib/libmpz.tex b/Doc/lib/libmpz.tex
index 1c4b19f..707a3a8 100644
--- a/Doc/lib/libmpz.tex
+++ b/Doc/lib/libmpz.tex
@@ -1,38 +1,48 @@
-\section{Built-in Module \sectcode{mpz}}
+\section{Built-in Module \module{mpz}}
 \label{module-mpz}
 \bimodindex{mpz}
 
 This is an optional module.  It is only available when Python is
 configured to include it, which requires that the GNU MP software is
 installed.
+\index{MP, GNU library}
+\index{arbitrary precision integers}
+\index{integer!arbitrary precision}
 
 This module implements the interface to part of the GNU MP library,
 which defines arbitrary precision integer and rational number
 arithmetic routines.  Only the interfaces to the \emph{integer}
-(\samp{mpz_{\rm \ldots}}) routines are provided. If not stated
+(\function{mpz_*()}) routines are provided. If not stated
 otherwise, the description in the GNU MP documentation can be applied.
 
 In general, \dfn{mpz}-numbers can be used just like other standard
 Python numbers, e.g.\ you can use the built-in operators like \code{+},
 \code{*}, etc., as well as the standard built-in functions like
-\code{abs}, \code{int}, \ldots, \code{divmod}, \code{pow}.
-\strong{Please note:} the \emph{bitwise-xor} operation has been implemented as
-a bunch of \emph{and}s, \emph{invert}s and \emph{or}s, because the library
-lacks an \code{mpz_xor} function, and I didn't need one.
+\function{abs()}, \function{int()}, \ldots, \function{divmod()},
+\function{pow()}.  \strong{Please note:} the \emph{bitwise-xor}
+operation has been implemented as a bunch of \emph{and}s,
+\emph{invert}s and \emph{or}s, because the library lacks an
+\cfunction{mpz_xor()} function, and I didn't need one.
 
-You create an mpz-number by calling the function called \code{mpz} (see
+You create an mpz-number by calling the function \function{mpz()} (see
 below for an exact description). An mpz-number is printed like this:
 \code{mpz(\var{value})}.
 
-\setindexsubitem{(in module mpz)}
+
 \begin{funcdesc}{mpz}{value}
   Create a new mpz-number. \var{value} can be an integer, a long,
   another mpz-number, or even a string. If it is a string, it is
   interpreted as an array of radix-256 digits, least significant digit
-  first, resulting in a positive number. See also the \code{binary}
+  first, resulting in a positive number. See also the \method{binary()}
   method, described below.
 \end{funcdesc}
 
+\begin{datadesc}{MPZType}
+  The type of the objects returned by \function{mpz()} and most other
+  functions in this module.
+\end{datadesc}
+
+
 A number of \emph{extra} functions are defined in this module. Non
 mpz-arguments are converted to mpz-values first, and the functions
 return mpz-numbers.
@@ -40,7 +50,7 @@
 \begin{funcdesc}{powm}{base, exponent, modulus}
   Return \code{pow(\var{base}, \var{exponent}) \%{} \var{modulus}}. If
   \code{\var{exponent} == 0}, return \code{mpz(1)}. In contrast to the
-  \C-library function, this version can handle negative exponents.
+  \C{} library function, this version can handle negative exponents.
 \end{funcdesc}
 
 \begin{funcdesc}{gcd}{op1, op2}
@@ -62,18 +72,18 @@
 \end{funcdesc}
 
 \begin{funcdesc}{divm}{numerator, denominator, modulus}
-  Returns a number \var{q}. such that
-  \code{\var{q} * \var{denominator} \%{} \var{modulus} == \var{numerator}}.
-  One could also implement this function in Python, using \code{gcdext}.
+  Returns a number \var{q} such that
+  \code{\var{q} * \var{denominator} \%{} \var{modulus} ==
+  \var{numerator}}.  One could also implement this function in Python,
+  using \function{gcdext()}.
 \end{funcdesc}
 
 An mpz-number has one method:
 
-\setindexsubitem{(mpz method)}
-\begin{funcdesc}{binary}{}
+\begin{methoddesc}[mpz]{binary}{}
   Convert this mpz-number to a binary string, where the number has been
   stored as an array of radix-256 digits, least significant digit first.
 
   The mpz-number must have a value greater than or equal to zero,
-  otherwise a \code{ValueError}-exception will be raised.
-\end{funcdesc}
+  otherwise \exception{ValueError} will be raised.
+\end{methoddesc}
diff --git a/Doc/lib/libnntplib.tex b/Doc/lib/libnntplib.tex
index 75c84d3..ba1d788 100644
--- a/Doc/lib/libnntplib.tex
+++ b/Doc/lib/libnntplib.tex
@@ -1,11 +1,10 @@
-\section{Standard Module \sectcode{nntplib}}
+\section{Standard Module \module{nntplib}}
 \label{module-nntplib}
 \stmodindex{nntplib}
 \indexii{NNTP}{protocol}
 
-\setindexsubitem{(in module nntplib)}
 
-This module defines the class \code{NNTP} which implements the client
+This module defines the class \class{NNTP} which implements the client
 side of the NNTP protocol.  It can be used to implement a news reader
 or poster, or automated news processors.  For more information on NNTP
 (Network News Transfer Protocol), see Internet \rfc{977}.
@@ -34,7 +33,6 @@
 3803 Re: \POSIX{} wait and SIGCHLD
 >>> s.quit()
 '205 news.cwi.nl closing connection.  Goodbye.'
->>> 
 \end{verbatim}
 
 To post an article from a file (this assumes that the article has
@@ -47,16 +45,15 @@
 '240 Article posted successfully.'
 >>> s.quit()
 '205 news.cwi.nl closing connection.  Goodbye.'
->>> 
 \end{verbatim}
 %
 The module itself defines the following items:
 
-\begin{funcdesc}{NNTP}{host\optional{, port}}
-Return a new instance of the \code{NNTP} class, representing a
+\begin{classdesc}{NNTP}{host\optional{, port}}
+Return a new instance of the \class{NNTP} class, representing a
 connection to the NNTP server running on host \var{host}, listening at
 port \var{port}.  The default \var{port} is 119.
-\end{funcdesc}
+\end{classdesc}
 
 \begin{excdesc}{error_reply}
 Exception raised when an unexpected reply is received from the server.
@@ -75,7 +72,9 @@
 not begin with a digit in the range 1--5.
 \end{excdesc}
 
+
 \subsection{NNTP Objects}
+\label{nntp-objects}
 
 NNTP instances have the following methods.  The \var{response} that is
 returned as the first item in the return tuple of almost all methods
@@ -83,40 +82,40 @@
 If the server's response indicates an error, the method raises one of
 the above exceptions.
 
-\setindexsubitem{(NNTP object method)}
 
-\begin{funcdesc}{getwelcome}{}
+\begin{methoddesc}{getwelcome}{}
 Return the welcome message sent by the server in reply to the initial
 connection.  (This message sometimes contains disclaimers or help
 information that may be relevant to the user.)
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{set_debuglevel}{level}
+\begin{methoddesc}{set_debuglevel}{level}
 Set the instance's debugging level.  This controls the amount of
-debugging output printed.  The default, 0, produces no debugging
-output.  A value of 1 produces a moderate amount of debugging output,
-generally a single line per request or response.  A value of 2 or
-higher produces the maximum amount of debugging output, logging each
-line sent and received on the connection (including message text).
-\end{funcdesc}
+debugging output printed.  The default, \code{0}, produces no debugging
+output.  A value of \code{1} produces a moderate amount of debugging
+output, generally a single line per request or response.  A value of
+\code{2} or higher produces the maximum amount of debugging output,
+logging each line sent and received on the connection (including
+message text).
+\end{methoddesc}
 
-\begin{funcdesc}{newgroups}{date, time}
+\begin{methoddesc}{newgroups}{date, time}
 Send a \samp{NEWGROUPS} command.  The \var{date} argument should be a
 string of the form \code{"\var{yy}\var{mm}\var{dd}"} indicating the
 date, and \var{time} should be a string of the form
 \code{"\var{hh}\var{mm}\var{ss}"} indicating the time.  Return a pair
 \code{(\var{response}, \var{groups})} where \var{groups} is a list of
 group names that are new since the given date and time.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{newnews}{group, date, time}
+\begin{methoddesc}{newnews}{group, date, time}
 Send a \samp{NEWNEWS} command.  Here, \var{group} is a group name or
-\code{"*"}, and \var{date} and \var{time} have the same meaning as for
-\code{newgroups()}.  Return a pair \code{(\var{response},
+\code{'*'}, and \var{date} and \var{time} have the same meaning as for
+\method{newgroups()}.  Return a pair \code{(\var{response},
 \var{articles})} where \var{articles} is a list of article ids.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{list}{}
+\begin{methoddesc}{list}{}
 Send a \samp{LIST} command.  Return a pair \code{(\var{response},
 \var{list})} where \var{list} is a list of tuples.  Each tuple has the
 form \code{(\var{group}, \var{last}, \var{first}, \var{flag})}, where
@@ -124,106 +123,107 @@
 and first article numbers (as strings), and \var{flag} is \code{'y'}
 if posting is allowed, \code{'n'} if not, and \code{'m'} if the
 newsgroup is moderated.  (Note the ordering: \var{last}, \var{first}.)
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{group}{name}
+\begin{methoddesc}{group}{name}
 Send a \samp{GROUP} command, where \var{name} is the group name.
-Return a tuple \code{(\var{response}, \var{count}, \var{first},
-\var{last}, \var{name})} where \var{count} is the (estimated) number
-of articles in the group, \var{first} is the first article number in
-the group, \var{last} is the last article number in the group, and
-\var{name} is the group name.  The numbers are returned as strings.
-\end{funcdesc}
+Return a tuple \code{(}\var{response}\code{,} \var{count}\code{,}
+\var{first}\code{,} \var{last}\code{,} \var{name}\code{)} where
+\var{count} is the (estimated) number of articles in the group,
+\var{first} is the first article number in the group, \var{last} is
+the last article number in the group, and \var{name} is the group
+name.  The numbers are returned as strings.
+\end{methoddesc}
 
-\begin{funcdesc}{help}{}
+\begin{methoddesc}{help}{}
 Send a \samp{HELP} command.  Return a pair \code{(\var{response},
 \var{list})} where \var{list} is a list of help strings.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{stat}{id}
+\begin{methoddesc}{stat}{id}
 Send a \samp{STAT} command, where \var{id} is the message id (enclosed
-in \samp{<} and \samp{>}) or an article number (as a string).
+in \character{<} and \character{>}) or an article number (as a string).
 Return a triple \code{(\var{response}, \var{number}, \var{id})} where
 \var{number} is the article number (as a string) and \var{id} is the
-article id  (enclosed in \samp{<} and \samp{>}).
-\end{funcdesc}
+article id  (enclosed in \character{<} and \character{>}).
+\end{methoddesc}
 
-\begin{funcdesc}{next}{}
-Send a \samp{NEXT} command.  Return as for \code{stat()}.
-\end{funcdesc}
+\begin{methoddesc}{next}{}
+Send a \samp{NEXT} command.  Return as for \method{stat()}.
+\end{methoddesc}
 
-\begin{funcdesc}{last}{}
-Send a \samp{LAST} command.  Return as for \code{stat()}.
-\end{funcdesc}
+\begin{methoddesc}{last}{}
+Send a \samp{LAST} command.  Return as for \method{stat()}.
+\end{methoddesc}
 
-\begin{funcdesc}{head}{id}
+\begin{methoddesc}{head}{id}
 Send a \samp{HEAD} command, where \var{id} has the same meaning as for
-\code{stat()}.  Return a pair \code{(\var{response}, \var{list})}
+\method{stat()}.  Return a pair \code{(\var{response}, \var{list})}
 where \var{list} is a list of the article's headers (an uninterpreted
 list of lines, without trailing newlines).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{body}{id}
+\begin{methoddesc}{body}{id}
 Send a \samp{BODY} command, where \var{id} has the same meaning as for
-\code{stat()}.  Return a pair \code{(\var{response}, \var{list})}
+\method{stat()}.  Return a pair \code{(\var{response}, \var{list})}
 where \var{list} is a list of the article's body text (an
 uninterpreted list of lines, without trailing newlines).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{article}{id}
+\begin{methoddesc}{article}{id}
 Send a \samp{ARTICLE} command, where \var{id} has the same meaning as
-for \code{stat()}.  Return a pair \code{(\var{response}, \var{list})}
+for \method{stat()}.  Return a pair \code{(\var{response}, \var{list})}
 where \var{list} is a list of the article's header and body text (an
 uninterpreted list of lines, without trailing newlines).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{slave}{}
+\begin{methoddesc}{slave}{}
 Send a \samp{SLAVE} command.  Return the server's \var{response}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{xhdr}{header, string}
+\begin{methoddesc}{xhdr}{header, string}
 Send an \samp{XHDR} command.  This command is not defined in the RFC
 but is a common extension.  The \var{header} argument is a header
-keyword, e.g. \code{"subject"}.  The \var{string} argument should have
+keyword, e.g. \code{'subject'}.  The \var{string} argument should have
 the form \code{"\var{first}-\var{last}"} where \var{first} and
 \var{last} are the first and last article numbers to search.  Return a
 pair \code{(\var{response}, \var{list})}, where \var{list} is a list of
 pairs \code{(\var{id}, \var{text})}, where \var{id} is an article id
 (as a string) and \var{text} is the text of the requested header for
 that article.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{post}{file}
+\begin{methoddesc}{post}{file}
 Post an article using the \samp{POST} command.  The \var{file}
 argument is an open file object which is read until EOF using its
-\code{readline()} method.  It should be a well-formed news article,
-including the required headers.  The \code{post()} method
+\method{readline()} method.  It should be a well-formed news article,
+including the required headers.  The \method{post()} method
 automatically escapes lines beginning with \samp{.}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{ihave}{id, file}
+\begin{methoddesc}{ihave}{id, file}
 Send an \samp{IHAVE} command.  If the response is not an error, treat
-\var{file} exactly as for the \code{post()} method.
-\end{funcdesc}
+\var{file} exactly as for the \method{post()} method.
+\end{methoddesc}
 
-\begin{funcdesc}{date}{}
+\begin{methoddesc}{date}{}
 Return a triple \code{(\var{response}, \var{date}, \var{time})},
 containing the current date and time in a form suitable for the
-\code{newnews} and \code{newgroups} methods.
+\method{newnews()} and \method{newgroups()} methods.
 This is an optional NNTP extension, and may not be supported by all
 servers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{xgtitle}{name}
-Process an XGTITLE command, returning a pair \code{(\var{response},
+\begin{methoddesc}{xgtitle}{name}
+Process an \samp{XGTITLE} command, returning a pair \code{(\var{response},
 \var{list})}, where \var{list} is a list of tuples containing
 \code{(\var{name}, \var{title})}.
 % XXX huh?  Should that be name, description?
 This is an optional NNTP extension, and may not be supported by all
 servers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{xover}{start, end}
+\begin{methoddesc}{xover}{start, end}
 Return a pair \code{(\var{resp}, \var{list})}.  \var{list} is a list
 of tuples, one for each article in the range delimited by the \var{start}
 and \var{end} article numbers.  Each tuple is of the form
@@ -232,15 +232,15 @@
 \var{references}\code{,} \var{size}\code{,} \var{lines}\code{)}.
 This is an optional NNTP extension, and may not be supported by all
 servers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{xpath}{id}
+\begin{methoddesc}{xpath}{id}
 Return a pair \code{(\var{resp}, \var{path})}, where \var{path} is the
 directory path to the article with message ID \var{id}.  This is an
 optional NNTP extension, and may not be supported by all servers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{quit}{}
+\begin{methoddesc}{quit}{}
 Send a \samp{QUIT} command and close the connection.  Once this method
 has been called, no other methods of the NNTP object should be called.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/lib/librgbimg.tex b/Doc/lib/librgbimg.tex
index 873a75f..73e4aae 100644
--- a/Doc/lib/librgbimg.tex
+++ b/Doc/lib/librgbimg.tex
@@ -5,7 +5,7 @@
 The \module{rgbimg} module allows Python programs to access SGI imglib image
 files (also known as \file{.rgb} files).  The module is far from
 complete, but is provided anyway since the functionality that there is
-is enough in some cases.  Currently, colormap files are not supported.
+enough in some cases.  Currently, colormap files are not supported.
 
 The module defines the following variables and functions:
 
@@ -24,7 +24,7 @@
 This function reads and decodes the image on the specified file, and
 returns it as a Python string. The string has 4 byte RGBA pixels.
 The bottom left pixel is the first in
-the string. This format is suitable to pass to \code{gl.lrectwrite},
+the string. This format is suitable to pass to \function{gl.lrectwrite()},
 for instance.
 \end{funcdesc}
 
@@ -34,7 +34,7 @@
 \var{z} is 1 if the saved image should be 1 byte greyscale, 3 if the
 saved image should be 3 byte RGB data, or 4 if the saved images should
 be 4 byte RGBA data.  The input data always contains 4 bytes per pixel.
-These are the formats returned by \code{gl.lrectread}.
+These are the formats returned by \function{gl.lrectread()}.
 \end{funcdesc}
 
 \begin{funcdesc}{ttob}{flag}
diff --git a/Doc/lib/librotor.tex b/Doc/lib/librotor.tex
index e467d4e..63dc56e 100644
--- a/Doc/lib/librotor.tex
+++ b/Doc/lib/librotor.tex
@@ -1,9 +1,10 @@
-\section{Built-in Module \sectcode{rotor}}
+\section{Built-in Module \module{rotor}}
 \label{module-rotor}
 \bimodindex{rotor}
 
 This module implements a rotor-based encryption algorithm, contributed by
-Lance Ellinghouse.  The design is derived from the Enigma device, a machine
+Lance Ellinghouse\index{Ellinghouse, Lance}.  The design is derived
+from the Enigma device\indexii{Enigma}{device}, a machine
 used during World War II to encipher messages.  A rotor is simply a
 permutation.  For example, if the character `A' is the origin of the rotor,
 then a given rotor might map `A' to `L', `B' to `Z', `C' to `G', and so on.
@@ -19,12 +20,10 @@
 the rotors in the same fashion as a car's odometer. Decoding works in the
 same way, except we reverse the permutations and apply them in the opposite
 order.
-\index{Ellinghouse, Lance}
 \indexii{Enigma}{cipher}
 
 The available functions in this module are:
 
-\setindexsubitem{(in module rotor)}
 \begin{funcdesc}{newrotor}{key\optional{, numrotors}}
 Return a rotor object. \var{key} is a string containing the encryption key
 for the object; it can contain arbitrary binary data. The key will be used
@@ -35,32 +34,31 @@
 
 Rotor objects have the following methods:
 
-\setindexsubitem{(rotor method)}
-\begin{funcdesc}{setkey}{key}
+\begin{methoddesc}[rotor]{setkey}{key}
 Sets the rotor's key to \var{key}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{encrypt}{plaintext}
+\begin{methoddesc}[rotor]{encrypt}{plaintext}
 Reset the rotor object to its initial state and encrypt \var{plaintext},
 returning a string containing the ciphertext.  The ciphertext is always the
 same length as the original plaintext.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{encryptmore}{plaintext}
+\begin{methoddesc}[rotor]{encryptmore}{plaintext}
 Encrypt \var{plaintext} without resetting the rotor object, and return a
 string containing the ciphertext.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{decrypt}{ciphertext}
+\begin{methoddesc}[rotor]{decrypt}{ciphertext}
 Reset the rotor object to its initial state and decrypt \var{ciphertext},
 returning a string containing the ciphertext.  The plaintext string will
 always be the same length as the ciphertext.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{decryptmore}{ciphertext}
+\begin{methoddesc}[rotor]{decryptmore}{ciphertext}
 Decrypt \var{ciphertext} without resetting the rotor object, and return a
 string containing the ciphertext.
-\end{funcdesc}
+\end{methoddesc}
 
 An example usage:
 \begin{verbatim}
@@ -80,17 +78,18 @@
 'l(\315'
 >>> del rt
 \end{verbatim}
-%
-The module's code is not an exact simulation of the original Enigma device;
-it implements the rotor encryption scheme differently from the original. The
-most important difference is that in the original Enigma, there were only 5
-or 6 different rotors in existence, and they were applied twice to each
-character; the cipher key was the order in which they were placed in the
-machine.  The Python rotor module uses the supplied key to initialize a
-random number generator; the rotor permutations and their initial positions
-are then randomly generated.  The original device only enciphered the
-letters of the alphabet, while this module can handle any 8-bit binary data;
-it also produces binary output.  This module can also operate with an
+
+The module's code is not an exact simulation of the original Enigma
+device; it implements the rotor encryption scheme differently from the
+original. The most important difference is that in the original
+Enigma, there were only 5 or 6 different rotors in existence, and they
+were applied twice to each character; the cipher key was the order in
+which they were placed in the machine.  The Python \module{rotor}
+module uses the supplied key to initialize a random number generator;
+the rotor permutations and their initial positions are then randomly
+generated.  The original device only enciphered the letters of the
+alphabet, while this module can handle any 8-bit binary data; it also
+produces binary output.  This module can also operate with an
 arbitrary number of rotors.
 
 The original Enigma cipher was broken in 1944. % XXX: Is this right?
@@ -102,5 +101,4 @@
 just fine, and may be somewhat safer than using the \UNIX{} \program{crypt}
 command.
 \index{NSA}
-\index{National Security Agency}\index{crypt(1)}
-% XXX How were Unix commands represented in the docs?
+\index{National Security Agency}
diff --git a/Doc/lib/libsunaudio.tex b/Doc/lib/libsunaudio.tex
index bafd7c5..c43d611 100644
--- a/Doc/lib/libsunaudio.tex
+++ b/Doc/lib/libsunaudio.tex
@@ -1,15 +1,14 @@
-\section{Built-in Module \sectcode{sunaudiodev}}
+\section{Built-in Module \module{sunaudiodev}}
 \label{module-sunaudiodev}
 \bimodindex{sunaudiodev}
 
 This module allows you to access the sun audio interface. The sun
 audio hardware is capable of recording and playing back audio data
-in U-LAW format with a sample rate of 8K per second. A full
-description can be gotten with \samp{man audio}.
+in u-LAW\index{u-LAW} format with a sample rate of 8K per second. A
+full description can be found in the \manpage{audio}{7I} manual page.
 
 The module defines the following variables and functions:
 
-\setindexsubitem{(in module sunaudiodev)}
 \begin{excdesc}{error}
 This exception is raised on all errors. The argument is a string
 describing what went wrong.
@@ -22,87 +21,87 @@
 access, \code{'rw'} for both and \code{'control'} for access to the
 control device. Since only one process is allowed to have the recorder
 or player open at the same time it is a good idea to open the device
-only for the activity needed. See the audio manpage for details.
+only for the activity needed. See \manpage{audio}{7I} for details.
 \end{funcdesc}
 
+
 \subsection{Audio Device Objects}
+\label{audio-device-objects}
 
-The audio device objects are returned by \code{open} define the
+The audio device objects are returned by \function{open()} define the
 following methods (except \code{control} objects which only provide
-getinfo, setinfo and drain):
+\method{getinfo()}, \method{setinfo()} and \method{drain()}):
 
-\setindexsubitem{(audio device method)}
-
-\begin{funcdesc}{close}{}
+\begin{methoddesc}[audio device]{close}{}
 This method explicitly closes the device. It is useful in situations
 where deleting the object does not immediately close it since there
 are other references to it. A closed device should not be used again.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{drain}{}
+\begin{methoddesc}[audio device]{drain}{}
 This method waits until all pending output is processed and then returns.
 Calling this method is often not necessary: destroying the object will
 automatically close the audio device and this will do an implicit drain.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{flush}{}
+\begin{methoddesc}[audio device]{flush}{}
 This method discards all pending output. It can be used avoid the
 slow response to a user's stop request (due to buffering of up to one
 second of sound).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getinfo}{}
+\begin{methoddesc}[audio device]{getinfo}{}
 This method retrieves status information like input and output volume,
 etc. and returns it in the form of
 an audio status object. This object has no methods but it contains a
 number of attributes describing the current device status. The names
 and meanings of the attributes are described in
-\file{/usr/include/sun/audioio.h} and in the audio man page. Member names
-are slightly different from their C counterparts: a status object is
-only a single structure. Members of the \code{play} substructure have
-\samp{o_} prepended to their name and members of the \code{record}
-structure have \samp{i_}. So, the C member \code{play.sample_rate} is
-accessed as \code{o_sample_rate}, \code{record.gain} as \code{i_gain}
-and \code{monitor_gain} plainly as \code{monitor_gain}.
-\end{funcdesc}
+\file{/usr/include/sun/audioio.h} and in the \manpage{audio}{7I}
+manual page.  Member names
+are slightly different from their \C{} counterparts: a status object is
+only a single structure. Members of the \cdata{play} substructure have
+\samp{o_} prepended to their name and members of the \cdata{record}
+structure have \samp{i_}. So, the \C{} member \cdata{play.sample_rate} is
+accessed as \member{o_sample_rate}, \cdata{record.gain} as \member{i_gain}
+and \cdata{monitor_gain} plainly as \member{monitor_gain}.
+\end{methoddesc}
 
-\begin{funcdesc}{ibufcount}{}
+\begin{methoddesc}[audio device]{ibufcount}{}
 This method returns the number of samples that are buffered on the
-recording side, i.e.
-the program will not block on a \function{read()} call of so many samples.
-\end{funcdesc}
+recording side, i.e.\ the program will not block on a
+\function{read()} call of so many samples.
+\end{methoddesc}
 
-\begin{funcdesc}{obufcount}{}
+\begin{methoddesc}[audio device]{obufcount}{}
 This method returns the number of samples buffered on the playback
 side. Unfortunately, this number cannot be used to determine a number
 of samples that can be written without blocking since the kernel
 output queue length seems to be variable.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{read}{size}
+\begin{methoddesc}[audio device]{read}{size}
 This method reads \var{size} samples from the audio input and returns
 them as a Python string. The function blocks until enough data is available.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setinfo}{status}
+\begin{methoddesc}[audio device]{setinfo}{status}
 This method sets the audio device status parameters. The \var{status}
 parameter is an device status object as returned by \function{getinfo()} and
 possibly modified by the program.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{write}{samples}
+\begin{methoddesc}[audio device]{write}{samples}
 Write is passed a Python string containing audio samples to be played.
 If there is enough buffer space free it will immediately return,
 otherwise it will block.
-\end{funcdesc}
+\end{methoddesc}
 
-There is a companion module, \module{SUNAUDIODEV}, which defines useful
+There is a companion module,
+\module{SUNAUDIODEV}\refstmodindex{SUNAUDIODEV}, which defines useful
 symbolic constants like \constant{MIN_GAIN}, \constant{MAX_GAIN},
-\constant{SPEAKER}, etc. The names of
-the constants are the same names as used in the \C{} include file
-\code{<sun/audioio.h>}, with the leading string \samp{AUDIO_}
-stripped.
-\refstmodindex{SUNAUDIODEV}
+\constant{SPEAKER}, etc. The names of the constants are the same names
+as used in the \C{} include file \code{<sun/audioio.h>}, with the
+leading string \samp{AUDIO_} stripped.
 
 Useability of the control device is limited at the moment, since there
 is no way to use the ``wait for something to happen'' feature the
diff --git a/Doc/lib/libxmllib.tex b/Doc/lib/libxmllib.tex
index efc7f00..4306aca 100644
--- a/Doc/lib/libxmllib.tex
+++ b/Doc/lib/libxmllib.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{xmllib}}
+\section{Standard Module \module{xmllib}}
 % Author: Sjoerd Mullender
 \label{module-xmllib}
 \stmodindex{xmllib}
@@ -13,59 +13,57 @@
 
 This class provides the following interface methods:
 
-\setindexsubitem{(XMLParser method)}
-
-\begin{funcdesc}{reset}{}
+\begin{methoddesc}{reset}{}
 Reset the instance.  Loses all unprocessed data.  This is called
 implicitly at the instantiation time.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setnomoretags}{}
+\begin{methoddesc}{setnomoretags}{}
 Stop processing tags.  Treat all following input as literal input
 (CDATA).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setliteral}{}
+\begin{methoddesc}{setliteral}{}
 Enter literal mode (CDATA mode).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{feed}{data}
+\begin{methoddesc}{feed}{data}
 Feed some text to the parser.  It is processed insofar as it consists
 of complete elements; incomplete data is buffered until more data is
 fed or \method{close()} is called.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}{close}{}
 Force processing of all buffered data as if it were followed by an
 end-of-file mark.  This method may be redefined by a derived class to
 define additional processing at the end of the input, but the
 redefined version should always call \method{close()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{translate_references}{data}
+\begin{methoddesc}{translate_references}{data}
 Translate all entity and character references in \var{data} and
 returns the translated string.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_xml}{encoding, standalone}
-This method is called when the \code{<?xml ...?>} tag is processed.
+\begin{methoddesc}{handle_xml}{encoding, standalone}
+This method is called when the \samp{<?xml ...?>} tag is processed.
 The arguments are the values of the encoding and standalone attributes 
 in the tag.  Both encoding and standalone are optional.  The values
 passed to \method{handle_xml()} default to \code{None} and the string
 \code{'no'} respectively.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_doctype}{tag, data}
-This method is called when the \code{<!DOCTYPE...>} tag is processed.
+\begin{methoddesc}{handle_doctype}{tag, data}
+This method is called when the \samp{<!DOCTYPE...>} tag is processed.
 The arguments are the name of the root element and the uninterpreted
 contents of the tag, starting after the white space after the name of
 the root element.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_starttag}{tag, method, attributes}
+\begin{methoddesc}{handle_starttag}{tag, method, attributes}
 This method is called to handle start tags for which a
-\code{start_\var{tag}()} method has been defined.  The \var{tag}
-argument is the name of the tag, and the \method{method} argument is the
+\method{start_\var{tag}()} method has been defined.  The \var{tag}
+argument is the name of the tag, and the \var{method} argument is the
 bound method which should be used to support semantic interpretation
 of the start tag.  The \var{attributes} argument is a dictionary of
 attributes, the key being the \var{name} and the value being the
@@ -76,29 +74,29 @@
 \code{handle_starttag('A', self.start_A, \{'HREF': 'http://www.cwi.nl/'\})}.
 The base implementation simply calls \var{method} with \var{attributes}
 as the only argument.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_endtag}{tag, method}
+\begin{methoddesc}{handle_endtag}{tag, method}
 This method is called to handle endtags for which an
-\code{end_\var{tag}()} method has been defined.  The \var{tag}
+\method{end_\var{tag}()} method has been defined.  The \var{tag}
 argument is the name of the tag, and the
 \var{method} argument is the bound method which should be used to
 support semantic interpretation of the end tag.  If no
-\code{end_\var{tag}()} method is defined for the closing element, this
+\method{end_\var{tag}()} method is defined for the closing element, this
 handler is not called.  The base implementation simply calls
 \var{method}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_data}{data}
+\begin{methoddesc}{handle_data}{data}
 This method is called to process arbitrary data.  It is intended to be
 overridden by a derived class; the base class implementation does
 nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_charref}{ref}
+\begin{methoddesc}{handle_charref}{ref}
 This method is called to process a character reference of the form
 \samp{\&\#\var{ref};}.  \var{ref} can either be a decimal number,
-or a hexadecimal number when preceded by \code{x}.
+or a hexadecimal number when preceded by an \character{x}.
 In the base implementation, \var{ref} must be a number in the
 range 0-255.  It translates the character to \ASCII{} and calls the
 method \method{handle_data()} with the character as argument.  If
@@ -106,9 +104,9 @@
 \code{unknown_charref(\var{ref})} is called to handle the error.  A
 subclass must override this method to provide support for character
 references outside of the \ASCII{} range.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_entityref}{ref}
+\begin{methoddesc}{handle_entityref}{ref}
 This method is called to process a general entity reference of the
 form \samp{\&\var{ref};} where \var{ref} is an general entity
 reference.  It looks for \var{ref} in the instance (or class)
@@ -119,48 +117,48 @@
 \code{unknown_entityref(\var{ref})}.  The default \member{entitydefs}
 defines translations for \code{\&amp;}, \code{\&apos}, \code{\&gt;},
 \code{\&lt;}, and \code{\&quot;}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_comment}{comment}
+\begin{methoddesc}{handle_comment}{comment}
 This method is called when a comment is encountered.  The
 \var{comment} argument is a string containing the text between the
 \samp{<!--} and \samp{-->} delimiters, but not the delimiters
 themselves.  For example, the comment \samp{<!--text-->} will
 cause this method to be called with the argument \code{'text'}.  The
 default method does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_cdata}{data}
+\begin{methoddesc}{handle_cdata}{data}
 This method is called when a CDATA element is encountered.  The
 \var{data} argument is a string containing the text between the
 \samp{<![CDATA[} and \samp{]]>} delimiters, but not the delimiters
 themselves.  For example, the entity \samp{<![CDATA[text]]>} will
 cause this method to be called with the argument \code{'text'}.  The
 default method does nothing, and is intended to be overridden.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_proc}{name, data}
+\begin{methoddesc}{handle_proc}{name, data}
 This method is called when a processing instruction (PI) is
 encountered.  The \var{name} is the PI target, and the \var{data}
 argument is a string containing the text between the PI target and the
 closing delimiter, but not the delimiter itself.  For example, the
 instruction \samp{<?XML text?>} will cause this method to be called
 with the arguments \code{'XML'} and \code{'text'}.  The default method
-does nothing.  Note that if a document starts with \code{<?xml
+does nothing.  Note that if a document starts with \samp{<?xml
 ...?>}, \method{handle_xml()} is called to handle it.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_special}{data}
+\begin{methoddesc}{handle_special}{data}
 This method is called when a declaration is encountered.  The
 \var{data} argument is a string containing the text between the
 \samp{<!} and \samp{>} delimiters, but not the delimiters
 themselves.  For example, the entity \samp{<!ENTITY text>} will
 cause this method to be called with the argument \code{'ENTITY text'}.  The
-default method does nothing.  Note that \code{<!DOCTYPE ...>} is
+default method does nothing.  Note that \samp{<!DOCTYPE ...>} is
 handled separately if it is located at the start of the document.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{syntax_error}{message}
+\begin{methoddesc}{syntax_error}{message}
 This method is called when a syntax error is encountered.  The
 \var{message} is a description of what was wrong.  The default method 
 raises a \exception{RuntimeError} exception.  If this method is
@@ -168,31 +166,31 @@
 called when the error can be recovered from.  Unrecoverable errors
 raise a \exception{RuntimeError} without first calling
 \method{syntax_error()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unknown_starttag}{tag, attributes}
+\begin{methoddesc}{unknown_starttag}{tag, attributes}
 This method is called to process an unknown start tag.  It is intended
 to be overridden by a derived class; the base class implementation
 does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unknown_endtag}{tag}
+\begin{methoddesc}{unknown_endtag}{tag}
 This method is called to process an unknown end tag.  It is intended
 to be overridden by a derived class; the base class implementation
 does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unknown_charref}{ref}
+\begin{methoddesc}{unknown_charref}{ref}
 This method is called to process unresolvable numeric character
 references.  It is intended to be overridden by a derived class; the
 base class implementation does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unknown_entityref}{ref}
+\begin{methoddesc}{unknown_entityref}{ref}
 This method is called to process an unknown entity reference.  It is
 intended to be overridden by a derived class; the base class
 implementation does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
 Apart from overriding or extending the methods listed above, derived
 classes may also define methods and variables of the following form to
@@ -200,19 +198,19 @@
 case dependent; the \var{tag} occurring in method names must be in the
 correct case:
 
-\begin{funcdescni}{start_\var{tag}}{attributes}
+\begin{methoddescni}{start_\var{tag}}{attributes}
 This method is called to process an opening tag \var{tag}.  The
 \var{attributes} argument has the same meaning as described for
 \method{handle_starttag()} above.  In fact, the base implementation of
 \method{handle_starttag()} calls this method.
-\end{funcdescni}
+\end{methoddescni}
 
-\begin{funcdescni}{end_\var{tag}}{}
+\begin{methoddescni}{end_\var{tag}}{}
 This method is called to process a closing tag \var{tag}.
-\end{funcdescni}
+\end{methoddescni}
 
-\begin{datadescni}{\var{tag}_attributes}
-If a class or instance variable \code{\var{tag}_attributes} exists, it 
+\begin{memberdescni}{\var{tag}_attributes}
+If a class or instance variable \member{\var{tag}_attributes} exists, it 
 should be a list or a dictionary.  If a list, the elements of the list 
 are the valid attributes for the element \var{tag}; if a dictionary,
 the keys are the valid attributes for the element \var{tag}, and the
@@ -222,4 +220,4 @@
 attribute dictionary that is passed to \method{handle_starttag()} and
 \method{unknown_starttag()} contains values for all attributes that
 have a default value.
-\end{datadescni}
+\end{memberdescni}
diff --git a/Doc/libaifc.tex b/Doc/libaifc.tex
index 8bb88a1..f86b1d8 100644
--- a/Doc/libaifc.tex
+++ b/Doc/libaifc.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{aifc}}
+\section{Standard Module \module{aifc}}
 \label{module-aifc}
 \stmodindex{aifc}
 
@@ -6,6 +6,9 @@
 files.  AIFF is Audio Interchange File Format, a format for storing
 digital audio samples in a file.  AIFF-C is a newer version of the
 format that includes the ability to compress the audio data.
+\index{Audio Interchange File Format}
+\index{AIFF}
+\index{AIFF-C}
 
 Audio files have a number of parameters that describe the audio data.
 The sampling rate or frame rate is the number of times per second the
@@ -21,9 +24,8 @@
 frames/second.  This gives a frame size of 4 bytes (2*2), and a
 second's worth occupies 2*2*44100 bytes, i.e.\ 176,400 bytes.
 
-Module \code{aifc} defines the following function:
+Module \module{aifc} defines the following function:
 
-\setindexsubitem{(in module aifc)}
 \begin{funcdesc}{open}{file, mode}
 Open an AIFF or AIFF-C file and return an object instance with
 methods that are described below.  The argument file is either a
@@ -32,159 +34,161 @@
 when the file must be opened for writing.  When used for writing, the
 file object should be seekable, unless you know ahead of time how many
 samples you are going to write in total and use
-\code{writeframesraw()} and \code{setnframes()}.
+\method{writeframesraw()} and \method{setnframes()}.
 \end{funcdesc}
 
-Objects returned by \code{aifc.open()} when a file is opened for
+Objects returned by \function{open()} when a file is opened for
 reading have the following methods:
 
-\setindexsubitem{(aifc object method)}
-\begin{funcdesc}{getnchannels}{}
+\begin{methoddesc}[aifc]{getnchannels}{}
 Return the number of audio channels (1 for mono, 2 for stereo).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getsampwidth}{}
+\begin{methoddesc}[aifc]{getsampwidth}{}
 Return the size in bytes of individual samples.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getframerate}{}
+\begin{methoddesc}[aifc]{getframerate}{}
 Return the sampling rate (number of audio frames per second).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getnframes}{}
+\begin{methoddesc}[aifc]{getnframes}{}
 Return the number of audio frames in the file.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getcomptype}{}
+\begin{methoddesc}[aifc]{getcomptype}{}
 Return a four-character string describing the type of compression used
 in the audio file.  For AIFF files, the returned value is
 \code{'NONE'}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getcompname}{}
+\begin{methoddesc}[aifc]{getcompname}{}
 Return a human-readable description of the type of compression used in
 the audio file.  For AIFF files, the returned value is \code{'not
 compressed'}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getparams}{}
+\begin{methoddesc}[aifc]{getparams}{}
 Return a tuple consisting of all of the above values in the above
 order.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getmarkers}{}
+\begin{methoddesc}[aifc]{getmarkers}{}
 Return a list of markers in the audio file.  A marker consists of a
 tuple of three elements.  The first is the mark ID (an integer), the
 second is the mark position in frames from the beginning of the data
 (an integer), the third is the name of the mark (a string).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getmark}{id}
-Return the tuple as described in \code{getmarkers} for the mark with
-the given id.
-\end{funcdesc}
+\begin{methoddesc}[aifc]{getmark}{id}
+Return the tuple as described in \method{getmarkers()} for the mark
+with the given \var{id}.
+\end{methoddesc}
 
-\begin{funcdesc}{readframes}{nframes}
+\begin{methoddesc}[aifc]{readframes}{nframes}
 Read and return the next \var{nframes} frames from the audio file.  The
 returned data is a string containing for each frame the uncompressed
 samples of all channels.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{rewind}{}
-Rewind the read pointer.  The next \code{readframes} will start from
+\begin{methoddesc}[aifc]{rewind}{}
+Rewind the read pointer.  The next \method{readframes()} will start from
 the beginning.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setpos}{pos}
+\begin{methoddesc}[aifc]{setpos}{pos}
 Seek to the specified frame number.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{tell}{}
+\begin{methoddesc}[aifc]{tell}{}
 Return the current frame number.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}[aifc]{close}{}
 Close the AIFF file.  After calling this method, the object can no
 longer be used.
-\end{funcdesc}
+\end{methoddesc}
 
-Objects returned by \code{aifc.open()} when a file is opened for
-writing have all the above methods, except for \code{readframes} and
-\code{setpos}.  In addition the following methods exist.  The
-\code{get} methods can only be called after the corresponding
-\code{set} methods have been called.  Before the first
-\code{writeframes()} or \code{writeframesraw()}, all parameters except
-for the number of frames must be filled in.
+Objects returned by \function{open()} when a file is opened for
+writing have all the above methods, except for \method{readframes()} and
+\method{setpos()}.  In addition the following methods exist.  The
+\method{get*()} methods can only be called after the corresponding
+\method{set*()} methods have been called.  Before the first
+\method{writeframes()} or \method{writeframesraw()}, all parameters
+except for the number of frames must be filled in.
 
-\begin{funcdesc}{aiff}{}
+\begin{methoddesc}[aifc]{aiff}{}
 Create an AIFF file.  The default is that an AIFF-C file is created,
 unless the name of the file ends in \code{'.aiff'} in which case the
 default is an AIFF file.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{aifc}{}
+\begin{methoddesc}[aifc]{aifc}{}
 Create an AIFF-C file.  The default is that an AIFF-C file is created,
 unless the name of the file ends in \code{'.aiff'} in which case the
 default is an AIFF file.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setnchannels}{nchannels}
+\begin{methoddesc}[aifc]{setnchannels}{nchannels}
 Specify the number of channels in the audio file.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setsampwidth}{width}
+\begin{methoddesc}[aifc]{setsampwidth}{width}
 Specify the size in bytes of audio samples.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setframerate}{rate}
+\begin{methoddesc}[aifc]{setframerate}{rate}
 Specify the sampling frequency in frames per second.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setnframes}{nframes}
+\begin{methoddesc}[aifc]{setnframes}{nframes}
 Specify the number of frames that are to be written to the audio file.
 If this parameter is not set, or not set correctly, the file needs to
 support seeking.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setcomptype}{type, name}
+\begin{methoddesc}[aifc]{setcomptype}{type, name}
 Specify the compression type.  If not specified, the audio data will
 not be compressed.  In AIFF files, compression is not possible.  The
 name parameter should be a human-readable description of the
 compression type, the type parameter should be a four-character
 string.  Currently the following compression types are supported:
 NONE, ULAW, ALAW, G722.
-\end{funcdesc}
+\index{u-LAW}
+\index{A-LAW}
+\index{G.722}
+\end{methoddesc}
 
-\begin{funcdesc}{setparams}{nchannels, sampwidth, framerate, comptype, compname}
+\begin{methoddesc}[aifc]{setparams}{nchannels, sampwidth, framerate, comptype, compname}
 Set all the above parameters at once.  The argument is a tuple
 consisting of the various parameters.  This means that it is possible
-to use the result of a \code{getparams()} call as argument to
-\code{setparams()}.
-\end{funcdesc}
+to use the result of a \method{getparams()} call as argument to
+\method{setparams()}.
+\end{methoddesc}
 
-\begin{funcdesc}{setmark}{id, pos, name}
+\begin{methoddesc}[aifc]{setmark}{id, pos, name}
 Add a mark with the given id (larger than 0), and the given name at
 the given position.  This method can be called at any time before
-\code{close()}.
-\end{funcdesc}
+\method{close()}.
+\end{methoddesc}
 
-\begin{funcdesc}{tell}{}
+\begin{methoddesc}[aifc]{tell}{}
 Return the current write position in the output file.  Useful in
-combination with \code{setmark()}.
-\end{funcdesc}
+combination with \method{setmark()}.
+\end{methoddesc}
 
-\begin{funcdesc}{writeframes}{data}
+\begin{methoddesc}[aifc]{writeframes}{data}
 Write data to the output file.  This method can only be called after
 the audio file parameters have been set.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{writeframesraw}{data}
-Like \code{writeframes()}, except that the header of the audio file is
-not updated.
-\end{funcdesc}
+\begin{methoddesc}[aifc]{writeframesraw}{data}
+Like \method{writeframes()}, except that the header of the audio file
+is not updated.
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}[aifc]{close}{}
 Close the AIFF file.  The header of the file is updated to reflect the
 actual size of the audio data. After calling this method, the object
 can no longer be used.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/libal.tex b/Doc/libal.tex
index 1126f83..fb31ffa 100644
--- a/Doc/libal.tex
+++ b/Doc/libal.tex
@@ -1,4 +1,4 @@
-\section{Built-in Module \sectcode{al}}
+\section{Built-in Module \module{al}}
 \label{module-al}
 \bimodindex{al}
 
@@ -10,10 +10,11 @@
 specific function is available on your platform.
 
 All functions and methods defined in this module are equivalent to
-the C functions with \samp{AL} prefixed to their name.
+the \C{} functions with \samp{AL} prefixed to their name.
 
-Symbolic constants from the C header file \file{<audio.h>} are defined
-in the standard module \code{AL}, see below.
+Symbolic constants from the \C{} header file \code{<audio.h>} are
+defined in the standard module \module{AL}\refstmodindex{AL}, see
+below.
 
 \strong{Warning:} the current version of the audio library may dump core
 when bad argument values are passed rather than returning an error
@@ -25,145 +26,146 @@
 
 The module defines the following functions:
 
-\setindexsubitem{(in module al)}
 
 \begin{funcdesc}{openport}{name, direction\optional{, config}}
-The name and direction arguments are strings.  The optional config
-argument is a configuration object as returned by
-\code{al.newconfig()}.  The return value is an \dfn{port object};
-methods of port objects are described below.
+The name and direction arguments are strings.  The optional
+\var{config} argument is a configuration object as returned by
+\function{newconfig()}.  The return value is an \dfn{audio port
+object}; methods of audio port objects are described below.
 \end{funcdesc}
 
 \begin{funcdesc}{newconfig}{}
-The return value is a new \dfn{configuration object}; methods of
-configuration objects are described below.
+The return value is a new \dfn{audio configuration object}; methods of
+audio configuration objects are described below.
 \end{funcdesc}
 
 \begin{funcdesc}{queryparams}{device}
 The device argument is an integer.  The return value is a list of
-integers containing the data returned by ALqueryparams().
+integers containing the data returned by \cfunction{ALqueryparams()}.
 \end{funcdesc}
 
 \begin{funcdesc}{getparams}{device, list}
-The device argument is an integer.  The list argument is a list such
-as returned by \code{queryparams}; it is modified in place (!).
+The \var{device} argument is an integer.  The list argument is a list
+such as returned by \function{queryparams()}; it is modified in place
+(!).
 \end{funcdesc}
 
 \begin{funcdesc}{setparams}{device, list}
-The device argument is an integer.  The list argument is a list such
-as returned by \code{al.queryparams}.
+The \var{device} argument is an integer.  The \var{list} argument is a
+list such as returned by \function{queryparams()}.
 \end{funcdesc}
 
+
 \subsection{Configuration Objects}
+\label{al-config-objects}
 
-Configuration objects (returned by \code{al.newconfig()} have the
+Configuration objects (returned by \function{newconfig()} have the
 following methods:
 
-\setindexsubitem{(audio configuration object method)}
-
-\begin{funcdesc}{getqueuesize}{}
+\begin{methoddesc}[audio configuration]{getqueuesize}{}
 Return the queue size.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setqueuesize}{size}
+\begin{methoddesc}[audio configuration]{setqueuesize}{size}
 Set the queue size.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getwidth}{}
+\begin{methoddesc}[audio configuration]{getwidth}{}
 Get the sample width.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setwidth}{width}
+\begin{methoddesc}[audio configuration]{setwidth}{width}
 Set the sample width.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getchannels}{}
+\begin{methoddesc}[audio configuration]{getchannels}{}
 Get the channel count.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setchannels}{nchannels}
+\begin{methoddesc}[audio configuration]{setchannels}{nchannels}
 Set the channel count.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getsampfmt}{}
+\begin{methoddesc}[audio configuration]{getsampfmt}{}
 Get the sample format.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setsampfmt}{sampfmt}
+\begin{methoddesc}[audio configuration]{setsampfmt}{sampfmt}
 Set the sample format.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getfloatmax}{}
+\begin{methoddesc}[audio configuration]{getfloatmax}{}
 Get the maximum value for floating sample formats.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setfloatmax}{floatmax}
+\begin{methoddesc}[audio configuration]{setfloatmax}{floatmax}
 Set the maximum value for floating sample formats.
-\end{funcdesc}
+\end{methoddesc}
+
 
 \subsection{Port Objects}
+\label{al-port-objects}
 
-Port objects (returned by \code{al.openport()} have the following
+Port objects, as returned by \function{openport()}, have the following
 methods:
 
-\setindexsubitem{(audio port object method)}
-
-\begin{funcdesc}{closeport}{}
+\begin{methoddesc}[audio port]{closeport}{}
 Close the port.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getfd}{}
+\begin{methoddesc}[audio port]{getfd}{}
 Return the file descriptor as an int.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getfilled}{}
+\begin{methoddesc}[audio port]{getfilled}{}
 Return the number of filled samples.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getfillable}{}
+\begin{methoddesc}[audio port]{getfillable}{}
 Return the number of fillable samples.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{readsamps}{nsamples}
+\begin{methoddesc}[audio port]{readsamps}{nsamples}
 Read a number of samples from the queue, blocking if necessary.
 Return the data as a string containing the raw data, (e.g., 2 bytes per
 sample in big-endian byte order (high byte, low byte) if you have set
 the sample width to 2 bytes).
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{writesamps}{samples}
+\begin{methoddesc}[audio port]{writesamps}{samples}
 Write samples into the queue, blocking if necessary.  The samples are
-encoded as described for the \code{readsamps} return value.
-\end{funcdesc}
+encoded as described for the \method{readsamps()} return value.
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getfillpoint}{}
+\begin{methoddesc}[audio port]{getfillpoint}{}
 Return the `fill point'.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{setfillpoint}{fillpoint}
+\begin{methoddesc}[audio port]{setfillpoint}{fillpoint}
 Set the `fill point'.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getconfig}{}
+\begin{methoddesc}[audio port]{getconfig}{}
 Return a configuration object containing the current configuration of
 the port.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{setconfig}{config}
+\begin{methoddesc}[audio port]{setconfig}{config}
 Set the configuration from the argument, a configuration object.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\begin{funcdesc}{getstatus}{list}
+\begin{methoddesc}[audio port]{getstatus}{list}
 Get status information on last error.
-\end{funcdesc}
+\end{methoddesc}[audio port]
 
-\section{Standard Module \sectcode{AL}}
+
+\section{Standard Module \module{AL}}
 \nodename{AL (uppercase)}
 \stmodindex{AL}
 
 This module defines symbolic constants needed to use the built-in
-module \code{al} (see above); they are equivalent to those defined in
-the C header file \file{<audio.h>} except that the name prefix
+module \module{al} (see above); they are equivalent to those defined
+in the \C{} header file \code{<audio.h>} except that the name prefix
 \samp{AL_} is omitted.  Read the module source for a complete list of
 the defined names.  Suggested use:
 
diff --git a/Doc/libaudioop.tex b/Doc/libaudioop.tex
index 887cac9..774a92e 100644
--- a/Doc/libaudioop.tex
+++ b/Doc/libaudioop.tex
@@ -1,19 +1,25 @@
-\section{Built-in Module \sectcode{audioop}}
+\section{Built-in Module \module{audioop}}
 \label{module-audioop}
 \bimodindex{audioop}
 
-The \code{audioop} module contains some useful operations on sound fragments.
-It operates on sound fragments consisting of signed integer samples
-8, 16 or 32 bits wide, stored in Python strings.  This is the same
-format as used by the \code{al} and \code{sunaudiodev} modules.  All
-scalar items are integers, unless specified otherwise.
+The \module{audioop} module contains some useful operations on sound
+fragments.  It operates on sound fragments consisting of signed
+integer samples 8, 16 or 32 bits wide, stored in Python strings.  This
+is the same format as used by the \module{al} and \module{sunaudiodev}
+modules.  All scalar items are integers, unless specified otherwise.
+
+% This para is mostly here to provide an excuse for the index entries...
+This module provides support for u-LAW and Intel/DVI ADPCM encodings.
+\index{Intel/DVI ADPCM}
+\index{ADPCM, Intel/DVI}
+\index{u-LAW}
 
 A few of the more complicated operations only take 16-bit samples,
-otherwise the sample size (in bytes) is always a parameter of the operation.
+otherwise the sample size (in bytes) is always a parameter of the
+operation.
 
 The module defines the following variables and functions:
 
-\setindexsubitem{(in module audioop)}
 \begin{excdesc}{error}
 This exception is raised on all errors, such as unknown number of bytes
 per sample, etc.
@@ -28,14 +34,14 @@
 
 \begin{funcdesc}{adpcm2lin}{adpcmfragment, width, state}
 Decode an Intel/DVI ADPCM coded fragment to a linear fragment.  See
-the description of \code{lin2adpcm} for details on ADPCM coding.
+the description of \function{lin2adpcm()} for details on ADPCM coding.
 Return a tuple \code{(\var{sample}, \var{newstate})} where the sample
 has the width specified in \var{width}.
 \end{funcdesc}
 
 \begin{funcdesc}{adpcm32lin}{adpcmfragment, width, state}
-Decode an alternative 3-bit ADPCM code.  See \code{lin2adpcm3} for
-details.
+Decode an alternative 3-bit ADPCM code.  See \function{lin2adpcm3()}
+for details.
 \end{funcdesc}
 
 \begin{funcdesc}{avg}{fragment, width}
@@ -60,26 +66,25 @@
 
 \begin{funcdesc}{findfactor}{fragment, reference}
 Return a factor \var{F} such that
-\code{rms(add(fragment, mul(reference, -F)))} is minimal, i.e.,
-return the factor with which you should multiply \var{reference} to
-make it match as well as possible to \var{fragment}.  The fragments
-should both contain 2-byte samples.
+\code{rms(add(\var{fragment}, mul(\var{reference}, -\var{F})))} is
+minimal, i.e., return the factor with which you should multiply
+\var{reference} to make it match as well as possible to
+\var{fragment}.  The fragments should both contain 2-byte samples.
 
-The time taken by this routine is proportional to \code{len(fragment)}. 
+The time taken by this routine is proportional to
+\code{len(\var{fragment})}.
 \end{funcdesc}
 
 \begin{funcdesc}{findfit}{fragment, reference}
-This routine (which only accepts 2-byte sample fragments)
-
 Try to match \var{reference} as well as possible to a portion of
 \var{fragment} (which should be the longer fragment).  This is
 (conceptually) done by taking slices out of \var{fragment}, using
-\code{findfactor} to compute the best match, and minimizing the
+\function{findfactor()} to compute the best match, and minimizing the
 result.  The fragments should both contain 2-byte samples.  Return a
 tuple \code{(\var{offset}, \var{factor})} where \var{offset} is the
 (integer) offset into \var{fragment} where the optimal match started
 and \var{factor} is the (floating-point) factor as per
-\code{findfactor}.
+\function{findfactor()}.
 \end{funcdesc}
 
 \begin{funcdesc}{findmax}{fragment, length}
@@ -88,7 +93,7 @@
 \code{rms(fragment[i*2:(i+length)*2])} is maximal.  The fragments
 should both contain 2-byte samples.
 
-The routine takes time proportional to \code{len(fragment)}.
+The routine takes time proportional to \code{len(\var{fragment})}.
 \end{funcdesc}
 
 \begin{funcdesc}{getsample}{fragment, width, index}
@@ -106,11 +111,12 @@
 Intel/DVI ADPCM algorithm has been selected for use by the IMA, so it
 may well become a standard.
 
-\code{State} is a tuple containing the state of the coder.  The coder
+\var{state} is a tuple containing the state of the coder.  The coder
 returns a tuple \code{(\var{adpcmfrag}, \var{newstate})}, and the
-\var{newstate} should be passed to the next call of lin2adpcm.  In the
-initial call \code{None} can be passed as the state.  \var{adpcmfrag}
-is the ADPCM coded fragment packed 2 4-bit values per byte.
+\var{newstate} should be passed to the next call of
+\function{lin2adpcm()}.  In the initial call, \code{None} can be
+passed as the state.  \var{adpcmfrag} is the ADPCM coded fragment
+packed 2 4-bit values per byte.
 \end{funcdesc}
 
 \begin{funcdesc}{lin2adpcm3}{fragment, width, state}
@@ -121,8 +127,8 @@
 \end{funcdesc}
 
 \begin{funcdesc}{lin2ulaw}{fragment, width}
-Convert samples in the audio fragment to U-LAW encoding and return
-this as a Python string.  U-LAW is an audio encoding format whereby
+Convert samples in the audio fragment to u-LAW encoding and return
+this as a Python string.  u-LAW is an audio encoding format whereby
 you get a dynamic range of about 14 bits using only 8 bit samples.  It
 is used by the Sun audio hardware, among others.
 \end{funcdesc}
@@ -147,15 +153,18 @@
 silently ignored.
 \end{funcdesc}
 
-\begin{funcdesc}{ratecv}{fragment, width, nchannels, inrate, outrate, state\optional{, weightA, weightB}}
+\begin{funcdesc}{ratecv}{fragment, width, nchannels, inrate, outrate,
+                         state\optional{, weightA\optional{, weightB}}}
 Convert the frame rate of the input fragment.
 
-\code{State} is a tuple containing the state of the converter.  The
+\var{state} is a tuple containing the state of the converter.  The
 converter returns a tupl \code{(\var{newfragment}, \var{newstate})},
-and \var{newstate} should be passed to the next call of ratecv.
+and \var{newstate} should be passed to the next call of
+\function{ratecv()}.
 
-The \code{weightA} and \code{weightB} arguments are parameters for a
-simple digital filter and default to 1 and 0 respectively.
+The \var{weightA} and \var{weightB} arguments are parameters for a
+simple digital filter and default to \code{1} and \code{0}
+respectively.
 \end{funcdesc}
 
 \begin{funcdesc}{reverse}{fragment, width}
@@ -164,9 +173,12 @@
 
 \begin{funcdesc}{rms}{fragment, width}
 Return the root-mean-square of the fragment, i.e.
+%begin{latexonly}
 \iftexi
+%end{latexonly}
 the square root of the quotient of the sum of all squared sample value,
 divided by the sumber of samples.
+%begin{latexonly}
 \else
 % in eqn: sqrt { sum S sub i sup 2  over n }
 \begin{displaymath}
@@ -174,6 +186,7 @@
 \sqrt{\frac{\sum{{S_{i}}^{2}}}{n}}
 \end{displaymath}
 \fi
+%end{latexonly}
 This is a measure of the power in an audio signal.
 \end{funcdesc}
 
@@ -191,16 +204,17 @@
 \end{funcdesc}
 
 \begin{funcdesc}{ulaw2lin}{fragment, width}
-Convert sound fragments in ULAW encoding to linearly encoded sound
-fragments.  ULAW encoding always uses 8 bits samples, so \var{width}
+Convert sound fragments in u-LAW encoding to linearly encoded sound
+fragments.  u-LAW encoding always uses 8 bits samples, so \var{width}
 refers only to the sample width of the output fragment here.
 \end{funcdesc}
 
-Note that operations such as \code{mul} or \code{max} make no
-distinction between mono and stereo fragments, i.e.\ all samples are
-treated equal.  If this is a problem the stereo fragment should be split
-into two mono fragments first and recombined later.  Here is an example
-of how to do that:
+Note that operations such as \function{mul()} or \function{max()} make
+no distinction between mono and stereo fragments, i.e.\ all samples
+are treated equal.  If this is a problem the stereo fragment should be
+split into two mono fragments first and recombined later.  Here is an
+example of how to do that:
+
 \begin{verbatim}
 def mul_stereo(sample, width, lfactor, rfactor):
     lsample = audioop.tomono(sample, width, 1, 0)
@@ -211,26 +225,27 @@
     rsample = audioop.tostereo(rsample, width, 0, 1)
     return audioop.add(lsample, rsample, width)
 \end{verbatim}
-%
+
 If you use the ADPCM coder to build network packets and you want your
 protocol to be stateless (i.e.\ to be able to tolerate packet loss)
 you should not only transmit the data but also the state.  Note that
 you should send the \var{initial} state (the one you passed to
-\code{lin2adpcm}) along to the decoder, not the final state (as returned by
-the coder).  If you want to use \code{struct} to store the state in
-binary you can code the first element (the predicted value) in 16 bits
-and the second (the delta index) in 8.
+\function{lin2adpcm()}) along to the decoder, not the final state (as
+returned by the coder).  If you want to use \function{struct.struct()}
+to store the state in binary you can code the first element (the
+predicted value) in 16 bits and the second (the delta index) in 8.
 
 The ADPCM coders have never been tried against other ADPCM coders,
 only against themselves.  It could well be that I misinterpreted the
 standards in which case they will not be interoperable with the
 respective standards.
 
-The \code{find...} routines might look a bit funny at first sight.
+The \function{find*()} routines might look a bit funny at first sight.
 They are primarily meant to do echo cancellation.  A reasonably
 fast way to do this is to pick the most energetic piece of the output
 sample, locate that in the input sample and subtract the whole output
 sample from the input sample:
+
 \begin{verbatim}
 def echocancel(outputdata, inputdata):
     pos = audioop.findmax(outputdata, 800)    # one tenth second
diff --git a/Doc/libbasehttp.tex b/Doc/libbasehttp.tex
index 2a4a7d0..7ee55df 100644
--- a/Doc/libbasehttp.tex
+++ b/Doc/libbasehttp.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{BaseHTTPServer}}
+\section{Standard Module \module{BaseHTTPServer}}
 \label{module-BaseHTTPServer}
 \stmodindex{BaseHTTPServer}
 
@@ -23,18 +23,21 @@
 \begin{verbatim}
 def run(server_class=BaseHTTPServer.HTTPServer,
         handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
-  server_address = ('', 8000)
-  httpd = server_class(server_address, handler_class)
-  httpd.serve_forever()
+    server_address = ('', 8000)
+    httpd = server_class(server_address, handler_class)
+    httpd.serve_forever()
 \end{verbatim}
 
-The \class{HTTPServer} class builds on the \class{TCPServer} class by
+\begin{classdesc}{HTTPServer}{server_address, RequestHandlerClass}
+This class builds on the \class{TCPServer} class by
 storing the server address as instance
 variables named \member{server_name} and \member{server_port}. The
 server is accessible by the handler, typically through the handler's
 \member{server} instance variable.
+\end{classdesc}
 
-The module's second class, \class{BaseHTTPRequestHandler}, is used
+\begin{classdesc}{BaseHTTPRequestHandler}{request, client_address, server}
+This class is used
 to handle the HTTP requests that arrive at the server. By itself,
 it cannot respond to any actual HTTP requests; it must be subclassed
 to handle each request method (e.g. GET or POST).
@@ -43,69 +46,69 @@
 
 The handler will parse the request and the headers, then call a
 method specific to the request type. The method name is constructed
-from the request. For example, for the request \samp{SPAM}, the
+from the request. For example, for the request method \samp{SPAM}, the
 \method{do_SPAM()} method will be called with no arguments. All of
-the relevant information is stored into instance variables of the
-handler.
+the relevant information is stored in instance variables of the
+handler.  Subclasses should not need to override or extend the
+\method{__init__()} method.
+\end{classdesc}
 
-\setindexsubitem{(BaseHTTPRequestHandler attribute)}
 
 \class{BaseHTTPRequestHandler} has the following instance variables:
 
-\begin{datadesc}{client_address}
+\begin{memberdesc}{client_address}
 Contains a tuple of the form \code{(\var{host}, \var{port})} referring
 to the client's address.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{command}
+\begin{memberdesc}{command}
 Contains the command (request type). For example, \code{'GET'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{path}
+\begin{memberdesc}{path}
 Contains the request path.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{request_version}
+\begin{memberdesc}{request_version}
 Contains the version string from the request. For example,
 \code{'HTTP/1.0'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{headers}
+\begin{memberdesc}{headers}
 Holds an instance of the class specified by the \member{MessageClass}
 class variable. This instance parses and manages the headers in
 the HTTP request.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{rfile}
+\begin{memberdesc}{rfile}
 Contains an input stream, positioned at the start of the optional
 input data.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{wfile}
+\begin{memberdesc}{wfile}
 Contains the output stream for writing a response back to the client.
 Proper adherance to the HTTP protocol must be used when writing
 to this stream.
-\end{datadesc}
+\end{memberdesc}
 
-\setindexsubitem{(BaseHTTPRequestHandler attribute)}
 
-\code{BaseHTTPRequestHandler} has the following class variables:
+\class{BaseHTTPRequestHandler} has the following class variables:
 
-\begin{datadesc}{server_version}
+\begin{memberdesc}{server_version}
 Specifies the server software version.  You may want to override
 this.
 The format is multiple whitespace-separated strings,
 where each string is of the form name[/version].
 For example, \code{'BaseHTTP/0.2'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{sys_version}
+\begin{memberdesc}{sys_version}
 Contains the Python system version, in a form usable by the
 \member{version_string} method and the \member{server_version} class
 variable. For example, \code{'Python/1.4'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{error_message_format}
+\begin{memberdesc}{error_message_format}
 Specifies a format string for building an error response to the
 client. It uses parenthesized, keyed format specifiers, so the
 format operand must be a dictionary. The \var{code} key should
@@ -115,103 +118,102 @@
 explanation of the error code number. Default \var{message}
 and \var{explain} values can found in the \var{responses}
 class variable.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{protocol_version}
+\begin{memberdesc}{protocol_version}
 This specifies the HTTP protocol version used in responses.
 Typically, this should not be overridden. Defaults to
 \code{'HTTP/1.0'}.
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{MessageClass}
+\begin{memberdesc}{MessageClass}
 Specifies a \class{rfc822.Message}-like class to parse HTTP
 headers. Typically, this is not overridden, and it defaults to
 \class{mimetools.Message}.
 \withsubitem{(in module mimetools)}{\ttindex{Message}}
-\end{datadesc}
+\end{memberdesc}
 
-\begin{datadesc}{responses}
+\begin{memberdesc}{responses}
 This variable contains a mapping of error code integers to two-element
 tuples containing a short and long message. For example,
 \code{\{\var{code}: (\var{shortmessage}, \var{longmessage})\}}. The
 \var{shortmessage} is usually used as the \var{message} key in an
 error response, and \var{longmessage} as the \var{explain} key
 (see the \member{error_message_format} class variable).
-\end{datadesc}
+\end{memberdesc}
 
-\setindexsubitem{(BaseHTTPRequestHandler method)}
 
 A \class{BaseHTTPRequestHandler} instance has the following methods:
 
-\begin{funcdesc}{handle}{}
+\begin{methoddesc}{handle}{}
 Overrides the superclass' \method{handle()} method to provide the
 specific handler behavior. This method will parse and dispatch
-the request to the appropriate \code{do_*()} method.
-\end{funcdesc}
+the request to the appropriate \method{do_*()} method.
+\end{methoddesc}
 
-\begin{funcdesc}{send_error}{code\optional{, message}}
+\begin{methoddesc}{send_error}{code\optional{, message}}
 Sends and logs a complete error reply to the client. The numeric
 \var{code} specifies the HTTP error code, with \var{message} as
 optional, more specific text. A complete set of headers is sent,
 followed by text composed using the \member{error_message_format}
 class variable.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{send_response}{code\optional{, message}}
+\begin{methoddesc}{send_response}{code\optional{, message}}
 Sends a response header and logs the accepted request. The HTTP
 response line is sent, followed by \emph{Server} and \emph{Date}
 headers. The values for these two headers are picked up from the
 \method{version_string()} and \method{date_time_string()} methods,
 respectively.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{send_header}{keyword, value}
+\begin{methoddesc}{send_header}{keyword, value}
 Writes a specific MIME header to the output stream. \var{keyword}
 should specify the header keyword, with \var{value} specifying
 its value.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{end_headers}{}
+\begin{methoddesc}{end_headers}{}
 Sends a blank line, indicating the end of the MIME headers in
 the response.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{log_request}{\optional{code\optional{, size}}}
+\begin{methoddesc}{log_request}{\optional{code\optional{, size}}}
 Logs an accepted (successful) request. \var{code} should specify
 the numeric HTTP code associated with the response. If a size of
 the response is available, then it should be passed as the
 \var{size} parameter.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{log_error}{...}
+\begin{methoddesc}{log_error}{...}
 Logs an error when a request cannot be fulfilled. By default,
 it passes the message to \method{log_message()}, so it takes the
 same arguments (\var{format} and additional values).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{log_message}{format, ...}
+\begin{methoddesc}{log_message}{format, ...}
 Logs an arbitrary message to \code{sys.stderr}. This is typically
 overridden to create custom error logging mechanisms. The
 \var{format} argument is a standard printf-style format string,
 where the additional arguments to \method{log_message()} are applied
 as inputs to the formatting. The client address and current date
 and time are prefixed to every message logged.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{version_string}{}
+\begin{methoddesc}{version_string}{}
 Returns the server software's version string. This is a combination
 of the \member{server_version} and \member{sys_version} class variables.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{date_time_string}{}
+\begin{methoddesc}{date_time_string}{}
 Returns the current date and time, formatted for a message header.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{log_data_time_string}{}
+\begin{methoddesc}{log_data_time_string}{}
 Returns the current date and time, formatted for logging.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{address_string}{}
+\begin{methoddesc}{address_string}{}
 Returns the client address, formatted for logging. A name lookup
 is performed on the client's IP address.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/libbinhex.tex b/Doc/libbinhex.tex
index 560b401..6a7d3c6 100644
--- a/Doc/libbinhex.tex
+++ b/Doc/libbinhex.tex
@@ -1,15 +1,13 @@
-\section{Standard Module \sectcode{binhex}}
+\section{Standard Module \module{binhex}}
 \label{module-binhex}
 \stmodindex{binhex}
 
 This module encodes and decodes files in binhex4 format, a format
-allowing representation of Macintosh files in ASCII. On the macintosh,
+allowing representation of Macintosh files in \ASCII{}. On the Macintosh,
 both forks of a file and the finder information are encoded (or
 decoded), on other platforms only the data fork is handled.
 
-The \code{binhex} module defines the following functions:
-
-\setindexsubitem{(in module binhex)}
+The \module{binhex} module defines the following functions:
 
 \begin{funcdesc}{binhex}{input, output}
 Convert a binary file with filename \var{input} to binhex file
@@ -31,7 +29,8 @@
 decoder, see the source for details.
 
 If you code or decode textfiles on non-Macintosh platforms they will
-still use the macintosh newline convention (carriage-return as end of
+still use the Macintosh newline convention (carriage-return as end of
 line).
 
-As of this writing, \var{hexbin} appears to not work in all cases.
+As of this writing, \function{hexbin()} appears to not work in all
+cases.
diff --git a/Doc/libcd.tex b/Doc/libcd.tex
index e2571cc..fc32da5 100644
--- a/Doc/libcd.tex
+++ b/Doc/libcd.tex
@@ -1,4 +1,4 @@
-\section{Built-in Module \sectcode{cd}}
+\section{Built-in Module \module{cd}}
 \label{module-cd}
 \bimodindex{cd}
 
@@ -113,32 +113,34 @@
 objects (see below).
 \end{datadesc}
 
+
+\subsection{Player Objects}
+\label{player-objects}
+
 Player objects (returned by \function{open()}) have the following
 methods:
 
-\setindexsubitem{(CD player method)}
-
-\begin{funcdesc}{allowremoval}{}
+\begin{methoddesc}[CD player]{allowremoval}{}
 Unlocks the eject button on the CD-ROM drive permitting the user to
 eject the caddy if desired.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{bestreadsize}{}
+\begin{methoddesc}[CD player]{bestreadsize}{}
 Returns the best value to use for the \var{num_frames} parameter of
 the \method{readda()} method.  Best is defined as the value that
 permits a continuous flow of data from the CD-ROM drive.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}[CD player]{close}{}
 Frees the resources associated with the player object.  After calling
 \method{close()}, the methods of the object should no longer be used.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{eject}{}
+\begin{methoddesc}[CD player]{eject}{}
 Ejects the caddy from the CD-ROM drive.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getstatus}{}
+\begin{methoddesc}[CD player]{getstatus}{}
 Returns information pertaining to the current state of the CD-ROM
 drive.  The returned information is a tuple with the following values:
 \var{state}, \var{track}, \var{rtime}, \var{atime}, \var{ttime},
@@ -150,24 +152,24 @@
 The value of \var{state} is one of the following: \constant{ERROR},
 \constant{NODISC}, \constant{READY}, \constant{PLAYING},
 \constant{PAUSED}, \constant{STILL}, or \constant{CDROM}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{gettrackinfo}{track}
+\begin{methoddesc}[CD player]{gettrackinfo}{track}
 Returns information about the specified track.  The returned
 information is a tuple consisting of two elements, the start time of
 the track and the duration of the track.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{msftoblock}{min, sec, frame}
+\begin{methoddesc}[CD player]{msftoblock}{min, sec, frame}
 Converts a minutes, seconds, frames triple representing a time in
 absolute time code into the corresponding logical block number for the
 given CD-ROM drive.  You should use \function{msftoframe()} rather than
 \method{msftoblock()} for comparing times.  The logical block number
 differs from the frame number by an offset required by certain CD-ROM
 drives.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{play}{start, play}
+\begin{methoddesc}[CD player]{play}{start, play}
 Starts playback of an audio CD in the CD-ROM drive at the specified
 track.  The audio output appears on the CD-ROM drive's headphone and
 audio jacks (if fitted).  Play stops at the end of the disc.
@@ -175,71 +177,73 @@
 CD; if \var{play} is 0, the CD will be set to an initial paused
 state.  The method \method{togglepause()} can then be used to commence
 play.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{playabs}{minutes, seconds, frames, play}
+\begin{methoddesc}[CD player]{playabs}{minutes, seconds, frames, play}
 Like \method{play()}, except that the start is given in minutes,
 seconds, and frames instead of a track number.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{playtrack}{start, play}
+\begin{methoddesc}[CD player]{playtrack}{start, play}
 Like \method{play()}, except that playing stops at the end of the
 track.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{playtrackabs}{track, minutes, seconds, frames, play}
+\begin{methoddesc}[CD player]{playtrackabs}{track, minutes, seconds, frames, play}
 Like \method{play()}, except that playing begins at the spcified
 absolute time and ends at the end of the specified track.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{preventremoval}{}
+\begin{methoddesc}[CD player]{preventremoval}{}
 Locks the eject button on the CD-ROM drive thus preventing the user
 from arbitrarily ejecting the caddy.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{readda}{num_frames}
+\begin{methoddesc}[CD player]{readda}{num_frames}
 Reads the specified number of frames from an audio CD mounted in the
 CD-ROM drive.  The return value is a string representing the audio
 frames.  This string can be passed unaltered to the
 \method{parseframe()} method of the parser object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{seek}{minutes, seconds, frames}
+\begin{methoddesc}[CD player]{seek}{minutes, seconds, frames}
 Sets the pointer that indicates the starting point of the next read of
 digital audio data from a CD-ROM.  The pointer is set to an absolute
 time code location specified in \var{minutes}, \var{seconds}, and
 \var{frames}.  The return value is the logical block number to which
 the pointer has been set.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{seekblock}{block}
+\begin{methoddesc}[CD player]{seekblock}{block}
 Sets the pointer that indicates the starting point of the next read of
 digital audio data from a CD-ROM.  The pointer is set to the specified
 logical block number.  The return value is the logical block number to
 which the pointer has been set.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{seektrack}{track}
+\begin{methoddesc}[CD player]{seektrack}{track}
 Sets the pointer that indicates the starting point of the next read of
 digital audio data from a CD-ROM.  The pointer is set to the specified
 track.  The return value is the logical block number to which the
 pointer has been set.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{stop}{}
+\begin{methoddesc}[CD player]{stop}{}
 Stops the current playing operation.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{togglepause}{}
+\begin{methoddesc}[CD player]{togglepause}{}
 Pauses the CD if it is playing, and makes it play if it is paused.
-\end{funcdesc}
+\end{methoddesc}
+
+
+\subsection{Parser Objects}
+\label{cd-parser-objects}
 
 Parser objects (returned by \function{createparser()}) have the
 following methods:
 
-\setindexsubitem{(CD parser method)}
-
-\begin{funcdesc}{addcallback}{type, func, arg}
+\begin{methoddesc}[CD parser]{addcallback}{type, func, arg}
 Adds a callback for the parser.  The parser has callbacks for eight
 different types of data in the digital audio data stream.  Constants
 for these types are defined at the \module{cd} module level (see above).
@@ -268,15 +272,15 @@
   \lineii{control}{Integer giving the control bits from the CD
 subcode data}
 \end{tableii}
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{deleteparser}{}
+\begin{methoddesc}[CD parser]{deleteparser}{}
 Deletes the parser and frees the memory it was using.  The object
 should not be used after this call.  This call is done automatically
 when the last reference to the object is removed.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{parseframe}{frame}
+\begin{methoddesc}[CD parser]{parseframe}{frame}
 Parses one or more frames of digital audio data from a CD such as
 returned by \method{readda()}.  It determines which subcodes are
 present in the data.  If these subcodes have changed since the last
@@ -284,14 +288,14 @@
 appropriate type passing to it the subcode data found in the frame.
 Unlike the \C{} function, more than one frame of digital audio data
 can be passed to this method.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{removecallback}{type}
+\begin{methoddesc}[CD parser]{removecallback}{type}
 Removes the callback for the given \var{type}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{resetparser}{}
+\begin{methoddesc}[CD parser]{resetparser}{}
 Resets the fields of the parser used for tracking subcodes to an
 initial state.  \method{resetparser()} should be called after the disc
 has been changed.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/libfl.tex b/Doc/libfl.tex
index 4716e7b..a0e0076 100644
--- a/Doc/libfl.tex
+++ b/Doc/libfl.tex
@@ -1,4 +1,4 @@
-\section{Built-in Module \sectcode{fl}}
+\section{Built-in Module \module{fl}}
 \label{module-fl}
 \bimodindex{fl}
 
@@ -37,7 +37,7 @@
 function \cfunction{foreground()} and to the FORMS routine
 \cfunction{fl_init()}.
 
-\subsection{Functions Defined in Module \sectcode{fl}}
+\subsection{Functions Defined in Module \module{fl}}
 \nodename{FL Functions}
 
 Module \module{fl} defines the following functions.  For more
@@ -83,7 +83,8 @@
 It returns \code{1} if the user pressed YES, \code{0} if NO.
 \end{funcdesc}
 
-\begin{funcdesc}{show_choice}{str1, str2, str3, but1\optional{, but2, but3}}
+\begin{funcdesc}{show_choice}{str1, str2, str3, but1\optional{,
+                              but2\optional{, but3}}}
 Show a dialog box with a three-line message and up to three buttons.
 It returns the number of the button clicked by the user
 (\code{1}, \code{2} or \code{3}).
@@ -136,116 +137,117 @@
 \end{funcdesc}
 
 \subsection{Form Objects}
+\label{form-objects}
 
-Form objects (returned by \function{fl.make_form()} above) have the
+Form objects (returned by \function{make_form()} above) have the
 following methods.  Each method corresponds to a \C{} function whose
 name is prefixed with \samp{fl_}; and whose first argument is a form
 pointer; please refer to the official FORMS documentation for
 descriptions.
 
-All the \code{add_*()} functions return a Python object
-representing the FORMS object.  Methods of FORMS objects are described
-below.  Most kinds of FORMS object also have some methods specific to
-that kind; these methods are listed here.
+All the \method{add_*()} methods return a Python object representing
+the FORMS object.  Methods of FORMS objects are described below.  Most
+kinds of FORMS object also have some methods specific to that kind;
+these methods are listed here.
 
 \begin{flushleft}
-\setindexsubitem{(form method)}
-\begin{funcdesc}{show_form}{placement, bordertype, name}
+
+\begin{methoddesc}[form]{show_form}{placement, bordertype, name}
   Show the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{hide_form}{}
+\begin{methoddesc}[form]{hide_form}{}
   Hide the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{redraw_form}{}
+\begin{methoddesc}[form]{redraw_form}{}
   Redraw the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{set_form_position}{x, y}
+\begin{methoddesc}[form]{set_form_position}{x, y}
 Set the form's position.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{freeze_form}{}
+\begin{methoddesc}[form]{freeze_form}{}
 Freeze the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unfreeze_form}{}
+\begin{methoddesc}[form]{unfreeze_form}{}
   Unfreeze the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{activate_form}{}
+\begin{methoddesc}[form]{activate_form}{}
   Activate the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{deactivate_form}{}
+\begin{methoddesc}[form]{deactivate_form}{}
   Deactivate the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{bgn_group}{}
+\begin{methoddesc}[form]{bgn_group}{}
   Begin a new group of objects; return a group object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{end_group}{}
+\begin{methoddesc}[form]{end_group}{}
   End the current group of objects.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{find_first}{}
+\begin{methoddesc}[form]{find_first}{}
   Find the first object in the form.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{find_last}{}
+\begin{methoddesc}[form]{find_last}{}
   Find the last object in the form.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_box}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_box}{type, x, y, w, h, name}
 Add a box object to the form.
 No extra methods.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_text}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_text}{type, x, y, w, h, name}
 Add a text object to the form.
 No extra methods.
-\end{funcdesc}
+\end{methoddesc}
 
-%\begin{funcdesc}{add_bitmap}{type, x, y, w, h, name}
+%\begin{methoddesc}[form]{add_bitmap}{type, x, y, w, h, name}
 %Add a bitmap object to the form.
-%\end{funcdesc}
+%\end{methoddesc}
 
-\begin{funcdesc}{add_clock}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_clock}{type, x, y, w, h, name}
 Add a clock object to the form. \\
 Method:
 \method{get_clock()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_button}{type, x, y, w, h,  name}
+\begin{methoddesc}[form]{add_button}{type, x, y, w, h,  name}
 Add a button object to the form. \\
 Methods:
 \method{get_button()},
 \method{set_button()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_lightbutton}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_lightbutton}{type, x, y, w, h, name}
 Add a lightbutton object to the form. \\
 Methods:
 \method{get_button()},
 \method{set_button()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_roundbutton}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_roundbutton}{type, x, y, w, h, name}
 Add a roundbutton object to the form. \\
 Methods:
 \method{get_button()},
 \method{set_button()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_slider}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_slider}{type, x, y, w, h, name}
 Add a slider object to the form. \\
 Methods:
 \method{set_slider_value()},
@@ -256,9 +258,9 @@
 \method{set_slider_size()},
 \method{set_slider_precision()},
 \method{set_slider_step()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_valslider}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_valslider}{type, x, y, w, h, name}
 Add a valslider object to the form. \\
 Methods:
 \method{set_slider_value()},
@@ -269,18 +271,18 @@
 \method{set_slider_size()},
 \method{set_slider_precision()},
 \method{set_slider_step()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_dial}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_dial}{type, x, y, w, h, name}
 Add a dial object to the form. \\
 Methods:
 \method{set_dial_value()},
 \method{get_dial_value()},
 \method{set_dial_bounds()},
 \method{get_dial_bounds()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_positioner}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_positioner}{type, x, y, w, h, name}
 Add a positioner object to the form. \\
 Methods:
 \method{set_positioner_xvalue()},
@@ -291,9 +293,9 @@
 \method{get_positioner_yvalue()},
 \method{get_positioner_xbounds()},
 \method{get_positioner_ybounds()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_counter}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_counter}{type, x, y, w, h, name}
 Add a counter object to the form. \\
 Methods:
 \method{set_counter_value()},
@@ -302,30 +304,30 @@
 \method{set_counter_step()},
 \method{set_counter_precision()},
 \method{set_counter_return()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_input}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_input}{type, x, y, w, h, name}
 Add a input object to the form. \\
 Methods:
 \method{set_input()},
 \method{get_input()},
 \method{set_input_color()},
 \method{set_input_return()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_menu}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_menu}{type, x, y, w, h, name}
 Add a menu object to the form. \\
 Methods:
 \method{set_menu()},
 \method{get_menu()},
 \method{addto_menu()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_choice}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_choice}{type, x, y, w, h, name}
 Add a choice object to the form. \\
 Methods:
 \method{set_choice()},
@@ -337,9 +339,9 @@
 \method{get_choice_text()},
 \method{set_choice_fontsize()},
 \method{set_choice_fontstyle()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{add_browser}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_browser}{type, x, y, w, h, name}
 Add a browser object to the form. \\
 Methods:
 \method{set_browser_topline()},
@@ -360,16 +362,16 @@
 \method{set_browser_fontsize()},
 \method{set_browser_fontstyle()},
 \method{set_browser_specialkey()}.
-\end{funcdesc}
+\end{methoddesc}
 
 %---
 
-\begin{funcdesc}{add_timer}{type, x, y, w, h, name}
+\begin{methoddesc}[form]{add_timer}{type, x, y, w, h, name}
 Add a timer object to the form. \\
 Methods:
 \method{set_timer()},
 \method{get_timer()}.
-\end{funcdesc}
+\end{methoddesc}
 \end{flushleft}
 
 Form objects have the following data attributes; see the FORMS
@@ -388,49 +390,49 @@
 \end{tableiii}
 
 \subsection{FORMS Objects}
+\label{forms-objects}
 
 Besides methods specific to particular kinds of FORMS objects, all
 FORMS objects also have the following methods:
 
-\setindexsubitem{(FORMS method)}
-\begin{funcdesc}{set_call_back}{function, argument}
+\begin{methoddesc}[FORMS object]{set_call_back}{function, argument}
 Set the object's callback function and argument.  When the object
 needs interaction, the callback function will be called with two
 arguments: the object, and the callback argument.  (FORMS objects
 without a callback function are returned by \function{fl.do_forms()}
 or \function{fl.check_forms()} when they need interaction.)  Call this
 method without arguments to remove the callback function.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{delete_object}{}
+\begin{methoddesc}[FORMS object]{delete_object}{}
   Delete the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{show_object}{}
+\begin{methoddesc}[FORMS object]{show_object}{}
   Show the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{hide_object}{}
+\begin{methoddesc}[FORMS object]{hide_object}{}
   Hide the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{redraw_object}{}
+\begin{methoddesc}[FORMS object]{redraw_object}{}
   Redraw the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{freeze_object}{}
+\begin{methoddesc}[FORMS object]{freeze_object}{}
   Freeze the object.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unfreeze_object}{}
+\begin{methoddesc}[FORMS object]{unfreeze_object}{}
   Unfreeze the object.
-\end{funcdesc}
+\end{methoddesc}
 
-%\begin{funcdesc}{handle_object}{} XXX
-%\end{funcdesc}
+%\begin{methoddesc}[FORMS object]{handle_object}{} XXX
+%\end{methoddesc}
 
-%\begin{funcdesc}{handle_object_direct}{} XXX
-%\end{funcdesc}
+%\begin{methoddesc}[FORMS object]{handle_object_direct}{} XXX
+%\end{methoddesc}
 
 FORMS objects have these data attributes; see the FORMS documentation:
 
@@ -460,7 +462,7 @@
   \lineiii{automatic}{int (read-only)}{(see FORMS docs)}
 \end{tableiii}
 
-\section{Standard Module \sectcode{FL}}
+\section{Standard Module \module{FL}}
 \label{module-FLuppercase}
 \stmodindex{FL}
 
@@ -475,7 +477,7 @@
 from FL import *
 \end{verbatim}
 
-\section{Standard Module \sectcode{flp}}
+\section{Standard Module \module{flp}}
 \label{module-flp}
 \stmodindex{flp}
 
diff --git a/Doc/libftplib.tex b/Doc/libftplib.tex
index cda8b66..7f0aeda 100644
--- a/Doc/libftplib.tex
+++ b/Doc/libftplib.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{ftplib}}
+\section{Standard Module \module{ftplib}}
 \label{module-ftplib}
 \stmodindex{ftplib}
 \indexii{FTP}{protocol}
@@ -30,7 +30,8 @@
 
 The module defines the following items:
 
-\begin{classdesc}{FTP}{\optional{host\optional{, user\optional{, passwd\optional{, acct}}}}}
+\begin{classdesc}{FTP}{\optional{host\optional{, user\optional{,
+                       passwd\optional{, acct}}}}}
 Return a new instance of the \code{FTP} class.  When
 \var{host} is given, the method call \code{connect(\var{host})} is
 made.  When \var{user} is given, additionally the method call
@@ -63,37 +64,37 @@
 not begin with a digit in the range 1--5.
 \end{excdesc}
 
+
 \subsection{FTP Objects}
+\label{ftp-objects}
 
 \class{FTP} instances have the following methods:
 
-\setindexsubitem{(FTP method)}
-
-\begin{funcdesc}{set_debuglevel}{level}
+\begin{methoddesc}{set_debuglevel}{level}
 Set the instance's debugging level.  This controls the amount of
 debugging output printed.  The default, \code{0}, produces no
 debugging output.  A value of \code{1} produces a moderate amount of
 debugging output, generally a single line per request.  A value of
 \code{2} or higher produces the maximum amount of debugging output,
 logging each line sent and received on the control connection.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{connect}{host\optional{, port}}
+\begin{methoddesc}{connect}{host\optional{, port}}
 Connect to the given host and port.  The default port number is \code{21}, as
 specified by the FTP protocol specification.  It is rarely needed to
 specify a different port number.  This function should be called only
 once for each instance; it should not be called at all if a host was
 given when the instance was created.  All other methods can only be
 used after a connection has been made.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getwelcome}{}
+\begin{methoddesc}{getwelcome}{}
 Return the welcome message sent by the server in reply to the initial
 connection.  (This message sometimes contains disclaimers or help
 information that may be relevant to the user.)
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{login}{\optional{user\optional{, passwd\optional{, acct}}}}
+\begin{methoddesc}{login}{\optional{user\optional{, passwd\optional{, acct}}}}
 Log in as the given \var{user}.  The \var{passwd} and \var{acct}
 parameters are optional and default to the empty string.  If no
 \var{user} is specified, it defaults to \code{'anonymous'}.  If
@@ -106,25 +107,25 @@
 should not be called at all if a host and user were given when the
 instance was created.  Most FTP commands are only allowed after the
 client has logged in.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{abort}{}
+\begin{methoddesc}{abort}{}
 Abort a file transfer that is in progress.  Using this does not always
 work, but it's worth a try.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{sendcmd}{command}
+\begin{methoddesc}{sendcmd}{command}
 Send a simple command string to the server and return the response
 string.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{voidcmd}{command}
+\begin{methoddesc}{voidcmd}{command}
 Send a simple command string to the server and handle the response.
 Return nothing if a response code in the range 200--299 is received.
 Raise an exception otherwise.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{retrbinary}{command, callback\optional{, maxblocksize}}
+\begin{methoddesc}{retrbinary}{command, callback\optional{, maxblocksize}}
 Retrieve a file in binary transfer mode.  \var{command} should be an
 appropriate \samp{RETR} command, i.e.\ \code{'RETR \var{filename}'}.
 The \var{callback} function is called for each block of data received,
@@ -133,73 +134,73 @@
 read on the low-level socket object created to do the actual transfer
 (which will also be the largest size of the data blocks passed to
 \var{callback}).  A reasonable default is chosen.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{retrlines}{command\optional{, callback}}
+\begin{methoddesc}{retrlines}{command\optional{, callback}}
 Retrieve a file or directory listing in \ASCII{} transfer mode.
 \var{command} should be an appropriate \samp{RETR} command (see
 \method{retrbinary()} or a \samp{LIST} command (usually just the string
 \code{'LIST'}).  The \var{callback} function is called for each line,
 with the trailing CRLF stripped.  The default \var{callback} prints
 the line to \code{sys.stdout}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{storbinary}{command, file, blocksize}
+\begin{methoddesc}{storbinary}{command, file, blocksize}
 Store a file in binary transfer mode.  \var{command} should be an
 appropriate \samp{STOR} command, i.e.\ \code{"STOR \var{filename}"}.
 \var{file} is an open file object which is read until \EOF{} using its
 \method{read()} method in blocks of size \var{blocksize} to provide the
 data to be stored.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{storlines}{command, file}
+\begin{methoddesc}{storlines}{command, file}
 Store a file in \ASCII{} transfer mode.  \var{command} should be an
 appropriate \samp{STOR} command (see \method{storbinary()}).  Lines are
 read until \EOF{} from the open file object \var{file} using its
 \method{readline()} method to privide the data to be stored.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{nlst}{argument\optional{, \ldots}}
+\begin{methoddesc}{nlst}{argument\optional{, \ldots}}
 Return a list of files as returned by the \samp{NLST} command.  The
 optional \var{argument} is a directory to list (default is the current
 server directory).  Multiple arguments can be used to pass
 non-standard options to the \samp{NLST} command.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{dir}{argument\optional{, \ldots}}
+\begin{methoddesc}{dir}{argument\optional{, \ldots}}
 Return a directory listing as returned by the \samp{LIST} command, as
 a list of lines.  The optional \var{argument} is a directory to list
 (default is the current server directory).  Multiple arguments can be
 used to pass non-standard options to the \samp{LIST} command.  If the
 last argument is a function, it is used as a \var{callback} function
 as for \method{retrlines()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{rename}{fromname, toname}
+\begin{methoddesc}{rename}{fromname, toname}
 Rename file \var{fromname} on the server to \var{toname}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{cwd}{pathname}
+\begin{methoddesc}{cwd}{pathname}
 Set the current directory on the server.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{mkd}{pathname}
+\begin{methoddesc}{mkd}{pathname}
 Create a new directory on the server.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{pwd}{}
+\begin{methoddesc}{pwd}{}
 Return the pathname of the current directory on the server.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{quit}{}
+\begin{methoddesc}{quit}{}
 Send a \samp{QUIT} command to the server and close the connection.
 This is the ``polite'' way to close a connection, but it may raise an
 exception of the server reponds with an error to the \samp{QUIT}
 command.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}{close}{}
 Close the connection unilaterally.  This should not be applied to an
 already closed connection (e.g.\ after a successful call to
 \method{quit()}.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/libhttplib.tex b/Doc/libhttplib.tex
index d578ae2..55ec9b98 100644
--- a/Doc/libhttplib.tex
+++ b/Doc/libhttplib.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{httplib}}
+\section{Standard Module \module{httplib}}
 \label{module-httplib}
 \stmodindex{httplib}
 \indexii{HTTP}{protocol}
@@ -9,7 +9,10 @@
 \module{urllib}\refstmodindex{urllib} uses it to handle URLs that use
 HTTP.
 
-The module defines one class, \class{HTTP}.  An \class{HTTP} instance
+The module defines one class, \class{HTTP}:
+
+\begin{classdesc}{HTTP}{\optional{host\optional{, port}}}
+An \class{HTTP} instance
 represents one transaction with an HTTP server.  It should be
 instantiated passing it a host and optional port number.  If no port
 number is passed, the port is extracted from the host string if it has
@@ -45,50 +48,50 @@
 file object that it returns.
 
 \end{enumerate}
+\end{classdesc}
 
 \subsection{HTTP Objects}
 
 \class{HTTP} instances have the following methods:
 
-\setindexsubitem{(HTTP method)}
 
-\begin{funcdesc}{set_debuglevel}{level}
+\begin{methoddesc}{set_debuglevel}{level}
 Set the debugging level (the amount of debugging output printed).
 The default debug level is \code{0}, meaning no debugging output is
 printed.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{connect}{host\optional{, port}}
+\begin{methoddesc}{connect}{host\optional{, port}}
 Connect to the server given by \var{host} and \var{port}.  See the
 intro for the default port.  This should be called directly only if
 the instance was instantiated without passing a host.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{send}{data}
+\begin{methoddesc}{send}{data}
 Send data to the server.  This should be used directly only after the
 \method{endheaders()} method has been called and before
 \method{getreply()} has been called.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{putrequest}{request, selector}
+\begin{methoddesc}{putrequest}{request, selector}
 This should be the first call after the connection to the server has
 been made.  It sends a line to the server consisting of the
 \var{request} string, the \var{selector} string, and the HTTP version
 (\code{HTTP/1.0}).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{putheader}{header, argument\optional{, ...}}
+\begin{methoddesc}{putheader}{header, argument\optional{, ...}}
 Send an \rfc{822} style header to the server.  It sends a line to the
 server consisting of the header, a colon and a space, and the first
 argument.  If more arguments are given, continuation lines are sent,
 each consisting of a tab and an argument.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{endheaders}{}
+\begin{methoddesc}{endheaders}{}
 Send a blank line to the server, signalling the end of the headers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getreply}{}
+\begin{methoddesc}{getreply}{}
 Complete the request by shutting down the sending end of the socket,
 read the reply from the server, and return a triple
 \code{(\var{replycode}, \var{message}, \var{headers})}.  Here,
@@ -98,13 +101,13 @@
 an instance of the class \class{mimetools.Message} containing the
 headers received from the server.  See the description of the
 \module{mimetools}\refstmodindex{mimetools} module.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getfile}{}
+\begin{methoddesc}{getfile}{}
 Return a file object from which the data returned by the server can be
 read, using the \method{read()}, \method{readline()} or
 \method{readlines()} methods.
-\end{funcdesc}
+\end{methoddesc}
 
 \subsection{Example}
 \nodename{HTTP Example}
@@ -123,5 +126,4 @@
 >>> f = h.getfile()
 >>> data = f.read() # Get the raw HTML
 >>> f.close()
->>> 
 \end{verbatim}
diff --git a/Doc/libimageop.tex b/Doc/libimageop.tex
index 4a93487..c21be48 100644
--- a/Doc/libimageop.tex
+++ b/Doc/libimageop.tex
@@ -1,16 +1,14 @@
-\section{Built-in Module \sectcode{imageop}}
+\section{Built-in Module \module{imageop}}
 \label{module-imageop}
 \bimodindex{imageop}
 
-The \code{imageop} module contains some useful operations on images.
-It operates on images consisting of 8 or 32 bit pixels
-stored in Python strings.  This is the same format as used
-by \code{gl.lrectwrite} and the \code{imgfile} module.
+The \module{imageop} module contains some useful operations on images.
+It operates on images consisting of 8 or 32 bit pixels stored in
+Python strings.  This is the same format as used by
+\function{gl.lrectwrite()} and the \module{imgfile} module.
 
 The module defines the following variables and functions:
 
-\setindexsubitem{(in module imageop)}
-
 \begin{excdesc}{error}
 This exception is raised on all errors, such as unknown number of bits
 per pixel, etc.
@@ -21,11 +19,11 @@
 Return the selected part of \var{image}, which should by
 \var{width} by \var{height} in size and consist of pixels of
 \var{psize} bytes. \var{x0}, \var{y0}, \var{x1} and \var{y1} are like
-the \code{lrectread} parameters, i.e.\ the boundary is included in the
-new image.  The new boundaries need not be inside the picture.  Pixels
-that fall outside the old image will have their value set to zero.  If
-\var{x0} is bigger than \var{x1} the new image is mirrored.  The same
-holds for the y coordinates.
+the \function{gl.lrectread()} parameters, i.e.\ the boundary is
+included in the new image.  The new boundaries need not be inside the
+picture.  Pixels that fall outside the old image will have their value
+set to zero.  If \var{x0} is bigger than \var{x1} the new image is
+mirrored.  The same holds for the y coordinates.
 \end{funcdesc}
 
 \begin{funcdesc}{scale}{image, psize, width, height, newwidth, newheight}
@@ -46,7 +44,7 @@
 \begin{funcdesc}{grey2mono}{image, width, height, threshold}
 Convert a 8-bit deep greyscale image to a 1-bit deep image by
 tresholding all the pixels.  The resulting image is tightly packed and
-is probably only useful as an argument to \code{mono2grey}.
+is probably only useful as an argument to \function{mono2grey()}.
 \end{funcdesc}
 
 \begin{funcdesc}{dither2mono}{image, width, height}
@@ -74,8 +72,8 @@
 
 \begin{funcdesc}{dither2grey2}{image, width, height}
 Convert an 8-bit greyscale image to a 2-bit greyscale image with
-dithering.  As for \code{dither2mono}, the dithering algorithm is
-currently very simple.
+dithering.  As for \function{dither2mono()}, the dithering algorithm
+is currently very simple.
 \end{funcdesc}
 
 \begin{funcdesc}{grey42grey}{image, width, height}
diff --git a/Doc/libjpeg.tex b/Doc/libjpeg.tex
index 745fe32..201a142 100644
--- a/Doc/libjpeg.tex
+++ b/Doc/libjpeg.tex
@@ -1,10 +1,12 @@
-\section{Built-in Module \sectcode{jpeg}}
+\section{Built-in Module \module{jpeg}}
 \label{module-jpeg}
 \bimodindex{jpeg}
 
 The module \module{jpeg} provides access to the jpeg compressor and
-decompressor written by the Independent JPEG Group. JPEG is a (draft?)
-standard for compressing pictures.  For details on jpeg or the
+decompressor written by the Independent JPEG Group%
+\index{Independent JPEG Group}%
+. JPEG is a (draft?)
+standard for compressing pictures.  For details on JPEG or the
 Independent JPEG Group software refer to the JPEG standard or the
 documentation provided with the software.
 
@@ -18,19 +20,19 @@
 \begin{funcdesc}{compress}{data, w, h, b}
 Treat data as a pixmap of width \var{w} and height \var{h}, with
 \var{b} bytes per pixel.  The data is in SGI GL order, so the first
-pixel is in the lower-left corner. This means that \code{gl.lrectread}
+pixel is in the lower-left corner. This means that \function{gl.lrectread()}
 return data can immediately be passed to \function{compress()}.
 Currently only 1 byte and 4 byte pixels are allowed, the former being
 treated as greyscale and the latter as RGB color.
 \function{compress()} returns a string that contains the compressed
-picture, in JFIF format.
+picture, in JFIF\index{JFIF} format.
 \end{funcdesc}
 
 \begin{funcdesc}{decompress}{data}
-Data is a string containing a picture in JFIF format. It returns a
-tuple \code{(\var{data}, \var{width}, \var{height},
+Data is a string containing a picture in JFIF\index{JFIF} format. It
+returns a tuple \code{(\var{data}, \var{width}, \var{height},
 \var{bytesperpixel})}.  Again, the data is suitable to pass to
-\code{gl.lrectwrite}.
+\function{gl.lrectwrite()}.
 \end{funcdesc}
 
 \begin{funcdesc}{setoption}{name, value}
diff --git a/Doc/libmimetools.tex b/Doc/libmimetools.tex
index 0d4e40f..54d1fe0 100644
--- a/Doc/libmimetools.tex
+++ b/Doc/libmimetools.tex
@@ -1,8 +1,7 @@
-\section{Standard Module \sectcode{mimetools}}
+\section{Standard Module \module{mimetools}}
 \label{module-mimetools}
 \stmodindex{mimetools}
 
-\setindexsubitem{(in module mimetools)}
 
 This module defines a subclass of the \class{rfc822.Message} class and
 a number of utility functions that are useful for the manipulation for
@@ -53,9 +52,7 @@
 The \class{Message} class defines the following methods in
 addition to the \class{rfc822.Message} methods:
 
-\setindexsubitem{(mimetool.Message method)}
-
-\begin{funcdesc}{getplist}{}
+\begin{methoddesc}{getplist}{}
 Return the parameter list of the \code{content-type} header.  This is
 a list if strings.  For parameters of the form
 \samp{\var{key}=\var{value}}, \var{key} is converted to lower case but
@@ -63,36 +60,36 @@
 \samp{Content-type: text/html; spam=1; Spam=2; Spam} then
 \method{getplist()} will return the Python list \code{['spam=1',
 'spam=2', 'Spam']}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getparam}{name}
+\begin{methoddesc}{getparam}{name}
 Return the \var{value} of the first parameter (as returned by
 \method{getplist()} of the form \samp{\var{name}=\var{value}} for the
 given \var{name}.  If \var{value} is surrounded by quotes of the form
 `\code{<}...\code{>}' or `\code{"}...\code{"}', these are removed.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getencoding}{}
+\begin{methoddesc}{getencoding}{}
 Return the encoding specified in the \code{content-transfer-encoding}
 message header.  If no such header exists, return \code{'7bit'}.  The
 encoding is converted to lower case.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{gettype}{}
+\begin{methoddesc}{gettype}{}
 Return the message type (of the form \samp{\var{type}/\var{subtype}})
 as specified in the \code{content-type} header.  If no such header
 exists, return \code{'text/plain'}.  The type is converted to lower
 case.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getmaintype}{}
+\begin{methoddesc}{getmaintype}{}
 Return the main type as specified in the \code{content-type} header.
 If no such header exists, return \code{'text'}.  The main type is
 converted to lower case.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getsubtype}{}
+\begin{methoddesc}{getsubtype}{}
 Return the subtype as specified in the \code{content-type} header.  If
 no such header exists, return \code{'plain'}.  The subtype is
 converted to lower case.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/libmpz.tex b/Doc/libmpz.tex
index 1c4b19f..707a3a8 100644
--- a/Doc/libmpz.tex
+++ b/Doc/libmpz.tex
@@ -1,38 +1,48 @@
-\section{Built-in Module \sectcode{mpz}}
+\section{Built-in Module \module{mpz}}
 \label{module-mpz}
 \bimodindex{mpz}
 
 This is an optional module.  It is only available when Python is
 configured to include it, which requires that the GNU MP software is
 installed.
+\index{MP, GNU library}
+\index{arbitrary precision integers}
+\index{integer!arbitrary precision}
 
 This module implements the interface to part of the GNU MP library,
 which defines arbitrary precision integer and rational number
 arithmetic routines.  Only the interfaces to the \emph{integer}
-(\samp{mpz_{\rm \ldots}}) routines are provided. If not stated
+(\function{mpz_*()}) routines are provided. If not stated
 otherwise, the description in the GNU MP documentation can be applied.
 
 In general, \dfn{mpz}-numbers can be used just like other standard
 Python numbers, e.g.\ you can use the built-in operators like \code{+},
 \code{*}, etc., as well as the standard built-in functions like
-\code{abs}, \code{int}, \ldots, \code{divmod}, \code{pow}.
-\strong{Please note:} the \emph{bitwise-xor} operation has been implemented as
-a bunch of \emph{and}s, \emph{invert}s and \emph{or}s, because the library
-lacks an \code{mpz_xor} function, and I didn't need one.
+\function{abs()}, \function{int()}, \ldots, \function{divmod()},
+\function{pow()}.  \strong{Please note:} the \emph{bitwise-xor}
+operation has been implemented as a bunch of \emph{and}s,
+\emph{invert}s and \emph{or}s, because the library lacks an
+\cfunction{mpz_xor()} function, and I didn't need one.
 
-You create an mpz-number by calling the function called \code{mpz} (see
+You create an mpz-number by calling the function \function{mpz()} (see
 below for an exact description). An mpz-number is printed like this:
 \code{mpz(\var{value})}.
 
-\setindexsubitem{(in module mpz)}
+
 \begin{funcdesc}{mpz}{value}
   Create a new mpz-number. \var{value} can be an integer, a long,
   another mpz-number, or even a string. If it is a string, it is
   interpreted as an array of radix-256 digits, least significant digit
-  first, resulting in a positive number. See also the \code{binary}
+  first, resulting in a positive number. See also the \method{binary()}
   method, described below.
 \end{funcdesc}
 
+\begin{datadesc}{MPZType}
+  The type of the objects returned by \function{mpz()} and most other
+  functions in this module.
+\end{datadesc}
+
+
 A number of \emph{extra} functions are defined in this module. Non
 mpz-arguments are converted to mpz-values first, and the functions
 return mpz-numbers.
@@ -40,7 +50,7 @@
 \begin{funcdesc}{powm}{base, exponent, modulus}
   Return \code{pow(\var{base}, \var{exponent}) \%{} \var{modulus}}. If
   \code{\var{exponent} == 0}, return \code{mpz(1)}. In contrast to the
-  \C-library function, this version can handle negative exponents.
+  \C{} library function, this version can handle negative exponents.
 \end{funcdesc}
 
 \begin{funcdesc}{gcd}{op1, op2}
@@ -62,18 +72,18 @@
 \end{funcdesc}
 
 \begin{funcdesc}{divm}{numerator, denominator, modulus}
-  Returns a number \var{q}. such that
-  \code{\var{q} * \var{denominator} \%{} \var{modulus} == \var{numerator}}.
-  One could also implement this function in Python, using \code{gcdext}.
+  Returns a number \var{q} such that
+  \code{\var{q} * \var{denominator} \%{} \var{modulus} ==
+  \var{numerator}}.  One could also implement this function in Python,
+  using \function{gcdext()}.
 \end{funcdesc}
 
 An mpz-number has one method:
 
-\setindexsubitem{(mpz method)}
-\begin{funcdesc}{binary}{}
+\begin{methoddesc}[mpz]{binary}{}
   Convert this mpz-number to a binary string, where the number has been
   stored as an array of radix-256 digits, least significant digit first.
 
   The mpz-number must have a value greater than or equal to zero,
-  otherwise a \code{ValueError}-exception will be raised.
-\end{funcdesc}
+  otherwise \exception{ValueError} will be raised.
+\end{methoddesc}
diff --git a/Doc/libnntplib.tex b/Doc/libnntplib.tex
index 75c84d3..ba1d788 100644
--- a/Doc/libnntplib.tex
+++ b/Doc/libnntplib.tex
@@ -1,11 +1,10 @@
-\section{Standard Module \sectcode{nntplib}}
+\section{Standard Module \module{nntplib}}
 \label{module-nntplib}
 \stmodindex{nntplib}
 \indexii{NNTP}{protocol}
 
-\setindexsubitem{(in module nntplib)}
 
-This module defines the class \code{NNTP} which implements the client
+This module defines the class \class{NNTP} which implements the client
 side of the NNTP protocol.  It can be used to implement a news reader
 or poster, or automated news processors.  For more information on NNTP
 (Network News Transfer Protocol), see Internet \rfc{977}.
@@ -34,7 +33,6 @@
 3803 Re: \POSIX{} wait and SIGCHLD
 >>> s.quit()
 '205 news.cwi.nl closing connection.  Goodbye.'
->>> 
 \end{verbatim}
 
 To post an article from a file (this assumes that the article has
@@ -47,16 +45,15 @@
 '240 Article posted successfully.'
 >>> s.quit()
 '205 news.cwi.nl closing connection.  Goodbye.'
->>> 
 \end{verbatim}
 %
 The module itself defines the following items:
 
-\begin{funcdesc}{NNTP}{host\optional{, port}}
-Return a new instance of the \code{NNTP} class, representing a
+\begin{classdesc}{NNTP}{host\optional{, port}}
+Return a new instance of the \class{NNTP} class, representing a
 connection to the NNTP server running on host \var{host}, listening at
 port \var{port}.  The default \var{port} is 119.
-\end{funcdesc}
+\end{classdesc}
 
 \begin{excdesc}{error_reply}
 Exception raised when an unexpected reply is received from the server.
@@ -75,7 +72,9 @@
 not begin with a digit in the range 1--5.
 \end{excdesc}
 
+
 \subsection{NNTP Objects}
+\label{nntp-objects}
 
 NNTP instances have the following methods.  The \var{response} that is
 returned as the first item in the return tuple of almost all methods
@@ -83,40 +82,40 @@
 If the server's response indicates an error, the method raises one of
 the above exceptions.
 
-\setindexsubitem{(NNTP object method)}
 
-\begin{funcdesc}{getwelcome}{}
+\begin{methoddesc}{getwelcome}{}
 Return the welcome message sent by the server in reply to the initial
 connection.  (This message sometimes contains disclaimers or help
 information that may be relevant to the user.)
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{set_debuglevel}{level}
+\begin{methoddesc}{set_debuglevel}{level}
 Set the instance's debugging level.  This controls the amount of
-debugging output printed.  The default, 0, produces no debugging
-output.  A value of 1 produces a moderate amount of debugging output,
-generally a single line per request or response.  A value of 2 or
-higher produces the maximum amount of debugging output, logging each
-line sent and received on the connection (including message text).
-\end{funcdesc}
+debugging output printed.  The default, \code{0}, produces no debugging
+output.  A value of \code{1} produces a moderate amount of debugging
+output, generally a single line per request or response.  A value of
+\code{2} or higher produces the maximum amount of debugging output,
+logging each line sent and received on the connection (including
+message text).
+\end{methoddesc}
 
-\begin{funcdesc}{newgroups}{date, time}
+\begin{methoddesc}{newgroups}{date, time}
 Send a \samp{NEWGROUPS} command.  The \var{date} argument should be a
 string of the form \code{"\var{yy}\var{mm}\var{dd}"} indicating the
 date, and \var{time} should be a string of the form
 \code{"\var{hh}\var{mm}\var{ss}"} indicating the time.  Return a pair
 \code{(\var{response}, \var{groups})} where \var{groups} is a list of
 group names that are new since the given date and time.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{newnews}{group, date, time}
+\begin{methoddesc}{newnews}{group, date, time}
 Send a \samp{NEWNEWS} command.  Here, \var{group} is a group name or
-\code{"*"}, and \var{date} and \var{time} have the same meaning as for
-\code{newgroups()}.  Return a pair \code{(\var{response},
+\code{'*'}, and \var{date} and \var{time} have the same meaning as for
+\method{newgroups()}.  Return a pair \code{(\var{response},
 \var{articles})} where \var{articles} is a list of article ids.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{list}{}
+\begin{methoddesc}{list}{}
 Send a \samp{LIST} command.  Return a pair \code{(\var{response},
 \var{list})} where \var{list} is a list of tuples.  Each tuple has the
 form \code{(\var{group}, \var{last}, \var{first}, \var{flag})}, where
@@ -124,106 +123,107 @@
 and first article numbers (as strings), and \var{flag} is \code{'y'}
 if posting is allowed, \code{'n'} if not, and \code{'m'} if the
 newsgroup is moderated.  (Note the ordering: \var{last}, \var{first}.)
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{group}{name}
+\begin{methoddesc}{group}{name}
 Send a \samp{GROUP} command, where \var{name} is the group name.
-Return a tuple \code{(\var{response}, \var{count}, \var{first},
-\var{last}, \var{name})} where \var{count} is the (estimated) number
-of articles in the group, \var{first} is the first article number in
-the group, \var{last} is the last article number in the group, and
-\var{name} is the group name.  The numbers are returned as strings.
-\end{funcdesc}
+Return a tuple \code{(}\var{response}\code{,} \var{count}\code{,}
+\var{first}\code{,} \var{last}\code{,} \var{name}\code{)} where
+\var{count} is the (estimated) number of articles in the group,
+\var{first} is the first article number in the group, \var{last} is
+the last article number in the group, and \var{name} is the group
+name.  The numbers are returned as strings.
+\end{methoddesc}
 
-\begin{funcdesc}{help}{}
+\begin{methoddesc}{help}{}
 Send a \samp{HELP} command.  Return a pair \code{(\var{response},
 \var{list})} where \var{list} is a list of help strings.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{stat}{id}
+\begin{methoddesc}{stat}{id}
 Send a \samp{STAT} command, where \var{id} is the message id (enclosed
-in \samp{<} and \samp{>}) or an article number (as a string).
+in \character{<} and \character{>}) or an article number (as a string).
 Return a triple \code{(\var{response}, \var{number}, \var{id})} where
 \var{number} is the article number (as a string) and \var{id} is the
-article id  (enclosed in \samp{<} and \samp{>}).
-\end{funcdesc}
+article id  (enclosed in \character{<} and \character{>}).
+\end{methoddesc}
 
-\begin{funcdesc}{next}{}
-Send a \samp{NEXT} command.  Return as for \code{stat()}.
-\end{funcdesc}
+\begin{methoddesc}{next}{}
+Send a \samp{NEXT} command.  Return as for \method{stat()}.
+\end{methoddesc}
 
-\begin{funcdesc}{last}{}
-Send a \samp{LAST} command.  Return as for \code{stat()}.
-\end{funcdesc}
+\begin{methoddesc}{last}{}
+Send a \samp{LAST} command.  Return as for \method{stat()}.
+\end{methoddesc}
 
-\begin{funcdesc}{head}{id}
+\begin{methoddesc}{head}{id}
 Send a \samp{HEAD} command, where \var{id} has the same meaning as for
-\code{stat()}.  Return a pair \code{(\var{response}, \var{list})}
+\method{stat()}.  Return a pair \code{(\var{response}, \var{list})}
 where \var{list} is a list of the article's headers (an uninterpreted
 list of lines, without trailing newlines).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{body}{id}
+\begin{methoddesc}{body}{id}
 Send a \samp{BODY} command, where \var{id} has the same meaning as for
-\code{stat()}.  Return a pair \code{(\var{response}, \var{list})}
+\method{stat()}.  Return a pair \code{(\var{response}, \var{list})}
 where \var{list} is a list of the article's body text (an
 uninterpreted list of lines, without trailing newlines).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{article}{id}
+\begin{methoddesc}{article}{id}
 Send a \samp{ARTICLE} command, where \var{id} has the same meaning as
-for \code{stat()}.  Return a pair \code{(\var{response}, \var{list})}
+for \method{stat()}.  Return a pair \code{(\var{response}, \var{list})}
 where \var{list} is a list of the article's header and body text (an
 uninterpreted list of lines, without trailing newlines).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{slave}{}
+\begin{methoddesc}{slave}{}
 Send a \samp{SLAVE} command.  Return the server's \var{response}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{xhdr}{header, string}
+\begin{methoddesc}{xhdr}{header, string}
 Send an \samp{XHDR} command.  This command is not defined in the RFC
 but is a common extension.  The \var{header} argument is a header
-keyword, e.g. \code{"subject"}.  The \var{string} argument should have
+keyword, e.g. \code{'subject'}.  The \var{string} argument should have
 the form \code{"\var{first}-\var{last}"} where \var{first} and
 \var{last} are the first and last article numbers to search.  Return a
 pair \code{(\var{response}, \var{list})}, where \var{list} is a list of
 pairs \code{(\var{id}, \var{text})}, where \var{id} is an article id
 (as a string) and \var{text} is the text of the requested header for
 that article.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{post}{file}
+\begin{methoddesc}{post}{file}
 Post an article using the \samp{POST} command.  The \var{file}
 argument is an open file object which is read until EOF using its
-\code{readline()} method.  It should be a well-formed news article,
-including the required headers.  The \code{post()} method
+\method{readline()} method.  It should be a well-formed news article,
+including the required headers.  The \method{post()} method
 automatically escapes lines beginning with \samp{.}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{ihave}{id, file}
+\begin{methoddesc}{ihave}{id, file}
 Send an \samp{IHAVE} command.  If the response is not an error, treat
-\var{file} exactly as for the \code{post()} method.
-\end{funcdesc}
+\var{file} exactly as for the \method{post()} method.
+\end{methoddesc}
 
-\begin{funcdesc}{date}{}
+\begin{methoddesc}{date}{}
 Return a triple \code{(\var{response}, \var{date}, \var{time})},
 containing the current date and time in a form suitable for the
-\code{newnews} and \code{newgroups} methods.
+\method{newnews()} and \method{newgroups()} methods.
 This is an optional NNTP extension, and may not be supported by all
 servers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{xgtitle}{name}
-Process an XGTITLE command, returning a pair \code{(\var{response},
+\begin{methoddesc}{xgtitle}{name}
+Process an \samp{XGTITLE} command, returning a pair \code{(\var{response},
 \var{list})}, where \var{list} is a list of tuples containing
 \code{(\var{name}, \var{title})}.
 % XXX huh?  Should that be name, description?
 This is an optional NNTP extension, and may not be supported by all
 servers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{xover}{start, end}
+\begin{methoddesc}{xover}{start, end}
 Return a pair \code{(\var{resp}, \var{list})}.  \var{list} is a list
 of tuples, one for each article in the range delimited by the \var{start}
 and \var{end} article numbers.  Each tuple is of the form
@@ -232,15 +232,15 @@
 \var{references}\code{,} \var{size}\code{,} \var{lines}\code{)}.
 This is an optional NNTP extension, and may not be supported by all
 servers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{xpath}{id}
+\begin{methoddesc}{xpath}{id}
 Return a pair \code{(\var{resp}, \var{path})}, where \var{path} is the
 directory path to the article with message ID \var{id}.  This is an
 optional NNTP extension, and may not be supported by all servers.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{quit}{}
+\begin{methoddesc}{quit}{}
 Send a \samp{QUIT} command and close the connection.  Once this method
 has been called, no other methods of the NNTP object should be called.
-\end{funcdesc}
+\end{methoddesc}
diff --git a/Doc/librgbimg.tex b/Doc/librgbimg.tex
index 873a75f..73e4aae 100644
--- a/Doc/librgbimg.tex
+++ b/Doc/librgbimg.tex
@@ -5,7 +5,7 @@
 The \module{rgbimg} module allows Python programs to access SGI imglib image
 files (also known as \file{.rgb} files).  The module is far from
 complete, but is provided anyway since the functionality that there is
-is enough in some cases.  Currently, colormap files are not supported.
+enough in some cases.  Currently, colormap files are not supported.
 
 The module defines the following variables and functions:
 
@@ -24,7 +24,7 @@
 This function reads and decodes the image on the specified file, and
 returns it as a Python string. The string has 4 byte RGBA pixels.
 The bottom left pixel is the first in
-the string. This format is suitable to pass to \code{gl.lrectwrite},
+the string. This format is suitable to pass to \function{gl.lrectwrite()},
 for instance.
 \end{funcdesc}
 
@@ -34,7 +34,7 @@
 \var{z} is 1 if the saved image should be 1 byte greyscale, 3 if the
 saved image should be 3 byte RGB data, or 4 if the saved images should
 be 4 byte RGBA data.  The input data always contains 4 bytes per pixel.
-These are the formats returned by \code{gl.lrectread}.
+These are the formats returned by \function{gl.lrectread()}.
 \end{funcdesc}
 
 \begin{funcdesc}{ttob}{flag}
diff --git a/Doc/librotor.tex b/Doc/librotor.tex
index e467d4e..63dc56e 100644
--- a/Doc/librotor.tex
+++ b/Doc/librotor.tex
@@ -1,9 +1,10 @@
-\section{Built-in Module \sectcode{rotor}}
+\section{Built-in Module \module{rotor}}
 \label{module-rotor}
 \bimodindex{rotor}
 
 This module implements a rotor-based encryption algorithm, contributed by
-Lance Ellinghouse.  The design is derived from the Enigma device, a machine
+Lance Ellinghouse\index{Ellinghouse, Lance}.  The design is derived
+from the Enigma device\indexii{Enigma}{device}, a machine
 used during World War II to encipher messages.  A rotor is simply a
 permutation.  For example, if the character `A' is the origin of the rotor,
 then a given rotor might map `A' to `L', `B' to `Z', `C' to `G', and so on.
@@ -19,12 +20,10 @@
 the rotors in the same fashion as a car's odometer. Decoding works in the
 same way, except we reverse the permutations and apply them in the opposite
 order.
-\index{Ellinghouse, Lance}
 \indexii{Enigma}{cipher}
 
 The available functions in this module are:
 
-\setindexsubitem{(in module rotor)}
 \begin{funcdesc}{newrotor}{key\optional{, numrotors}}
 Return a rotor object. \var{key} is a string containing the encryption key
 for the object; it can contain arbitrary binary data. The key will be used
@@ -35,32 +34,31 @@
 
 Rotor objects have the following methods:
 
-\setindexsubitem{(rotor method)}
-\begin{funcdesc}{setkey}{key}
+\begin{methoddesc}[rotor]{setkey}{key}
 Sets the rotor's key to \var{key}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{encrypt}{plaintext}
+\begin{methoddesc}[rotor]{encrypt}{plaintext}
 Reset the rotor object to its initial state and encrypt \var{plaintext},
 returning a string containing the ciphertext.  The ciphertext is always the
 same length as the original plaintext.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{encryptmore}{plaintext}
+\begin{methoddesc}[rotor]{encryptmore}{plaintext}
 Encrypt \var{plaintext} without resetting the rotor object, and return a
 string containing the ciphertext.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{decrypt}{ciphertext}
+\begin{methoddesc}[rotor]{decrypt}{ciphertext}
 Reset the rotor object to its initial state and decrypt \var{ciphertext},
 returning a string containing the ciphertext.  The plaintext string will
 always be the same length as the ciphertext.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{decryptmore}{ciphertext}
+\begin{methoddesc}[rotor]{decryptmore}{ciphertext}
 Decrypt \var{ciphertext} without resetting the rotor object, and return a
 string containing the ciphertext.
-\end{funcdesc}
+\end{methoddesc}
 
 An example usage:
 \begin{verbatim}
@@ -80,17 +78,18 @@
 'l(\315'
 >>> del rt
 \end{verbatim}
-%
-The module's code is not an exact simulation of the original Enigma device;
-it implements the rotor encryption scheme differently from the original. The
-most important difference is that in the original Enigma, there were only 5
-or 6 different rotors in existence, and they were applied twice to each
-character; the cipher key was the order in which they were placed in the
-machine.  The Python rotor module uses the supplied key to initialize a
-random number generator; the rotor permutations and their initial positions
-are then randomly generated.  The original device only enciphered the
-letters of the alphabet, while this module can handle any 8-bit binary data;
-it also produces binary output.  This module can also operate with an
+
+The module's code is not an exact simulation of the original Enigma
+device; it implements the rotor encryption scheme differently from the
+original. The most important difference is that in the original
+Enigma, there were only 5 or 6 different rotors in existence, and they
+were applied twice to each character; the cipher key was the order in
+which they were placed in the machine.  The Python \module{rotor}
+module uses the supplied key to initialize a random number generator;
+the rotor permutations and their initial positions are then randomly
+generated.  The original device only enciphered the letters of the
+alphabet, while this module can handle any 8-bit binary data; it also
+produces binary output.  This module can also operate with an
 arbitrary number of rotors.
 
 The original Enigma cipher was broken in 1944. % XXX: Is this right?
@@ -102,5 +101,4 @@
 just fine, and may be somewhat safer than using the \UNIX{} \program{crypt}
 command.
 \index{NSA}
-\index{National Security Agency}\index{crypt(1)}
-% XXX How were Unix commands represented in the docs?
+\index{National Security Agency}
diff --git a/Doc/libsunaudio.tex b/Doc/libsunaudio.tex
index bafd7c5..c43d611 100644
--- a/Doc/libsunaudio.tex
+++ b/Doc/libsunaudio.tex
@@ -1,15 +1,14 @@
-\section{Built-in Module \sectcode{sunaudiodev}}
+\section{Built-in Module \module{sunaudiodev}}
 \label{module-sunaudiodev}
 \bimodindex{sunaudiodev}
 
 This module allows you to access the sun audio interface. The sun
 audio hardware is capable of recording and playing back audio data
-in U-LAW format with a sample rate of 8K per second. A full
-description can be gotten with \samp{man audio}.
+in u-LAW\index{u-LAW} format with a sample rate of 8K per second. A
+full description can be found in the \manpage{audio}{7I} manual page.
 
 The module defines the following variables and functions:
 
-\setindexsubitem{(in module sunaudiodev)}
 \begin{excdesc}{error}
 This exception is raised on all errors. The argument is a string
 describing what went wrong.
@@ -22,87 +21,87 @@
 access, \code{'rw'} for both and \code{'control'} for access to the
 control device. Since only one process is allowed to have the recorder
 or player open at the same time it is a good idea to open the device
-only for the activity needed. See the audio manpage for details.
+only for the activity needed. See \manpage{audio}{7I} for details.
 \end{funcdesc}
 
+
 \subsection{Audio Device Objects}
+\label{audio-device-objects}
 
-The audio device objects are returned by \code{open} define the
+The audio device objects are returned by \function{open()} define the
 following methods (except \code{control} objects which only provide
-getinfo, setinfo and drain):
+\method{getinfo()}, \method{setinfo()} and \method{drain()}):
 
-\setindexsubitem{(audio device method)}
-
-\begin{funcdesc}{close}{}
+\begin{methoddesc}[audio device]{close}{}
 This method explicitly closes the device. It is useful in situations
 where deleting the object does not immediately close it since there
 are other references to it. A closed device should not be used again.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{drain}{}
+\begin{methoddesc}[audio device]{drain}{}
 This method waits until all pending output is processed and then returns.
 Calling this method is often not necessary: destroying the object will
 automatically close the audio device and this will do an implicit drain.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{flush}{}
+\begin{methoddesc}[audio device]{flush}{}
 This method discards all pending output. It can be used avoid the
 slow response to a user's stop request (due to buffering of up to one
 second of sound).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{getinfo}{}
+\begin{methoddesc}[audio device]{getinfo}{}
 This method retrieves status information like input and output volume,
 etc. and returns it in the form of
 an audio status object. This object has no methods but it contains a
 number of attributes describing the current device status. The names
 and meanings of the attributes are described in
-\file{/usr/include/sun/audioio.h} and in the audio man page. Member names
-are slightly different from their C counterparts: a status object is
-only a single structure. Members of the \code{play} substructure have
-\samp{o_} prepended to their name and members of the \code{record}
-structure have \samp{i_}. So, the C member \code{play.sample_rate} is
-accessed as \code{o_sample_rate}, \code{record.gain} as \code{i_gain}
-and \code{monitor_gain} plainly as \code{monitor_gain}.
-\end{funcdesc}
+\file{/usr/include/sun/audioio.h} and in the \manpage{audio}{7I}
+manual page.  Member names
+are slightly different from their \C{} counterparts: a status object is
+only a single structure. Members of the \cdata{play} substructure have
+\samp{o_} prepended to their name and members of the \cdata{record}
+structure have \samp{i_}. So, the \C{} member \cdata{play.sample_rate} is
+accessed as \member{o_sample_rate}, \cdata{record.gain} as \member{i_gain}
+and \cdata{monitor_gain} plainly as \member{monitor_gain}.
+\end{methoddesc}
 
-\begin{funcdesc}{ibufcount}{}
+\begin{methoddesc}[audio device]{ibufcount}{}
 This method returns the number of samples that are buffered on the
-recording side, i.e.
-the program will not block on a \function{read()} call of so many samples.
-\end{funcdesc}
+recording side, i.e.\ the program will not block on a
+\function{read()} call of so many samples.
+\end{methoddesc}
 
-\begin{funcdesc}{obufcount}{}
+\begin{methoddesc}[audio device]{obufcount}{}
 This method returns the number of samples buffered on the playback
 side. Unfortunately, this number cannot be used to determine a number
 of samples that can be written without blocking since the kernel
 output queue length seems to be variable.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{read}{size}
+\begin{methoddesc}[audio device]{read}{size}
 This method reads \var{size} samples from the audio input and returns
 them as a Python string. The function blocks until enough data is available.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setinfo}{status}
+\begin{methoddesc}[audio device]{setinfo}{status}
 This method sets the audio device status parameters. The \var{status}
 parameter is an device status object as returned by \function{getinfo()} and
 possibly modified by the program.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{write}{samples}
+\begin{methoddesc}[audio device]{write}{samples}
 Write is passed a Python string containing audio samples to be played.
 If there is enough buffer space free it will immediately return,
 otherwise it will block.
-\end{funcdesc}
+\end{methoddesc}
 
-There is a companion module, \module{SUNAUDIODEV}, which defines useful
+There is a companion module,
+\module{SUNAUDIODEV}\refstmodindex{SUNAUDIODEV}, which defines useful
 symbolic constants like \constant{MIN_GAIN}, \constant{MAX_GAIN},
-\constant{SPEAKER}, etc. The names of
-the constants are the same names as used in the \C{} include file
-\code{<sun/audioio.h>}, with the leading string \samp{AUDIO_}
-stripped.
-\refstmodindex{SUNAUDIODEV}
+\constant{SPEAKER}, etc. The names of the constants are the same names
+as used in the \C{} include file \code{<sun/audioio.h>}, with the
+leading string \samp{AUDIO_} stripped.
 
 Useability of the control device is limited at the moment, since there
 is no way to use the ``wait for something to happen'' feature the
diff --git a/Doc/libxmllib.tex b/Doc/libxmllib.tex
index efc7f00..4306aca 100644
--- a/Doc/libxmllib.tex
+++ b/Doc/libxmllib.tex
@@ -1,4 +1,4 @@
-\section{Standard Module \sectcode{xmllib}}
+\section{Standard Module \module{xmllib}}
 % Author: Sjoerd Mullender
 \label{module-xmllib}
 \stmodindex{xmllib}
@@ -13,59 +13,57 @@
 
 This class provides the following interface methods:
 
-\setindexsubitem{(XMLParser method)}
-
-\begin{funcdesc}{reset}{}
+\begin{methoddesc}{reset}{}
 Reset the instance.  Loses all unprocessed data.  This is called
 implicitly at the instantiation time.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setnomoretags}{}
+\begin{methoddesc}{setnomoretags}{}
 Stop processing tags.  Treat all following input as literal input
 (CDATA).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{setliteral}{}
+\begin{methoddesc}{setliteral}{}
 Enter literal mode (CDATA mode).
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{feed}{data}
+\begin{methoddesc}{feed}{data}
 Feed some text to the parser.  It is processed insofar as it consists
 of complete elements; incomplete data is buffered until more data is
 fed or \method{close()} is called.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{close}{}
+\begin{methoddesc}{close}{}
 Force processing of all buffered data as if it were followed by an
 end-of-file mark.  This method may be redefined by a derived class to
 define additional processing at the end of the input, but the
 redefined version should always call \method{close()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{translate_references}{data}
+\begin{methoddesc}{translate_references}{data}
 Translate all entity and character references in \var{data} and
 returns the translated string.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_xml}{encoding, standalone}
-This method is called when the \code{<?xml ...?>} tag is processed.
+\begin{methoddesc}{handle_xml}{encoding, standalone}
+This method is called when the \samp{<?xml ...?>} tag is processed.
 The arguments are the values of the encoding and standalone attributes 
 in the tag.  Both encoding and standalone are optional.  The values
 passed to \method{handle_xml()} default to \code{None} and the string
 \code{'no'} respectively.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_doctype}{tag, data}
-This method is called when the \code{<!DOCTYPE...>} tag is processed.
+\begin{methoddesc}{handle_doctype}{tag, data}
+This method is called when the \samp{<!DOCTYPE...>} tag is processed.
 The arguments are the name of the root element and the uninterpreted
 contents of the tag, starting after the white space after the name of
 the root element.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_starttag}{tag, method, attributes}
+\begin{methoddesc}{handle_starttag}{tag, method, attributes}
 This method is called to handle start tags for which a
-\code{start_\var{tag}()} method has been defined.  The \var{tag}
-argument is the name of the tag, and the \method{method} argument is the
+\method{start_\var{tag}()} method has been defined.  The \var{tag}
+argument is the name of the tag, and the \var{method} argument is the
 bound method which should be used to support semantic interpretation
 of the start tag.  The \var{attributes} argument is a dictionary of
 attributes, the key being the \var{name} and the value being the
@@ -76,29 +74,29 @@
 \code{handle_starttag('A', self.start_A, \{'HREF': 'http://www.cwi.nl/'\})}.
 The base implementation simply calls \var{method} with \var{attributes}
 as the only argument.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_endtag}{tag, method}
+\begin{methoddesc}{handle_endtag}{tag, method}
 This method is called to handle endtags for which an
-\code{end_\var{tag}()} method has been defined.  The \var{tag}
+\method{end_\var{tag}()} method has been defined.  The \var{tag}
 argument is the name of the tag, and the
 \var{method} argument is the bound method which should be used to
 support semantic interpretation of the end tag.  If no
-\code{end_\var{tag}()} method is defined for the closing element, this
+\method{end_\var{tag}()} method is defined for the closing element, this
 handler is not called.  The base implementation simply calls
 \var{method}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_data}{data}
+\begin{methoddesc}{handle_data}{data}
 This method is called to process arbitrary data.  It is intended to be
 overridden by a derived class; the base class implementation does
 nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_charref}{ref}
+\begin{methoddesc}{handle_charref}{ref}
 This method is called to process a character reference of the form
 \samp{\&\#\var{ref};}.  \var{ref} can either be a decimal number,
-or a hexadecimal number when preceded by \code{x}.
+or a hexadecimal number when preceded by an \character{x}.
 In the base implementation, \var{ref} must be a number in the
 range 0-255.  It translates the character to \ASCII{} and calls the
 method \method{handle_data()} with the character as argument.  If
@@ -106,9 +104,9 @@
 \code{unknown_charref(\var{ref})} is called to handle the error.  A
 subclass must override this method to provide support for character
 references outside of the \ASCII{} range.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_entityref}{ref}
+\begin{methoddesc}{handle_entityref}{ref}
 This method is called to process a general entity reference of the
 form \samp{\&\var{ref};} where \var{ref} is an general entity
 reference.  It looks for \var{ref} in the instance (or class)
@@ -119,48 +117,48 @@
 \code{unknown_entityref(\var{ref})}.  The default \member{entitydefs}
 defines translations for \code{\&amp;}, \code{\&apos}, \code{\&gt;},
 \code{\&lt;}, and \code{\&quot;}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_comment}{comment}
+\begin{methoddesc}{handle_comment}{comment}
 This method is called when a comment is encountered.  The
 \var{comment} argument is a string containing the text between the
 \samp{<!--} and \samp{-->} delimiters, but not the delimiters
 themselves.  For example, the comment \samp{<!--text-->} will
 cause this method to be called with the argument \code{'text'}.  The
 default method does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_cdata}{data}
+\begin{methoddesc}{handle_cdata}{data}
 This method is called when a CDATA element is encountered.  The
 \var{data} argument is a string containing the text between the
 \samp{<![CDATA[} and \samp{]]>} delimiters, but not the delimiters
 themselves.  For example, the entity \samp{<![CDATA[text]]>} will
 cause this method to be called with the argument \code{'text'}.  The
 default method does nothing, and is intended to be overridden.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_proc}{name, data}
+\begin{methoddesc}{handle_proc}{name, data}
 This method is called when a processing instruction (PI) is
 encountered.  The \var{name} is the PI target, and the \var{data}
 argument is a string containing the text between the PI target and the
 closing delimiter, but not the delimiter itself.  For example, the
 instruction \samp{<?XML text?>} will cause this method to be called
 with the arguments \code{'XML'} and \code{'text'}.  The default method
-does nothing.  Note that if a document starts with \code{<?xml
+does nothing.  Note that if a document starts with \samp{<?xml
 ...?>}, \method{handle_xml()} is called to handle it.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{handle_special}{data}
+\begin{methoddesc}{handle_special}{data}
 This method is called when a declaration is encountered.  The
 \var{data} argument is a string containing the text between the
 \samp{<!} and \samp{>} delimiters, but not the delimiters
 themselves.  For example, the entity \samp{<!ENTITY text>} will
 cause this method to be called with the argument \code{'ENTITY text'}.  The
-default method does nothing.  Note that \code{<!DOCTYPE ...>} is
+default method does nothing.  Note that \samp{<!DOCTYPE ...>} is
 handled separately if it is located at the start of the document.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{syntax_error}{message}
+\begin{methoddesc}{syntax_error}{message}
 This method is called when a syntax error is encountered.  The
 \var{message} is a description of what was wrong.  The default method 
 raises a \exception{RuntimeError} exception.  If this method is
@@ -168,31 +166,31 @@
 called when the error can be recovered from.  Unrecoverable errors
 raise a \exception{RuntimeError} without first calling
 \method{syntax_error()}.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unknown_starttag}{tag, attributes}
+\begin{methoddesc}{unknown_starttag}{tag, attributes}
 This method is called to process an unknown start tag.  It is intended
 to be overridden by a derived class; the base class implementation
 does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unknown_endtag}{tag}
+\begin{methoddesc}{unknown_endtag}{tag}
 This method is called to process an unknown end tag.  It is intended
 to be overridden by a derived class; the base class implementation
 does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unknown_charref}{ref}
+\begin{methoddesc}{unknown_charref}{ref}
 This method is called to process unresolvable numeric character
 references.  It is intended to be overridden by a derived class; the
 base class implementation does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
-\begin{funcdesc}{unknown_entityref}{ref}
+\begin{methoddesc}{unknown_entityref}{ref}
 This method is called to process an unknown entity reference.  It is
 intended to be overridden by a derived class; the base class
 implementation does nothing.
-\end{funcdesc}
+\end{methoddesc}
 
 Apart from overriding or extending the methods listed above, derived
 classes may also define methods and variables of the following form to
@@ -200,19 +198,19 @@
 case dependent; the \var{tag} occurring in method names must be in the
 correct case:
 
-\begin{funcdescni}{start_\var{tag}}{attributes}
+\begin{methoddescni}{start_\var{tag}}{attributes}
 This method is called to process an opening tag \var{tag}.  The
 \var{attributes} argument has the same meaning as described for
 \method{handle_starttag()} above.  In fact, the base implementation of
 \method{handle_starttag()} calls this method.
-\end{funcdescni}
+\end{methoddescni}
 
-\begin{funcdescni}{end_\var{tag}}{}
+\begin{methoddescni}{end_\var{tag}}{}
 This method is called to process a closing tag \var{tag}.
-\end{funcdescni}
+\end{methoddescni}
 
-\begin{datadescni}{\var{tag}_attributes}
-If a class or instance variable \code{\var{tag}_attributes} exists, it 
+\begin{memberdescni}{\var{tag}_attributes}
+If a class or instance variable \member{\var{tag}_attributes} exists, it 
 should be a list or a dictionary.  If a list, the elements of the list 
 are the valid attributes for the element \var{tag}; if a dictionary,
 the keys are the valid attributes for the element \var{tag}, and the
@@ -222,4 +220,4 @@
 attribute dictionary that is passed to \method{handle_starttag()} and
 \method{unknown_starttag()} contains values for all attributes that
 have a default value.
-\end{datadescni}
+\end{memberdescni}
