<?xml version="1.0" encoding="UTF-8"?>

<!-- 
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 -->

<document>
  <properties>
    <title>Changes</title>
    <author email="dion@apache.org">dIon Gillard</author>
  </properties>
  <body>
    <release version="1.0-RC2" date="in CVS">
      <action dev="polx" type="fix" issue="JELLY-85">Removed instance-based ThreadLocal substituting a JellyContext-based tag-caching.</action>
      <action dev="polx" type="add" issue="JELLY-145">jelly -h or --help responds a help and jelly -v or --version responds the version.</action>
      </release>
    <release version="1.0-RC1" date="2004-11-22">
      <action dev="dion" type="fix" issue="JELLY-148" due-to="Hans Gilde">Huge memory leak resulting from the use of ThreadLocal.</action>
      <action dev="dion" type="fix" issue="JELLY-138">Character data is flushed by XMLOuput while XML data isn't.</action>
      <action dev="dion" type="update">Move to beanutils 1.7.0.</action>
      <action dev="dion" type="fix" issue="JELLY-45">Scripts set the context URL when executing so that resources are found relative to the current script.</action>
      <action dev="dion" type="add" issue="JELLY-49">Add Regexp taglib</action>
    </release>
    <release version="1.0-beta-4" date="2004-09-09">
      <action dev="dion" type="add" issue="JELLY-134">Handle JVMs that return null for getClass().getClassLoader()</action>
      <action dev="dion" type="fix" issue="JELLY-66" due-to="Knut Wannheden">Default XMLOutput to not escape XML</action>
      <action dev="dion" type="fix" issue="JELLY-87">jelly can't resolve vars with dots (.) in the name, in function calls</action>
      <action dev="dion" type="fix">Source compiles with JDK 1.5</action>
      <action dev="dion" type="fix" issue="JELLY-25">No exceptions silently swallowed</action>
      <action dev="dion" type="fix" issue="JELLY-47">Attribute corruption when dealing with converting attributes that include namespaces</action>
      <action dev="dion" type="fix" issue="JELLY-103" due-to="Ralph Apel">Windows path in build.xml</action>
      <action dev="dion" type="fix" issue="JELLY-71" due-to="David Eric Pugh">Mention swing directory in docs</action>
      <action dev="dion" type="fix" issue="JELLY-98" due-to="Joerg Schaible">The "items" attribute of a "forEach" tag can contain a comma-separated String</action>
      <action dev="dion" type="fix" issue="JELLY-120">Allow useBean subclasses to ignore certain properties and ignore bad properties</action>
      <action dev="dion" type="fix" issue="JELLY-58">Documentation fixes for Invoke and ForEach</action>
      <action dev="dion" type="fix" issue="JELLY-28" due-to="Hans Gilde">Bad entity processing</action>
      <action dev="dion" type="fix" issue="JELLY-73" due-to="Scott Howlett">Can't set inherit or export to false for Include tag</action>
      <action dev="dion" type="add" issue="JELLY-108" due-to="Maarten Coene">Run a script from an input source</action>
      <action dev="dion" type="add" issue="JELLY-113" due-to="Gary Franklin">Thread safety of tag support</action>
      <action dev="dion" type="add" issue="JELLY-115" due-to="Felipe Leme">Add var to break tag</action>
      <action dev="dion" type="add" issue="JELLY-116" due-to="Felipe Leme">Add exceptionVar to invoke and invokeStatic</action>
      <action dev="dion" type="remove" issue="JELLY-85">Back out patch as it breaks define taglibs</action>
      <action dev="dion" type="fix" issue="JELLY-117" due-to="Dennis Lundberg">Remove sandbox and fix some dependencies to use groupId/artifactId</action>
    </release>
  </body>
</document>
