2001-11-14  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * v1.5.7-beta.

        * Incorporated fix from Chris Brooking for the URL encoding, a
        workaround for JDK bug #4257115.

2001-11-11  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * v1.5.6

        * Added NDC for all major JSP pages to make them simpler to
        debug. 

        * All pages now also export the META Content-Type information to
        support older browsers.

        * Possibly fixed a problem with readContents() throwing an
        IOException: "invalid mark" by increasing buffer size.

        * RCS commands now inherit the parent environment.  This might
        help with some Windows-related issues.

2001-11-08  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Prevent robots from caching Edit, Diff, PageInfo and
        PageModified - not much point in caching those, really.

        * v1.5.5-beta.

        * Bug fix: Starting a new page no longer results as 'null' as the
        initial text.  Oops.

2001-11-07  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * v1.5.4

        * Now FileSystemProvider and RCSFileProvider default back to
        ISO-8859-1 if the data is obviously not UTF-8.  This makes
        upgrading much easier.

        * Oops, diff forgot to use the chosen character encoding, and
        would assume ISO-8859-1.

2001-11-06  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * v1.5.3

        * Bug fix: the RCSFileProvider used UTC instead of local time.
        Now fixed.  If you've changed the logcommands in
        jspwiki.properties, check the new format, or you'll be burned.

        * JSPWiki can now handle also non-ISO-8859-1 charsets.  Check
        README for more info.  Thanks to  Chris Brooking for the initial
        code.  This is a heavy-duty change - most of the JSP pages were
        affected, since they need to decode the page names in a new way.

        * v1.5.2

        * For browsers that do not support CSS, Wiki.jsp now also uses
        explicit FONT when displaying version information.

        * Empty list items could cause crashes in parsing.  Now fixed,
        thanks to Mikael Honkala for reporting this.

        * Oops, it was possible to put Javascript inside external or image
        links.  Now fixed - all quotes inside link names are URLEncoded.

2001-11-04  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>
        
        * v1.5.1
        
        * Added WikiEngine.saveText( String, String, HttpServletRequest )
        so that it can get the author information from the request.  The
        old API is still supported.

        * WikiPageProvider interface changed: putPageText() now takes a
        WikiPage as an extra argument.

        * RCSFileProvider can now save and retrieve author info as well.

        * Anchor types (i.e. hyperlinks) now have classes so that you can
        redecorate them in the CSS files.  See the CSS files for more
        info.

        * DTD caused Mozilla to slip into standards-compliant mode.  Fixed
        top-margins in jspwiki_ie.css.

        * Added document type declarations to all JSP files.

2001-11-02  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * This is R3, v1.5.0

        * Rewrote README.

        * The distribution archive now contains a separate archive for all
        sample wiki pages to help you bootstrap your own Wiki.

        * Added JSPWikiTips page to the sample wiki pages collection.

        * Removed the authentication scheme from web.xml - out-of-box
        JSPWiki now allows access to anyone.

        * Default, out-of-the-box Page Provider is now
        FileSystemProvider.  This should make building your first Wiki a
        bit simpler.

        * Added file commands to jspwiki.properties.  Also, removed
        references to my own email address - I kept getting plenty of
        automatic email from people trying to set up their own Wiki :-).

        * Removed index.html and rewrote web.xml to automatically grab all
        directory accesses to Wiki.jsp.

        * We now use pageContext.forward() to go to the PageModified.jsp
        when a concurrent modification occurs, instead of using redirect.
        Thanks to Chris Brooking for this hint.

        * Slight cosmetical changes in jspwiki_ns.css

        * Added comments around Javascript code in cssinclude.js to better
        live with old browsers.

2001-11-01  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Bumped version to 1.4.3-cvs.

        * There is now a sample entry in jspwiki.properties demonstrating
        how to make a direct link to the page editor by using InterWiki
        linking.  [Edit:Main] redirects you to the page where you can edit
        the Main page.

        * LeftMenu.jsp now reads its contents dynamically from a Wiki page
        called "LeftMenu".  Thanks to Mikael Honkala for this idea.

