							-*- 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

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?
    =================================

    *XXX Release date: DD-MMM-2002 XXX*

* 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. */
              }
