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

<!-- 
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.1-SNAPSHOT" date="in SVN">
      <action dev="proyal" type="fix">Restored JellyContext.isCacheTags and its behavior for backwards compatibility</action>
      <action dev="polx"   type="fix">Moved to dom4j 1.6.1 and jaxen 1.1-beta-8</action>
    </release>
    <release version="1.0" date="2005-06-12">
      <action dev="brett" type="fix" due-to="Hans Gilde">Improve tag caching to improve memory consumption</action>
      <action dev="dion" type="fix" issue="JELLY-196">SwitchTag can not be reused if default encountered.</action>
      <action dev="polx" type="add" issue="JELLY-191">FileTag now allows appending to the file.</action>
      <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>
