%
% 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)]

\RequirePackage{longtable}

% Uncomment these two lines to ignore the paper size and make the page 
% size more like a typical published manual.
%\renewcommand{\paperheight}{9in}
%\renewcommand{\paperwidth}{8.5in}   % typical squarish manual
%\renewcommand{\paperwidth}{7in}     % O'Reilly ``Programmming Python''

% 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\ifpy@doing@page@targets
\py@doing@page@targetsfalse

\ifx\pdfoutput\undefined\else\ifcase\pdfoutput
\else
  \input{pdfcolor}
  \let\py@LinkColor=\NavyBlue
  \let\py@NormalColor=\Black
  \pdfcompresslevel=9
  \pdfpagewidth=\paperwidth    % page width of PDF output
  \pdfpageheight=\paperheight  % page height of PDF output
  %
  % Pad the number with '0' to 3 digits wide so no page name is a prefix
  % of any other.
  %
  \newcommand{\py@targetno}[1]{\ifnum#1<100 0\fi\ifnum#1<10 0\fi#1}
  \newcommand{\py@pageno}{\py@targetno\thepage}
  %
  % This definition allows the entries in the page-view of the ToC to be
  % active links.  Some work, some don't.
  %
  \let\py@OldContentsline=\contentsline
  %
  % Macro that takes two args: the name to link to and the content of
  % the link.  This takes care of the PDF magic, getting the colors
  % the same for each link, and avoids having lots of garbage all over 
  % this style file.
  \newcommand{\py@linkToName}[2]{%
    \pdfannotlink attr{/Border [0 0 0]} goto name{#1}%
      \py@LinkColor#2\py@NormalColor%
    \pdfendlink%
  }    
  % Compute the padded page number separately since we end up with a pair of
  % \relax tokens; this gets the right string computed and works.
  \renewcommand{\contentsline}[3]{%
    \def\my@pageno{\py@targetno{#3}}%
    \py@OldContentsline{#1}{\py@linkToName{page\my@pageno}{#2}}{#3}%
  }
  \AtEndDocument{
    \InputIfFileExists{\jobname.bkm}{\pdfcatalog{/PageMode /UseOutlines}}{}
  }
  \newcommand{\py@target}[1]{%
    \ifpy@doing@page@targets%
      {\pdfdest name{#1} xyz}%
    \fi%
  }
  \let\py@OldLabel=\label
  \renewcommand{\label}[1]{%
    \py@OldLabel{#1}%
    \py@target{label-#1}%
  }
  % This stuff adds a page# destination to every PDF page, where # is three
  % digits wide, padded with leading zeros.  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
       \global\def\@foo{\py@target{page\py@pageno}}%
     \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
\textheight \paperheight
\advance\textheight by -2in

\oddsidemargin 0pt
\evensidemargin 0pt
%\evensidemargin -.25in  % for ``manual size'' documents
\marginparwidth 0.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

% Use this to set the font family for headers and other decor:
\newcommand{\py@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]{{\py@HeaderFamily\thepage}}
    \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}}
    \fancyfoot[RE]{{\py@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]{{\py@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
    }
  }
}

% 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.

\let\py@OldVerbatim=\verbatim
\let\py@OldEndVerbatim=\endverbatim
\RequirePackage{verbatim}

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

\renewcommand{\verbatim}{%
  \setlength{\parindent}{1cm}%
  % Calculate the text width for the minipage:
  \setlength{\py@codewidth}{\linewidth}%
  \addtolength{\py@codewidth}{-\parindent}%
  %
  \par\indent%
  \begin{minipage}[t]{\py@codewidth}%
    \small%
    \py@OldVerbatim%
}
\renewcommand{\endverbatim}{%
    \py@OldEndVerbatim%
  \end{minipage}%
}

% This does a similar thing for the {alltt} environment:
\RequirePackage{alltt}
\let\py@OldAllTT=\alltt
\let\py@OldEndAllTT=\endalltt

\renewcommand{\alltt}{%
  \setlength{\parindent}{1cm}%
  % Calculate the text width for the minipage:
  \setlength{\py@codewidth}{\linewidth}%
  \addtolength{\py@codewidth}{-\parindent}%
  %
  \par\indent%
  \begin{minipage}[t]{\py@codewidth}%
    \small%
    \py@OldAllTT%
}
\renewcommand{\endalltt}{%
    \py@OldEndAllTT%
  \end{minipage}%
}


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


%%  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; it matches O'Reilly style more.
%
\newcommand{\py@idxcode}[1]{\texttt{#1}}
%\renewcommand{\py@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{\kwindex}[1]{\indexii{keyword}{#1@{\py@idxcode{#1}}}}
\newcommand{\stindex}[1]{\indexii{statement}{#1@{\py@idxcode{#1}}}}
\newcommand{\opindex}[1]{\indexii{operator}{#1@{\py@idxcode{#1}}}}
\newcommand{\exindex}[1]{\indexii{exception}{#1@{\py@idxcode{#1}}}}
\newcommand{\obindex}[1]{\indexii{object}{#1}}
\newcommand{\bifuncindex}[1]{%
  \index{#1@{\py@idxcode{#1()}} (built-in function)}}

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

% Refer to a module's documentation using a hyperlink of the module's
% name, at least if we're building PDF:
\@ifundefined{pdfannotlink}{%
  \newcommand{\refmodule}[2][\py@modulebadkey]{\module{#2}}
}{%
  \newcommand{\refmodule}[2][\py@modulebadkey]{%
    \ifx\py@modulebadkey#1\def\py@modulekey{#2}\else\def\py@modulekey{#1}\fi%
    \py@linkToName{label-module-\py@modulekey}{\module{#2}}%
  }
}

% support for the module index
\newif\ifpy@UseModuleIndex
\py@UseModuleIndexfalse

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

% Add the defining entry for a module
\newcommand{\py@modindex}[2]{%
  \renewcommand{\py@thismodule}{#1}
  \setindexsubitem{(in module #1)}%
  \index{#1@{\py@idxcode{#1}} (#2module)|textbf}%
  \ifpy@UseModuleIndex%
    \@ifundefined{py@modplat@\py@thismodulekey}{
      \write\modindexfile{\protect\indexentry{#1@{\texttt{#1}}}{\thepage}}%
    }{\write\modindexfile{\protect\indexentry{#1@{\texttt{#1} %
        \emph{(\py@platformof[\py@thismodulekey]{})}}}{\thepage}}%
    }
  \fi%
}

% *** XXX *** THE NEXT FOUR MACROS ARE NOW OBSOLETE !!! ***

% built-in & Python modules in the main distribution
\newcommand{\bimodindex}[1]{\py@modindex{#1}{built-in }%
  \typeout{*** MACRO bimodindex IS OBSOLETE -- USE declaremodule INSTEAD!}}
\newcommand{\stmodindex}[1]{\py@modindex{#1}{standard }%
  \typeout{*** MACRO stmodindex IS OBSOLETE -- USE declaremodule INSTEAD!}}

% Python & extension modules outside the main distribution
\newcommand{\modindex}[1]{\py@modindex{#1}{}%
  \typeout{*** MACRO modindex IS OBSOLETE -- USE declaremodule INSTEAD!}}
\newcommand{\exmodindex}[1]{\py@modindex{#1}{extension }%
  \typeout{*** MACRO exmodindex IS OBSOLETE -- USE declaremodule INSTEAD!}}

% Additional string for an index entry
\newif\ifpy@usingsubitem\py@usingsubitemfalse
\newcommand{\py@indexsubitem}{}
\newcommand{\setindexsubitem}[1]{\renewcommand{\py@indexsubitem}{ #1}%
                                 \py@usingsubitemtrue}
\newcommand{\ttindex}[1]{%
  \ifpy@usingsubitem
    \index{#1@{\py@idxcode{#1}}\py@indexsubitem}%
  \else%
    \index{#1@{\py@idxcode{#1}}}%
  \fi%
}
\newcommand{\withsubitem}[2]{%
  \begingroup%
    \def\ttindex##1{\index{##1@{\py@idxcode{##1}} #1}}%
    #2%
  \endgroup%
}


% Module synopsis processing -----------------------------------------------
%
\newcommand{\py@thisclass}{}
\newcommand{\py@thismodule}{}
\newcommand{\py@thismodulekey}{}
\newcommand{\py@thismoduletype}{}

\newcommand{\py@standardIndexModule}[1]{\py@modindex{#1}{standard }}
\newcommand{\py@builtinIndexModule}[1]{\py@modindex{#1}{built-in }}
\newcommand{\py@extensionIndexModule}[1]{\py@modindex{#1}{extension }}
\newcommand{\py@IndexModule}[1]{\py@modindex{#1}{}}

\newif\ifpy@HaveModSynopsis       \py@HaveModSynopsisfalse
\newif\ifpy@ModSynopsisFileIsOpen \py@ModSynopsisFileIsOpenfalse
\newif\ifpy@HaveModPlatform       \py@HaveModPlatformfalse

% \declaremodule[key]{type}{name}
\newcommand{\declaremodule}[3][\py@modulebadkey]{
  \py@openModSynopsisFile
  \renewcommand{\py@thismoduletype}{#2}
  \ifx\py@modulebadkey#1
    \renewcommand{\py@thismodulekey}{#3}
  \else
    \renewcommand{\py@thismodulekey}{#1}
  \fi
  \@ifundefined{py@#2IndexModule}{%
    \typeout{*** MACRO declaremodule called with unknown module type: `#2'}
    \py@IndexModule{#3}%
  }{%
    \csname py@#2IndexModule\endcsname{#3}%
  }
  \label{module-\py@thismodulekey}
}
\newif\ifpy@ModPlatformFileIsOpen \py@ModPlatformFileIsOpenfalse
\newcommand{\py@ModPlatformFilename}{\jobname.pla}
\newcommand{\platform}[1]{
  \ifpy@ModPlatformFileIsOpen\else
    \newwrite\py@ModPlatformFile
    \openout\py@ModPlatformFile=\py@ModPlatformFilename
    \py@ModPlatformFileIsOpentrue
  \fi
}
\InputIfFileExists{\jobname.pla}{}{}
\newcommand{\py@platformof}[2][\py@modulebadkey]{%
  \ifx\py@modulebadkey#1 \def\py@key{#2}%
  \else \def\py@key{#1}%
  \fi%
  \csname py@modplat@\py@key\endcsname%
}
\newcommand{\ignorePlatformAnnotation}[1]{}

% \moduleauthor{name}{email}
\newcommand{\moduleauthor}[2]{}

% \sectionauthor{name}{email}
\newcommand{\sectionauthor}[2]{}


\newcommand{\py@defsynopsis}{Module has no synopsis.}
\newcommand{\py@modulesynopsis}{\py@defsynopsis}
\newcommand{\modulesynopsis}[1]{
  \py@HaveModSynopsistrue
  \renewcommand{\py@modulesynopsis}{#1}
}

% define the file
\newwrite\py@ModSynopsisFile

% hacked from \addtocontents from latex.ltx:
\long\def\py@writeModSynopsisFile#1{%
  \protected@write\py@ModSynopsisFile%
      {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
      {\string#1}%
}
\newcommand{\py@closeModSynopsisFile}{
  \ifpy@ModSynopsisFileIsOpen
    \closeout\py@ModSynopsisFile
    \py@ModSynopsisFileIsOpenfalse
  \fi
}
\newcommand{\py@openModSynopsisFile}{
  \ifpy@ModSynopsisFileIsOpen\else
    \openout\py@ModSynopsisFile=\py@ModSynopsisFilename
    \py@ModSynopsisFileIsOpentrue
  \fi
}

\newcommand{\py@ProcessModSynopsis}{
  \ifpy@HaveModSynopsis
    \py@writeModSynopsisFile{\modulesynopsis%
      {\py@thismodulekey}{\py@thismodule}%
      {\py@thismoduletype}{\py@modulesynopsis}}%
    \py@HaveModSynopsisfalse
  \fi
  \renewcommand{\py@modulesynopsis}{\py@defsynopsis}
}
\AtEndDocument{\py@ProcessModSynopsis\py@closeModSynopsisFile}


\long\def\py@writeModPlatformFile#1{%
  \protected@write\py@ModPlatformFile%
    {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
    {\string#1}%
}


\newcommand{\localmoduletable}{
  \IfFileExists{\py@ModSynopsisFilename}{
    \begin{synopsistable}
      \input{\py@ModSynopsisFilename}
    \end{synopsistable}
  }{}
}

\@ifundefined{pdfoutput}{
  \newcommand{\py@ModSynopsisSummary}[4]{\bfcode{#2} & #4\\}
}{
  \newcommand{\py@ModSynopsisSummary}[4]{%
    \py@linkToName{label-module-#1}{\bfcode{#2}} & #4\\
  }
}
\newenvironment{synopsistable}{
  % key, name, type, synopsis
  \let\modulesynopsis=\py@ModSynopsisSummary
  \begin{tabular}{ll}
}{
  \end{tabular}
}
%
% --------------------------------------------------------------------------


\newcommand{\py@reset}{
  \py@usingsubitemfalse
  \py@ProcessModSynopsis
  \renewcommand{\py@thisclass}{}
  \renewcommand{\py@thismodule}{}
  \renewcommand{\py@thismodulekey}{}
  \renewcommand{\py@thismoduletype}{}
}

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


% This gets the underscores closer to the right width; the only change
% from standard LaTeX is the width specified.

\DeclareTextCommandDefault{\textunderscore}{%
  \leavevmode \kern.06em\vbox{\hrule\@width.55em}}

% 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


% 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.
%
\newcommand{\py@itemnewline}[1]{%
  \@tempdima\linewidth%
  \advance\@tempdima \leftmargin\makebox[\@tempdima][l]{#1}%
}

\newenvironment{fulllineitems}{
  \begin{list}{}{\labelwidth \leftmargin \labelsep 0pt
                 \rightmargin 0pt \topsep -\parskip \partopsep \parskip
                 \itemsep -\parsep
                 \let\makelabel=\py@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.
%
% Typical usage:
%
%     \begin{funcdesc}{myfunc}{reqparm\optional{, optparm}}
%                                    ^^^       ^^^
%                          No space here       No space here
%
% When a function has multiple optional parameters, \optional should be
% nested, not chained.  This is right:
%
%     \begin{funcdesc}{myfunc}{\optional{parm1\optional{, parm2}}}
%
\let\py@badkey=\@undefined

\newcommand{\optional}[1]{%
  {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}}

% This can be used when a function or method accepts an varying number 
% of arguments, such as by using the *args syntax in the parameter list.
\newcommand{\py@moreargs}{...}

% This can be used when you don't want to document the parameters to a 
% function or method, but simply state that it's an alias for
% something else.
\newcommand{\py@unspecified}{...}

% C functions ------------------------------------------------------------
% \begin{cfuncdesc}[refcount]{type}{name}{arglist}
% Note that the [refcount] slot should only be filled in by
% tools/anno-api.py; it pulls the value from the refcounts database.
\newenvironment{cfuncdesc}[4][\py@badkey]{
  \begin{fulllineitems}
    \item[\code{#2 \bfcode{#3}(\py@varvars{#4})}\index{#3@{\py@idxcode{#3()}}}]
    \ifx#1\@undefined\else%
      \emph{Return value: \textbf{#1}.}\\
    \fi
}{\end{fulllineitems}}

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

% C data types -----------------------------------------------------------
% \begin{ctypedesc}[index name]{typedef name}
\newenvironment{ctypedesc}[2][\py@badkey]{
  \begin{fulllineitems}
    \item[\bfcode{#2}%
    \ifx#1\@undefined%
      \index{#2@{\py@idxcode{#2}} (C type)}
    \else%
      \index{#2@{\py@idxcode{#1}} (C type)}
    \fi]
}{\end{fulllineitems}}

% Funky macros -----------------------------------------------------------
% \begin{csimplemacro}{name}
% -- "simple" because it has no args; NOT for constant definitions!
\newenvironment{csimplemacrodesc}[1]{
  \begin{fulllineitems}
    \item[\bfcode{#1}\index{#1@{\py@idxcode{#1}} (macro)}]
}{\end{fulllineitems}}

% simple functions (not methods) -----------------------------------------
% \begin{funcdesc}{name}{args}
\newcommand{\funcline}[2]{%
  \funclineni{#1}{#2}%
  \index{#1@{\py@idxcode{#1()}} (in module \py@thismodule)}}
\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}(\py@varvars{#2})}]}
\newenvironment{funcdescni}[2]{
  \begin{fulllineitems}
    \funclineni{#1}{#2}
}{\end{fulllineitems}}

% classes ----------------------------------------------------------------
% \begin{classdesc}{name}{constructor args}
\newenvironment{classdesc}[2]{
  % Using \renewcommand doesn't work for this, for unknown reasons:
  \global\def\py@thisclass{#1}
  \begin{fulllineitems}
    \item[\strong{class }\code{\bfcode{#1}(\py@varvars{#2})}%
      \index{#1@{\py@idxcode{#1}} (class in \py@thismodule)}]
}{\end{fulllineitems}}

% \begin{classdesc*}{name}
\newenvironment{classdesc*}[1]{
  % Using \renewcommand doesn't work for this, for unknown reasons:
  \global\def\py@thisclass{#1}
  \begin{fulllineitems}
    \item[\strong{class }\code{\bfcode{#1}}%
      \index{#1@{\py@idxcode{#1}} (class in \py@thismodule)}]
}{\end{fulllineitems}}

% \begin{excclassdesc}{name}{constructor args}
% but indexes as an exception
\newenvironment{excclassdesc}[2]{
  % Using \renewcommand doesn't work for this, for unknown reasons:
  \global\def\py@thisclass{#1}
  \begin{fulllineitems}
    \item[\strong{exception }\code{\bfcode{#1}(\py@varvars{#2})}%
      \index{#1@{\py@idxcode{#1}} (exception in \py@thismodule)}]
}{\end{fulllineitems}}

% There is no corresponding {excclassdesc*} environment.  To describe
% a class exception without parameters, use the {excdesc} environment.


\let\py@classbadkey=\@undefined

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

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

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

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

% For exceptions: --------------------------------------------------------
% \begin{excdesc}{name}
%  -- for constructor information, use excclassdesc instead
\newenvironment{excdesc}[1]{
  \begin{fulllineitems}
    \item[\strong{exception }\bfcode{#1}%
          \index{#1@{\py@idxcode{#1}} (exception in \py@thismodule)}]
}{\end{fulllineitems}}

% Module data or constants: ----------------------------------------------
% \begin{datadesc}{name}
\newcommand{\dataline}[1]{%
  \datalineni{#1}\index{#1@{\py@idxcode{#1}} (data in \py@thismodule)}}
\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}}


\newcommand{\nodename}[1]{\label{#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}{\constant{NULL}}

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

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

\newcommand{\bfcode}[1]{\code{\bfseries#1}} % bold-faced code font
\newcommand{\kbd}[1]{\code{#1}}
\newcommand{\samp}[1]{`\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.  This also works directly in math mode.
\newcommand{\var}[1]{%
  \ifmmode%
    \hbox{\normalsize\textrm{\textit{#1\/}}}%
  \else%
    \normalsize\textrm{\textit{#1\/}}%
  \fi%
}
\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}}'}
\newcommand{\filenq}[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{\py@url}[1]{\mbox{\small\textsf{#1}}}
}{
  \newcommand{\py@url}[1]{{%
    \pdfannotlink attr{/Border [0 0 0]} user{/S /URI /URI (#1)}%
    \py@LinkColor%                              color of the link text
    \mbox{\small\textsf{#1}}%
    \py@NormalColor%                    Turn it back off; these are declarative
    \pdfendlink}%                       and don't appear bound to the current
  }%                                    formatting "box".
}
\let\url=\py@url
\newcommand{\email}[1]{{\small\textsf{#1}}}
\newcommand{\newsgroup}[1]{{\small\textsf{#1}}}

\newcommand{\py@varvars}[1]{{%
  {\let\unspecified=\py@unspecified%
   \let\moreargs=\py@moreargs%
   \var{#1}}}}

% I'd really like to get rid of this!
\newif\iftexi\texifalse

% This is used to get l2h to put the copyright and abstract on
% a separate HTML page.
\newif\ifhtml\htmlfalse


% 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.
%
\newcommand{\module}[1]{\texttt{#1}}
\newcommand{\keyword}[1]{\texttt{#1}}
\newcommand{\exception}[1]{\texttt{#1}}
\newcommand{\class}[1]{\texttt{#1}}
\newcommand{\function}[1]{\texttt{#1}}
\newcommand{\member}[1]{\texttt{#1}}
\newcommand{\method}[1]{\texttt{#1}}

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

\newcommand{\cfunction}[1]{\texttt{#1}}
\newcommand{\ctype}[1]{\texttt{#1}}     % C struct or typedef name
\newcommand{\cdata}[1]{\texttt{#1}}     % C variable, typically global

\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%
  \index{#1@{#1}}%
  \index{environment variables!{#1}}%
}
\newcommand{\makevar}[1]{#1}            % variable in a Makefile
\newcommand{\character}[1]{\samp{#1}}

% constants defined in Python modules or C headers, not language constants:
\newcommand{\constant}[1]{\code{#1}}    % manifest constant, not syntactic

\newcommand{\manpage}[2]{{\emph{#1}(#2)}}
\newcommand{\pep}[1]{PEP #1\index{Python Enhancement Proposals!PEP #1}}
\newcommand{\rfc}[1]{RFC #1\index{RFC!RFC #1}}
\newcommand{\program}[1]{\strong{#1}}
\newcommand{\programopt}[1]{\strong{#1}}
% Note that \longprogramopt provides the '--'!
\newcommand{\longprogramopt}[1]{\strong{-{}-#1}}

% cited titles:  \citetitle{Title of Work}
%       online:  \citetitle[url-to-resource]{Title of Work}
\newcommand{\citetitle}[2][URL]{\emph{#2}}


% 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}

% New stuff.
% This should be used to mark things which have been added to the
% development tree but that aren't in the release, but are documented.
% This allows release of documentation that already includes updated
% descriptions.  Place at end of descriptor environment.
%
% Example:
%  \versionadded{1.5.2}
%  \versionchanged[short explanation]{2.0}
%
\newcommand{\versionadded}[2][\py@badkey]{%
  \ifx#1\@undefined%
    {  New in version #2.  }%
  \else%
    {  New in version #2:\ #1.  }%
  \fi%
}
\newcommand{\versionchanged}[2][\py@badkey]{%
  \ifx#1\@undefined%
    {  Changed in version #2.  }%
  \else%
    {  Changed in version #2:\ #1.  }%
  \fi%
}


% Tables.
%
\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{longtableii}[4]{%
  \begin{center}%
    \def\lineii##1##2{\csname#2\endcsname{##1}&##2\\}%
    \begin{longtable}[c]{#1}\strong{#3}&\strong{#4} \\* \hline\endhead%
}{%
    \end{longtable}%
  \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}%
}

\newenvironment{longtableiii}[5]{%
  \begin{center}%
    \def\lineiii##1##2##3{\csname#2\endcsname{##1}&##2&##3\\}%
    \begin{longtable}[c]{#1}\strong{#3}&\strong{#4}&\strong{#5} \\%
      \hline\endhead%
}{%
    \end{longtable}%
  \end{center}%
}

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

\newenvironment{longtableiv}[6]{%
  \begin{center}%
    \def\lineiv##1##2##3##4{\csname#2\endcsname{##1}&##2&##3&##4\\}%
    \begin{longtable}[c]{#1}\strong{#3}&\strong{#4}&\strong{#5}&\strong{#6}%
      \\%
      \hline\endhead%
}{%
    \end{longtable}%
  \end{center}%
}

% Cross-referencing (AMK, new impl. FLD)
% 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}{Interface constructor registration for
%                                  \module{pickle}.}
%  \end{seealso}
%
% Note that the last parameter for \seemodule and \seetext should be complete
% sentences and be terminated with the proper punctuation.

\@ifundefined{pdfannotlink}{%
  \newcommand{\py@seemodule}[3][\py@modulebadkey]{%
    \par%
    \ifx\py@modulebadkey#1\def\py@modulekey{#2}\else\def\py@modulekey{#1}\fi%
    \begin{fulllineitems}
      \item[Module \module{#2} (section \ref{module-\py@modulekey}):]
      #3
    \end{fulllineitems}
  }
}{\newcommand{\py@seemodule}[3][\py@modulebadkey]{%
    \par%
    \ifx\py@modulebadkey#1\def\py@modulekey{#2}\else\def\py@modulekey{#1}\fi%
    \begin{fulllineitems}
      \item[\py@linkToName{label-module-\py@modulekey}{Module \module{#2}}
            (section \ref{module-\py@modulekey}):]
      #3
    \end{fulllineitems}
  }
}
% \seetitle[url]{title}{why it's interesting}
\newcommand{\py@seetitle}[3][\py@modulebadkey]{%
  \par
  \begin{fulllineitems}
    \item[\citetitle{#2}]
    \ifx\py@modulebadkey#1\else
      \item[{\small{(\url{#1})}}]
    \fi
    #3
  \end{fulllineitems}
}
% \seepep{number}{title}{why it's interesting}
\newcommand{\py@seepep}[3]{%
  \par%
  \begin{fulllineitems}
    \item[\pep{#1}, ``\emph{#2}'']
    #3
  \end{fulllineitems}
}
% \seerfc{number}{title}{why it's interesting}
\newcommand{\py@seerfc}[3]{%
  \par%
  \begin{fulllineitems}
    \item[\rfc{#1}, ``\emph{#2}'']
    #3
  \end{fulllineitems}
}
% \seeurl{url}{why it's interesting}
\newcommand{\py@seeurl}[2]{%
  \par%
  \begin{fulllineitems}
    \item[\url{#1}]
    #2
  \end{fulllineitems}
}
\newenvironment{seealso}[0]{
  \par
  \strong{See Also:}\par
  \def\seetext##1{\par{##1}}
  \let\seemodule=\py@seemodule
  \let\seepep=\py@seepep
  \let\seerfc=\py@seerfc
  \let\seetitle=\py@seetitle
  \let\seeurl=\py@seeurl
}{\par}


% Allow the Python 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{\py@release}{}
\newcommand{\version}{}
\newcommand{\shortversion}{}
\newcommand{\releaseinfo}{}
\newcommand{\releasename}{Release}
\newcommand{\release}[1]{%
  \renewcommand{\py@release}{\releasename\space\version}%
  \renewcommand{\version}{#1}}
\newcommand{\setshortversion}[1]{%
  \renewcommand{\shortversion}{#1}}
\newcommand{\setreleaseinfo}[1]{%
  \renewcommand{\releaseinfo}{#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{\py@authoraddress}{}
\newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}}
\let\developersaddress=\authoraddress
\let\developer=\author
\let\developers=\author

% 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\py@HeaderFamily}
  \ChNumVar{\raggedleft \bfseries\Large\py@HeaderFamily}
  \ChTitleVar{\raggedleft \rm\Huge\py@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}
    }
  }
}


% Definition lists; requested by AMK for HOWTO documents.  Probably useful
% elsewhere as well, so keep in in the general style support.
%
\newenvironment{definitions}{%
  \begin{description}%
  \def\term##1{\item[##1]\mbox{}\\*[0mm]}
}{%
  \end{description}%
}

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