%
% python.sty for the Python docummentation  [works only with with Latex2e]
%

\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{python}
             [1998/01/11 LaTeX package (Python markup)]

% These packages can be used to add marginal annotations which indicate
% index entries and labels; useful for reviewing this messy documentation!
%
%\RequirePackage{showkeys}
%\RequirePackage{showidx}

% for PDF output, use maximal compression & a lot of other stuff
% (test for PDF recommended by Tanmoy Bhattacharya <tanmoy@qcd.lanl.gov>)
%
\newif\if@doing@page@targets
\@doing@page@targetsfalse

\ifx\pdfoutput\undefined\else\ifcase\pdfoutput
  \let\LinkColor=\relax
  \let\NormalColor=\relax
\else
  \input{pdfcolor}
  \let\LinkColor=\NavyBlue
  \let\NormalColor=\Black
  \pdfcompresslevel=9
  %
  % This definition allows the entries in the page-view of the ToC to be
  % active links.  Some work, some don't.
  %
  \let\OldContentsline=\contentsline
  \renewcommand{\contentsline}[3]{%
    \OldContentsline{#1}{%
      \pdfannotlink attr{/Border [0 0 0]} goto name{page.#3}%
        \LinkColor#2\NormalColor%
      \pdfendlink%
    }{#3}%
  }
  %
  % This is supposed to build the "outline" view of the document; it seems
  % quite fragile.  The breakages are the same as in the ToC.
  %
  \AtEndDocument{
    \InputIfFileExists{\jobname.bkm}{\pdfcatalog{/PageMode /UseOutlines}}{}
  }
  \let\OldLabel=\label
  \renewcommand{\label}[1]{%
    \OldLabel{#1}%
    {\pdfdest name{label.#1} fit}%
  }
  % This stuff adds a page.# destination to every PDF page, where # has
  % the same formatting as the displayed page number.  This doesn't really
  % help with the frontmatter, but does fine with the body.
  %
  % This is *heavily* based on the hyperref package.
  %
  \def\@begindvi{%
    \unvbox \@begindvibox
    \@hyperfixhead
  }
  \def\@hyperfixhead{%
   \let\H@old@thehead\@thehead
       \gdef\@foo{\if@doing@page@targets\pdfdest name{page.\thepage} fit\fi}%
     \expandafter\ifx\expandafter\@empty\H@old@thehead
       \def\H@old@thehead{\hfil}\fi
    \def\@thehead{\@foo\relax\H@old@thehead}%
  }
\fi\fi

% Increase printable page size (copied from fullpage.sty)
\topmargin 0pt
\advance \topmargin by -\headheight
\advance \topmargin by -\headsep

% attempt to work a little better for A4 users
\@ifundefined{paperheight}{
  \textheight 9in
}{
  \textheight \paperheight
  \advance\textheight by -2in
}

\oddsidemargin 0pt
\evensidemargin \oddsidemargin
\marginparwidth 0.5in

\@ifundefined{paperwidth}{
  \textwidth 6.5in
}{
  \textwidth \paperwidth
  \advance\textwidth by -2in
}


% Style parameters and macros used by most documents here
\raggedbottom
\sloppy
\parindent = 0mm
\parskip =   2mm
\hbadness = 5000		% don't print trivial gripes

\pagestyle{empty}		% start this way; change for
\pagenumbering{roman}		% ToC & chapters
\setcounter{secnumdepth}{1}

% Use this to set the font family for headers and other decor:
\newcommand{\HeaderFamily}{\sffamily}

% Redefine the 'normal' header/footer style when using "fancyhdr" package:
\@ifundefined{fancyhf}{}{
  % Use \pagestyle{normal} as the primary pagestyle for text.
  \fancypagestyle{normal}{
    \fancyhf{}
    \fancyfoot[LE,RO]{{\HeaderFamily\thepage}}
    \fancyfoot[LO]{{\HeaderFamily\nouppercase{\rightmark}}}
    \fancyfoot[RE]{{\HeaderFamily\nouppercase{\leftmark}}}
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0.4pt}
  }
  % Update the plain style so we get the page number & footer line,
  % but not a chapter or section title.  This is to keep the first
  % page of a chapter and the blank page between chapters `clean.'
  \fancypagestyle{plain}{
    \fancyhf{}
    \fancyfoot[LE,RO]{{\HeaderFamily\thepage}}
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0.4pt}
  }
  % Redefine \cleardoublepage so that the blank page between chapters
  % gets the plain style and not the fancy style.  This is described
  % in the documentation for the fancyhdr package by Piet von Oostrum.
  \@ifundefined{chapter}{}{
    \renewcommand{\cleardoublepage}{
      \clearpage\if@openright \ifodd\c@page\else
      \hbox{}
      \thispagestyle{plain}
      \newpage
      \if@twocolumn\hbox{}\newpage\fi\fi\fi
    }
  }
}

% old code font selections:
\let\codefont=\tt
\let\sectcodefont=\tt

% (Haven't found a new one that gets <, >, and _ right without being
% monospaced.)


% This sets up the {verbatim} environment to be indented and a minipage,
% and to have all the other mostly nice properties that we want for
% code samples.

% Variable used by begin code command
\newlength{\codewidth}

\newcommand{\examplevspace}{2mm}
\newcommand{\exampleindent}{1cm}

\let\OldVerbatim=\verbatim
\let\OldEndVerbatim=\endverbatim
\renewcommand{\verbatim}{%
  \begingroup%
  \setlength{\parindent}\exampleindent%
  % Calculate the text width for the minipage:
  \setlength{\codewidth}{\linewidth}%
  \addtolength{\codewidth}{-\parindent}%
  %
  \par%
  \vspace\examplevspace%
  \indent%
  \begin{minipage}[t]{\codewidth}%
    \small%
    \OldVerbatim%
}
\renewcommand{\endverbatim}{%
    \OldEndVerbatim%
  \end{minipage}%
  \endgroup%
}

\newcommand{\reset@python}{
  \global\let\@thisclass=\@undefined
  \global\let\@thismodule=\@undefined
}
\reset@python

% Augment the sectioning commands used to get our own font family in place,
% and reset some internal data items:
\renewcommand{\section}{\reset@python%
                        \@startsection {section}{1}{\z@}%
                                   {-3.5ex \@plus -1ex \@minus -.2ex}%
                                   {2.3ex \@plus.2ex}%
                                   {\reset@font\Large\HeaderFamily}}
\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
                                     {-3.25ex\@plus -1ex \@minus -.2ex}%
                                     {1.5ex \@plus .2ex}%
                                     {\reset@font\large\HeaderFamily}}
\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
                                     {-3.25ex\@plus -1ex \@minus -.2ex}%
                                     {1.5ex \@plus .2ex}%
                                     {\reset@font\normalsize\HeaderFamily}}
\renewcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}%
                                    {3.25ex \@plus1ex \@minus.2ex}%
                                    {-1em}%
                                    {\reset@font\normalsize\HeaderFamily}}
\renewcommand{\subparagraph}{\@startsection{subparagraph}{5}{\parindent}%
                                       {3.25ex \@plus1ex \@minus .2ex}%
                                       {-1em}%
                                      {\reset@font\normalsize\HeaderFamily}}


% Underscore hack (only act like subscript operator if in math mode)
%
% The following is due to Mark Wooding (the old version didn't work with
% Latex 2e.

\DeclareRobustCommand\hackscore{%
  \ifmmode_\else\textunderscore\fi%
}
\begingroup
\catcode`\_\active
\def\next{%
  \AtBeginDocument{\catcode`\_\active\def_{\hackscore{}}}%
}
\expandafter\endgroup\next


%%  Lots of index-entry generation support.

% Command to wrap around stuff that refers to function / module /
% attribute names  in the index.  Default behavior: like \code{}.  To
% just keep the index entries in the roman font, uncomment the second
% definition to use instead; it matches O'Reilly style more.
%
\newcommand{\idxcode}[1]{\codefont{#1}}
%\renewcommand{\idxcode}[1]{#1}

% Command to generate two index entries (using subentries)
\newcommand{\indexii}[2]{\index{#1!#2}\index{#2!#1}}

% And three entries (using only one level of subentries)
\newcommand{\indexiii}[3]{\index{#1!#2 #3}\index{#2!#3, #1}\index{#3!#1 #2}}

% And four (again, using only one level of subentries)
\newcommand{\indexiv}[4]{
\index{#1!#2 #3 #4}
\index{#2!#3 #4, #1}
\index{#3!#4, #1 #2}
\index{#4!#1 #2 #3}
}

% Command to generate a reference to a function, statement, keyword,
% operator.
\newcommand{\stindex}[1]{\indexii{statement}{#1@{\idxcode{#1}}}}
\newcommand{\opindex}[1]{\indexii{operator}{#1@{\idxcode{#1}}}}
\newcommand{\exindex}[1]{\indexii{exception}{#1@{\idxcode{#1}}}}
\newcommand{\obindex}[1]{\indexii{object}{#1}}
\newcommand{\bifuncindex}[1]{\withsubitem{(built-in function)}{\ttindex{#1()}}}

% Add an index entry for a module
\newcommand{\refmodule}[2]{\index{#1@{\idxcode{#1}} (#2module)}}
\newcommand{\refmodindex}[1]{\refmodule{#1}{}}
\newcommand{\refbimodindex}[1]{\refmodule{#1}{built-in }}
\newcommand{\refexmodindex}[1]{\refmodule{#1}{extension }}
\newcommand{\refstmodindex}[1]{\refmodule{#1}{standard }}

% support for the module index
\newif\if@UseModuleIndex
\@UseModuleIndexfalse

% Fix the theindex environment to add an entry to the Table of
% Contents; this is much nicer than just having to jump to the end of
% the book and flip around, especially with multiple indexes.
%
\let\OldTheindex=\theindex
\renewcommand{\theindex}{
  \cleardoublepage
  \OldTheindex
  \addcontentsline{toc}{chapter}{\indexname}
}

\newcommand{\makemodindex}{
  \newwrite\modindexfile
  \openout\modindexfile=mod\jobname.idx
  \@UseModuleIndextrue
}

% Add the defining entry for a module
\newcommand{\@modindex}[2]{%
  \global\def\@thismodule{#1}
  \setindexsubitem{(in module #1)}%
  \index{#1@{\idxcode{#1}} (#2module)|textbf}%
  \if@UseModuleIndex%
    \write\modindexfile{\protect\indexentry{#1@{\tt #1}}{\thepage}}%
  \fi%
}

% built-in & Python modules in the main distribution
\newcommand{\bimodindex}[1]{\@modindex{#1}{built-in }}
\newcommand{\stmodindex}[1]{\@modindex{#1}{standard }}

% Python & extension modules outside the main distribution
\newcommand{\modindex}[1]{\@modindex{#1}{}}
\newcommand{\exmodindex}[1]{\@modindex{#1}{extension }}

% Additional string for an index entry
\newcommand{\index@subitem}{}
\newcommand{\setindexsubitem}[1]{\renewcommand{\index@subitem}{#1}}
\newcommand{\ttindex}[1]{\index{#1@{\idxcode{#1}} \index@subitem}}

\newcommand{\withsubitem}[2]{%
  \begingroup%
  \def\index@subitem{#1}#2%
  \endgroup%
}


% Now for a lot of semantically-loaded environments that do a ton of magical
% things to get the right formatting and index entries for the stuff in
% Python modules and C API.


% {fulllineitems} is used in one place in libregex.tex, but is really for
% internal use in this file.
%
\newenvironment{fulllineitems}{
  \begin{list}{}{\labelwidth \leftmargin \labelsep 0pt
                 \rightmargin 0pt \topsep -\parskip \partopsep \parskip
                 \itemsep -\parsep
                 \let\makelabel=\itemnewline}
}{\end{list}}

% \optional is mostly for use in the arguments parameters to the various
% {*desc} environments defined below, but may be used elsewhere.  Known to
% be used in the debugger chapter.
\newcommand{\optional}[1]{%
  {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}}

% C functions ------------------------------------------------------------
% \begin{cfuncdesc}{type}{name}{arglist}
\newenvironment{cfuncdesc}[3]{
  \begin{fulllineitems}
    \item[\code{#1 \bfcode{#2}(\varvars{#3})}\index{#2@{\idxcode{#2()}}}]
}{\end{fulllineitems}}

% C variables ------------------------------------------------------------
% \begin{cvardesc}{type}{name}
\newenvironment{cvardesc}[2]{
  \begin{fulllineitems}
    \item[\code{#1 \bfcode{#2}}\index{#2@{\idxcode{#2}}}]
}{\end{fulllineitems}}

% C data types -----------------------------------------------------------
% \begin{ctypedesc}{typedef name}
\newenvironment{ctypedesc}[1]{
  \begin{fulllineitems}
    \item[\bfcode{#1}\ttindex{#1}]
}{\end{fulllineitems}}

% simple functions (not methods) -----------------------------------------
% \begin{funcdesc}{name}{args}
\newcommand{\funcline}[2]{\funclineni{#1}{#2}\ttindex{#1()}}
\newenvironment{funcdesc}[2]{
  \begin{fulllineitems}
    \funcline{#1}{#2}
}{\end{fulllineitems}}

% similar to {funcdesc}, but doesn't add to the index
\newcommand{\funclineni}[2]{\item[\code{\bfcode{#1}(\varvars{#2})}]}
\newenvironment{funcdescni}[2]{
  \begin{fulllineitems}
    \funclineni{#1}{#2}
}{\end{fulllineitems}}

% classes ----------------------------------------------------------------
% \begin{classdesc}{name}{constructor args}
\newenvironment{classdesc}[2]{
  \global\def\@thisclass{#1}
  \begin{fulllineitems}
    \item[\code{\bfcode{#1}(\varvars{#2})}%
      \withsubitem{(class in \@thismodule)}{\ttindex{#1}}]
    \def\baseclasses##1{}
}{\end{fulllineitems}}


\newcommand{\@classbadkey}{--bad current class--}
\let\@classbadkey=\@undefined

% object method ----------------------------------------------------------
% \begin{methoddesc}[classname]{methodname}{args}
\newcommand{\methodline}[3][\@classbadkey]{
  \methodlineni{#2}{#3}
  \ifx#1\@undefined
    \withsubitem{(\@thisclass\ method)}{\ttindex{#2()}}
  \else
    \withsubitem{(#1 method)}{\ttindex{#2()}}
  \fi
}
\newenvironment{methoddesc}[3][\@classbadkey]{
  \begin{fulllineitems}
    \ifx#1\@undefined
      \methodline{#2}{#3}
    \else
      \def\@thisclass{#1}
      \methodline[#1]{#2}{#3}
    \fi
}{\end{fulllineitems}}

% similar to {methoddesc}, but doesn't add to the index
% (never actually uses the optional argument)
\newcommand{\methodlineni}[3][\@classbadkey]{%
  \item[\code{\bfcode{#2}(\varvars{#3})}]}
\newenvironment{methoddescni}[3][\@classbadkey]{
  \begin{fulllineitems}
    \methodlineni{#2}{#3}
}{\end{fulllineitems}}

% object data attribute --------------------------------------------------
% \begin{memberdesc}[classname]{membername}
\newcommand{\memberline}[2][\@classbadkey]{%
  \ifx#1\@undefined
    \memberlineni{#2}
    \withsubitem{(\@thisclass\ attribute)}{\ttindex{#2}}
  \else
    \memberlineni{#2}
    \withsubitem{(#1 attribute)}{\ttindex{#2}}
  \fi
}
\newenvironment{memberdesc}[2][\@classbadkey]{
  \begin{fulllineitems}
    \ifx#1\@undefined
      \memberline{#2}
    \else
      \def\@thisclass{#1}
      \memberline[#1]{#2}
    \fi
}{\end{fulllineitems}}

% similar to {memberdesc}, but doesn't add to the index
% (never actually uses the optional argument)
\newcommand{\memberlineni}[2][\@classbadkey]{\item[\bfcode{#2}]}
\newenvironment{memberdescni}[2][\@classbadkey]{
  \begin{fulllineitems}
    \memberlineni{#2}
}{\end{fulllineitems}}

% For exceptions: --------------------------------------------------------
% \begin{excdesc}{name}
%  -- need support for constructor; maybe use optional parameter?
\newenvironment{excdesc}[1]{
  \begin{fulllineitems}
    \item[\bfcode{#1}\ttindex{#1}]
}{\end{fulllineitems}}

% Module data or constants: ----------------------------------------------
% \begin{datadesc}{name}
\newcommand{\dataline}[1]{\datalineni{#1}\ttindex{#1}}
\newenvironment{datadesc}[1]{
  \begin{fulllineitems}
    \dataline{#1}
}{\end{fulllineitems}}

% similar to {datadesc}, but doesn't add to the index
\newcommand{\datalineni}[1]{\item[\bfcode{#1}]\nopagebreak}
\newenvironment{datadescni}[1]{
  \begin{fulllineitems}
    \datalineni{#1}
}{\end{fulllineitems}}

% bytecode instruction ---------------------------------------------------
% \begin{opcodedesc}{name}{var}
% -- {var} may be {}
\newenvironment{opcodedesc}[2]{
  \begin{fulllineitems}
    \item[\bfcode{#1}\quad\var{#2}]
}{\end{fulllineitems}}


\let\nodename=\label

\newcommand{\sectcode}[1]{{\sectcodefont{#1}}}

% For these commands, use \command{} to get the typography right, not 
% {\command}.  This works better with the texinfo translation.
\newcommand{\ABC}{{\sc abc}}
\newcommand{\UNIX}{{\sc Unix}}
\newcommand{\POSIX}{POSIX}
\newcommand{\ASCII}{{\sc ascii}}
\newcommand{\Cpp}{C\protect\raisebox{.18ex}{++}}
\newcommand{\C}{C}
\newcommand{\EOF}{{\sc eof}}
\newcommand{\NULL}{\sectcode{NULL}}

% Also for consistency: spell Python "Python", not "python"!

% code is the most difficult one...
\newcommand{\code}[1]{{\@vobeyspaces\@noligs\def\{{\char`\{}\def\}{\char`\}}\def\~{\char`\~}\def\^{\char`\^}\def\e{\char`\\}\def\${\char`\$}\def\#{\char`\#}\def\&{\char`\&}\def\%{\char`\%}%
\mbox{\codefont{#1}}}}

\newcommand{\bfcode}[1]{\code{\bfseries#1}} % bold-faced code font
\newcommand{\kbd}[1]{\mbox{\tt #1}}
\newcommand{\key}[1]{\mbox{\tt #1}}
\newcommand{\samp}[1]{\mbox{`\code{#1}'}}
% This weird definition of \var{} allows it to always appear in roman
% italics, and won't get funky in code fragments when we play around
% with fonts.
\newcommand{\var}[1]{\mbox{\normalsize\textrm{\textit{#1\/}}}}
\renewcommand{\emph}[1]{{\em #1\/}}
\newcommand{\dfn}[1]{\emph{#1}}
\newcommand{\strong}[1]{{\bf #1}}
% let's experiment with a new font:
\newcommand{\file}[1]{`{\small\textsf{#1}}'}

% Use this def/redef approach for \url{} since hyperref defined this already,
% but only if we actually used hyperref:
\@ifundefined{pdfannotlink}{
  \newcommand{\pythonurl}[1]{\mbox{\small\textsf{#1}}}
}{
  \newcommand{\pythonurl}[1]{{%
    \pdfannotlink attr{/Border [0 0 0]} user{/S /URI /URI (#1)}%
    \LinkColor%				color of the link text
    {\small\textsf{#1}}%
    \NormalColor%			Turn it back off; these are declarative
    \pdfendlink}%			and don't appear bound to the current
  }%					formatting "box".
}
\let\url=\pythonurl
\newcommand{\email}[1]{{\small\textsf{#1}}}
\newcommand{\newsgroup}[1]{{\small\textsf{#1}}}

\newcommand{\varvars}[1]{{\def\,{\/{\char`\,}}\var{#1}}}

\newif\iftexi\texifalse
\newif\iflatex\latextrue

% These should be used for all references to identifiers which are
% used to refer to instances of specific language constructs.  See the
% names for specific semantic assignments.
%
% For now, don't do anything really fancy with them; just use them as
% logical markup.  This might change in the future.
%
\let\module=\sectcode
\let\keyword=\sectcode
\let\exception=\sectcode
\let\class=\sectcode
\let\function=\sectcode
\let\member=\sectcode
\let\method=\sectcode

\newcommand{\pytype}[1]{#1}		% built-in Python type

\let\cfunction=\sectcode
\let\ctype=\sectcode
\let\cdata=\sectcode

\newcommand{\mimetype}[1]{{\small\textsf{#1}}}
% The \! is a "negative thin space" in math mode.
\newcommand{\regexp}[1]{%
  {\tiny$^{^\lceil}\!\!$%
   {\normalsize\code{#1}}%
   $\!\rfloor\!$%
  }}
\newcommand{\envvar}[1]{%
  \$#1%                                 $ <-- bow to font-lock 3 times!
  \index{#1@{\$#1}}%                    $
  \index{environment variables!{\$#1}}% $
}
\newcommand{\makevar}[1]{#1}
\let\character=\samp

% constants defined in Python modules or C headers, not language constants:
\let\constant=\sectcode

\newcommand{\manpage}[2]{{\emph{#1}(#2)}}
\newcommand{\rfc}[1]{RFC #1\index{RFC!RFC #1}}
\newcommand{\program}[1]{\strong{#1}}


% Deprecation stuff.
% Should be extended to allow an index / list of deprecated stuff.  But
% there's a lot of stuff that needs to be done to make that automatable.
%
% First parameter is the release number that deprecates the feature, the
% second is the action the should be taken by users of the feature.
%
% Example:
%
%  \deprecated {1.5.1}
%    {Use \method{frobnicate()} instead.}
%
\newcommand{\deprecated}[2]{%
  \strong{Deprecated since release #1.}  #2\par}


\newenvironment{tableii}[4]{%
  \begin{center}%
    \def\lineii##1##2{\csname#2\endcsname{##1}&##2\\}%
    \begin{tabular}{#1}\strong{#3}&\strong{#4} \\ \hline%
}{%
    \end{tabular}%
  \end{center}%
}

\newenvironment{tableiii}[5]{%
  \begin{center}%
    \def\lineiii##1##2##3{\csname#2\endcsname{##1}&##2&##3\\}%
    \begin{tabular}{#1}\strong{#3}&\strong{#4}&\strong{#5} \\ \hline%
}{%
    \end{tabular}%
  \end{center}%
}

\newcommand{\itemnewline}[1]{%
  \@tempdima\linewidth%
  \advance\@tempdima \leftmargin\makebox[\@tempdima][l]{#1}%
}

% Cross-referencing (AMK)
% Sample usage:
%  \begin{seealso}
%    \seemodule{rand}{Uniform random number generator}; % Module xref
%    \seetext{\emph{Encyclopedia Britannica}}.          % Ref to a book
% 
%    % A funky case: module name contains '_'; have to supply an optional key
%    \seemodule[copyreg]{copy_reg}{pickle interface constructor registration}
%
%  \end{seealso}

\newcommand{\@modulebadkey}{{--just-some-junk--}}

\@ifundefined{pdfannotlink}{%
  \newcommand{\seemodule}[3][\@modulebadkey]{%
    \ifx\@modulebadkey#1\def\@modulekey{#2}\else\def\@modulekey{#1}\fi%
    \ref{module-\@modulekey}:\quad %
    Module \module{#2}%
    \quad (#3)%
  }
}{\newcommand{\seemodule}[3][\@modulebadkey]{%
    \ifx\@modulebadkey#1\def\@modulekey{#2}\else\def\@modulekey{#1}\fi%
    \ref{module-\@modulekey}:\quad %
    {\pdfannotlink attr{/Border [0 0 0]} goto name{label.module-\@modulekey}%
     \LinkColor Module \module{#2} \NormalColor%
     \pdfendlink%
    }%
    \quad (#3)%
  }
}
\newenvironment{seealso}[0]{
  \strong{See Also:}\par
  \def\seetext##1{\par{##1}}
}{\par}


% Allow the release number to be specified independently of the
% \date{}.  This allows the date to reflect the document's date and
% release to specify the Python release that is documented.
%
\newcommand{\@release}{}
\newcommand{\version}{}
\newcommand{\releasename}{Release}
\newcommand{\release}[1]{%
  \renewcommand{\@release}{\releasename\space\version}%
  \renewcommand{\version}{#1}}

% Allow specification of the author's address separately from the
% author's name.  This can be used to format them differently, which
% is a good thing.
%
\newcommand{\@authoraddress}{}
\newcommand{\authoraddress}[1]{\renewcommand{\@authoraddress}{#1}}

% This sets up the fancy chapter headings that make the documents look
% at least a little better than the usual LaTeX output.
%
\@ifundefined{ChTitleVar}{}{
  \ChNameVar{\raggedleft\normalsize\HeaderFamily}
  \ChNumVar{\raggedleft \bfseries\Large\HeaderFamily}
  \ChTitleVar{\raggedleft \rm\Huge\HeaderFamily}
  % This creates chapter heads without the leading \vspace*{}:
  \def\@makechapterhead#1{%
    {\parindent \z@ \raggedright \normalfont
      \ifnum \c@secnumdepth >\m@ne
        \DOCH
      \fi
      \interlinepenalty\@M
      \DOTI{#1}
    }
  }
}

% Tell TeX about pathological hyphenation cases:
\hyphenation{Base-HTTP-Re-quest-Hand-ler}
