diff --git a/Doc/python.sty b/Doc/python.sty
new file mode 100644
index 0000000..73c14b0
--- /dev/null
+++ b/Doc/python.sty
@@ -0,0 +1,623 @@
+%
+% 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 nice 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
+  \let\OldContentsline=\contentsline
+  \renewcommand{\contentsline}[3]{%
+    \OldContentsline{#1}{%
+      \pdfannotlink attr{/Border [0 0 0]} goto name{page.#3}%
+        \LinkColor#2\NormalColor%
+      \pdfendlink%
+    }{#3}%
+  }
+  \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
+    \global\let \@begindvi \@hyperfixhead
+  }
+  \def\hyperpageanchor{%
+       \hyper@anchorstart{page.\thepage}\hyper@anchorend
+   }
+  \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.
+  \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
+\newwrite\modindexfile
+\openout\modindexfile=mod\jobname.idx
+
+% Add the defining entry for a module
+\newcommand{\defmodindex}[2]{%
+  \index{#1@{\idxcode{#1}} (#2module)|textbf}%
+  \setindexsubitem{(in module #1)}%
+  \write\modindexfile{#1 \thepage}}
+
+% 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
+%  \end{seealso}
+
+\newenvironment{seealso}[0]{
+  \strong{See Also:}\par
+  % These should only be defined within the {seealso} environment:
+  \def\seemodule##1##2{\ref{module-##1}:\quad Module \module{##1}\quad (##2)}
+  \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}
+}
+
+%  Use a similar trick to catch the end of the {abstract} environment,
+%  but here make sure the abstract is followed by a blank page if the
+% 'openright' option is used.
+%
+\let\OldEndAbstract=\endabstract
+\renewcommand{\endabstract}{
+  \if@openright
+    \ifodd\value{page}
+      \typeout{Adding blank page after the abstract.}
+      \vfil\pagebreak
+    \fi
+  \fi
+  \OldEndAbstract
+}
+
+% This wraps the \tableofcontents macro with all the magic to get the
+% spacing right and have the right number of pages if the 'openright'
+% option has been used.  This eliminates a fair amount of crud in the
+% individual document files.
+%
+\let\OldTableofcontents=\tableofcontents
+\renewcommand{\tableofcontents}[0]{%
+  \setcounter{page}{1}%
+  \pagebreak%
+  \pagestyle{plain}%
+  {%
+  \parskip = 0mm%
+  \OldTableofcontents%
+  \if@openright%
+    \ifodd\value{page}%
+      \typeout{Adding blank page after the table of contents.}%
+      \pagebreak\hspace{0pt}%
+    \fi%
+  \fi%
+  }%
+  \cleardoublepage%
+  \pagenumbering{arabic}%
+  \@ifundefined{fancyhf}{}{\pagestyle{normal}}%
+}
+
+% 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}}
+
+% Change the title page to look a bit better, and fit in with the
+% fncychap ``Bjarne'' style a bit better.
+%
+\renewcommand{\maketitle}{%
+  \begin{titlepage}%
+    \let\footnotesize\small
+    \let\footnoterule\relax
+    \@ifundefined{ChTitleVar}{}{%
+      \mghrulefill{\RW}}%
+    \@ifundefined{pdfinfo}{}{
+      \pdfinfo
+        author {\@author}
+        title {\@title}
+    }
+    \begin{flushright}%
+      {\rm\Huge\HeaderFamily \@title \par}%
+      {\em\LARGE\HeaderFamily \@release \par}
+      \vfill
+      {\LARGE\HeaderFamily \@author \par}
+      \vfill\vfill
+      {\large
+       \@date \par
+       \vskip 3em
+       \@authoraddress \par
+      }%
+    \end{flushright}%\par
+    \@thanks
+  \end{titlepage}%
+  \setcounter{footnote}{0}%
+  \let\thanks\relax\let\maketitle\relax
+  \gdef\@thanks{}\gdef\@author{}\gdef\@title{}
+}
+
+% 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}
+    }
+  }
+  \typeout{Using fancy chapter headings.}
+}
+
+% Tell TeX about pathological hyphenation cases:
+\hyphenation{Base-HTTP-Re-quest-Hand-ler}
