<?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.1" date="2017-09-25">
      <action dev="chtompki" type="fix" issue="JELLY-293">Accommodate toggling off DTD external entities.</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 XMLOutput 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>
