PYTHON DOCUMENTATION TO-DO LIST			-*- indented-text -*-
===============================

General
-------

* Figure out HTMLHelp generation for the Windows world.


Python/C API
------------

* The "Very High Level Interface" in the API document has been
  requested; I guess it wouldn't hurt to fill in a bit there.  Request 
  by Albert Hofkamp <a.hofkamp@wtb.tue.nl>.  (Partly done.)

* Describe implementing types in C, including use of the 'self'
  parameter to the method implementation function.  (Missing material
  mentioned in the Extending & Embedding manual, section 1.1; problem
  reported by Clay Spence <cspence@sarnoff.com>.)  Heavily impacts one
  chapter of the Python/C API manual.

* Missing PyArg_ParseTuple(), PyArg_ParseTupleAndKeywords(),
  Py_BuildValue().  Information requested by Greg Kochanski
  <gpk@bell-labs.com>.  PyEval_EvalCode() has also been requested.

Extending & Embedding
---------------------

* More information is needed about building dynamically linked
  extensions in C++.  Specifically, the extensions must be linked
  against the C++ libraries (and possibly runtime).  Also noted by
  Albert Hofkamp <a.hofkamp@wtb.tue.nl>.

Reference Manual
----------------

* Document the Extended Call Syntax in the language reference.
  [Jeremy Hylton]

* Document new comparison support for recursive objects (lang. ref.?
  library ref.? (cmp() function).  [Jeremy Hylton]

Library Reference
-----------------

* Update the pickle documentation to describe all of the current
  behavior; only a subset is described.  __reduce__, etc.  Partial
  update submitted by Jim Kerr <jbkerr@sr.hp.com>.

* Update the httplib documentation to match Greg Stein's HTTP/1.1
  support and new classes.  (Greg, this is yours!)

Tutorial
--------

* Update tutorial to use string methods and talk about backward
  compatibility of same.


NOT WORTH THE TROUBLE
---------------------

* In the indexes, some subitem entries are separated from the item
  entries by column- or page-breaks.  Reported by Lorenzo M. Catucci
  <lorenzo@argon.roma2.infn.it>.  This one will be hard; probably not
  really worth the pain.  (Only an issue at all when a header-letter
  and the first index entry get separated -- can change as soon as we
  change the index entries in the text.)  Also only a problem in the
  print version.

* Fix problem with howto documents getting the last module synopsis
  twice (in \localmoduletable) so we can get rid of the ugly 'uniq'
  hack in tools/mkhowto.  (Probably not worth the trouble of fixing.)
