[Reproducible-commits] [epydoc] 02/02: add debian dir
Sascha Steinbiss
sascha at steinbiss.name
Mon May 30 23:21:05 UTC 2016
This is an automated email from the git hooks/post-receive script.
sascha-guest pushed a commit to branch master
in repository epydoc.
commit 99da0b1d22421e8de041f0235d543fb2acc30a71
Author: Sascha Steinbiss <sascha at steinbiss.name>
Date: Mon May 30 23:19:03 2016 +0000
add debian dir
---
debian/README.Debian | 50 +++
debian/changelog | 493 +++++++++++++++++++++
debian/compat | 1 +
debian/control | 47 ++
debian/copyright | 47 ++
debian/epydoc-doc.doc-base | 10 +
debian/epydoc-doc.docs | 2 +
debian/patches/build-time.patch | 101 +++++
debian/patches/deterministic-sort.patch | 50 +++
debian/patches/handle-docutils-0.6.patch | 47 ++
debian/patches/hide-memory-addresses.patch | 44 ++
debian/patches/lintian.patch | 20 +
debian/patches/manpages.patch | 214 +++++++++
debian/patches/mention-debian.patch | 12 +
debian/patches/python26-tokenizer.patch | 65 +++
debian/patches/remove-shebang.patch | 10 +
debian/patches/series | 12 +
debian/patches/source-date.patch | 117 +++++
debian/patches/special-latex-entries.patch | 20 +
debian/patches/string-exceptions.patch | 18 +
debian/python-epydoc.dirs | 2 +
debian/python-epydoc.docs | 1 +
debian/python-epydoc.install | 3 +
debian/python-epydoc.manpages | 2 +
debian/python-epydoc.preinst | 14 +
debian/rules | 22 +
debian/smoketest | 52 +++
debian/source/format | 1 +
debian/source/include-binaries | 1 +
debian/tests/control | 4 +
.../data/htmldocs/expected/output/api-objects.txt | 12 +
.../data/htmldocs/expected/output/class-tree.html | 131 ++++++
.../tests/data/htmldocs/expected/output/crarr.png | Bin 0 -> 340 bytes
.../tests/data/htmldocs/expected/output/epydoc.css | 322 ++++++++++++++
.../tests/data/htmldocs/expected/output/epydoc.js | 293 ++++++++++++
.../data/htmldocs/expected/output/frames.html | 17 +
.../tests/data/htmldocs/expected/output/help.html | 278 ++++++++++++
.../htmldocs/expected/output/identifier-index.html | 224 ++++++++++
.../tests/data/htmldocs/expected/output/index.html | 17 +
.../data/htmldocs/expected/output/module-tree.html | 119 +++++
.../data/htmldocs/expected/output/redirect.html | 38 ++
.../expected/output/testpackage-module.html | 174 ++++++++
.../expected/output/testpackage-pysrc.html | 134 ++++++
.../expected/output/testpackage.util-module.html | 325 ++++++++++++++
.../expected/output/testpackage.util-pysrc.html | 196 ++++++++
.../output/testpackage.util.FirstClass-class.html | 313 +++++++++++++
.../testpackage.util._SecondClass-class.html | 250 +++++++++++
.../htmldocs/expected/output/toc-everything.html | 44 ++
.../expected/output/toc-testpackage-module.html | 33 ++
.../output/toc-testpackage.util-module.html | 41 ++
.../tests/data/htmldocs/expected/output/toc.html | 34 ++
debian/tests/data/htmldocs/testpackage/__init__.py | 15 +
debian/tests/data/htmldocs/testpackage/util.py | 76 ++++
debian/tests/htmldocs | 80 ++++
debian/watch | 4 +
55 files changed, 4652 insertions(+)
diff --git a/debian/README.Debian b/debian/README.Debian
new file mode 100644
index 0000000..914d867
--- /dev/null
+++ b/debian/README.Debian
@@ -0,0 +1,50 @@
+OPTIONAL PACKAGES
+
+The epydoc command requires the texlive-latex-extra package to use the --dvi
+and --ps options, and also requires the gs-common package to use the --pdf
+option. The epydocgui command requires the python-tk package. All of these
+optional packages are Recommended in the package dependencies.
+
+The other recommended packages are listed because without them, the install
+process doesn't proceed cleanly -- extra old tetex packages get pulled in and I
+get a mixed system with both tetex and texlive dependencies.
+
+The texlive-latex-extra package is huge, and I wish I could Recommend the
+texlive-latex-base package instead. However, the LaTeX that Epydoc generates
+includes \usepackage directives for packages such as 'multirow', which are
+available only in texlive-latex-extra and *not* texlive-latex-base.
+
+
+OBSOLETE PACKAGES
+
+As of version 2.0-2, all scripts, manpages and Python modules are part of the
+python-epydoc package only. The python2.1-epydoc, python2.2-epydoc and
+python2.3-eypdoc binary packages (which are no longer even built) can be
+removed from your system at any time. They existed only to allow for a smooth
+upgrade from earlier packages prior to version 2.0-2.
+
+
+IMPORTING EPYDOC MODULES
+
+The epydoc Python package is installed as a public package by the
+dh_python2 infrastructure. This means that you can import epydoc
+modules directly from any "current" version of Python (whatever Debian policy
+defines as current, which as of this writing is Python 2.6 and Python 2.7).
+
+
+$PYTHONVER NO LONGER SUPPORTED
+
+Older versions of this Debian package (prior to 2.1-11, when the conversion
+to python-support happened) allowed usage of $PYTHONVER on the command-line to
+specify which version of Python the epydoc code should be executed with.
+Unfortunately, under the new Debian python policy, there is no good way to
+accomplish this any more -- not that the previous way I handled it was all that
+pretty, either.
+
+If you want to run epydoc from the command-line with some version of Python
+other than the default one (/usr/bin/python), then just copy the
+/usr/bin/epydoc script and edit it to your liking. You'll probably just invoke
+the script with a different interpreter. Note: this has to be an interpreter
+supported by the Python infrastructure -- it can't be some arbitrary
+interpreter on your system.
+
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..532409f
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,493 @@
+epydoc (3.0.1+dfsg-12) unstable; urgency=medium
+
+ * Rename honour_source_date_epoch.patch to source-date.patch
+ * Adjust build-time.patch so comments are more consistent with other patches.
+ * Adjust source-date.patch so comments are more consistent with other patches.
+ * Add new patch deterministic-sort.patch (closes: #795835).
+ - This is a request from the Reproducible Builds project
+ - This patch makes class and modules ordering predictable
+ * Add new patch hide-memory-addresses.patch (closes: #795826).
+ - This is a request from the Reproducible Builds project
+ - This patch fixes __repr__ so memory addresses don't appear in docs
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Mon, 17 Aug 2015 21:01:13 -0500
+
+epydoc (3.0.1+dfsg-11) unstable; urgency=medium
+
+ * Remove diffutils from build deps; not necessary because it's essential.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Tue, 11 Aug 2015 18:12:45 -0500
+
+epydoc (3.0.1+dfsg-10) unstable; urgency=medium
+
+ * Add support for the Debian continuous integration environment.
+ - Update debian/control to list Testsuite: autopkgtest
+ - Add debian/tests/control to list tests for CI environment
+ - Update debian/rules to run smoke tests via debian/smoketest
+ - Add build deps on diffutils to support the smoke tests
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Tue, 11 Aug 2015 20:28:07 +0000
+
+epydoc (3.0.1+dfsg-9) unstable; urgency=medium
+
+ * Fix all patches to eliminate the unnecessary leading # character.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Wed, 05 Aug 2015 13:53:49 -0500
+
+epydoc (3.0.1+dfsg-8) unstable; urgency=medium
+
+ * Add patches/honour_source_date_epoch.patch (closes: #790899)
+ - This is a request from the Reproducible Builds project
+ - The new patch adds support for SOURCE_DATE_EPOCH to generate timestamps.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 12 Jul 2015 15:37:33 +0000
+
+epydoc (3.0.1+dfsg-7) unstable; urgency=medium
+
+ * Update Recommends and Suggests for both python-epydoc and epydoc-doc.
+ - epydoc-doc: Recommend the chromium browser rather than iceweasel, since
+ that is the browser I test with day-to-day.
+ - python-epydoc: move ghostscript and texlive dependencies to Suggests to
+ reduce the minimum install size for typical users (texlive is huge).
+ * Update the Description for python-epydoc.
+ - Update the description to indicate that suggested dependencies must be
+ installed to generate documentation in DVI, PostScript, or PDF format
+ using the LaTeX formatter.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 10 May 2015 16:57:28 +0000
+
+epydoc (3.0.1+dfsg-6) unstable; urgency=medium
+
+ * Bump standards version to 3.9.6.1 (no packaging changes).
+ * Update debian/copyright to list 2015 as the copyright date on my changes.
+ * Add dh-python to Build-Depends, to silence build-time warning.
+ * Add patches/build-time.patch (closes: #783326).
+ - This is a request from the Reproducible Builds project
+ - The new patch adds a new --no-include-build-time command-line option
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Tue, 28 Apr 2015 13:18:13 +0000
+
+epydoc (3.0.1+dfsg-5) unstable; urgency=medium
+
+ * Fix Lintian bug in debian/copyright: empty-short-license-in-dep5-copyright.
+ * Bump standards version to 3.9.6.0 (no packaging changes).
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Fri, 03 Oct 2014 19:52:32 +0000
+
+epydoc (3.0.1+dfsg-4) unstable; urgency=low
+
+ * Bump standards version to 3.9.5.0 (no packaging changes).
+ * Fix Lintian warning privacy-breach-logo for doc/index.html.
+ - Add new patch patches/lintian.patch
+ - Remove <IMG src="http://sourceforge.net/sflogo.php?group_id=32455&type=1">
+ - Replace with simple text "SourceForge", with no privacy implications
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 23 Feb 2014 09:39:10 -0600
+
+epydoc (3.0.1+dfsg-3) unstable; urgency=low
+
+ * Convert debian/rules to debhelper7, overriding just a few standard targets.
+ * Update debian/README.debian to use dh_python2 rather than python-support.
+ * Modify debian/python-epydoc.dirs to properly use usr/share/pyshared.
+ * Update debian/copyright to list 2013 as the copyright date on my changes.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Wed, 24 Apr 2013 16:35:13 +0000
+
+epydoc (3.0.1+dfsg-2) unstable; urgency=low
+
+ * Bump standards version to 3.9.4.0; no packaging changes.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Mon, 31 Dec 2012 18:41:53 +0000
+
+epydoc (3.0.1+dfsg-1) unstable; urgency=low
+
+ * Package a new DFSG-free upstream tarball (closes: #692733).
+ - The new tarball removes non-free doc/pycon-epydoc.html
+ - Remove debian/patches/remove-cc-by-nc-sa.patch; no longer needed
+ - Add opts=dversionmangle in debian/watch per Lintian recommendation
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sat, 10 Nov 2012 16:04:44 +0000
+
+epydoc (3.0.1-13) unstable; urgency=low
+
+ * Update copyright date for Debian package files in debian/copyright.
+ * Remove non-free doc/pycon-epydoc.html from the package (closes: #692733).
+ - Remove reference to doc/pycon-epydoc.html from debian/copyright
+ - Add new patch debian/patches/remove-cc-by-nc-sa.patch
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Thu, 08 Nov 2012 09:35:39 -0600
+
+epydoc (3.0.1-12) unstable; urgency=low
+
+ * Update to machine-readable debian/copyright file format, version 1.0.
+ * Bump standards version to 3.9.3.0; no packaging changes.
+ * Move to debhelper (>= 9) and debian/compat=9, which is the new standard.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Mon, 12 Mar 2012 12:06:08 -0500
+
+epydoc (3.0.1-11) unstable; urgency=low
+
+ * Stop depending on transitional gs-common package (closes: #649697).
+ - Replace Recommends: gs-common with Recommends: ghostscript
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Wed, 23 Nov 2011 10:21:01 -0600
+
+epydoc (3.0.1-10) unstable; urgency=low
+
+ * Bump standards version to 3.9.2.0; no packaging changes.
+ * Fix Lintian warning: debian-rules-missing-recommended-target
+ - Restructure build, build-arch, build-indep targets in debian/rules
+ * Transition to dh_python2, since python-support is deprecated for Wheezy.
+ - Replace Build-Depends: python-support with python-all in debian/control
+ - Replace debian/pyversion with X-Python-Version: >= 2.1 in debian/control
+ - Replace call to 'dh_pysupport -d' with 'dh_python2' in debian/rules
+ - Replace python-support with pyshared in debian/cedar-backup2.install
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Fri, 05 Aug 2011 14:41:41 -0500
+
+epydoc (3.0.1-9) unstable; urgency=low
+
+ * Bump standards version to 3.9.1.0 (no packaging changes).
+ * Do a better job of handling special latex entries (closes: #614570).
+ - Apply debian/patches/special-latex-entries.patch
+ - Patch provided by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Wed, 02 Mar 2011 16:41:50 +0000
+
+epydoc (3.0.1-8) unstable; urgency=low
+
+ * Revise manpages.patch based on better understanding of GROFF hyphens.
+ * Apply python26-tokenizer.patch to fix Epydoc tokenizer (closes: #590112).
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 25 Jul 2010 16:04:00 +0000
+
+epydoc (3.0.1-7) unstable; urgency=low
+
+ * Tweak manpage syntax based on advice from Lintian (manpages.patch).
+ * Remove version numbers in Conflicts: to quiet Lintian.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 11 Jul 2010 01:54:23 +0000
+
+epydoc (3.0.1-6) unstable; urgency=low
+
+ * Tweak short description to better match official recommendations.
+ * Bump standards version to 3.9.0.0.
+ * Add Homepage: tag in debian/control.
+ * Convert debian/copyright to new DEP-5 machine-readable format.
+ * Convert to source format "3.0 (quilt)"
+ - Add new file debian/source/format
+ - Add new patch debian/patches/mention-debian.patch
+ - Add new patch debian/patches/remove-shebang.patch
+ - Add new patch debian/patches/handle-docutils-0.6.patch
+ - Add new patch debian/patches/string-exceptions.patch
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Mon, 28 Jun 2010 13:27:23 -0500
+
+epydoc (3.0.1-5) unstable; urgency=low
+
+ * Replace deprecated string exception in apidoc.py (closes: #585290).
+ * Bump standards version to 3.8.4 (no packaging changes).
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sat, 12 Jun 2010 13:17:07 -0500
+
+epydoc (3.0.1-4) unstable; urgency=low
+
+ * Bump standards version to 3.8.3 (no packaging changes).
+ * Add ${misc:Depends} for all binary packages, per lintian recommendation.
+ * Apply patch to fix problems with docutils 0.6 (closes: #561793).
+ - Thanks to Thomas Hille for research and the initial patch.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Thu, 31 Dec 2009 02:56:36 +0000
+
+epydoc (3.0.1-3) unstable; urgency=low
+
+ * Bump standards version to 3.8.1 (no packaging changes).
+ * Bump debhelper compatibility to 7, per linitian recommendation.
+ * Declare a dependency on debhelper (>= 7.0.1) to match compatibility.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 29 Mar 2009 18:10:30 -0500
+
+epydoc (3.0.1-2) unstable; urgency=low
+
+ * Add Suggests: python-profiler to support call graphs (closes: #506756)
+ * List explicit copyright statement in debian/copyright, to quiet lintian.
+ * Move user manual to Programming section in doc-base configuration.
+ * Bump standards version to 3.8.0 (no packaging changes).
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Mon, 8 Dec 2008 18:56:47 -0600
+
+epydoc (3.0.1-1) unstable; urgency=low
+
+ * New upstream release.
+ * Removed #! from top of epydoc/gui.py
+ * Got rid of version mangling in debian/watch.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 3 Feb 2008 13:22:12 -0600
+
+epydoc (3.0~beta1-5) unstable; urgency=low
+
+ * Recommend python-docutils, for reStructuredText markup (closes: #449525).
+ * Use qa.debian.org redirector in debian/watch, so SourceForge URL works.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 18 Nov 2007 18:11:59 -0600
+
+epydoc (3.0~beta1-4) unstable; urgency=low
+
+ * Apply a better fix for #441368 (provided by upstream).
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 30 Sep 2007 14:01:07 -0500
+
+epydoc (3.0~beta1-3) unstable; urgency=low
+
+ * Remove debian/watch file, which doesn't work any more (thanks, Sourceforge).
+ * Apply selected changes from upstream's Subversion repository:
+ - Fixes for identifiers containing dashes, svn rev 1606 (closes: #433424)
+ - Fixes for indexed terms, svn rev 1603 (closes: #441368)
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 30 Sep 2007 10:23:46 -0500
+
+epydoc (3.0~beta1-2) unstable; urgency=low
+
+ * Put back several single-character command-line options (closes: #433804).
+ - Patch cli.py to support the -u and -c options (match the manpage)
+ - Patch cli.py, doc/epydoc-man.html and man/epydoc.1 to support the -n option
+ - Submitted patches to upstream in SF bug #1760001
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Tue, 24 Jul 2007 20:07:18 -0500
+
+epydoc (3.0~beta1-1) unstable; urgency=low
+
+ * Package 3.0 beta 1 release (closes: #425193).
+ - Change README.TXT to README.txt in debian/*.docs
+ - Skip installing apirst2html.py until I understand its purpose better
+ - Remove dh_links call in debian/rules, since it's not really needed
+ - Change debian/control to add Recommends: graphviz (needed for --graph)
+ - Thanks to Cameron Dale for initial package upgrade patch
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Mon, 9 Jul 2007 21:00:30 -0500
+
+epydoc (2.1-13) unstable; urgency=low
+
+ * Completely rework previous fix for bug #425077 based on further testing.
+ - texlive-latex-base is not enough; add texlive-latex-extra,
+ texlive-latex-recommended and texlive-fonts-recommended so
+ everything works and the package gets installed cleanly
+ - Patch latex.py to use fancyhdr, since fancyheadings isn't in texlive
+ - Update README.Debian to reflect changes in recommended dependencies.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 3 Jun 2007 18:20:26 -0500
+
+epydoc (2.1-12) unstable; urgency=low
+
+ * Bring Recommends dependencies up to date with lenny (closes: #425077).
+ - Recommend texlive-latex-base rather than obsolete tetex-extra
+ - Recommend gs-common rather than gs-esp | gs, since this is where ps2pdf lives
+ - Recommend iceweasel | www-browser rather than mozilla | www-browser
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 3 Jun 2007 14:02:45 -0500
+
+epydoc (2.1-11) unstable; urgency=low
+
+ * Bumped Standards-Version to 3.7.2.
+ - Provide empty binary-arch target in debian/rules to quiet lintian
+ * Update to latest Python policy using python-support method.
+ - Change debian/control to use Build-Depends instead of Build-Depends-Indep
+ - Change debian/control to use Depends: ${python:Depends}
+ - Change debian/control to use Recommends: python-tk, not pythonX.Y-tk
+ - Change debian/rules to build using /usr/bin/python, not /usr/bin/python2.4
+ - Change debian/rules to invoke dh_pysupport -d (for ${python:Depends})
+ - Change debian/rules to stop installing obsolete wrapper scripts
+ - Change debian/rules to use --install-purelib/--install-scripts, not --prefix
+ - Change debian/python-epydoc.dirs to reference usr/share/python-support
+ - Change debian/python-epydoc.install to match new build locations
+ - Change debian/python-epydoc.preinst to remove old package's pyo and pyc files
+ - Remove debian/epydoc.wrapper and debian/epydocgui.wrapper
+ - Remove debian/python-epydoc.postinst and debian/python-epydoc.prerm
+ - Added new debian/pyversions file for use by python-support
+ * Remove support for $PYTHONVER in the epydoc and epydocgui command-line scripts.
+ - This cannot really be done well with the new policy and infrastructure
+ - Removed CHOICE OF PYTHON VERSION section from man/epydoc*.1
+ - Reworked debian/README.Debian to discuss this loss of functionality
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Mon, 24 Jul 2006 01:11:44 +0000
+
+epydoc (2.1-10) unstable; urgency=low
+
+ * Remove obsolete debian/python2.[123]-epydoc files (leftovers).
+ * Change debian/rules to remove obsolete python2.[123] references.
+ * Remove references to python2.1 and python2.2 and make python2.4 the default
+ - Update documentation in debian/README.Debian
+ - Change Depends and Build-Depends-Indep to use python2.4
+ - Update package descriptions to remove obsolete information
+ - Change debian/python-epydoc.install to reference python2.4
+ - Change python search order in debian/python-epydoc.postinst
+ - Change debian/rules to use python2.4 to build the package
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sat, 15 Apr 2006 10:50:13 -0500
+
+epydoc (2.1-9) unstable; urgency=low
+
+ * Remove pythonX.Y-epydoc packages now that sarge has released.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Fri, 10 Jun 2005 13:10:04 -0500
+
+epydoc (2.1-8) unstable; urgency=low
+
+ * Support Python 2.4 in wrappers and postinst.
+ * Rework postinst so that it works for people who have Python set up to
+ use alternatives. I now have to invoke compileall.compile_dir() rather
+ than compileally.py because I can't be sure of the location of
+ compileall.py. Fix is based on pychecker bug #300922.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Wed, 23 Mar 2005 17:04:44 -0600
+
+epydoc (2.1-7) unstable; urgency=low
+
+ * Fix broken escape of @ decorator in docstring codeblocks (closes: #293571).
+ - Problem is that colorizer.py _COMMENT pattern catches @ and splits it.
+ - Simplistic fix is to change pattern from '(#.*?$)' to '([^&]#.*?$)'.
+ - I've written upstream several times, but have not heard back.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sat, 12 Mar 2005 13:45:00 -0600
+
+epydoc (2.1-6) unstable; urgency=low
+
+ * Rework python-epydoc postinst so that it works even for people who don't
+ have the default python package installed. The fix is to look for python,
+ python2.3, python2.2 and python2.1 (in that order), and use the first one
+ found to compile the modules (closes: #291292).
+ * Update README.Debian to match new behavior in postinst.
+ * Added notes in executable wrappers to document new behavior in postinst.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Wed, 19 Jan 2005 16:47:04 -0600
+
+epydoc (2.1-5) unstable; urgency=low
+
+ * Recommend 'gs-esp | gs' rather than just 'gs' (closes: #275654).
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Thu, 14 Oct 2004 19:50:08 -0500
+
+epydoc (2.1-4) unstable; urgency=low
+
+ * Fix latex output when using --separate-class option (closes: #250775).
+ - Fix is based on patch from Paul van Tilburg
+ - I applied patch from upstream based on Paul's patch
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Mon, 24 May 2004 18:34:30 -0500
+
+epydoc (2.1-3) unstable; urgency=low
+
+ * Updated debian/watch to fix Sourceforge download URL away from mirror.
+ * Now Recommend mozilla | www-browser for epydoc-doc to shut Lintian up.
+ * Now Recommend tetex-extra and gs for python-epydoc so --ps, --pdf and --dvi work.
+ * Updated debian/README.Debian to clarify optional packages.
+ * Fixed broken error message in epydoc/cli.py, when handling invalid switch.
+ * Fixed generated latex to work with Debian tetex packages (closes: #250256).
+ - Change epydoc/latex.py to use \usepackage[headings]{fullpage}
+ - This is a Debian-specific change after discussion with upstream
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sat, 22 May 2004 12:51:34 -0500
+
+epydoc (2.1-2) unstable; urgency=low
+
+ * Fix TypeError ("Cannot create UID...") bug in uid.py (closes: #242832).
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 11 Apr 2004 23:20:00 -0500
+
+epydoc (2.1-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 21 Mar 2004 12:16:01 -0600
+
+epydoc (2.0-3) unstable; urgency=low
+
+ * Changed section from doc to python for all but epydoc-doc.
+ * Fixed broken dependencies (closes: #238798).
+ - Dependencies forced install of python2.1 or 2.2 even if 2.3 was available
+ - Change Depends to python2.3 | python2.2-xmlbase | python2.1-xmlbase
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Fri, 19 Mar 2004 22:14:34 -0600
+
+epydoc (2.0-2) unstable; urgency=low
+
+ * Complete reworking of package now that I've taken it over.
+ - Added README.Debian to document some packaging details
+ - Entire package is now debhelper-ized (compat level 4)
+ - Python modules are now installed in site-python
+ - All scripts, Python modules, etc. are now in python-epyoc only
+ - Old pythonX.Y-epydoc packages are obsolete but remain for easy upgrade
+ - Section has been changed from 'extra' to 'optional' to match overrides
+ - Documentation from -doc package is now available via dhelp, doc-central, etc.
+ - Removed epydocX.Y scripts in favor of scripts that work for all python versions
+ - Added Debian-specific sections to manpages, to document new script behavior
+ - Tweaked epydoc/cli.py to give correct Debian script name in -h output
+ - Tweaked epydoc/cli.py usage to remove reference to nonexistent manpage
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Mon, 15 Mar 2004 21:04:16 -0600
+
+epydoc (2.0-1) unstable; urgency=low
+
+ * Hijacking this package (inactive and unresponsive maintainer).
+ See: http://lists.debian.org/debian-devel/2004/debian-devel-200402/msg02048.html
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 29 Feb 2004 15:46:49 -0600
+
+epydoc (2.0-0.2) unstable; urgency=low
+
+ * NMU (inactive maintainer).
+ * Fix Python dependency for python-epydoc package (closes: #216568).
+ - Now depend on python (>= 2.3), python (<< 2.4).
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Sun, 19 Oct 2003 13:07:28 -0500
+
+epydoc (2.0-0.1) unstable; urgency=low
+
+ * NMU under "excessively liberal NMU policy" through 14 Sep 2003.
+ * Upgraded to upstream 2.0 release.
+ - Epydoc GUI now works (closes: #171471)
+ - Epydoc can now handle keyword arguments (closes: #171722)
+ - Epydoc now properly documents static class methods (closes: #204390)
+ * Made package descriptions more verbose (closes: #210087).
+ * Now installable in sid (closes: #178782).
+ - Removed dependency on python2.3-xmlbase.
+ * Default package is now python2.3-epydoc.
+ - python-epydoc now depends on python2.3-epydoc (>= 2.0-0.1)
+ - All defaults (manpages, binaries) are for 2.3 rather than 2.2
+ - Manpages required 2.3 version to replace/conflict with old 2.2 version
+ * Fixed typo in change entry for 1.1-2 (showed #16827 rather than #168271).
+ * Removed (s) from debian/copyright to quiet lintian.
+ * Added debian/watch file.
+ * Tweaked debian rules file as little as possible.
+ - Hardcode list of scripts, so build under CVS works
+ - Make sure to compress Debian changelog in all packages
+ - Changed code to make soft links for Python 2.3 rather than 2.2
+ - Needed to install epydoc/markup and epydoc/test as well
+
+ -- Kenneth J. Pronovici <pronovic at debian.org> Thu, 11 Sep 2003 14:41:18 -0500
+
+epydoc (1.1-2) unstable; urgency=low
+
+ * Adding Recommends: tkinter (Closes: #171460)
+ * Adding Suggests: epydoc-doc (Closes: #168271)
+
+ -- Moshe Zadka <moshez at debian.org> Mon, 2 Dec 2002 18:06:31 +0000
+
+epydoc (1.1-1) unstable; urgency=low
+
+ * New upstream version
+ * Uploading to Debian
+
+ -- Moshe Zadka <moshez at debian.org> Sat, 2 Nov 2002 08:15:03 +0000
+
+epydoc (1.0-1) unstable; urgency=low
+
+ * New upstream version.
+
+ -- Moshe Zadka <moshez at debian.org> Fri, 27 Sep 2002 04:48:29 +0000
+
+epydoc (0.2-1) unstable; urgency=low
+
+ * First release
+
+ -- Moshe Zadka <moshez at debian.org> Mon, 9 Sep 2002 01:53:01 +0000
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..2ef4125
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,47 @@
+Source: epydoc
+Section: python
+Priority: optional
+Maintainer: Kenneth J. Pronovici <pronovic at debian.org>
+Homepage: http://epydoc.sourceforge.net/
+Build-Depends: debhelper (>= 9), python-all (>= 2.6.6-3~), dh-python
+Standards-Version: 3.9.6.1
+X-Python-Version: >= 2.1
+Testsuite: autopkgtest
+
+Package: python-epydoc
+Architecture: all
+Depends: ${python:Depends}, ${misc:Depends}
+Recommends: python-tk, python-docutils, graphviz
+Suggests: epydoc-doc, python-profiler, ghostscript, texlive-latex-base, texlive-latex-extra, texlive-latex-recommended, texlive-fonts-recommended
+Conflicts: python2.3-epydoc, python2.2-epydoc, python2.1-epydoc
+Replaces: python2.3-epydoc (<< 2.0-2), python2.2-epydoc (<< 2.0-2), python2.1-epydoc (<< 2.0-2)
+Description: tool for documenting Python modules
+ Epydoc is a tool for generating API documentation for Python modules based on
+ their docstrings. A lightweight markup language called epytext can be used to
+ format docstrings and to add information about specific fields, such as
+ parameters and instance variables. Epydoc also understands docstrings written
+ in ReStructuredText, Javadoc, and plaintext.
+ .
+ This package contains the epydoc and epydocgui commands, their manpages, and
+ their associated Python modules.
+ .
+ Epydoc supports two output formatters: HTML and LaTeX. You must install the
+ suggested dependencies in order to generate documentation in DVI, PostScript,
+ or PDF format using the LaTeX formatter.
+
+Package: epydoc-doc
+Section: doc
+Architecture: all
+Depends: ${misc:Depends}
+Recommends: chromium | www-browser
+Description: tool for documenting Python modules (documentation)
+ Epydoc is a tool for generating API documentation for Python modules based on
+ their docstrings. A lightweight markup language called epytext can be used to
+ format docstrings and to add information about specific fields, such as
+ parameters and instance variables. Epydoc also understands docstrings written
+ in ReStructuredText, Javadoc, and plaintext.
+ .
+ This package contains the API reference and usage information for Epydoc, all
+ available through the Debian documentation system (dhelp, dwww, doc-central,
+ etc.) in the Devel section.
+
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..bbcbfbe
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,47 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: epydoc
+Upstream-Contact: Edward Loper <edloper at gradient.cis.upenn.edu>
+Source: http://epydoc.sourceforge.net/
+
+Files: *
+Copyright: 2002, 2005 Edward Loper
+License: Expat
+
+Files: epydoc/docwriter/xlink.py scripts/apirst2html.py
+Copyright: 2007 Daniele Varrazzo
+License: Expat
+
+Files: doc/custom.css doc/docutils.css
+Copyright: Public Domain
+License: public-domain
+ This stylesheet has been placed in the public domain.
+
+Files: debian/*
+Copyright: 2002 Moshe Zadka <moshez at debian.org>
+ 2003-2015 Kenneth J. Pronovici <pronovic at debian.org>
+License: public-domain
+ Copying and distribution of these files, with or without modification, is
+ permitted in any medium without royalty provided the copyright notice and
+ this notice are preserved.
+
+License: Expat
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and any associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ .
+ The software is provided "as is", without warranty of any
+ kind, express or implied, including but not limited to the
+ warranties of merchantability, fitness for a particular purpose
+ and noninfringement. In no event shall the authors or copyright
+ holders be liable for any claim, damages or other liability,
+ whether in an action of contract, tort or otherwise, arising from,
+ out of or in connection with the software or the use or other
+ dealings in the software.
+
diff --git a/debian/epydoc-doc.doc-base b/debian/epydoc-doc.doc-base
new file mode 100644
index 0000000..6fe0c54
--- /dev/null
+++ b/debian/epydoc-doc.doc-base
@@ -0,0 +1,10 @@
+Document: epydoc
+Title: Epydoc User's Manual
+Author: Edward Loper
+Abstract: Epydoc User's Manual
+Section: Programming
+
+Format: HTML
+Index: /usr/share/doc/epydoc-doc/doc/index.html
+Files: /usr/share/doc/epydoc-doc/doc/*
+
diff --git a/debian/epydoc-doc.docs b/debian/epydoc-doc.docs
new file mode 100644
index 0000000..cd62481
--- /dev/null
+++ b/debian/epydoc-doc.docs
@@ -0,0 +1,2 @@
+README.txt
+doc
diff --git a/debian/patches/build-time.patch b/debian/patches/build-time.patch
new file mode 100644
index 0000000..8a3c54c
--- /dev/null
+++ b/debian/patches/build-time.patch
@@ -0,0 +1,101 @@
+Author: Jelmer Vernooij <jelmer at debian.org>, Kenneth J. Pronovici <pronovic at debian.org>
+Description: Add --no-include-build-time option to allow reproducible builds.
+ This patch was contributed by the Debian Reproducible Builds effort [1].
+ [1]: https://wiki.debian.org/ReproducibleBuilds
+Bug: https://sourceforge.net/p/epydoc/bugs/367/
+Bug-Debian: https://bugs.debian.org/783326
+Forwarded: https://sourceforge.net/p/epydoc/bugs/367/
+Last-Update: 2015-04-25
+Index: epydoc-3.0.1+dfsg/epydoc/cli.py
+===================================================================
+--- epydoc-3.0.1+dfsg.orig/epydoc/cli.py
++++ epydoc-3.0.1+dfsg/epydoc/cli.py
+@@ -137,7 +137,7 @@ OPTION_DEFAULTS = dict(
+ include_source_code=True, pstat_files=[], simple_term=False, fail_on=None,
+ exclude=[], exclude_parse=[], exclude_introspect=[],
+ external_api=[], external_api_file=[], external_api_root=[],
+- redundant_details=False, src_code_tab_width=8)
++ redundant_details=False, src_code_tab_width=8, include_build_time=True)
+
+ def parse_arguments():
+ # Construct the option parser.
+@@ -286,6 +286,10 @@ def parse_arguments():
+ action='store_true', dest='include_log',
+ help=("Include a page with the process log (epydoc-log.html)"))
+
++ generation_group.add_option('--no-include-build-time',
++ action='store_false', dest='include_build_time',
++ help=("Do not print the build time in the page footer, useful for reproducible builds."))
++
+ generation_group.add_option(
+ '--redundant-details',
+ action='store_true', dest='redundant_details',
+@@ -558,6 +562,8 @@ def parse_configfiles(configfiles, optio
+ options.include_source_code = _str_to_bool(val, optname)
+ elif optname in ('include-log', 'include_log'):
+ options.include_log = _str_to_bool(val, optname)
++ elif optname in ('include-build-time', 'include_build_time'):
++ options.include_build_time = _str_to_bool(val, optname)
+ elif optname in ('redundant-details', 'redundant_details'):
+ options.redundant_details = _str_to_bool(val, optname)
+
+Index: epydoc-3.0.1+dfsg/epydoc/docwriter/html.py
+===================================================================
+--- epydoc-3.0.1+dfsg.orig/epydoc/docwriter/html.py
++++ epydoc-3.0.1+dfsg/epydoc/docwriter/html.py
+@@ -291,6 +291,9 @@ class HTMLWriter:
+ @type include_log: C{boolean}
+ @keyword include_log: If true, the the footer will include an
+ href to the page 'epydoc-log.html'.
++ @type include_build_time: C{boolean}
++ @keyword include_build_time: If true, the the footer will
++ include the build time.
+ @type src_code_tab_width: C{int}
+ @keyword src_code_tab_width: Number of spaces to replace each tab
+ with in source code listings.
+@@ -358,6 +361,9 @@ class HTMLWriter:
+ self._include_log = kwargs.get('include_log', False)
+ """Are we generating an HTML log page?"""
+
++ self._include_build_time = kwargs.get('include_build_time', True)
++ """Are we including a build time?"""
++
+ self._src_code_tab_width = kwargs.get('src_code_tab_width', 8)
+ """Number of spaces to replace each tab with in source code
+ listings."""
+@@ -1770,10 +1776,14 @@ class HTMLWriter:
+ <tr>
+ <td align="left" class="footer">
+ >>> if self._include_log:
+- <a href="epydoc-log.html">Generated by Epydoc
+- $epydoc.__version__$ on $time.asctime()$</a>
+- >>> else:
+- Generated by Epydoc $epydoc.__version__$ on $time.asctime()$
++ <a href="epydoc-log.html">
++ >>> #endif
++ Generated by Epydoc $epydoc.__version__$
++ >>> if self._include_build_time:
++ on $time.asctime()$
++ >>> #endif
++ >>> if self._include_log:
++ </a>
+ >>> #endif
+ </td>
+ <td align="right" class="footer">
+Index: epydoc-3.0.1+dfsg/man/epydoc.1
+===================================================================
+--- epydoc-3.0.1+dfsg.orig/man/epydoc.1
++++ epydoc-3.0.1+dfsg/man/epydoc.1
+@@ -226,6 +226,12 @@ Generate an HTML page
+ .B epydoc\-log.html
+ containing all error and warning messages that are generated by
+ epydoc, and include it in the generated output.
++.TP
++.B \-\-no\-include\-build\-time
++Do not print the build time in the page footer. This is useful if
++you are trying to generate reproducible builds, where each build
++against a given version of a source tree produces exactly the
++same artifacts.
+ .RE
+ .PP
+ .\"--------------------------------------------------
diff --git a/debian/patches/deterministic-sort.patch b/debian/patches/deterministic-sort.patch
new file mode 100644
index 0000000..4b165ec
--- /dev/null
+++ b/debian/patches/deterministic-sort.patch
@@ -0,0 +1,50 @@
+Author: Val Lorentz <progval at progval.net>
+Description: Make class and module ordering predictable.
+ A lot of Debian packages rely on Epydoc during their build process. By
+ default, Eypdoc-generated documentation is "unreproducible", meaning that the
+ content of the generated files changes from build to build even if the source
+ tree does not.
+ .
+ Class trees written by Epydoc list classes in an order that varies across
+ builds. This patch applies a total order on classes (orders on class name,
+ then module, then package, then parent package, etc.) instead of a partial one
+ (only class name). It also adds ordering for modules.
+ .
+ This patch was contributed by the Debian Reproducible Builds effort [1].
+ [1]: https://wiki.debian.org/ReproducibleBuilds
+Bug: https://sourceforge.net/p/epydoc/bugs/370/
+Bug-Debian: http://bugs.debian.org/795835
+Forwarded: https://sourceforge.net/p/epydoc/bugs/370/
+Last-Update: 2015-08-17
+diff -u -r epydoc-3.0.1+dfsg.old/epydoc/docwriter/html.py epydoc-3.0.1+dfsg/epydoc/docwriter/html.py
+--- epydoc-3.0.1+dfsg.old/epydoc/docwriter/html.py 2015-08-16 18:57:38.152484836 +0000
++++ epydoc-3.0.1+dfsg/epydoc/docwriter/html.py 2015-08-17 09:59:14.756288022 +0000
+@@ -404,6 +404,7 @@
+ imports=False, packages=False, bases=False, submodules=False,
+ subclasses=False, private=self._show_private))
+ self.module_list = [d for d in valdocs if isinstance(d, ModuleDoc)]
++ self.module_list.sort(key=lambda x:(x.filename, x.path))
+ """The list of L{ModuleDoc}s for the documented modules."""
+ self.module_set = set(self.module_list)
+ """The set of L{ModuleDoc}s for the documented modules."""
+@@ -1012,7 +1013,8 @@
+ #class_set.add(base)
+
+ out('<ul class="nomargin-top">\n')
+- for doc in sorted(class_set, key=lambda c:c.canonical_name[-1]):
++ sort_key = lambda c:tuple(reversed(c.canonical_name))
++ for doc in sorted(class_set, key=sort_key):
+ if doc.bases != UNKNOWN and len(doc.bases)==0:
+ self.write_class_tree_item(out, doc, class_set)
+ out('</ul>\n')
+@@ -2817,7 +2819,8 @@
+ >>> # endif
+ >>> if doc.subclasses:
+ <ul>
+- >>> for subclass in sorted(set(doc.subclasses), key=lambda c:c.canonical_name[-1]):
++ >>> sort_key = lambda c:tuple(reversed(c.canonical_name))
++ >>> for subclass in sorted(set(doc.subclasses), key=sort_key):
+ >>> if subclass in class_set:
+ >>> self.write_class_tree_item(out, subclass, class_set)
+ >>> #endif
+
diff --git a/debian/patches/handle-docutils-0.6.patch b/debian/patches/handle-docutils-0.6.patch
new file mode 100644
index 0000000..473200e
--- /dev/null
+++ b/debian/patches/handle-docutils-0.6.patch
@@ -0,0 +1,47 @@
+Description: Handle problems encountered with docutils 0.6.
+ The problem here is that the child.data element does not always exist any
+ more. Apparently, the child element is sometimes a string instead. So, we
+ work around it by only executing the code in question if child.data can be
+ referenced. Thanks to Thomas Hille for research and the initial patch.
+Bug-Debian: http://bugs.debian.org/561793
+Author: Kenneth J. Pronovici <pronovic at debian.org>
+--- a/epydoc/markup/restructuredtext.py
++++ b/epydoc/markup/restructuredtext.py
+@@ -304,13 +304,14 @@ class _SummaryExtractor(NodeVisitor):
+ # Extract the first sentence.
+ for child in node:
+ if isinstance(child, docutils.nodes.Text):
+- m = self._SUMMARY_RE.match(child.data)
+- if m:
+- summary_pieces.append(docutils.nodes.Text(m.group(1)))
+- other = child.data[m.end():]
+- if other and not other.isspace():
+- self.other_docs = True
+- break
++ if hasattr(child, 'data'):
++ m = self._SUMMARY_RE.match(child.data)
++ if m:
++ summary_pieces.append(docutils.nodes.Text(m.group(1)))
++ other = child.data[m.end():]
++ if other and not other.isspace():
++ self.other_docs = True
++ break
+ summary_pieces.append(child)
+
+ summary_doc = self.document.copy() # shallow copy
+@@ -489,10 +490,11 @@ class _SplitFieldsTranslator(NodeVisitor
+ if (len(fbody[0]) > 0 and
+ isinstance(fbody[0][0], docutils.nodes.Text)):
+ child = fbody[0][0]
+- if child.data[:1] in ':-':
+- child.data = child.data[1:].lstrip()
+- elif child.data[:2] in (' -', ' :'):
+- child.data = child.data[2:].lstrip()
++ if hasattr(child, 'data'):
++ if child.data[:1] in ':-':
++ child.data = child.data[1:].lstrip()
++ elif child.data[:2] in (' -', ' :'):
++ child.data = child.data[2:].lstrip()
+
+ # Wrap the field body, and add a new field
+ self._add_field(tagname, arg, fbody)
diff --git a/debian/patches/hide-memory-addresses.patch b/debian/patches/hide-memory-addresses.patch
new file mode 100644
index 0000000..680ebf7
--- /dev/null
+++ b/debian/patches/hide-memory-addresses.patch
@@ -0,0 +1,44 @@
+Author: Val Lorentz <progval at progval.net>
+Description: Hide memory references in the output.
+ A lot of Debian packages rely on Epydoc during their build process. By
+ default, Eypdoc-generated documentation is "unreproducible", meaning that the
+ content of the generated files changes from build to build even if the source
+ tree does not.
+ .
+ Epydoc uses repr() on objects that don't always override the default one. As a
+ consequence, the documentation shows memory references on the build system,
+ e.g. <module.Foo instance at 0x7f3aff4299e0>. This patch detects objects with
+ no overriding of __repr__ and provides a fallback that does not show the
+ reference. It also takes care of not calling default __repr__ on functions.
+ .
+ This patch was contributed by the Debian Reproducible Builds effort [1].
+ [1]: https://wiki.debian.org/ReproducibleBuilds
+Bug: https://sourceforge.net/p/epydoc/bugs/369/
+Bug-Debian: http://bugs.debian.org/795826
+Forwarded: https://sourceforge.net/p/epydoc/bugs/369/
+Last-Update: 2015-08-17
+diff -u -r epydoc-3.0.1+dfsg.old/epydoc/markup/pyval_repr.py epydoc-3.0.1+dfsg/epydoc/markup/pyval_repr.py
+--- epydoc-3.0.1+dfsg.old/epydoc/markup/pyval_repr.py 2015-08-16 18:57:38.152484836 +0000
++++ epydoc-3.0.1+dfsg/epydoc/markup/pyval_repr.py 2015-08-17 09:31:08.384223756 +0000
+@@ -207,9 +207,18 @@
+ self._colorize_re(pyval, state)
+ else:
+ try:
+- pyval_repr = repr(pyval)
+- if not isinstance(pyval_repr, (str, unicode)):
+- pyval_repr = unicode(pyval_repr)
++ pyval_class = pyval.__class__
++ if hasattr(pyval, '__repr__') and \
++ pyval_class.__repr__ is not object.__repr__ and \
++ pyval_class.__repr__ is not types.FunctionType.__repr__:
++ pyval_repr = repr(pyval)
++ if not isinstance(pyval_repr, (str, unicode)):
++ pyval_repr = unicode(pyval_repr)
++ else:
++ # pyval has a default repr(), which would leak
++ # a reference to the object
++ pyval_repr = '<%s.%s object>' % (
++ pyval_class.__module__, pyval_class.__name__)
+ pyval_repr_ok = True
+ except KeyboardInterrupt:
+ raise
diff --git a/debian/patches/lintian.patch b/debian/patches/lintian.patch
new file mode 100644
index 0000000..d2d9114
--- /dev/null
+++ b/debian/patches/lintian.patch
@@ -0,0 +1,20 @@
+Description: Remove SourceForge logo and replace with "SourceForge".
+ This fixes Lintian warning "privacy-breach-logo". The IMG URL is considerd
+ a privacy breach by Debian because it associates a user's browser info with
+ use of the package.
+Author: Kenneth J. Pronovici <pronovic at debian.org>
+--- a/doc/index.html
++++ b/doc/index.html
+@@ -170,10 +170,8 @@
+ Epytext</a></td></a>
+ <td align="center" width="20%" class="nav">
+
+- <A href="http://sourceforge.net/projects/epydoc">
+- <IMG src="http://sourceforge.net/sflogo.php?group_id=32455&type=1"
+- width="88" height="26" border="0" alt="SourceForge"
+- align="top"/></A></td>
++ <A href="http://sourceforge.net/projects/epydoc">SourceForge</A>
++ </td>
+ </tr>
+ </table>
+
diff --git a/debian/patches/manpages.patch b/debian/patches/manpages.patch
new file mode 100644
index 0000000..30d3eda
--- /dev/null
+++ b/debian/patches/manpages.patch
@@ -0,0 +1,214 @@
+Description: Make minor tweaks to manpage syntax.
+Author: Kenneth J. Pronovici <pronovic at debian.org>
+Forwarded: https://sourceforge.net/tracker/?func=detail&aid=3027938&group_id=32455&atid=405620
+--- a/man/epydoc.1
++++ b/man/epydoc.1
+@@ -83,7 +83,7 @@
+ Directory names specify packages, and are expanded to include
+ all sub-modules and sub-packages. If you wish to exclude
+ certain sub-modules or sub-packages, use the
+-.B --exclude
++.B \-\-exclude
+ option (described below).
+ .\" --config
+ .TP
+@@ -164,7 +164,7 @@
+ because importing it would cause undesired side-effects.
+ .\" --introspect-only
+ .TP
+-.BI "\-\-introspect-only"
++.BI "\-\-introspect\-only"
+ Gather all information about the documented objects by introspection;
+ in particular, do
+ .I not
+@@ -176,12 +176,12 @@
+ expression pattern.
+ .\" --exclude-introspect=PATTERN
+ .TP
+-.BI "\-\-exclude-introspect " PATTERN
++.BI "\-\-exclude\-introspect " PATTERN
+ Do not use introspection to gather information about any object whose
+ name matches the given regular expression.
+ .\" --exclude-parse=PATTERN
+ .TP
+-.BI "\-\-exclude-parse " PATTERN
++.BI "\-\-exclude\-parse " PATTERN
+ Do not use Python source code parsing to gather information about any
+ object whose name matches the given regular expression.
+ .\" --inheritance
+@@ -277,12 +277,12 @@
+ .BI "\-\-help\-file " file
+ An alternate help file.
+ .B file
+-should contain the body of an HTML file -- navigation bars will be
++should contain the body of an HTML file \-\- navigation bars will be
+ added to it.
+ .\" --show-frames, --no-frames
+ .TP
+ .B \-\-show\-frames, \-\-no\-frames
+-These options control whether HMTL output will include a frames-base
++These options control whether HMTL output will include a frames-based
+ table of contents page. By default, the frames-based table of
+ contents is included.
+ .\" --separate-classes
+@@ -319,16 +319,16 @@
+ executable.
+ .\"--graph-font
+ .TP
+-.BI "--graph-font " font
++.BI "\-\-graph\-font " font
+ The name of the font used to generate Graphviz graphs. (e.g.,
+ helvetica or times).
+ .\"--graph-font-size
+ .TP
+-.BI "--graph-font-size " size
++.BI "\-\-graph\-font\-size " size
+ The size of the font used to generate Graphviz graphs, in points.
+ .\"--pstat
+ .TP
+-.BI "--pstat " file
++.BI "\-\-pstat " file
+ A pstat output file, to be used in generating call graphs.
+ .RE
+ .PP
+@@ -394,10 +394,10 @@
+ .IR module .
+ This page includes links back to the API documentation pages.
+ .TP
+-.B module-tree.html
++.B module\-tree.html
+ The module hierarchy.
+ .TP
+-.B class-tree.html
++.B class\-tree.html
+ The class hierarchy. This page is only generated if at least one
+ class is documented.
+ .PP
+@@ -405,19 +405,19 @@
+ .B INDICES
+ .RS 4
+ .TP
+-.B identifier-index.html
++.B identifier\-index.html
+ An index of all documented identifiers. If the identifier index
+ contains more than 3,000 entries, then it will be split into separate
+ pages for each letter, named
+-.BR identifier-index-a.html ,
+-.BR identifier-index-b.html ", etc."
++.BR identifier\-index\-a.html ,
++.BR identifier\-index\-b.html ", etc."
+ .TP
+-.B term-index.html
++.B term\-index.html
+ An index of all explicitly marked definitional terms. This page is
+ only generated if at least one definition term is marked in a
+ formatted docstring.
+ .TP
+-.B bug-index.html
++.B bug\-index.html
+ An index of all explicitly marked
+ .B @bug
+ fields. This page is only
+@@ -425,7 +425,7 @@
+ .B @bug
+ field is listed in a formatted docstring.
+ .TP
+-.B todo-index.html
++.B todo\-index.html
+ An index of all explicitly marked
+ .B @todo
+ fields. This page is only
+@@ -433,7 +433,7 @@
+ .B @todo
+ field is listed in a formatted docstring.
+ .TP
+-.B changed-index.html
++.B changed\-index.html
+ An index of all explicitly marked
+ .B @changed
+ fields. This page is only
+@@ -441,7 +441,7 @@
+ .B @changed
+ field is listed in a formatted docstring.
+ .TP
+-.B deprecated-index.html
++.B deprecated\-index.html
+ An index of all explicitly marked
+ .B @deprecated
+ fields. This page is only
+@@ -449,7 +449,7 @@
+ .B @deprecated
+ field is listed in a formatted docstring.
+ .TP
+-.B since-index.html
++.B since\-index.html
+ An index of all explicitly marked
+ .B @since
+ fields. This page is only
+@@ -509,7 +509,7 @@
+ loading the page
+ .B <redirect.html#epydoc.apidoc.DottedName>
+ will automatically redirect the browser to
+-.BR <epydoc.apidoc-module.html#DottedName> .
++.BR <epydoc.apidoc\-module.html#DottedName> .
+ .TP
+ .B epydoc.css
+ The CSS stylesheet used to display all HTML pages.
+@@ -556,14 +556,14 @@
+ .B \-\-pdf
+ option.
+ .TP
+-.IB module -module.tex
++.IB module \-module.tex
+ The API documentation for a module.
+ .I module
+ is the complete dotted name of the module, such as
+ .B sys or
+ .BR epydoc.epytext .
+ .TP
+-.IB class -class.tex
++.IB class \-class.tex
+ The API documentation for a class, exception, or type.
+ .I class
+ is the complete dotted name of the class, such as
+@@ -651,7 +651,7 @@
+ .B Wrong underline character for heading.
+ The underline character used for this section heading does not
+ indicate an appopriate section level. The "=" character should be
+-used to underline sections; "-" for subsections; and "~" for
++used to underline sections; "\-" for subsections; and "~" for
+ subsubsections.
+ .TP
+ .B Possible mal-formatted field item.
+--- a/man/epydocgui.1
++++ b/man/epydocgui.1
+@@ -77,7 +77,7 @@
+ .B index.html
+ will redirect the user to the project's top page.
+ .TP
+-.BI m- module .html
++.BI m\-module.html
+ The API documentation for a module.
+ .I module
+ is the complete dotted name of the module, such as
+@@ -85,9 +85,9 @@
+ or
+ .BR epydoc.epytext .
+ .TP
+-.BI c- class .html
++.BI c\-class.html
+ The API documentation for a class, exception, or type.
+-.I class
++.I "c"
+ is the complete dotted name of the class, such as
+ .B epydoc.epytext.Token
+ or
+@@ -269,7 +269,7 @@
+ .B Wrong underline character for heading.
+ The underline character used for this section heading does not
+ indicate an appopriate section level. The "=" character should be
+-used to underline sections; "-" for subsections; and "~" for
++used to underline sections; "\-" for subsections; and "~" for
+ subsubsections.
+ .RE
+ .PP
diff --git a/debian/patches/mention-debian.patch b/debian/patches/mention-debian.patch
new file mode 100644
index 0000000..d56cea3
--- /dev/null
+++ b/debian/patches/mention-debian.patch
@@ -0,0 +1,12 @@
+Description: Mention Debian contributions in the manpage.
+Author: Kenneth J. Pronovici <pronovic at debian.org>
+--- a/man/epydocgui.1
++++ b/man/epydocgui.1
+@@ -406,6 +406,7 @@
+ .SH AUTHOR
+ Epydoc was written by Edward Loper. This man page was originally
+ written by Moshe Zadka, and is currently maintained by Edward Loper.
++Debian-specific modifications were made by Kenneth J. Pronovici.
+ .\" ================== BUGS ====================
+ .SH BUGS
+ Report bugs to <edloper at gradient.cis.upenn.edu>.
diff --git a/debian/patches/python26-tokenizer.patch b/debian/patches/python26-tokenizer.patch
new file mode 100644
index 0000000..a93b042
--- /dev/null
+++ b/debian/patches/python26-tokenizer.patch
@@ -0,0 +1,65 @@
+Description: Fix the tokenizer so comment docstrings work with Python 2.6.
+Bug: https://sourceforge.net/tracker/index.php?func=detail&aid=2585292&group_id=32455&atid=405618
+Bug-Debian: http://bugs.debian.org/590112
+Origin: https://sourceforge.net/tracker/?func=detail&aid=2872545&group_id=32455&atid=405620
+Author: Andre Malo (ndparker)
+Reviewed-by: Kenneth J. Pronovici <pronovic at debian.org>
+--- a/epydoc/docparser.py
++++ b/epydoc/docparser.py
+@@ -72,6 +72,26 @@
+ from epydoc.compat import *
+
+ ######################################################################
++## Tokenizer change in 2.6
++######################################################################
++
++def comment_includes_nl():
++ """ Determine whether comments are parsed as one or two tokens... """
++ readline = iter(u'\n#\n\n'.splitlines(True)).next
++ tokens = [
++ token.tok_name[tup[0]] for tup in tokenize.generate_tokens(readline)
++ ]
++ if tokens == ['NL', 'COMMENT', 'NL', 'ENDMARKER']:
++ return True
++ elif tokens == ['NL', 'COMMENT', 'NL', 'NL', 'ENDMARKER']:
++ return False
++ raise AssertionError(
++ "Tokenizer returns unexexpected tokens: %r" % tokens
++ )
++
++comment_includes_nl = comment_includes_nl()
++
++######################################################################
+ ## Doc Parser
+ ######################################################################
+
+@@ -520,6 +540,10 @@
+ # inside that block, not outside it.
+ start_group = None
+
++ # If the comment tokens do not include the NL, every comment token
++ # sets this to True in order to swallow the next NL token unprocessed.
++ comment_nl_waiting = False
++
+ # Check if the source file declares an encoding.
+ encoding = get_module_encoding(module_doc.filename)
+
+@@ -570,7 +594,9 @@
+ # then discard them: blank lines are not allowed between a
+ # comment block and the thing it describes.
+ elif toktype == tokenize.NL:
+- if comments and not line_toks:
++ if comment_nl_waiting:
++ comment_nl_waiting = False
++ elif comments and not line_toks:
+ log.warning('Ignoring docstring comment block followed by '
+ 'a blank line in %r on line %r' %
+ (module_doc.filename, srow-1))
+@@ -578,6 +604,7 @@
+
+ # Comment token: add to comments if appropriate.
+ elif toktype == tokenize.COMMENT:
++ comment_nl_waiting = not comment_includes_nl
+ if toktext.startswith(COMMENT_DOCSTRING_MARKER):
+ comment_line = toktext[len(COMMENT_DOCSTRING_MARKER):].rstrip()
+ if comment_line.startswith(" "):
diff --git a/debian/patches/remove-shebang.patch b/debian/patches/remove-shebang.patch
new file mode 100644
index 0000000..8918706
--- /dev/null
+++ b/debian/patches/remove-shebang.patch
@@ -0,0 +1,10 @@
+Description: Remove shebang (#!) from .py files to comply with policy.
+Author: Kenneth J. Pronovici <pronovic at debian.org>
+--- a/epydoc/gui.py
++++ b/epydoc/gui.py
+@@ -1,5 +1,3 @@
+-#!/usr/bin/env python
+-#
+ # objdoc: epydoc command-line interface
+ # Edward Loper
+ #
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..999dddb
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,12 @@
+manpages.patch
+mention-debian.patch
+remove-shebang.patch
+string-exceptions.patch
+handle-docutils-0.6.patch
+python26-tokenizer.patch
+special-latex-entries.patch
+lintian.patch
+build-time.patch
+source-date.patch
+hide-memory-addresses.patch
+deterministic-sort.patch
diff --git a/debian/patches/source-date.patch b/debian/patches/source-date.patch
new file mode 100644
index 0000000..7975df9
--- /dev/null
+++ b/debian/patches/source-date.patch
@@ -0,0 +1,117 @@
+Author: Reiner Herrmann <reiner at reiner-h.de>, Kenneth J. Pronovici <pronovic at debian.org>
+Description: Use SOURCE_DATE_EPOCH, if available, rather than the current date.
+ A lot of Debian packages rely on Epydoc during their build process. By
+ default, Eypdoc-generated documentation is "unreproducible", meaning that the
+ content of the generated files changes from build to build even if the source
+ tree does not.
+ .
+ This patch changes Epydoc to use a deterministic date taken from environment
+ variable SOURCE_DATE_EPOCH, instead of using the current date. This helps
+ make the Epydoc-generated documentation more predictible.
+ .
+ This patch was contributed by the Debian Reproducible Builds effort [1].
+ [1]: https://wiki.debian.org/ReproducibleBuilds/TimestampsProposal
+Bug: https://sourceforge.net/p/epydoc/bugs/368/
+Bug-Debian: http://bugs.debian.org/790899
+Forwarded: https://sourceforge.net/p/epydoc/bugs/368/
+Last-Update: 2015-07-12
+Index: epydoc-3.0.1+dfsg/epydoc/docwriter/html.py
+===================================================================
+--- epydoc-3.0.1+dfsg.orig/epydoc/docwriter/html.py
++++ epydoc-3.0.1+dfsg/epydoc/docwriter/html.py
+@@ -433,6 +433,14 @@ class HTMLWriter:
+ and d.container == doc]
+ self.indexed_docs.sort()
+
++ # set build time
++ self._build_time = time.gmtime()
++ if os.environ.has_key('SOURCE_DATE_EPOCH'):
++ try:
++ self._build_time = time.gmtime(int(os.environ['SOURCE_DATE_EPOCH']))
++ except ValueError:
++ pass
++
+ # Figure out the url for the top page.
+ self._top_page_url = self._find_top_page(self._top_page)
+
+@@ -1780,7 +1788,7 @@ class HTMLWriter:
+ >>> #endif
+ Generated by Epydoc $epydoc.__version__$
+ >>> if self._include_build_time:
+- on $time.asctime()$
++ on $time.asctime(self._build_time)$
+ >>> #endif
+ >>> if self._include_log:
+ </a>
+Index: epydoc-3.0.1+dfsg/epydoc/docwriter/latex.py
+===================================================================
+--- epydoc-3.0.1+dfsg.orig/epydoc/docwriter/latex.py
++++ epydoc-3.0.1+dfsg/epydoc/docwriter/latex.py
+@@ -14,7 +14,7 @@ this module is the L{LatexWriter} class.
+ """
+ __docformat__ = 'epytext en'
+
+-import os.path, sys, time, re, textwrap, codecs
++import os.path, os, sys, time, re, textwrap, codecs
+
+ from epydoc.apidoc import *
+ from epydoc.compat import *
+@@ -1099,6 +1099,12 @@ class LatexWriter:
+ #////////////////////////////////////////////////////////////
+
+ def write_header(self, out, where):
++ build_time = time.gmtime()
++ if os.environ.has_key('SOURCE_DATE_EPOCH'):
++ try:
++ build_time = time.gmtime(int(os.environ['SOURCE_DATE_EPOCH']))
++ except ValueError:
++ pass
+ out('%\n% API Documentation')
+ if self._prj_name: out(' for %s' % self._prj_name)
+ if isinstance(where, APIDoc):
+@@ -1106,7 +1112,7 @@ class LatexWriter:
+ else:
+ out('\n%% %s' % where)
+ out('\n%%\n%% Generated by epydoc %s\n' % epydoc.__version__)
+- out('%% [%s]\n%%\n' % time.asctime(time.localtime(time.time())))
++ out('%% [%s]\n%%\n' % time.asctime(build_time))
+
+ def write_start_of(self, out, section_name):
+ out('\n' + 75*'%' + '\n')
+Index: epydoc-3.0.1+dfsg/man/epydoc.1
+===================================================================
+--- epydoc-3.0.1+dfsg.orig/man/epydoc.1
++++ epydoc-3.0.1+dfsg/man/epydoc.1
+@@ -62,6 +62,32 @@ method, and function has a docstring des
+ .B \-\-tests
+ option can be used to specify additional tests to perform.
+ .PP
++.\" ==== REPRODUCIBLE BUILD BEHAVIOR ===============
++.SH REPRODUCIBLE BUILD BEHAVIOR
++.PP
++Using the current date within Epydoc-generated documentation results in
++documentation that is "unreproducible", meaning that the content of the files
++changes from build to build even if the source tree does not. To make it
++easier to generate reproducible builds, this version of Epydoc supports two
++features: the
++.B \-\-no\-include\-build\-time
++option and the
++.B SOURCE_DATE_EPOCH
++environment variable.
++.PP
++The
++.B \-\-no\-include\-build\-time
++option can be used when you know up-front that you do not need build timestamps
++in your generated documentation. The
++.B SOURCE_DATE_EPOCH
++environment variable is intended for use by packaging systems, such as the Debian
++build process. Packaging systems will set
++.B SOURCE_DATE_EPOCH
++to a sensible timestamp that is somehow related to the state of the source
++tree, and that timestamp will be used by Eypdoc rather than the current
++timestamp. Builds using
++.B SOURCE_DATE_EPOCH
++will thus be reproducible.
+ .\" ================== OPTIONS ====================
+ .SH OPTIONS
+ Epydoc's options are divided into six categories: basic options,
diff --git a/debian/patches/special-latex-entries.patch b/debian/patches/special-latex-entries.patch
new file mode 100644
index 0000000..ef102b0
--- /dev/null
+++ b/debian/patches/special-latex-entries.patch
@@ -0,0 +1,20 @@
+Description: Do a better job of handling latex special entities.
+ Mike's original problem was handling special << >> quote characters, i.e.
+ from a French keyboard. He solved this problem by adding the fontenc
+ package. In testing, I found that this change caused a HUGE slowdown for
+ PostScript and PDF output, i.e. on the order of several minutes for dvips
+ to render the result. After digging around on Google, I added the lmodern
+ package and that seems to have solved the problems I observed.
+Bug-Debian: http://bugs.debian.org/614570
+Author: Kenneth J. Pronovici <pronovic at debian.org>, Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+--- a/epydoc/docwriter/latex.py
++++ b/epydoc/docwriter/latex.py
+@@ -29,6 +29,8 @@
+ "\\documentclass{article}",
+ "\\usepackage{alltt, parskip, fancyhdr, boxedminipage}",
+ "\\usepackage{makeidx, multirow, longtable, tocbibind, amssymb}",
++ "\\usepackage[T1]{fontenc}",
++ "\\usepackage{lmodern}",
+ "\\usepackage{fullpage}",
+ "\\usepackage[usenames]{color}",
+ # Fix the heading position -- without this, the headings generated
diff --git a/debian/patches/string-exceptions.patch b/debian/patches/string-exceptions.patch
new file mode 100644
index 0000000..dcdab90
--- /dev/null
+++ b/debian/patches/string-exceptions.patch
@@ -0,0 +1,18 @@
+Description: Get rid of string exceptions.
+ One of the changes brought by Python 2.6 is the removal of string
+ exceptions. A mass bug filing identified Epydoc as having potential
+ problems. I later spot-checked all of the exceptions in the code, and I
+ believe this is the only one that we have to worry about.
+Bug-Debian: http://bugs.debian.org/585290
+Author: Kenneth J. Pronovici <pronovic at debian.org>
+--- a/epydoc/apidoc.py
++++ b/epydoc/apidoc.py
+@@ -1352,7 +1352,7 @@ class ClassDoc(NamespaceDoc):
+ nothead=[s for s in nonemptyseqs if cand in s[1:]]
+ if nothead: cand=None #reject candidate
+ else: break
+- if not cand: raise "Inconsistent hierarchy"
++ if not cand: raise TypeError("Inconsistent hierarchy")
+ res.append(cand)
+ for seq in nonemptyseqs: # remove cand
+ if seq[0] == cand: del seq[0]
diff --git a/debian/python-epydoc.dirs b/debian/python-epydoc.dirs
new file mode 100644
index 0000000..8d581de
--- /dev/null
+++ b/debian/python-epydoc.dirs
@@ -0,0 +1,2 @@
+usr/bin
+usr/share/pyshared
diff --git a/debian/python-epydoc.docs b/debian/python-epydoc.docs
new file mode 100644
index 0000000..71dfd5b
--- /dev/null
+++ b/debian/python-epydoc.docs
@@ -0,0 +1 @@
+README.txt
diff --git a/debian/python-epydoc.install b/debian/python-epydoc.install
new file mode 100644
index 0000000..1b437f3
--- /dev/null
+++ b/debian/python-epydoc.install
@@ -0,0 +1,3 @@
+lib/epydoc/* usr/share/pyshared
+bin/epydoc usr/bin
+bin/epydocgui usr/bin
diff --git a/debian/python-epydoc.manpages b/debian/python-epydoc.manpages
new file mode 100644
index 0000000..790a1c5
--- /dev/null
+++ b/debian/python-epydoc.manpages
@@ -0,0 +1,2 @@
+man/epydoc.1
+man/epydocgui.1
diff --git a/debian/python-epydoc.preinst b/debian/python-epydoc.preinst
new file mode 100644
index 0000000..1529d73
--- /dev/null
+++ b/debian/python-epydoc.preinst
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+
+# Remove old files left behind by previous versions of package
+rm -f /usr/lib/site-python/epydoc/*.pyc
+rm -f /usr/lib/site-python/epydoc/markup/*.pyc
+rm -f /usr/lib/site-python/epydoc/test/*.pyc
+rm -f /usr/lib/site-python/epydoc/*.pyo
+rm -f /usr/lib/site-python/epydoc/markup/*.pyo
+rm -f /usr/lib/site-python/epydoc/test/*.pyo
+
+#DEBHELPER#
+
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..9233eab
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,22 @@
+#!/usr/bin/make -f
+
+# Set to enable verbose output from debhelper
+#export DH_VERBOSE=1
+
+%:
+ dh $@ --with python2 --buildsystem=python_distutils
+
+override_dh_install:
+ dh_install -Xapirst2html.py --fail-missing
+
+override_dh_compress:
+ dh_compress -X.py
+
+override_dh_auto_install:
+ dh_auto_install -- --install-purelib lib/epydoc --install-scripts bin
+
+override_dh_auto_test:
+ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
+ sh debian/smoketest
+endif
+
diff --git a/debian/smoketest b/debian/smoketest
new file mode 100644
index 0000000..1376748
--- /dev/null
+++ b/debian/smoketest
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+# Configure the tests to run
+TESTS="htmldocs"
+
+# Run portions of the autopkgtest suite, with an autopkgtest-like environment
+RESULT="succeeded"
+for TEST in ${TESTS}; do
+
+ # Create the $ADTTMP directory like autopkgtest
+ export ADTTMP=`mktemp -d`
+ if [ $? != 0 ]; then
+ echo "${TEST} failed: failed to create \$ADTTMP"
+ exit 1
+ elif [ ! -d "${ADTTMP}" ]; then
+ echo "${TEST} failed: could not create \$ADTTMP"
+ exit 1
+ fi
+
+ # Create the $ADT_ARTIFACTS directory like autopkgtest
+ export ADT_ARTIFACTS=`mktemp -d`
+ if [ $? != 0 ]; then
+ echo "${TEST} failed: failed to create \$ADT_ARTIFACTS"
+ exit 1
+ elif [ ! -d "${ADT_ARTIFACTS}" ]; then
+ echo "${TEST} failed: could not create \$ADT_ARTIFACTS"
+ exit 1
+ fi
+
+ # Execute the testcase
+ TESTCASE="debian/tests/${TEST}"
+ if [ ! -f "${TESTCASE}" ]; then
+ echo "${TEST} failed: testcase does not exist"
+ RESULT="failed"
+ else
+ sh ${TESTCASE} -r # -r to run in "debian/rules" mode
+ if [ $? != 0 ]; then
+ echo "${TEST} failed: non-zero exit status"
+ RESULT="failed"
+ fi
+ fi
+
+ # Remove the temporary directories
+ rm -rf ${ADTTMP}
+ rm -rf ${ADT_ARTIFACTS}
+done
+
+# Exit with non-zero upon failure, to kill the build
+if [ "${RESULT}" = "failed" ]; then
+ exit 1
+fi
+
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/source/include-binaries b/debian/source/include-binaries
new file mode 100644
index 0000000..9010651
--- /dev/null
+++ b/debian/source/include-binaries
@@ -0,0 +1 @@
+debian/tests/data/htmldocs/expected/output/crarr.png
diff --git a/debian/tests/control b/debian/tests/control
new file mode 100644
index 0000000..b6e5a90
--- /dev/null
+++ b/debian/tests/control
@@ -0,0 +1,4 @@
+# Build Epydoc documentation for a sample Python module
+Tests: htmldocs
+Depends: @, diffutils
+
diff --git a/debian/tests/data/htmldocs/expected/output/api-objects.txt b/debian/tests/data/htmldocs/expected/output/api-objects.txt
new file mode 100644
index 0000000..af694d1
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/api-objects.txt
@@ -0,0 +1,12 @@
+testpackage testpackage-module.html
+testpackage.__package__ testpackage-module.html#__package__
+testpackage.util testpackage.util-module.html
+testpackage.util.method2 testpackage.util-module.html#method2
+testpackage.util.CONSTANT_TWO testpackage.util-module.html#CONSTANT_TWO
+testpackage.util.__package__ testpackage.util-module.html#__package__
+testpackage.util.methodOne testpackage.util-module.html#methodOne
+testpackage.util.CONSTANT_ONE testpackage.util-module.html#CONSTANT_ONE
+testpackage.util.FirstClass testpackage.util.FirstClass-class.html
+testpackage.util.FirstClass.__eq__ testpackage.util.FirstClass-class.html#__eq__
+testpackage.util._SecondClass testpackage.util._SecondClass-class.html
+testpackage.util._SecondClass.__init__ testpackage.util._SecondClass-class.html#__init__
diff --git a/debian/tests/data/htmldocs/expected/output/class-tree.html b/debian/tests/data/htmldocs/expected/output/class-tree.html
new file mode 100644
index 0000000..e47e118
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/class-tree.html
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Class Hierarchy</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Trees </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%"> </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="class-tree.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Class Hierarchy</h1>
+<ul class="nomargin-top">
+ <li> <strong class="uidlink">object</strong>:
+ <em class="summary">The most base type</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="testpackage.util._SecondClass-class.html" onclick="show_private();">testpackage.util._SecondClass</a></strong>:
+ <em class="summary">Represents something else that I forgot just now.</em>
+ </li>
+ <li> <strong class="uidlink">list</strong>:
+ <em class="summary">list() -> new empty list list(iterable) -> new list
+ initialized from iterable's items</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="testpackage.util.FirstClass-class.html">testpackage.util.FirstClass</a></strong>:
+ <em class="summary">Special list class.</em>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Trees </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/crarr.png b/debian/tests/data/htmldocs/expected/output/crarr.png
new file mode 100644
index 0000000..26b43c5
Binary files /dev/null and b/debian/tests/data/htmldocs/expected/output/crarr.png differ
diff --git a/debian/tests/data/htmldocs/expected/output/epydoc.css b/debian/tests/data/htmldocs/expected/output/epydoc.css
new file mode 100644
index 0000000..86d4170
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/epydoc.css
@@ -0,0 +1,322 @@
+
+
+/* Epydoc CSS Stylesheet
+ *
+ * This stylesheet can be used to customize the appearance of epydoc's
+ * HTML output.
+ *
+ */
+
+/* Default Colors & Styles
+ * - Set the default foreground & background color with 'body'; and
+ * link colors with 'a:link' and 'a:visited'.
+ * - Use bold for decision list terms.
+ * - The heading styles defined here are used for headings *within*
+ * docstring descriptions. All headings used by epydoc itself use
+ * either class='epydoc' or class='toc' (CSS styles for both
+ * defined below).
+ */
+body { background: #ffffff; color: #000000; }
+p { margin-top: 0.5em; margin-bottom: 0.5em; }
+a:link { color: #0000ff; }
+a:visited { color: #204080; }
+dt { font-weight: bold; }
+h1 { font-size: +140%; font-style: italic;
+ font-weight: bold; }
+h2 { font-size: +125%; font-style: italic;
+ font-weight: bold; }
+h3 { font-size: +110%; font-style: italic;
+ font-weight: normal; }
+code { font-size: 100%; }
+/* N.B.: class, not pseudoclass */
+a.link { font-family: monospace; }
+
+/* Page Header & Footer
+ * - The standard page header consists of a navigation bar (with
+ * pointers to standard pages such as 'home' and 'trees'); a
+ * breadcrumbs list, which can be used to navigate to containing
+ * classes or modules; options links, to show/hide private
+ * variables and to show/hide frames; and a page title (using
+ * <h1>). The page title may be followed by a link to the
+ * corresponding source code (using 'span.codelink').
+ * - The footer consists of a navigation bar, a timestamp, and a
+ * pointer to epydoc's homepage.
+ */
+h1.epydoc { margin: 0; font-size: +140%; font-weight: bold; }
+h2.epydoc { font-size: +130%; font-weight: bold; }
+h3.epydoc { font-size: +115%; font-weight: bold;
+ margin-top: 0.2em; }
+td h3.epydoc { font-size: +115%; font-weight: bold;
+ margin-bottom: 0; }
+table.navbar { background: #a0c0ff; color: #000000;
+ border: 2px groove #c0d0d0; }
+table.navbar table { color: #000000; }
+th.navbar-select { background: #70b0ff;
+ color: #000000; }
+table.navbar a { text-decoration: none; }
+table.navbar a:link { color: #0000ff; }
+table.navbar a:visited { color: #204080; }
+span.breadcrumbs { font-size: 85%; font-weight: bold; }
+span.options { font-size: 70%; }
+span.codelink { font-size: 85%; }
+td.footer { font-size: 85%; }
+
+/* Table Headers
+ * - Each summary table and details section begins with a 'header'
+ * row. This row contains a section title (marked by
+ * 'span.table-header') as well as a show/hide private link
+ * (marked by 'span.options', defined above).
+ * - Summary tables that contain user-defined groups mark those
+ * groups using 'group header' rows.
+ */
+td.table-header { background: #70b0ff; color: #000000;
+ border: 1px solid #608090; }
+td.table-header table { color: #000000; }
+td.table-header table a:link { color: #0000ff; }
+td.table-header table a:visited { color: #204080; }
+span.table-header { font-size: 120%; font-weight: bold; }
+th.group-header { background: #c0e0f8; color: #000000;
+ text-align: left; font-style: italic;
+ font-size: 115%;
+ border: 1px solid #608090; }
+
+/* Summary Tables (functions, variables, etc)
+ * - Each object is described by a single row of the table with
+ * two cells. The left cell gives the object's type, and is
+ * marked with 'code.summary-type'. The right cell gives the
+ * object's name and a summary description.
+ * - CSS styles for the table's header and group headers are
+ * defined above, under 'Table Headers'
+ */
+table.summary { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090;
+ margin-bottom: 0.5em; }
+td.summary { border: 1px solid #608090; }
+code.summary-type { font-size: 85%; }
+table.summary a:link { color: #0000ff; }
+table.summary a:visited { color: #204080; }
+
+
+/* Details Tables (functions, variables, etc)
+ * - Each object is described in its own div.
+ * - A single-row summary table w/ table-header is used as
+ * a header for each details section (CSS style for table-header
+ * is defined above, under 'Table Headers').
+ */
+table.details { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090;
+ margin: .2em 0 0 0; }
+table.details table { color: #000000; }
+table.details a:link { color: #0000ff; }
+table.details a:visited { color: #204080; }
+
+/* Fields */
+dl.fields { margin-left: 2em; margin-top: 1em;
+ margin-bottom: 1em; }
+dl.fields dd ul { margin-left: 0em; padding-left: 0em; }
+dl.fields dd ul li ul { margin-left: 2em; padding-left: 0em; }
+div.fields { margin-left: 2em; }
+div.fields p { margin-bottom: 0.5em; }
+
+/* Index tables (identifier index, term index, etc)
+ * - link-index is used for indices containing lists of links
+ * (namely, the identifier index & term index).
+ * - index-where is used in link indices for the text indicating
+ * the container/source for each link.
+ * - metadata-index is used for indices containing metadata
+ * extracted from fields (namely, the bug index & todo index).
+ */
+table.link-index { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090; }
+td.link-index { border-width: 0px; }
+table.link-index a:link { color: #0000ff; }
+table.link-index a:visited { color: #204080; }
+span.index-where { font-size: 70%; }
+table.metadata-index { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090;
+ margin: .2em 0 0 0; }
+td.metadata-index { border-width: 1px; border-style: solid; }
+table.metadata-index a:link { color: #0000ff; }
+table.metadata-index a:visited { color: #204080; }
+
+/* Function signatures
+ * - sig* is used for the signature in the details section.
+ * - .summary-sig* is used for the signature in the summary
+ * table, and when listing property accessor functions.
+ * */
+.sig-name { color: #006080; }
+.sig-arg { color: #008060; }
+.sig-default { color: #602000; }
+.summary-sig { font-family: monospace; }
+.summary-sig-name { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:link
+ { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:visited
+ { color: #006080; font-weight: bold; }
+.summary-sig-arg { color: #006040; }
+.summary-sig-default { color: #501800; }
+
+/* Subclass list
+ */
+ul.subclass-list { display: inline; }
+ul.subclass-list li { display: inline; }
+
+/* To render variables, classes etc. like functions */
+table.summary .summary-name { color: #006080; font-weight: bold;
+ font-family: monospace; }
+table.summary
+ a.summary-name:link { color: #006080; font-weight: bold;
+ font-family: monospace; }
+table.summary
+ a.summary-name:visited { color: #006080; font-weight: bold;
+ font-family: monospace; }
+
+/* Variable values
+ * - In the 'variable details' sections, each varaible's value is
+ * listed in a 'pre.variable' box. The width of this box is
+ * restricted to 80 chars; if the value's repr is longer than
+ * this it will be wrapped, using a backslash marked with
+ * class 'variable-linewrap'. If the value's repr is longer
+ * than 3 lines, the rest will be ellided; and an ellipsis
+ * marker ('...' marked with 'variable-ellipsis') will be used.
+ * - If the value is a string, its quote marks will be marked
+ * with 'variable-quote'.
+ * - If the variable is a regexp, it is syntax-highlighted using
+ * the re* CSS classes.
+ */
+pre.variable { padding: .5em; margin: 0;
+ background: #dce4ec; color: #000000;
+ border: 1px solid #708890; }
+.variable-linewrap { color: #604000; font-weight: bold; }
+.variable-ellipsis { color: #604000; font-weight: bold; }
+.variable-quote { color: #604000; font-weight: bold; }
+.variable-group { color: #008000; font-weight: bold; }
+.variable-op { color: #604000; font-weight: bold; }
+.variable-string { color: #006030; }
+.variable-unknown { color: #a00000; font-weight: bold; }
+.re { color: #000000; }
+.re-char { color: #006030; }
+.re-op { color: #600000; }
+.re-group { color: #003060; }
+.re-ref { color: #404040; }
+
+/* Base tree
+ * - Used by class pages to display the base class hierarchy.
+ */
+pre.base-tree { font-size: 80%; margin: 0; }
+
+/* Frames-based table of contents headers
+ * - Consists of two frames: one for selecting modules; and
+ * the other listing the contents of the selected module.
+ * - h1.toc is used for each frame's heading
+ * - h2.toc is used for subheadings within each frame.
+ */
+h1.toc { text-align: center; font-size: 105%;
+ margin: 0; font-weight: bold;
+ padding: 0; }
+h2.toc { font-size: 100%; font-weight: bold;
+ margin: 0.5em 0 0 -0.3em; }
+
+/* Syntax Highlighting for Source Code
+ * - doctest examples are displayed in a 'pre.py-doctest' block.
+ * If the example is in a details table entry, then it will use
+ * the colors specified by the 'table pre.py-doctest' line.
+ * - Source code listings are displayed in a 'pre.py-src' block.
+ * Each line is marked with 'span.py-line' (used to draw a line
+ * down the left margin, separating the code from the line
+ * numbers). Line numbers are displayed with 'span.py-lineno'.
+ * The expand/collapse block toggle button is displayed with
+ * 'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
+ * modify the font size of the text.)
+ * - If a source code page is opened with an anchor, then the
+ * corresponding code block will be highlighted. The code
+ * block's header is highlighted with 'py-highlight-hdr'; and
+ * the code block's body is highlighted with 'py-highlight'.
+ * - The remaining py-* classes are used to perform syntax
+ * highlighting (py-string for string literals, py-name for names,
+ * etc.)
+ */
+pre.py-doctest { padding: .5em; margin: 1em;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #708890; }
+table pre.py-doctest { background: #dce4ec;
+ color: #000000; }
+pre.py-src { border: 2px solid #000000;
+ background: #f0f0f0; color: #000000; }
+.py-line { border-left: 2px solid #000000;
+ margin-left: .2em; padding-left: .4em; }
+.py-lineno { font-style: italic; font-size: 90%;
+ padding-left: .5em; }
+a.py-toggle { text-decoration: none; }
+div.py-highlight-hdr { border-top: 2px solid #000000;
+ border-bottom: 2px solid #000000;
+ background: #d8e8e8; }
+div.py-highlight { border-bottom: 2px solid #000000;
+ background: #d0e0e0; }
+.py-prompt { color: #005050; font-weight: bold;}
+.py-more { color: #005050; font-weight: bold;}
+.py-string { color: #006030; }
+.py-comment { color: #003060; }
+.py-keyword { color: #600000; }
+.py-output { color: #404040; }
+.py-name { color: #000050; }
+.py-name:link { color: #000050 !important; }
+.py-name:visited { color: #000050 !important; }
+.py-number { color: #005000; }
+.py-defname { color: #000060; font-weight: bold; }
+.py-def-name { color: #000060; font-weight: bold; }
+.py-base-class { color: #000060; }
+.py-param { color: #000060; }
+.py-docstring { color: #006030; }
+.py-decorator { color: #804020; }
+/* Use this if you don't want links to names underlined: */
+/*a.py-name { text-decoration: none; }*/
+
+/* Graphs & Diagrams
+ * - These CSS styles are used for graphs & diagrams generated using
+ * Graphviz dot. 'img.graph-without-title' is used for bare
+ * diagrams (to remove the border created by making the image
+ * clickable).
+ */
+img.graph-without-title { border: none; }
+img.graph-with-title { border: 1px solid #000000; }
+span.graph-title { font-weight: bold; }
+span.graph-caption { }
+
+/* General-purpose classes
+ * - 'p.indent-wrapped-lines' defines a paragraph whose first line
+ * is not indented, but whose subsequent lines are.
+ * - The 'nomargin-top' class is used to remove the top margin (e.g.
+ * from lists). The 'nomargin' class is used to remove both the
+ * top and bottom margin (but not the left or right margin --
+ * for lists, that would cause the bullets to disappear.)
+ */
+p.indent-wrapped-lines { padding: 0 0 0 7em; text-indent: -7em;
+ margin: 0; }
+.nomargin-top { margin-top: 0; }
+.nomargin { margin-top: 0; margin-bottom: 0; }
+
+/* HTML Log */
+div.log-block { padding: 0; margin: .5em 0 .5em 0;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #000000; }
+div.log-error { padding: .1em .3em .1em .3em; margin: 4px;
+ background: #ffb0b0; color: #000000;
+ border: 1px solid #000000; }
+div.log-warning { padding: .1em .3em .1em .3em; margin: 4px;
+ background: #ffffb0; color: #000000;
+ border: 1px solid #000000; }
+div.log-info { padding: .1em .3em .1em .3em; margin: 4px;
+ background: #b0ffb0; color: #000000;
+ border: 1px solid #000000; }
+h2.log-hdr { background: #70b0ff; color: #000000;
+ margin: 0; padding: 0em 0.5em 0em 0.5em;
+ border-bottom: 1px solid #000000; font-size: 110%; }
+p.log { font-weight: bold; margin: .5em 0 .5em 0; }
+tr.opt-changed { color: #000000; font-weight: bold; }
+tr.opt-default { color: #606060; }
+pre.log { margin: 0; padding: 0; padding-left: 1em; }
diff --git a/debian/tests/data/htmldocs/expected/output/epydoc.js b/debian/tests/data/htmldocs/expected/output/epydoc.js
new file mode 100644
index 0000000..e787dbc
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/epydoc.js
@@ -0,0 +1,293 @@
+function toggle_private() {
+ // Search for any private/public links on this page. Store
+ // their old text in "cmd," so we will know what action to
+ // take; and change their text to the opposite action.
+ var cmd = "?";
+ var elts = document.getElementsByTagName("a");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "privatelink") {
+ cmd = elts[i].innerHTML;
+ elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
+ "hide private":"show private");
+ }
+ }
+ // Update all DIVs containing private objects.
+ var elts = document.getElementsByTagName("div");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+ }
+ else if (elts[i].className == "public") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
+ }
+ }
+ // Update all table rows containing private objects. Note, we
+ // use "" instead of "block" becaue IE & firefox disagree on what
+ // this should be (block vs table-row), and "" just gives the
+ // default for both browsers.
+ var elts = document.getElementsByTagName("tr");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
+ }
+ }
+ // Update all list items containing private objects.
+ var elts = document.getElementsByTagName("li");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
+ "none":"");
+ }
+ }
+ // Update all list items containing private objects.
+ var elts = document.getElementsByTagName("ul");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+ }
+ }
+ // Set a cookie to remember the current option.
+ document.cookie = "EpydocPrivate="+cmd;
+ }
+function show_private() {
+ var elts = document.getElementsByTagName("a");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "privatelink") {
+ cmd = elts[i].innerHTML;
+ if (cmd && cmd.substr(0,4)=="show")
+ toggle_private();
+ }
+ }
+ }
+function getCookie(name) {
+ var dc = document.cookie;
+ var prefix = name + "=";
+ var begin = dc.indexOf("; " + prefix);
+ if (begin == -1) {
+ begin = dc.indexOf(prefix);
+ if (begin != 0) return null;
+ } else
+ { begin += 2; }
+ var end = document.cookie.indexOf(";", begin);
+ if (end == -1)
+ { end = dc.length; }
+ return unescape(dc.substring(begin + prefix.length, end));
+ }
+function setFrame(url1, url2) {
+ parent.frames[1].location.href = url1;
+ parent.frames[2].location.href = url2;
+ }
+function checkCookie() {
+ var cmd=getCookie("EpydocPrivate");
+ if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
+ toggle_private();
+ }
+function toggleCallGraph(id) {
+ var elt = document.getElementById(id);
+ if (elt.style.display == "none")
+ elt.style.display = "block";
+ else
+ elt.style.display = "none";
+ }
+function expand(id) {
+ var elt = document.getElementById(id+"-expanded");
+ if (elt) elt.style.display = "block";
+ var elt = document.getElementById(id+"-expanded-linenums");
+ if (elt) elt.style.display = "block";
+ var elt = document.getElementById(id+"-collapsed");
+ if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+ var elt = document.getElementById(id+"-collapsed-linenums");
+ if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+ var elt = document.getElementById(id+"-toggle");
+ if (elt) { elt.innerHTML = "-"; }
+}
+
+function collapse(id) {
+ var elt = document.getElementById(id+"-expanded");
+ if (elt) elt.style.display = "none";
+ var elt = document.getElementById(id+"-expanded-linenums");
+ if (elt) elt.style.display = "none";
+ var elt = document.getElementById(id+"-collapsed-linenums");
+ if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
+ var elt = document.getElementById(id+"-toggle");
+ if (elt) { elt.innerHTML = "+"; }
+ var elt = document.getElementById(id+"-collapsed");
+ if (elt) {
+ elt.style.display = "block";
+
+ var indent = elt.getAttribute("indent");
+ var pad = elt.getAttribute("pad");
+ var s = "<tt class='py-lineno'>";
+ for (var i=0; i<pad.length; i++) { s += " " }
+ s += "</tt>";
+ s += " <tt class='py-line'>";
+ for (var i=0; i<indent.length; i++) { s += " " }
+ s += "<a href='#' onclick='expand(\"" + id;
+ s += "\");return false'>...</a></tt><br />";
+ elt.innerHTML = s;
+ }
+}
+
+function toggle(id) {
+ elt = document.getElementById(id+"-toggle");
+ if (elt.innerHTML == "-")
+ collapse(id);
+ else
+ expand(id);
+ return false;
+}
+
+function highlight(id) {
+ var elt = document.getElementById(id+"-def");
+ if (elt) elt.className = "py-highlight-hdr";
+ var elt = document.getElementById(id+"-expanded");
+ if (elt) elt.className = "py-highlight";
+ var elt = document.getElementById(id+"-collapsed");
+ if (elt) elt.className = "py-highlight";
+}
+
+function num_lines(s) {
+ var n = 1;
+ var pos = s.indexOf("\n");
+ while ( pos > 0) {
+ n += 1;
+ pos = s.indexOf("\n", pos+1);
+ }
+ return n;
+}
+
+// Collapse all blocks that mave more than `min_lines` lines.
+function collapse_all(min_lines) {
+ var elts = document.getElementsByTagName("div");
+ for (var i=0; i<elts.length; i++) {
+ var elt = elts[i];
+ var split = elt.id.indexOf("-");
+ if (split > 0)
+ if (elt.id.substring(split, elt.id.length) == "-expanded")
+ if (num_lines(elt.innerHTML) > min_lines)
+ collapse(elt.id.substring(0, split));
+ }
+}
+
+function expandto(href) {
+ var start = href.indexOf("#")+1;
+ if (start != 0 && start != href.length) {
+ if (href.substring(start, href.length) != "-") {
+ collapse_all(4);
+ pos = href.indexOf(".", start);
+ while (pos != -1) {
+ var id = href.substring(start, pos);
+ expand(id);
+ pos = href.indexOf(".", pos+1);
+ }
+ var id = href.substring(start, href.length);
+ expand(id);
+ highlight(id);
+ }
+ }
+}
+
+function kill_doclink(id) {
+ var parent = document.getElementById(id);
+ parent.removeChild(parent.childNodes.item(0));
+}
+function auto_kill_doclink(ev) {
+ if (!ev) var ev = window.event;
+ if (!this.contains(ev.toElement)) {
+ var parent = document.getElementById(this.parentID);
+ parent.removeChild(parent.childNodes.item(0));
+ }
+}
+
+function doclink(id, name, targets_id) {
+ var elt = document.getElementById(id);
+
+ // If we already opened the box, then destroy it.
+ // (This case should never occur, but leave it in just in case.)
+ if (elt.childNodes.length > 1) {
+ elt.removeChild(elt.childNodes.item(0));
+ }
+ else {
+ // The outer box: relative + inline positioning.
+ var box1 = document.createElement("div");
+ box1.style.position = "relative";
+ box1.style.display = "inline";
+ box1.style.top = 0;
+ box1.style.left = 0;
+
+ // A shadow for fun
+ var shadow = document.createElement("div");
+ shadow.style.position = "absolute";
+ shadow.style.left = "-1.3em";
+ shadow.style.top = "-1.3em";
+ shadow.style.background = "#404040";
+
+ // The inner box: absolute positioning.
+ var box2 = document.createElement("div");
+ box2.style.position = "relative";
+ box2.style.border = "1px solid #a0a0a0";
+ box2.style.left = "-.2em";
+ box2.style.top = "-.2em";
+ box2.style.background = "white";
+ box2.style.padding = ".3em .4em .3em .4em";
+ box2.style.fontStyle = "normal";
+ box2.onmouseout=auto_kill_doclink;
+ box2.parentID = id;
+
+ // Get the targets
+ var targets_elt = document.getElementById(targets_id);
+ var targets = targets_elt.getAttribute("targets");
+ var links = "";
+ target_list = targets.split(",");
+ for (var i=0; i<target_list.length; i++) {
+ var target = target_list[i].split("=");
+ links += "<li><a href='" + target[1] +
+ "' style='text-decoration:none'>" +
+ target[0] + "</a></li>";
+ }
+
+ // Put it all together.
+ elt.insertBefore(box1, elt.childNodes.item(0));
+ //box1.appendChild(box2);
+ box1.appendChild(shadow);
+ shadow.appendChild(box2);
+ box2.innerHTML =
+ "Which <b>"+name+"</b> do you want to see documentation for?" +
+ "<ul style='margin-bottom: 0;'>" +
+ links +
+ "<li><a href='#' style='text-decoration:none' " +
+ "onclick='kill_doclink(\""+id+"\");return false;'>"+
+ "<i>None of the above</i></a></li></ul>";
+ }
+ return false;
+}
+
+function get_anchor() {
+ var href = location.href;
+ var start = href.indexOf("#")+1;
+ if ((start != 0) && (start != href.length))
+ return href.substring(start, href.length);
+ }
+function redirect_url(dottedName) {
+ // Scan through each element of the "pages" list, and check
+ // if "name" matches with any of them.
+ for (var i=0; i<pages.length; i++) {
+
+ // Each page has the form "<pagename>-m" or "<pagename>-c";
+ // extract the <pagename> portion & compare it to dottedName.
+ var pagename = pages[i].substring(0, pages[i].length-2);
+ if (pagename == dottedName.substring(0,pagename.length)) {
+
+ // We've found a page that matches `dottedName`;
+ // construct its URL, using leftover `dottedName`
+ // content to form an anchor.
+ var pagetype = pages[i].charAt(pages[i].length-1);
+ var url = pagename + ((pagetype=="m")?"-module.html":
+ "-class.html");
+ if (dottedName.length > pagename.length)
+ url += "#" + dottedName.substring(pagename.length+1,
+ dottedName.length);
+ return url;
+ }
+ }
+ }
diff --git a/debian/tests/data/htmldocs/expected/output/frames.html b/debian/tests/data/htmldocs/expected/output/frames.html
new file mode 100644
index 0000000..b87dbb4
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/frames.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ "DTD/xhtml1-frameset.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title> Super Duper Special Project </title>
+</head>
+<frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="toc.html" name="moduleListFrame"
+ id="moduleListFrame" />
+ <frame src="toc-everything.html" name="moduleFrame"
+ id="moduleFrame" />
+ </frameset>
+ <frame src="testpackage-module.html" name="mainFrame" id="mainFrame" />
+</frameset>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/help.html b/debian/tests/data/htmldocs/expected/output/help.html
new file mode 100644
index 0000000..97f6ed0
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/help.html
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Help</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Help </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%"> </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="help.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<h1 class="epydoc"> API Documentation </h1>
+
+<p> This document contains the API (Application Programming Interface)
+documentation for Super Duper Special Project. Documentation for the Python
+objects defined by the project is divided into separate pages for each
+package, module, and class. The API documentation also includes two
+pages containing information about the project as a whole: a trees
+page, and an index page. </p>
+
+<h2> Object Documentation </h2>
+
+ <p>Each <strong>Package Documentation</strong> page contains: </p>
+ <ul>
+ <li> A description of the package. </li>
+ <li> A list of the modules and sub-packages contained by the
+ package. </li>
+ <li> A summary of the classes defined by the package. </li>
+ <li> A summary of the functions defined by the package. </li>
+ <li> A summary of the variables defined by the package. </li>
+ <li> A detailed description of each function defined by the
+ package. </li>
+ <li> A detailed description of each variable defined by the
+ package. </li>
+ </ul>
+
+ <p>Each <strong>Module Documentation</strong> page contains:</p>
+ <ul>
+ <li> A description of the module. </li>
+ <li> A summary of the classes defined by the module. </li>
+ <li> A summary of the functions defined by the module. </li>
+ <li> A summary of the variables defined by the module. </li>
+ <li> A detailed description of each function defined by the
+ module. </li>
+ <li> A detailed description of each variable defined by the
+ module. </li>
+ </ul>
+
+ <p>Each <strong>Class Documentation</strong> page contains: </p>
+ <ul>
+ <li> A class inheritance diagram. </li>
+ <li> A list of known subclasses. </li>
+ <li> A description of the class. </li>
+ <li> A summary of the methods defined by the class. </li>
+ <li> A summary of the instance variables defined by the class. </li>
+ <li> A summary of the class (static) variables defined by the
+ class. </li>
+ <li> A detailed description of each method defined by the
+ class. </li>
+ <li> A detailed description of each instance variable defined by the
+ class. </li>
+ <li> A detailed description of each class (static) variable defined
+ by the class. </li>
+ </ul>
+
+<h2> Project Documentation </h2>
+
+ <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>
+ <ul>
+ <li> The <em>module hierarchy</em> lists every package and module, with
+ modules grouped into packages. At the top level, and within each
+ package, modules and sub-packages are listed alphabetically. </li>
+ <li> The <em>class hierarchy</em> lists every class, grouped by base
+ class. If a class has more than one base class, then it will be
+ listed under each base class. At the top level, and under each base
+ class, classes are listed alphabetically. </li>
+ </ul>
+
+ <p> The <strong>Index</strong> page contains indices of terms and
+ identifiers: </p>
+ <ul>
+ <li> The <em>term index</em> lists every term indexed by any object's
+ documentation. For each term, the index provides links to each
+ place where the term is indexed. </li>
+ <li> The <em>identifier index</em> lists the (short) name of every package,
+ module, class, method, function, variable, and parameter. For each
+ identifier, the index provides a short description, and a link to
+ its documentation. </li>
+ </ul>
+
+<h2> The Table of Contents </h2>
+
+<p> The table of contents occupies the two frames on the left side of
+the window. The upper-left frame displays the <em>project
+contents</em>, and the lower-left frame displays the <em>module
+contents</em>: </p>
+
+<table class="help summary" border="1" cellspacing="0" cellpadding="3">
+ <tr style="height: 30%">
+ <td align="center" style="font-size: small">
+ Project<br />Contents<hr />...</td>
+ <td align="center" style="font-size: small" rowspan="2" width="70%">
+ API<br />Documentation<br />Frame<br /><br /><br />
+ </td>
+ </tr>
+ <tr>
+ <td align="center" style="font-size: small">
+ Module<br />Contents<hr /> <br />...<br />
+ </td>
+ </tr>
+</table><br />
+
+<p> The <strong>project contents frame</strong> contains a list of all packages
+and modules that are defined by the project. Clicking on an entry
+will display its contents in the module contents frame. Clicking on a
+special entry, labeled "Everything," will display the contents of
+the entire project. </p>
+
+<p> The <strong>module contents frame</strong> contains a list of every
+submodule, class, type, exception, function, and variable defined by a
+module or package. Clicking on an entry will display its
+documentation in the API documentation frame. Clicking on the name of
+the module, at the top of the frame, will display the documentation
+for the module itself. </p>
+
+<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top
+navigation bar can be used to control whether the table of contents is
+displayed or not. </p>
+
+<h2> The Navigation Bar </h2>
+
+<p> A navigation bar is located at the top and bottom of every page.
+It indicates what type of page you are currently viewing, and allows
+you to go to related pages. The following table describes the labels
+on the navigation bar. Note that not some labels (such as
+[Parent]) are not displayed on all pages. </p>
+
+<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">
+<tr class="summary">
+ <th>Label</th>
+ <th>Highlighted when...</th>
+ <th>Links to...</th>
+</tr>
+ <tr><td valign="top"><strong>[Parent]</strong></td>
+ <td valign="top"><em>(never highlighted)</em></td>
+ <td valign="top"> the parent of the current package </td></tr>
+ <tr><td valign="top"><strong>[Package]</strong></td>
+ <td valign="top">viewing a package</td>
+ <td valign="top">the package containing the current object
+ </td></tr>
+ <tr><td valign="top"><strong>[Module]</strong></td>
+ <td valign="top">viewing a module</td>
+ <td valign="top">the module containing the current object
+ </td></tr>
+ <tr><td valign="top"><strong>[Class]</strong></td>
+ <td valign="top">viewing a class </td>
+ <td valign="top">the class containing the current object</td></tr>
+ <tr><td valign="top"><strong>[Trees]</strong></td>
+ <td valign="top">viewing the trees page</td>
+ <td valign="top"> the trees page </td></tr>
+ <tr><td valign="top"><strong>[Index]</strong></td>
+ <td valign="top">viewing the index page</td>
+ <td valign="top"> the index page </td></tr>
+ <tr><td valign="top"><strong>[Help]</strong></td>
+ <td valign="top">viewing the help page</td>
+ <td valign="top"> the help page </td></tr>
+</table>
+
+<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below
+the top navigation bar can be used to control whether documentation
+for private objects is displayed. Private objects are usually defined
+as objects whose (short) names begin with a single underscore, but do
+not end with an underscore. For example, "<code>_x</code>",
+"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"
+are private objects; but "<code>re.sub</code>",
+"<code>__init__</code>", and "<code>type_</code>" are not. However,
+if a module defines the "<code>__all__</code>" variable, then its
+contents are used to decide which objects are private. </p>
+
+<p> A timestamp below the bottom navigation bar indicates when each
+page was last updated. </p>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Help </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/identifier-index.html b/debian/tests/data/htmldocs/expected/output/identifier-index.html
new file mode 100644
index 0000000..5be5f05
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/identifier-index.html
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Identifier Index</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Indices </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%"> </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="identifier-index.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table border="0" width="100%">
+<tr valign="bottom"><td>
+<h1 class="epydoc">Identifier Index</h1>
+</td><td>
+[
+ A
+ B
+ <a href="#C">C</a>
+ D
+ E
+ <a href="#F">F</a>
+ G
+ H
+ I
+ J
+ K
+ L
+ <a href="#M">M</a>
+ N
+ O
+ P
+ Q
+ R
+ S
+ <a href="#T">T</a>
+ <a href="#U">U</a>
+ V
+ W
+ X
+ Y
+ Z
+ <a href="#_">_</a>
+]
+</td></table>
+<table border="0" width="100%">
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="C">C</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="testpackage.util-module.html#CONSTANT_ONE">CONSTANT_ONE</a><br />
+<span class="index-where">(in <a href="testpackage.util-module.html">testpackage.util</a>)</span></td>
+<td width="33%" class="link-index"><a href="testpackage.util-module.html#CONSTANT_TWO">CONSTANT_TWO</a><br />
+<span class="index-where">(in <a href="testpackage.util-module.html">testpackage.util</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="F">F</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="testpackage.util.FirstClass-class.html">FirstClass</a><br />
+<span class="index-where">(in <a href="testpackage.util-module.html">testpackage.util</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="M">M</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="testpackage.util-module.html#method2">method2()</a><br />
+<span class="index-where">(in <a href="testpackage.util-module.html">testpackage.util</a>)</span></td>
+<td width="33%" class="link-index"><a href="testpackage.util-module.html#methodOne">methodOne()</a><br />
+<span class="index-where">(in <a href="testpackage.util-module.html">testpackage.util</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="T">T</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="testpackage-module.html">testpackage</a></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="U">U</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="testpackage.util-module.html">util</a><br />
+<span class="index-where">(in <a href="testpackage-module.html">testpackage</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="testpackage.util.FirstClass-class.html#__eq__">__eq__()</a><br />
+<span class="index-where">(in <a href="testpackage.util.FirstClass-class.html">FirstClass</a>)</span></td>
+<td width="33%" class="link-index"><a href="testpackage-module.html#__package__">__package__</a><br />
+<span class="index-where">(in <a href="testpackage-module.html">testpackage</a>)</span></td>
+<td width="33%" class="link-index"><a href="testpackage.util._SecondClass-class.html">_SecondClass</a><br />
+<span class="index-where">(in <a href="testpackage.util-module.html">testpackage.util</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="testpackage.util._SecondClass-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in <a href="testpackage.util._SecondClass-class.html" onclick="show_private();">_SecondClass</a>)</span></td>
+<td width="33%" class="link-index"><a href="testpackage.util-module.html#__package__">__package__</a><br />
+<span class="index-where">(in <a href="testpackage.util-module.html">testpackage.util</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+</table>
+</td></tr>
+</table>
+<br /><br /><!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Indices </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/index.html b/debian/tests/data/htmldocs/expected/output/index.html
new file mode 100644
index 0000000..b87dbb4
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/index.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ "DTD/xhtml1-frameset.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title> Super Duper Special Project </title>
+</head>
+<frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="toc.html" name="moduleListFrame"
+ id="moduleListFrame" />
+ <frame src="toc-everything.html" name="moduleFrame"
+ id="moduleFrame" />
+ </frameset>
+ <frame src="testpackage-module.html" name="mainFrame" id="mainFrame" />
+</frameset>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/module-tree.html b/debian/tests/data/htmldocs/expected/output/module-tree.html
new file mode 100644
index 0000000..cf65d71
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/module-tree.html
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Module Hierarchy</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Trees </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%"> </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="module-tree.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Module Hierarchy</h1>
+<ul class="nomargin-top">
+ <li> <strong class="uidlink"><a href="testpackage-module.html">testpackage</a></strong>: <em class="summary">This is an important module that really needs to be documented.</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="testpackage.util-module.html">testpackage.util</a></strong>: <em class="summary">Provides general-purpose utilities.</em> </li>
+ </ul>
+ </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Trees </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/redirect.html b/debian/tests/data/htmldocs/expected/output/redirect.html
new file mode 100644
index 0000000..fd3df80
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/redirect.html
@@ -0,0 +1,38 @@
+<html><head><title>Epydoc Redirect Page</title>
+<meta http-equiv="cache-control" content="no-cache" />
+<meta http-equiv="expires" content="0" />
+<meta http-equiv="pragma" content="no-cache" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+<body>
+<script type="text/javascript">
+<!--
+var pages = ["testpackage.util._SecondClass-c", "testpackage.util.FirstClass-c", "testpackage.util-m", "testpackage-m"];
+var dottedName = get_anchor();
+if (dottedName) {
+ var target = redirect_url(dottedName);
+ if (target) window.location.replace(target);
+}
+// -->
+</script>
+
+<h3>Epydoc Auto-redirect page</h3>
+
+<p>When javascript is enabled, this page will redirect URLs of
+the form <tt>redirect.html#<i>dotted.name</i></tt> to the
+documentation for the object with the given fully-qualified
+dotted name.</p>
+<p><a id="message"> </a></p>
+
+<script type="text/javascript">
+<!--
+if (dottedName) {
+ var msg = document.getElementById("message");
+ msg.innerHTML = "No documentation found for <tt>"+
+ dottedName+"</tt>";
+}
+// -->
+</script>
+
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/testpackage-module.html b/debian/tests/data/htmldocs/expected/output/testpackage-module.html
new file mode 100644
index 0000000..88dc57b
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/testpackage-module.html
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>testpackage</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Home </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ Package testpackage
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="testpackage-module.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PACKAGE DESCRIPTION ==================== -->
+<h1 class="epydoc">Package testpackage</h1><p class="nomargin-top"><span class="codelink"><a href="testpackage-pysrc.html">source code</a></span></p>
+<p>This is an important module that really needs to be documented.</p>
+ <p>It has a bunch of stuff in it that is not only really important, but
+ also really interesting too. Because of that, we really want this
+ information to show up in the generated Epydoc documentation.</p>
+ <p>Besides being a pile of completely useless text, this is used as a
+ test case for Epydoc, to make sure that it's working.</p>
+
+<hr />
+<div class="fields"> <p><strong>Author:</strong>
+ Kenneth J. Pronovici <pronovic at debian.org>
+ </p>
+</div><!-- ==================== SUBMODULES ==================== -->
+<a name="section-Submodules"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Submodules</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Submodules"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr><td class="summary">
+ <ul class="nomargin">
+ <li> <strong class="uidlink"><a href="testpackage.util-module.html">testpackage.util</a></strong>: <em class="summary">Provides general-purpose utilities.</em> </li>
+ </ul></td></tr>
+</table>
+
+<br />
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code><br />
+ hash(x)
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Home </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/testpackage-pysrc.html b/debian/tests/data/htmldocs/expected/output/testpackage-pysrc.html
new file mode 100644
index 0000000..6b8cf11
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/testpackage-pysrc.html
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>testpackage</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Home </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ Package testpackage
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="testpackage-pysrc.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="testpackage-module.html">Package testpackage</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-docstring">This is an important module that really needs to be documented.</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-docstring">It has a bunch of stuff in it that is not only really important, but also</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-docstring">really interesting too. Because of that, we really want this information to</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-docstring">show up in the generated Epydoc documentation.</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring">Besides being a pile of completely useless text, this is used as a test case</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring">for Epydoc, to make sure that it's working.</tt> </tt>
+<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-docstring">@author: Kenneth J. Pronovici <pronovic at debian.org></tt> </tt>
+<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"> </tt>
+<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-name">__all__</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-string">'util'</tt><tt class="py-op">,</tt> <tt class="py-op">]</tt> </tt>
+<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Home </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/testpackage.util-module.html b/debian/tests/data/htmldocs/expected/output/testpackage.util-module.html
new file mode 100644
index 0000000..c8f36e0
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/testpackage.util-module.html
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>testpackage.util</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="testpackage-module.html">Package testpackage</a> ::
+ Module util
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="testpackage.util-module.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module util</h1><p class="nomargin-top"><span class="codelink"><a href="testpackage.util-pysrc.html">source code</a></span></p>
+<p>Provides general-purpose utilities.</p>
+
+<hr />
+<div class="fields"> <p><strong>Author:</strong>
+ Kenneth J. Pronovici <pronovic at ieee.org>
+ </p>
+</div><!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a href="testpackage.util.FirstClass-class.html" class="summary-name">FirstClass</a><br />
+ Special list class.
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a href="testpackage.util._SecondClass-class.html" class="summary-name" onclick="show_private();">_SecondClass</a><br />
+ Represents something else that I forgot just now.
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="testpackage.util-module.html#method2" class="summary-sig-name">method2</a>(<span class="summary-sig-arg">d</span>,
+ <span class="summary-sig-arg">keys</span>)</span><br />
+ Removes all of the keys from the dictionary.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="testpackage.util-pysrc.html#method2">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="testpackage.util-module.html#methodOne" class="summary-sig-name">methodOne</a>(<span class="summary-sig-arg">d</span>)</span><br />
+ Returns the keys of the dictionary sorted by value.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="testpackage.util-pysrc.html#methodOne">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="CONSTANT_ONE"></a><span class="summary-name">CONSTANT_ONE</span> = <code title="'one'"><code class="variable-quote">'</code><code class="variable-string">one</code><code class="variable-quote">'</code></code><br />
+ The first constant
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="CONSTANT_TWO"></a><span class="summary-name">CONSTANT_TWO</span> = <code title="'two'"><code class="variable-quote">'</code><code class="variable-string">two</code><code class="variable-quote">'</code></code><br />
+ The second constant
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code><br />
+ hash(x)
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="method2"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">method2</span>(<span class="sig-arg">d</span>,
+ <span class="sig-arg">keys</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="testpackage.util-pysrc.html#method2">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Removes all of the keys from the dictionary. The dictionary is altered
+ in-place. Each key must exist in the dictionary.</p>
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>d</code></strong> - Dictionary to operate on</li>
+ <li><strong class="pname"><code>keys</code></strong> - List of keys to remove</li>
+ </ul></dd>
+ <dt>Raises:</dt>
+ <dd><ul class="nomargin-top">
+ <li><code><strong class='fraise'>KeyError</strong></code> - If one of the keys does not exist</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="methodOne"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">methodOne</span>(<span class="sig-arg">d</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="testpackage.util-pysrc.html#methodOne">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Returns the keys of the dictionary sorted by value.</p>
+ <p>There are cuter ways to do this in Python 2.4, but we were originally
+ attempting to stay compatible with Python 2.3.</p>
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>d</code></strong> - Dictionary to operate on</li>
+ </ul></dd>
+ <dt>Returns:</dt>
+ <dd>List of dictionary keys sorted in order by dictionary value.</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/testpackage.util-pysrc.html b/debian/tests/data/htmldocs/expected/output/testpackage.util-pysrc.html
new file mode 100644
index 0000000..41778c0
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/testpackage.util-pysrc.html
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>testpackage.util</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="testpackage-module.html">Package testpackage</a> ::
+ Module util
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="testpackage.util-pysrc.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="testpackage.util-module.html">Module testpackage.util</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-docstring">Provides general-purpose utilities.</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-docstring">@sort: FirstClass, _SecondClass, method2, methodOne, CONSTANT_ONE, CONSTANT_TWO</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-docstring">@var CONSTANT_ONE: The first constant</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-docstring">@var CONSTANT_TWO: The second constant</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring">@author: Kenneth J. Pronovici <pronovic at ieee.org></tt> </tt>
+<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"> </tt>
+<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable testpackage.util.CONSTANT_ONE=testpackage.util-module.html#CONSTANT_ONE"><a title="testpackage.util.CONSTANT_ONE" class="py-name" href="#" onclick="return doclink('link-0', 'CONSTANT_ONE', 'link-0');">CONSTANT_ONE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"one"</tt> </tt>
+<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable testpackage.util.CONSTANT_TWO=testpackage.util-module.html#CONSTANT_TWO"><a title="testpackage.util.CONSTANT_TWO" class="py-name" href="#" onclick="return doclink('link-1', 'CONSTANT_TWO', 'link-1');">CONSTANT_TWO</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"two"</tt> </tt>
+<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"> </tt>
+<a name="FirstClass"></a><div id="FirstClass-def"><a name="L15"></a><tt class="py-lineno">15</tt> <a class="py-toggle" href="#" id="FirstClass-toggle" onclick="return toggle('FirstClass');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="testpackage.util.FirstClass-class.html">FirstClass</a><tt class="py-op">(</tt><tt class="py-base-class">list</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="FirstClass-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="FirstClass-expanded"><a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"> </tt>
+<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-docstring"> Special list class.</tt> </tt>
+<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"><tt class="py-docstring"> This is a special class that extends list.</tt> </tt>
+<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"><tt class="py-docstring"> It has some special behavior that users will find really interesting.</tt> </tt>
+<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"><tt class="py-docstring"> Or, it would if I had remembered to implement that.</tt> </tt>
+<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"> </tt>
+<a name="FirstClass.__eq__"></a><div id="FirstClass.__eq__-def"><a name="L26"></a><tt class="py-lineno">26</tt> <a class="py-toggle" href="#" id="FirstClass.__eq__-toggle" onclick="return toggle('FirstClass.__eq__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="testpackage.util.FirstClass-class.html#__eq__">__eq__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op"> [...]
+</div><div id="FirstClass.__eq__-collapsed" style="display:none;" pad="++" indent="+++++++"></div><div id="FirstClass.__eq__-expanded"><a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"><tt class="py-docstring"> Definition of C{==} operator for this class.</tt> </tt>
+<a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"><tt class="py-docstring"> @param other: Other object to compare to.</tt> </tt>
+<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"><tt class="py-docstring"> @return: True/false depending on whether C{other is None}</tt> </tt>
+<a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">other</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div></div><a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"> </tt>
+<a name="_SecondClass"></a><div id="_SecondClass-def"><a name="L37"></a><tt class="py-lineno">37</tt> <a class="py-toggle" href="#" id="_SecondClass-toggle" onclick="return toggle('_SecondClass');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="testpackage.util._SecondClass-class.html">_SecondClass</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_SecondClass-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="_SecondClass-expanded"><a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"> </tt>
+<a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"><tt class="py-docstring"> Represents something else that I forgot just now.</tt> </tt>
+<a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"> </tt>
+<a name="_SecondClass.__init__"></a><div id="_SecondClass.__init__-def"><a name="L43"></a><tt class="py-lineno">43</tt> <a class="py-toggle" href="#" id="_SecondClass.__init__-toggle" onclick="return toggle('_SecondClass.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="testpackage.util._SecondClass-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</ [...]
+</div><div id="_SecondClass.__init__-collapsed" style="display:none;" pad="++" indent="+++++++"></div><div id="_SecondClass.__init__-expanded"><a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
+<a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"><tt class="py-docstring"> @param name: Name of this instance</tt> </tt>
+<a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt> </tt>
+<a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div></div><a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"> </tt>
+<a name="methodOne"></a><div id="methodOne-def"><a name="L51"></a><tt class="py-lineno">51</tt> <a class="py-toggle" href="#" id="methodOne-toggle" onclick="return toggle('methodOne');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="testpackage.util-module.html#methodOne">methodOne</a><tt class="py-op">(</tt><tt class="py-param">d</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="methodOne-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="methodOne-expanded"><a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"><tt class="py-docstring"> Returns the keys of the dictionary sorted by value.</tt> </tt>
+<a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L55"></a><tt class="py-lineno">55</tt> <tt class="py-line"><tt class="py-docstring"> There are cuter ways to do this in Python 2.4, but we were originally</tt> </tt>
+<a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"><tt class="py-docstring"> attempting to stay compatible with Python 2.3.</tt> </tt>
+<a name="L57"></a><tt class="py-lineno">57</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L58"></a><tt class="py-lineno">58</tt> <tt class="py-line"><tt class="py-docstring"> @param d: Dictionary to operate on</tt> </tt>
+<a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"><tt class="py-docstring"> @return: List of dictionary keys sorted in order by dictionary value.</tt> </tt>
+<a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L61"></a><tt class="py-lineno">61</tt> <tt class="py-line"> <tt class="py-name">items</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L62"></a><tt class="py-lineno">62</tt> <tt class="py-line"> <tt class="py-name">items</tt><tt class="py-op">.</tt><tt class="py-name">sort</tt><tt class="py-op">(</tt><tt class="py-keyword">lambda</tt> <tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">:</tt> <tt class="py-name">cmp</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</t [...]
+<a name="L63"></a><tt class="py-lineno">63</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">key</tt> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">items</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L64"></a><tt class="py-lineno">64</tt> <tt class="py-line"> </tt>
+<a name="method2"></a><div id="method2-def"><a name="L65"></a><tt class="py-lineno">65</tt> <a class="py-toggle" href="#" id="method2-toggle" onclick="return toggle('method2');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="testpackage.util-module.html#method2">method2</a><tt class="py-op">(</tt><tt class="py-param">d</tt><tt class="py-op">,</tt> <tt class="py-param">keys</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="method2-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="method2-expanded"><a name="L66"></a><tt class="py-lineno">66</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L67"></a><tt class="py-lineno">67</tt> <tt class="py-line"><tt class="py-docstring"> Removes all of the keys from the dictionary.</tt> </tt>
+<a name="L68"></a><tt class="py-lineno">68</tt> <tt class="py-line"><tt class="py-docstring"> The dictionary is altered in-place.</tt> </tt>
+<a name="L69"></a><tt class="py-lineno">69</tt> <tt class="py-line"><tt class="py-docstring"> Each key must exist in the dictionary.</tt> </tt>
+<a name="L70"></a><tt class="py-lineno">70</tt> <tt class="py-line"><tt class="py-docstring"> @param d: Dictionary to operate on</tt> </tt>
+<a name="L71"></a><tt class="py-lineno">71</tt> <tt class="py-line"><tt class="py-docstring"> @param keys: List of keys to remove</tt> </tt>
+<a name="L72"></a><tt class="py-lineno">72</tt> <tt class="py-line"><tt class="py-docstring"> @raise KeyError: If one of the keys does not exist</tt> </tt>
+<a name="L73"></a><tt class="py-lineno">73</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L74"></a><tt class="py-lineno">74</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">keys</tt><tt class="py-op">:</tt> </tt>
+<a name="L75"></a><tt class="py-lineno">75</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L76"></a><tt class="py-lineno">76</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/testpackage.util.FirstClass-class.html b/debian/tests/data/htmldocs/expected/output/testpackage.util.FirstClass-class.html
new file mode 100644
index 0000000..ebd1f7c
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/testpackage.util.FirstClass-class.html
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>testpackage.util.FirstClass</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="testpackage-module.html">Package testpackage</a> ::
+ <a href="testpackage.util-module.html">Module util</a> ::
+ Class FirstClass
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="testpackage.util.FirstClass-class.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class FirstClass</h1><p class="nomargin-top"><span class="codelink"><a href="testpackage.util-pysrc.html#FirstClass">source code</a></span></p>
+<pre class="base-tree">
+object --+
+ |
+ list --+
+ |
+ <strong class="uidshort">FirstClass</strong>
+</pre>
+
+<hr />
+<p>Special list class.</p>
+ <p>This is a special class that extends list.</p>
+ <p>It has some special behavior that users will find really interesting.
+ Or, it would if I had remembered to implement that.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="testpackage.util.FirstClass-class.html#__eq__" class="summary-sig-name">__eq__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">other</span>)</span><br />
+ Definition of <code>==</code> operator for this class.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="testpackage.util-pysrc.html#FirstClass.__eq__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>list</code></b>:
+ <code>__add__</code>,
+ <code>__contains__</code>,
+ <code>__delitem__</code>,
+ <code>__delslice__</code>,
+ <code>__ge__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__gt__</code>,
+ <code>__iadd__</code>,
+ <code>__imul__</code>,
+ <code>__init__</code>,
+ <code>__iter__</code>,
+ <code>__le__</code>,
+ <code>__len__</code>,
+ <code>__lt__</code>,
+ <code>__mul__</code>,
+ <code>__ne__</code>,
+ <code>__new__</code>,
+ <code>__repr__</code>,
+ <code>__reversed__</code>,
+ <code>__rmul__</code>,
+ <code>__setitem__</code>,
+ <code>__setslice__</code>,
+ <code>__sizeof__</code>,
+ <code>append</code>,
+ <code>count</code>,
+ <code>extend</code>,
+ <code>index</code>,
+ <code>insert</code>,
+ <code>pop</code>,
+ <code>remove</code>,
+ <code>reverse</code>,
+ <code>sort</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__setattr__</code>,
+ <code>__str__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>list</code></b>:
+ <code>__hash__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__eq__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__eq__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">other</span>)</span>
+ <br /><em class="fname">(Equality operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="testpackage.util-pysrc.html#FirstClass.__eq__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Definition of <code>==</code> operator for this class.</p>
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>other</code></strong> - Other object to compare to.</li>
+ </ul></dd>
+ <dt>Returns:</dt>
+ <dd>True/false depending on whether <code>other is None</code></dd>
+ <dt>Overrides:
+ list.__eq__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/testpackage.util._SecondClass-class.html b/debian/tests/data/htmldocs/expected/output/testpackage.util._SecondClass-class.html
new file mode 100644
index 0000000..55f3654
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/testpackage.util._SecondClass-class.html
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>testpackage.util._SecondClass</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="testpackage-module.html">Package testpackage</a> ::
+ <a href="testpackage.util-module.html">Module util</a> ::
+ Class _SecondClass
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="testpackage.util._SecondClass-class.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class _SecondClass</h1><p class="nomargin-top"><span class="codelink"><a href="testpackage.util-pysrc.html#_SecondClass">source code</a></span></p>
+<pre class="base-tree">
+object --+
+ |
+ <strong class="uidshort">_SecondClass</strong>
+</pre>
+
+<hr />
+<p>Represents something else that I forgot just now.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="testpackage.util._SecondClass-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>)</span><br />
+ Constructor.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="testpackage.util-pysrc.html#_SecondClass.__init__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__str__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="testpackage.util-pysrc.html#_SecondClass.__init__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Constructor.</p>
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>name</code></strong> - Name of this instance</li>
+ </ul></dd>
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="testpackage-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://this.is.something/special">Super Duper Special Project</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/toc-everything.html b/debian/tests/data/htmldocs/expected/output/toc-everything.html
new file mode 100644
index 0000000..a7e418a
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/toc-everything.html
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Everything</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Everything</h1>
+<hr />
+ <h2 class="toc">All Classes</h2>
+ <a target="mainFrame" href="testpackage.util.FirstClass-class.html"
+ >testpackage.util.FirstClass</a><br /> <div class="private">
+ <a target="mainFrame" href="testpackage.util._SecondClass-class.html"
+ >testpackage.util._SecondClass</a><br /> </div>
+ <h2 class="toc">All Functions</h2>
+ <a target="mainFrame" href="testpackage.util-module.html#method2"
+ >testpackage.util.method2</a><br /> <a target="mainFrame" href="testpackage.util-module.html#methodOne"
+ >testpackage.util.methodOne</a><br /> <h2 class="toc">All Variables</h2>
+ <div class="private">
+ <a target="mainFrame" href="testpackage-module.html#__package__"
+ >testpackage.__package__</a><br /> </div>
+ <a target="mainFrame" href="testpackage.util-module.html#CONSTANT_ONE"
+ >testpackage.util.CONSTANT_ONE</a><br /> <a target="mainFrame" href="testpackage.util-module.html#CONSTANT_TWO"
+ >testpackage.util.CONSTANT_TWO</a><br /> <a target="mainFrame" href="testpackage.util-module.html#__package__"
+ >testpackage.util.__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/toc-testpackage-module.html b/debian/tests/data/htmldocs/expected/output/toc-testpackage-module.html
new file mode 100644
index 0000000..57c5a77
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/toc-testpackage-module.html
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>testpackage</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module testpackage</h1>
+<hr />
+ <h2 class="toc">Variables</h2>
+ <div class="private">
+ <a target="mainFrame" href="testpackage-module.html#__package__"
+ >__package__</a><br /> </div>
+<hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/toc-testpackage.util-module.html b/debian/tests/data/htmldocs/expected/output/toc-testpackage.util-module.html
new file mode 100644
index 0000000..71d24ca
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/toc-testpackage.util-module.html
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>util</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module util</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="testpackage.util.FirstClass-class.html"
+ >FirstClass</a><br /> <div class="private">
+ <a target="mainFrame" href="testpackage.util._SecondClass-class.html"
+ >_SecondClass</a><br /> </div>
+ <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="testpackage.util-module.html#method2"
+ >method2</a><br /> <a target="mainFrame" href="testpackage.util-module.html#methodOne"
+ >methodOne</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="testpackage.util-module.html#CONSTANT_ONE"
+ >CONSTANT_ONE</a><br /> <a target="mainFrame" href="testpackage.util-module.html#CONSTANT_TWO"
+ >CONSTANT_TWO</a><br /> <a target="mainFrame" href="testpackage.util-module.html#__package__"
+ >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/expected/output/toc.html b/debian/tests/data/htmldocs/expected/output/toc.html
new file mode 100644
index 0000000..6c01a4a
--- /dev/null
+++ b/debian/tests/data/htmldocs/expected/output/toc.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Table of Contents</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Table of Contents</h1>
+<hr />
+ <a target="moduleFrame" href="toc-everything.html">Everything</a>
+ <br />
+ <h2 class="toc">Modules</h2>
+ <a target="moduleFrame" href="toc-testpackage-module.html"
+ onclick="setFrame('toc-testpackage-module.html','testpackage-module.html');" >testpackage</a><br /> <a target="moduleFrame" href="toc-testpackage.util-module.html"
+ onclick="setFrame('toc-testpackage.util-module.html','testpackage.util-module.html');" >testpackage.util</a><br /><hr />
+ <span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/debian/tests/data/htmldocs/testpackage/__init__.py b/debian/tests/data/htmldocs/testpackage/__init__.py
new file mode 100644
index 0000000..417ebd8
--- /dev/null
+++ b/debian/tests/data/htmldocs/testpackage/__init__.py
@@ -0,0 +1,15 @@
+"""
+This is an important module that really needs to be documented.
+
+It has a bunch of stuff in it that is not only really important, but also
+really interesting too. Because of that, we really want this information to
+show up in the generated Epydoc documentation.
+
+Besides being a pile of completely useless text, this is used as a test case
+for Epydoc, to make sure that it's working.
+
+ at author: Kenneth J. Pronovici <pronovic at debian.org>
+"""
+
+__all__ = [ 'util', ]
+
diff --git a/debian/tests/data/htmldocs/testpackage/util.py b/debian/tests/data/htmldocs/testpackage/util.py
new file mode 100644
index 0000000..9123ffc
--- /dev/null
+++ b/debian/tests/data/htmldocs/testpackage/util.py
@@ -0,0 +1,76 @@
+"""
+Provides general-purpose utilities.
+
+ at sort: FirstClass, _SecondClass, method2, methodOne, CONSTANT_ONE, CONSTANT_TWO
+
+ at var CONSTANT_ONE: The first constant
+ at var CONSTANT_TWO: The second constant
+
+ at author: Kenneth J. Pronovici <pronovic at ieee.org>
+"""
+
+CONSTANT_ONE = "one"
+CONSTANT_TWO = "two"
+
+class FirstClass(list):
+
+ """
+ Special list class.
+
+ This is a special class that extends list.
+
+ It has some special behavior that users will find really interesting.
+ Or, it would if I had remembered to implement that.
+ """
+
+ def __eq__(self, other):
+ """
+ Definition of C{==} operator for this class.
+ @param other: Other object to compare to.
+ @return: True/false depending on whether C{other is None}
+ """
+ if other is None:
+ return False
+ else:
+ return True
+
+class _SecondClass(object):
+
+ """
+ Represents something else that I forgot just now.
+ """
+
+ def __init__(self, name):
+ """
+ Constructor.
+ @param name: Name of this instance
+ """
+ self.name = name
+ self.state = None
+
+def methodOne(d):
+ """
+ Returns the keys of the dictionary sorted by value.
+
+ There are cuter ways to do this in Python 2.4, but we were originally
+ attempting to stay compatible with Python 2.3.
+
+ @param d: Dictionary to operate on
+ @return: List of dictionary keys sorted in order by dictionary value.
+ """
+ items = d.items()
+ items.sort(lambda x, y: cmp(x[1], y[1]))
+ return [key for key, value in items]
+
+def method2(d, keys):
+ """
+ Removes all of the keys from the dictionary.
+ The dictionary is altered in-place.
+ Each key must exist in the dictionary.
+ @param d: Dictionary to operate on
+ @param keys: List of keys to remove
+ @raise KeyError: If one of the keys does not exist
+ """
+ for key in keys:
+ del d[key]
+
diff --git a/debian/tests/htmldocs b/debian/tests/htmldocs
new file mode 100644
index 0000000..2f68899
--- /dev/null
+++ b/debian/tests/htmldocs
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+# Make sure $ADTTMP is available
+if [ "${ADTTMP}"F = "F" ]; then
+ echo "Error: expected environment variable ADTTMP is not set."
+ exit 1
+fi
+
+# Make sure $ADT_ARTIFACTS is available
+if [ "${ADT_ARTIFACTS}"F = "F" ]; then
+ echo "Error: expected environment variable ADT_ARTIFACTS is not set."
+ exit 1
+fi
+
+# Determine the test execution mode
+if [ "${1}"F = "F" ]; then
+ MODE="autopkgtest"
+elif [ "${1}" = "-r" ]; then
+ MODE="debian/rules"
+else
+ echo "usage: $0 [-r]\n-r Run in debian/rules mode instead of autopkgtest mode"
+ exit 2
+fi
+
+# Determine locations of required tools
+SOURCE_TREE="${PWD}"
+if [ "${MODE}" = "debian/rules" ]; then
+ # In debian/rules mode, the executables are assumed to be in the source tree
+ EPYDOC="${SOURCE_TREE}/scripts/epydoc"
+ export PYTHONPATH="${SOURCE_TREE}"
+else
+ # In autopkgtest mode, the executables are assumed to be installed
+ EPYDOC="/usr/bin/epydoc"
+fi
+
+# Print a test summary
+echo ""
+echo "========================================================================="
+echo "Running ${0} in mode: ${MODE}"
+echo "========================================================================="
+echo "SOURCE_TREE..: ${SOURCE_TREE}"
+echo "ADTTMP.......: ${ADTTMP}"
+echo "ADT_ARTIFACTS: ${ADT_ARTIFACTS}"
+echo "EPYDOC.......: ${EPYDOC}"
+echo "PYTHONPATH...: ${PYTHONPATH}"
+echo "========================================================================="
+echo ""
+
+# Always run tests from within $ADTTMP
+cd ${ADTTMP}
+
+# Set up some configuration
+NAME="Super Duper Special Project"
+URL="http://this.is.something/special"
+PACKAGE="testpackage"
+OUTPUT="${ADTTMP}/output"
+
+# Copy in the sample source tree
+echo "Creating Python project..."
+cp -r ${SOURCE_TREE}/debian/tests/data/htmldocs/testpackage .
+
+# Generate the documentation
+echo "Running: ${EPYDOC} --no-include-build-time -v --html --name "${NAME}" --output "${OUTPUT}" --url "${URL}" ${PACKAGE}/"
+${EPYDOC} --no-include-build-time -v --html --name "${NAME}" --output "${OUTPUT}" --url "${URL}" ${PACKAGE}/
+if [ $? != 0 ]; then
+ echo "Error: epydoc command failed"
+ exit 1
+fi
+
+# Check that the generated results match expected
+/usr/bin/diff -Naur ${SOURCE_TREE}/debian/tests/data/htmldocs/expected/output ${OUTPUT}
+if [ $? != 0 ]; then
+ echo "Generated result differs."
+ exit 1
+fi
+echo "Actual results match expected results... success!"
+
+# Close the test
+echo ""
+
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..b1e780f
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,4 @@
+# This watch file uses the qa.debian.org redirector so that SourceForge URLs work
+version=3
+opts=dversionmangle=s/\+dfsg// \
+http://sf.net/epydoc/epydoc-(.*)\.tar\.gz
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/epydoc.git
More information about the Reproducible-commits
mailing list