
This is an ALPHA release of JSPWiki.  Thus it's not really ready for
prime time, but you can certainly go an test it!

Major changes since the last stable (1.8.2) release are:

- Support for traditional WikiLinks without square brackets
  (InterCapping, BumpyWords, CamelCase, ...)

- Splitting of Wiki pages into "Controller" and "View" pages has
  been done.  The user-modifiable HTML templates can be found in
  "templates/default" -directory.  All functionality can now be
  controlled using JSP tags.

- There is a new addition to WikiLanguage: Definition lists
  ;term;definition.  You can use this to make comments, too, by using
  an empty 'term': ;:Comment.

- There is a new variable system, documented in WikiVariables.

- Default Edit window background has been changed :-)

- Many pages have had slight changes to the way they look.

- UserPreferences now checks for username validity. 

- CachingProvider is now used by default.

- There is now full attachment support.

- New plugins (which can now be multiline).
   * IndexPlugin (by Alain Ravet)
   * Counter
   * WeblogPlugin
   * WeblogEntryPlugin


MAJOR PIECES MISSING
====================

The JSP tags are very badly documented.


UPGRADE NOTES
=============

(NB: These notes are still incomplete).

- If updating manually (from v1.8.x):

  * Providers now sleep in a different package.  You must change your
    "jspwiki.pageProvider" setting.

  * CachingProvider is no longer set explicitly.  You must use the new
    "jspwiki.usePageCache" property instead.

  * All HTML code should now go into *Template.jsp instead of Wiki.jsp
    and the other main JSP pages.

  * SystemInfo.jsp is gone.  Instead, there is now a page called
    "SystemInfo".

  So, the best way to do the update is to simply save your
  "jspwiki.properties", and "web.xml" files to some safe location,
  DELETE your previous installation, and install it again from
  scratch. However, after this your templates should be easily
  modifiable, and you never again have to resort to such drastic
  measures again... We hope.