2001-10-30  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Bumped version to 1.4.2-cvs.

        * Wiki.jsp changed with respect to handling of old page versions.
        It no longer displays the "edit current version".

        * TextFormattingRules now has plenty of more explanations.

        * Added support for arbitrary letters in WikiNames.  Now it's
        possible to use any character set.

        * Added support for links within a document ("footnotes").  Use
        [#1] to create a footnote and [1] to link to it.

        * Empty links no longer generate a hyperlink.

        * FileSystemProvider and RCSFileProvider now know how to handle
        WikiNames that contain illegal characters.  At the moment they use
        simply the java.net.URLEncoder class to make the conversion.

        * Added wrap="virtual" to Edit.jsp textarea element to make it
        also wrap on NS4.

2001-10-25  Erik Bunn  <Erik.Bunn@memecry.net>

        * Added the capability to view older versions of a WikiPage. 
        The functionality is accessed from PageInfo.jsp. Wiki.jsp
        is affected, as well, and WikiEngine.java has new methods
        (but no actual new functionality).        

2001-10-21  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * This is R2 - v1.4.0.

        * Rewrote the included sample pages.

2001-10-20  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * build.xml can now generate javadocs to docs/javadoc.

        * Edit.jsp now has explains headings, too (thanks Matti).

        * Changed the versioning so that whenever you check out a CVS
        copy, you get vX.Y.Z-cvs as the version string.  This was done to
        separate the development version from the actual release version.

        * Added the list of image inline link patterns to SystemInfo.jsp.

2001-10-18  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * v1.3.3 - not released.

        * You can now have multiline list items if you prepend each
        additional line with a space.

        * Added the ability to specify multiple patterns determining which
        images are inlined and which are not.  See jspwiki.properties for
        more information.

2001-10-16  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * All external links ending with .png are now inlined as images.
        This is an experiment to see if it actually works.  Don't expect
        it to last.

        * Page names can now contain _ and . as well.

        * Added some cosmetical changes to the JSP pages.

2001-10-06  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Release v1.3.1 - first official release.

        * Clarified build system.

        * All files should now contain copyright.

        * Added plenty of javadoc commentary.

2001-10-02  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Bold and italic information is now carried across line and
        paragraph breaks.

2001-09-30  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Added cssinclude.js and three browser-dependent stylesheet
        files.  Also, all jsp files now include the cssinclude.js.

2001-08-25  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Removed a debug statement, some cosmetical changes.

        * v1.3.0

        * Added jspwiki.applicationName property, and support into
        WikiEngine.

        * Added SystemInfo.jsp

        * Added interWiki functionality.  Now you can define links in
        'jspwiki.properties' where a link of the form [WikiXX:PageName]
        should point to.

2001-08-13  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * v1.2.0

        * WikiEngine now behaves much better if a provider cannot be
        instantiated.

        * Added rudimentary support for version history in a multitude of
        places.

2001-08-13  Janne Jalkanen  <jalkanen@kosh.ecyrd.com>

	* Wiki.jsp displayed null date if page did not exist.

2001-07-23  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * v1.1.2

        * Search engine interface is now cleaner.

        * Separated actual Wiki page serving from the WikiEngine and hid
        it under the WikiPageProvider interface.

2001-07-20  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Realm name is now "JSPWiki editor" instead of "Basic
        Authentication Area" or whatever stupid it was.

2001-07-19  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Conversion of {{ is now fixed - it no longer transforms {{{ into
        {<TT> in certain cases.  Also, multiple {{{s are now handled
        gracefully.

        * v1.1.1

2001-07-18  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Added a Search box to the header of each page.

        * HTML entities are now replaced correctly in PageModified.jsp to
        prevent arbitrary HTML tags.

        * Added support for <TT> tag with {{text}}.

2001-07-16  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Couldn't edit new pages, oops.

2001-07-15    <Janne.Jalkanen@regex.fi>

	* Added rudimentary page locking.

2001-07-14  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Appearance of the jsp pages is now slightly more convergent.

        * Improved search engine to accept exclusion/inclusion a la
        Google.  Scoring now works, too.

        * Added ordered lists (#).

        * Horizontal ruler is now four dashes instead of three to comply
        with the Wiki standard.

2001-07-13  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Added jspwiki.specialPage.XXX redirection.  You can now name
        special pages that get referred to whichever JSP page you want.
        For example, you can always refer to RecentChanges.jsp in your
        Wiki code by using [RecentChanges], with the following property
        set: 
        
        jspwiki.specialPage.RecentChanges = RecentChanges.jsp

        * v1.0.5

2001-07-10  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Removed SkipHTMLIterator because it was a bad idea.  No
        InterCapped hyperlinks are available.

        * Fixed tests so that they now actually run.  This required a new
        constructor for WikiEngine.

2001-07-09  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * TranslatorWriter.cleanLink() now removes all non-letters and
        non-numbers from the link name so that you can use all sorts of
        punctuation inside a link name.

        * Implemented RecentChanges list by writing RecentChanges.jsp.
        Wiki.jsp also redirects all requests to a page called
        'RecentChanges' to RecentChanges.jsp.

2001-07-06  Janne Jalkanen  <Janne.Jalkanen@ecyrd.com>

        * Added configuration at etc/jspwiki.properties.

        * Added this file.

