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

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

% The "fncychap" package is used to get the nice chapter headers.  The
% .sty file is distributed with Python, so you should not need to disable
% it.  You'd also end up with a mixed page style; uglier than stock LaTeX!
%
\RequirePackage[Bjarne]{fncychap}\typeout{Using fancy chapter headings.}

% for PDF output, use maximal compression
\@ifundefined{pdfannotlink}{
  \let\LinkColor=\relax
  \let\NormalColor=\relax
}{%
  \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}%
  }
  \renewcommand{\thepage}{\roman{page}}
  %
  % 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\hyperpageanchor{\pdfdest name{page.\thepage}}
  \let\HYPERPAGEANCHOR\hyperpageanchor
  \def\@hyperfixhead{%
   \let\H@old@thehead\@thehead
       \gdef\@foo{\pdfdest name{page.\thepage} fit}%
     \expandafter\ifx\expandafter\@empty\H@old@thehead
       \def\H@old@thehead{\hfil}\fi
    \def\@thehead{\@foo\relax\H@old@thehead}%
  }
}

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

% Augment the sectioning commands used to get our own font family in place:
\renewcommand{\section}{\@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

%
% This is the old hack, which didn't work with 2e.
% You should not need this since the rest of the documentation is now
% LaTeX2e-only.
%
%\def\_{\ifnum\fam=\ttfamily \char'137\else{\tt\char'137}\fi}
%\catcode`\_=12
%\catcode`\_=\active\def_{\ifnum\fam=\ttfamily \char'137 \else{\tt\char'137}\fi}



%%  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]{\index{#1@{\idxcode{#1()}} (built-in function)}}

% 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
\if@usemoduleindex
  \newwrite\modindexfile
  \openout\modindexfile=mod\jobname.idx
\fi

% Add the defining entry for a module
\newcommand{\defmodindex}[2]{%
  \index{#1@{\idxcode{#1}} (#2module)|textbf}%
  \setindexsubitem{(in module #1)}%
  \if@usemoduleindex%
    \write\modindexfile{#1 \thepage}%
  \fi}

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

% Python & extension modules outside the main distribution
\newcommand{\modindex}[1]{\defmodindex{#1}{}}
\newcommand{\exmodindex}[1]{\defmodindex{#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}}


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


% cfuncdesc should be called as
% \begin{cfuncdesc}{type}{name}{arglist}
% ... description ...
% \end{cfuncdesc}
\newenvironment{cfuncdesc}[3]{%
  \begin{fulllineitems}%
    \item[\code{#1 \bfcode{#2}(\varvars{#3})}]%
    \index{#2@{\idxcode{#2()}}}%
}{\end{fulllineitems}}

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

\newenvironment{ctypedesc}[1]{%
  \begin{fulllineitems}%
    \item[\bfcode{#1}]\ttindex{#1}
}{\end{fulllineitems}}

\newcommand{\funcline}[2]{\funclineni{#1}{#2}\ttindex{#1()}}
\newenvironment{funcdesc}[2]{%
  \begin{fulllineitems}%
    \funcline{#1}{#2}%
}{\end{fulllineitems}}

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

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

\newenvironment{classdesc}[2]{%
  \begin{fulllineitems}%
    \item[\code{\bfcode{#1}(\varvars{#2})}]%
    \ttindex{#1}%
    \def\baseclasses##1{}%
}{\end{fulllineitems}}

\newenvironment{excdesc}[1]{%
  \begin{fulllineitems}%
    \item[\bfcode{#1}]\ttindex{#1}%
}{\end{fulllineitems}}

\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}]}
\newenvironment{datadescni}[1]{%
  \begin{fulllineitems}%
    \datalineni{#1}%
}{\end{fulllineitems}}

\newenvironment{opcodedesc}[2]{%
  \begin{fulllineitems}%
    \item[\bfcode{#1}\quad\var{#2}]%
}{\end{fulllineitems}}


\let\nodename=\label

% 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}{\code{NULL}}

% 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]{\mbox{`\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
    \mbox{\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]{\mbox{\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=\code
\let\keyword=\code
\let\exception=\code
\let\class=\code
\let\function=\code
\let\member=\code
\let\method=\code

\let\cfunction=\code
\let\ctype=\code
\let\cdata=\code

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

\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}\hline \strong{#3}&\strong{#4} \\ \hline%
}{%
      \hline%
    \end{tabular}%
  \end{center}%
}

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

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

\newcommand{\sectcode}[1]{{\sectcodefont{#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}

\newif\if@keyedmodule\@keyedmodulefalse
\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
  % These should only be defined within the {seealso} environment:
  %\def\see@module##1##2{\ref{module-##1}:\quad Module \module{##1}\quad (##2)}
%  \def\@seemodule[##1]##2##3{%
%    \ref{module-##2}:\quad %
%    \@ifundefined{pdfannotlink}{%
%      Module \module{##2}%
%    }{\if@keyedmodule\@keyedmodulefalse\fi%
%      {\pdfannotlink attr{/Border [0 0 0]} goto name{module.##1}%
%       \LinkColor Module \module{##2}\NormalColor\pdfendlink}%
%      }%
%    \quad (##3)%
%  }
%  \def\seemodule{%
%    \@ifnextchar [\@seemodule{\@keyedmoduletrue \@seemodule[]}%
%  }
  \def\seetext##1{\par{##1}}
}{\par}


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

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