							-*- text -*-

If you edited Misc/NEWS before it was converted to ReST format skimming this
file should help make the transition a bit easier.  For full details about
Docutils and ReST, go to the Docutils website:

    http://docutils.sourceforge.net/

To process Misc/NEWS using Docutils, you'll need the latest docutils
snapshot:

    http://docutils.sf.net/docutils-snapshot.tgz

Docutils works with Python 2.2 or newer.

To process NEWS into NEWS.html, first install Docutils, and then run
this command:

    python .../docutils/tools/rst2html.py NEWS NEWS.html

Here ".../docutils" is the directory into which the above snapshot was
extracted.  (I hope this recipe will change for the better.)

David Goodger made a change to the allowable structure of internal
references which greatly simplified initial conversion of the file.

The changes required fell into the following categories:

* The top-level "What's New" section headers changed to:

    What's New in Python 2.3 alpha 1?
    =================================

    *Release date: DD-MMM-2002*

  Note that the release date line is emphasized, with a "*" at each
  end.

* Subsections are underlined with a single row of hyphens:

    Type/class unification and new-style classes
    --------------------------------------------

* Places where "balanced" single quotes were used were changed to use
  apostrophes as both the opening and closing quote (`string' -> 'string').

* In a few places asterisks needed to be escaped which would otherwise have
  been interpreted as beginning blocks of italic or bold text, e.g.:

    - The type of tp_free has been changed from "``void (*)(PyObject *)``"
      to "``void (*)(void *)``".

  Note that only the asterisks preceded by whitespace needed to be escaped.

* One instance of a word ending with an underscore needed to be quoted
  ("PyCmp_" became "``PyCmp_``").

* One table was converted to ReST form (search Misc/NEWS for "New codecs"
  for this example).

* A few places where chunks of code or indented text were displayed needed
  to be properly introduced (preceding paragraph terminated by "::" and the
  chunk of code or text indented w.r.t. the paragraph).  For example:

    - Note that PyLong_AsDouble can fail!  This has always been true,
      but no callers checked for it.  It's more likely to fail now,
      because overflow errors are properly detected now.  The proper way
      to check::

          double x = PyLong_AsDouble(some_long_object);
          if (x == -1.0 && PyErr_Occurred()) {
              /* The conversion failed. */
              }
