<?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>Changelog</title>
  </properties>

  <body>
    <release version="2.1" date="2019-03-15">
        <action type="fix" dev="cbrisson" issue="VELOCITY-909">
            Reorganization of configuration properties key names, for clarity and consistency,
            see the <a href="configuration-property-changes-in-2.1.html">table of correspondance</a>.
        </action>
        <action type="fix" dev="cbrisson">
            Rendering of arrays should display their content, as for lists
        </action>
        <action type="fix" dev="cbrisson">
            Enhance space gobbling ("lines" mode): do not eat ending newline when directive doesn't start after a newline
        </action>
        <action type="fix" dev="cbrisson">
            Fix unary negate
        </action>
        <action type="add" dev="cbrisson" issue="VELOCITY-892">
            Deprecate the Class to Class CoversionHandler in favor of a Class to Type TypeConversionHandler, which allows
            to specity converters towards generic types specializations. The minimum JDK is now 1.8
        </action>
        <action type="fix" dev="michaelo" issue="VELOCITY-908">
            Rely on Locale.ROOT for lowercase/uppercase operations
        </action>
        <action type="add" dev="cbrisson" issue="VELOCITY-904">
            Added the <code>velocimacro.preserve.arguments.literals</code> flag (false by default), for backward compatibility.
            When true, for any macro argument that evaluates to null, the macro will display the provided argument literal representation
            instead of the literal argument reference
        </action>
        <action type="add" dev="cbrisson" issue="VELOCITY-903">
            Default block for empty loops: <code>#foreach($i in []) loop block #else empty #end</code>
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-888">
            Include proper OSGi bundle informations in manifest files
        </action>
        <action type="add" dev="cbrisson" issue="VELOCITY-898">
            Alternate reference values: <code>${foo|'foo'}</code> evaluates to false whenever boolean evaluation of $foo is false
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-889">
            Fix parser regression in #macro whitespaces handling
        </action>
        <action type="add" dev="cbrisson" issue="VELOCITY-542">
            Added a new 'parser.allow_hypen_in_identifiers' boolean property (false per default) to (dis)allow '-' in reference identifiers
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-896">
            Fix parsing of a terminal hash or dollar sign in sing litteral and template
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-895">
            Implicit conversion to numbers in integer ranges
        </action>
    </release>
    <release version="2.0" date="2017-08-06">

      <action type="fix" dev="cbrisson">
          Fix DataSourceResourceLoader for UTF-8 correct handling in VARCHAR/CLOB columns, and for connection / statement / result set life cycle
      </action>

      <action type="add" dev="cbrisson">
          Allow expressions inside []: <code>$foo[$bar + 1]</code>
      </action>

      <action type="add" dev="cbrisson">
          New strategy for reference boolean evaluation:
          <ol>
              <li>return false for a null object</li>
              <li>return its value for a Boolean object, or the result of the <code>getAsBoolean()</code> method if it exists.</li>
              <li>if <code>directive.if.emptycheck</code> is false (true by default), stop here and return true.</li>
              <li>check for emptiness:
                <ul>
                    <li>return whether an array is empty.</li>
                    <li>return whether <code>isEmpty()</code> is false (covers String and all Collection classes).</li>
                    <li>return whether <code>length()</code> is zero (covers CharSequence classes other than String).</li>
                    <li>returns whether <code>size()</code> is zero.</li>
                    <li>return whether a Number <b>strictly</b> equals zero.</li>
                </ul>
              </li>
              <li>check for emptiness after explicit conversion methods:
                <ul>
                    <li>return whether the result of <code>getAsString()</code> is empty (and false for a null result) if it exists.</li>
                    <li>return whether the result of <code>getAsNumber()</code> <b>strictly</b> equals zero (and false for a null result) if it exists.</li>
                </ul>
              </li>
          </ol>
      </action>

      <action type="add" dev="cbrisson">
        Reviewed event handling API:
        <ul>
          <li>added a Context argument for all events</li>
          <li>got rid of the Executor pattern ; event handlers are directly called by the cartridge</li>
        </ul>
      </action>

      <action type="add" dev="cbrisson">
        Removed references to ExtProperties from the engine configuration API.
      </action>

      <action type="add" dev="cbrisson">
         Default encoding is now UTF-8.
      </action>

      <action type="add" dev="cbrisson">
          Make Velocity use the base logger namespace 'org.apache.velocity' unless specified with runtime.log.name in the configuration, and have the runtime instance log with this base namespace, and other modules log with children namespaces:
          <ul>
              <li>directive, and velocity.directive.[directivename]</li>
              <li>parser</li>
              <li>loader and loader.[loadername]</li>
              <li>macro</li>
              <li>rendering</li>
              <li>event</li>
          </ul>
          Get rid of UberspectLoggable interface.
      </action>

      <action type="add" dev="cbrisson">
	      Added unary negate math operator
      </action>

      <action type="add" dev="cbrisson">
        Add a configurable space gobbling feature, to control indentation in the generated code.
        <br/>
        Possible values for the 'space.gobbling' configuration key:
        <ul>
          <li><code>none</code> : no space gobbling at all</li>
          <li><code>bc</code> : Velocity 1.x backward compatible space gobbling</li>
          <li><code>lines</code> (the default) : gobbles whitespaces and endline from lines containing a single VTL directive</li>
          <li><code>structured</code> : like 'lines', but also fixes indentation in children text blocks</li>
        </ul>
      </action>

      <action type="add" dev="cbrisson">
        added a new pluggable ConversionHandler class which, by default, converts method arguments as needed between main basic Java data types (boolean, numbers and strings)
      </action>

      <action type="add" dev="cbrisson">
        added a runtime.string.interning option to trigger Java String interning on or off
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-841" due-to="Jarkko Viinamäki">
        Applied Jarkko memory-saving patch which frees tokens while parsing. Macros now use a call by sharing convention.
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-843">
        support $array.empty, as for $list.empty
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-833" due-to="Jarkko Viinamäki">
        avoid useless string calculation in ASTStringLiteral
      </action>

      <action type="add" dev="cbrisson">
        nicified AST tree debug output
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-830">
        fix parsing of $obj._method()
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-827" due-to="Dawid Weiss">
        loading default properties should not prepend '/' and should use classloader to get resource stream
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-825">
         Allow conversion of method args from String to Enum constant
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-815" due-to="Oswaldo Hernandez">
        Applied performance patch for MapGetExecutor: it's faster to directly use object
        instance rather than to inspect all public interfaces
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-799">
        The new configuration property context.autoreference.key, if present, allows to specify the name
        of the reference under which the context is accessible in itself
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-746">
        MethodExceptionEventHandler now provide template location infos
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-797" due-to="Jarkko Viinamäki">
        Attach macros to their defining template. Also fixes VELOCITY-776. Thanks to Simon Kitching for the multithreading testcase.
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-820" due-to="Robert Fuller">
        have #foreach honnor the Closeable interface on the iterator
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-804" due-to="Felipe Maschio">
        Don't leave 'initializing' to true if a problem occurs during initialization.
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-790">
        Remove dependency upon commons-collections-3 (except at compile-time for deprecated methods and classes
        which are needed for backward compatibility), use our own ExtProperties object.
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-735" due-to="Dishara Wijewardana">
        Add a first implementation for the JSR 223 standard scripting interface.
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-809">
        Fix Template default encoding initialization problem.
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-793">
        The ResourceLoader API now provides a Reader rather than an InputStream.
        Also fixes VELOCITY-599.
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-553">
        InvalidReferenceHandler events should not be triggered by quiet references, null values,
        or by references testing inside #if / #elseif. Thanks to Renato Steiner
        for his testcase.
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-266">
        Take advantage of the major version jump to enforce String keys
        in internal Context API
      </action>

      <action type="fix" dev="sdumitriu" issue="VELOCITY-863" due-to="Mike Kienenberger">
        Fix regression: #set&lt;tab&gt;left-paren no longer valid grammar
        Patch from Mike Kienenberger applied + added test
      </action>

      <action type="add" dev="cbrisson">
        switch to slf4j logging facade
      </action>

      <action type="fix" dev="cbrisson">
        fix parser for '$map{key}' text rendering (StackOverflow 32805217)
      </action>

      <action type="fix" dev="sdumitriu" issue="VELOCITY-869">
        Vulnerability in dependency: commons-collections: 3.2.1
      </action>

      <action type="fix" dev="sdumitriu" issue="VELOCITY-870">
        Exception displayed when trying to loop over an Iterable private class
      </action>

      <action type="fix" dev="sdumitriu" issue="VELOCITY-871">
        #foreach should work over any Iterable class
      </action>

      <action type="fix" dev="sdumitriu">
        Catch exceptions raised during chainable uberspector initialization
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-542">
        Hypen is no more allowed in variable names
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-706">
        Method arguments can now be expressions
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-819" due-to="Jarkko Viinamäki">
        Parser generation from the .jjt file is now handled by Maven
      </action>

      <action type="add" dev="cbrisson" issue="VELOCITY-12" due-to="Candid Dauth">
        Add a public fields Uberspector
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-814" due-to="Darren Cruse">
        Support query modification in DataSourceResourceLoader
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-813" due-to="Oswaldo Hernandez">
         Add clear() to ResourceCache
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-692">
        Make #if() return false for empty strings and empty collections
      </action>

      <action type="add" dev="apetrelli">
        Add SLF4J logging option
      </action>

      <action type="add" dev="apetrelli">
        Use Maven 2 as build system
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-785" due-to="Jarkko Viinamäki">
        Fixed quotes escaping so that doubling single quotes only works when enclosing quotes are single quotes
        (and same behaviour for double quotes)
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-751">
    Removed all remaining "throws Exception" clauses and the now useless ExceptionUtils class.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-731">
    Remove directive.if.tostring.nullcheck crutch with intent
    to replace testing of toString() null status with support for
    toBoolean() (or similar) method on objects being "#if'd".
      </action>

      <action type="add" dev="nbubna">
    Remove directive.set.null.allowed and instead always allow null to be
    #set to references.  This also means removing all NullSetEventHandler
    code, since it was only in play when nulls were not allowed to be #set.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-704">
    Remove features deprecated in 1.7 ($velocityCount, $velocityHasNext,
    velocimacro.context.localscope, directive.evaluate.context.class and
    all internal supporting code (ProxyVMContext, EvaluateContext, etc).
      </action>

        <action type="add" dev="byron" issue="VELOCITY-697">
	  Add ability to specify default values for macro parameters, e.g.;
	  #macro(foo bar=1)
	</action>

        <action type="add" dev="byron" issue="VELOCITY-695">
	  Add ability to place line comments next to macro parameter definitions.
	</action>

        <action type="add" dev="byron" issue="VELOCITY-690">
	  Block directives no longer require parenthesis so #@foo #end is now allowed.
	  Also, brackets now work with Block Macros so #{@foo}bar#end works.
	</action>

        <action type="fix" dev="nbubna">
          Removed all deprecations (Anakia, Texen, VelocityServlet, etc.)
        </action>

        <action type="add" dev="byron" issue="VELOCITY-687">
          Changed macro arguments to be pass by value.
        </action>

    </release>

    <release version="1.7" date="2010-11-29">
      <action type="fix" dev="cbrisson" issue="VELOCITY-785" due-to="Jarkko Viinamäki">
        Fixed quotes escaping so that doubling single quotes only works when enclosing quotes are single quotes
        (and same behaviour for double quotes)
      </action>

      <action type="add" dev="nbubna">
    Add access to template and directive debugging info via $/scope/.info.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-766">
    LogManager now catches UnsupportedOperationExceptions during LogChute init.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-760" due-to="Jarkko Viinamäki">
    Ensure that DataSourceResourceLoader closes PreparedStatements.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-753" due-to="Matt Ryall">
    Mark optional dependencies as such in OSGi bundle manifest.
      </action>
    </release>

    <release version="1.7-beta1" date="2010-04-10">
      <action type="add" dev="nbubna" issue="VELOCITY-694">
    Add support for OSGi-ready manifests in build/release tasks.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-753">
    When comparing parameter types during method mapping, make Object always less specific than other types.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-759" due-to="Rachid">
    Avoid NPEs in case of bad #foreach config.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-755">
    Use LinkedHashMap to maintain order of VTL-created maps.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-555" due-to="Jarkko Viinamäki">
    Treat \ as non-special in string literals, except when specifying unicode sequences.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-555" due-to="Jarkko Viinamäki">
    Allow escaping of quotes (single or double) within string literals by doubling them ("" or '').
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-758" due-to="Jarkko Viinamäki">
    Give #parse better log/exception messages and give IncludeEventHandler a chance to handle null #parse args.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-754,VELOCITY-729" due-to="Jarkko Viinamäki">
    Fix $.x parsing failures (particularly helpful for jQuery users).
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-744">
    Log Velocimacro additions at debug level, as in pre-1.6 versions.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-742" due-to="Jarkko Viinamäki">
    Add removeDirective(name) and loadDirective(classname) methods to allow runtime changes to the directive set.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-727" due-to="Jarkko Viinamäki">
    Throw an informative VelocityException when #define is given no parameter (instead of an ArrayIndexOutOfBoundsException).
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-728" due-to="Jarkko Viinamäki">
    Throw an informative VelocityException when #parse is given no args (instead of an NPE).
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-704">
    Changed #stop to a directive implementation (get it out of the parser)
    and allow it to accept a message as an argument to be written to the logs
    for debugging purposes.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-704">
    Change the scoping behavior of Velocity, keeping it optional (everything global
    scoped by default) but now providing an explicit namespace in content-containing
    directives (like macros, #foreach, #parse, etc.) in which references that should
    stay local may be kept. This is accompanied by numerous related changes, including:
    &lt;ul&gt;
    &lt;li&gt;A Scope reference can now be automatically made
              available within each content directive:
        &lt;ul&gt;
        &lt;li&gt;$template in Template.merge and #parse content&lt;li&gt;
        &lt;li&gt;$macro in #macro&lt;/li&gt;
        &lt;li&gt;$foreach in #foreach&lt;/li&gt;
        &lt;li&gt;$evaluate in #evaluate or Velocity.evaluate(...) content&lt;/li&gt;
        &lt;li&gt;$define in #define&lt;/li&gt;
        &lt;li&gt;$&amp;lt;amacro&amp;gt; in #@&amp;lt;amacro&amp;gt;
              (where &amp;lt;amacro&amp;gt; is the name of a macro being called with a body)&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;For performance and compatibility these are all off by
    default, *except* for $foreach. The others may be enabled by setting a velocity property like:
        &lt;br/&gt;&lt;code&gt;macro.provide.scope.control = true&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;When scopes of the same type are nested make the parent Scope available
        through the child (e.g. $foreach.parent or $foreach.topmost).&lt;/li&gt;
    &lt;li&gt;When a Scope reference overrides an existing reference that is not a Scope,
        make it available through the Scope (e.g. $foreach.replaced).&lt;/li&gt;
    &lt;li&gt;Made #break work in any of the above scopes to exit the most immediate one,
        unless a different scope is provided as an argument
        (e.g. #break($macro) or #break($foreach.topmost)).&lt;/li&gt;
    &lt;li&gt;Deprecated $velocityCount;
        please use $foreach.count or $foreach.index.&lt;/li&gt;
    &lt;li&gt;Deprecated $velocityHasNext;
        please use $foreach.hasNext, $foreach.first or $foreach.last&lt;/li&gt;
    &lt;li&gt;Deprecated velocimacro.context.localscope setting;
        please get/set local #macro references as members of the provided $macro
        scope control instead. (e.g. #set( $macro.foo = 'bar' ) and $macro.foo ).&lt;/li&gt;
    &lt;li&gt;Deprecated directive.evaluate.context.class setting;
        please get/set local #evaluate references as members of the provided $evaluate
        scope control instead. (e.g. #set( $evaluate.foo = 'bar' ) and $evaluate.foo ).&lt;/li&gt;
    &lt;/ul&gt;
    All of the deprecated features will be removed in Velocity 2.0.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-681">
    Calling #set on a macro argument (for which a #set-able reference
    was passed) will no longer propagate the new value to the original
    reference, but merely set the value of the macro argument reference.
    This was an obscure, infrequently used feature and was decided to be
    more problematic and unpredictable than useful.
      </action>

      <action type="add" dev="byron"  issue="VELOCITY-688">
	In strict mode attempts to render references that evaluate to
	null will throw an exception.  In the user wishes to suppress
	the exception and render nothing then the reference can be
	preceeded with '$!' as in $!foo.
      </action>

      <action type="add" dev="byron"  issue="VELOCITY-673">
	The non default VelocityEngine construtors now do not initialize the runtime
	system so that properties may be set after construction.  Also fixes an
	Initialization race condition.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-685" due-to="Jarkko Viinamäki">
        Make velocimacro.arguments.strict=true work with block macros.
      </action>

      <action type="add" dev="byron" issue="VELOCITY-623">
	Added a property for changing escape behavior such that putting a forward
	slash before a reference or macro always escapes the reference or macro and
	absorbs the forward slash regardless if the reference or macro is defined.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-676" due-to="Jarkko Viinamäki">
        Fix StringIndexOutOfBoundsException caused by #[[##x]]# (line comment on
        same line as end of textblock).
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-675" due-to="Jarkko Viinamäki">
        Fix NPE caused by #@foo (w/o #end) in template.
      </action>

      <action type="add" dev="byron" issue="VELOCITY-668" due-to="Jarkko Viinamäki">
	Minor performance tweaks based on Findbugs findings
      </action>

      <action type="fix" dev="byron" issue="VELOCITY-667">
	Pre 1.6 behavior of specifying #macro without parenthesis
	would throw a VelocityException has been restored.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-666" due-to="Jarkko Viinamaki"><![CDATA[
        Add support for calling velocimacros with body content by prefixing the macro
        name with @.
        (e.g. #macro( bold )<strong>$bodyContent</strong>#end #@bold()any valid VTL here#end)
        The $bodyContent reference may be renamed via a velocimacro.body.reference
        setting in your velocity.properties.
      ]]></action>

      <action type="fix" dev="nbubna" issue="VELOCITY-661" due-to="Jarkko Viinamaki">
        Added #[[this is included in output but not parsed]]# syntax to replace
        and deprecate the much more limited #literal directive
        (which required parse-able content).
      </action>

      <action type="add" dev="byron" issue="VELOCITY-663">
	Re-implement #stop so that it stops template execution and rendering.  This
	Also addresses a performance bottleneck detected in the old implementation.
	#stop is a general use directive now, and not just for debugging.
      </action>

      <action type="add" dev="byron" issue="VELOCITY-662">
	Reduce performance bottleneck with the referenceInsert event handler call
      </action>

      <action type="add" dev="byron" issue="VELOCITY-656">
	Better error reporting when toString() throw an exception when testing
	an #if conditional. For example #if($foo)
      </action>

      <action type="add" dev="byron" issue="VELOCITY-406">
 	  Added bracketed index syntax, $foo[0], or #set($foo[0] = 1)
      </action>

      <action type="add" dev="byron" issue="VELOCITY-659">
          Removed java.lang.Exception from throws clause of Velocity
          and VelocityEngine API. Also removed IOException so that all
          method calls use unchecked exceptions.
      </action>

      <action type="add" dev="nbubna">
          Removed obsolete WebMacro conversion tool and experimental Veltag
          (which has been replaced by VelocityViewTag from VelocityTools).
      </action>

    </release>

    <release version="1.6.4" date="2010-05-10">
        <action type="fix" dev="nbubna" issue="VELOCITY-750">
            Fix double-checked locking in RuntimeInstance's optional lazy-init.
        </action>
        <action type="fix" dev="nbubna" issue="VELOCITY-718">
            Fix 100% CPU loop hang under simultaneous HashMap calls in ClassMap
            due to classic bug in Sun's implementation.  Now uses
            ConcurrentHashMap when available and Hashtable otherwise.
        </action>
    </release>

    <release version="1.6.3" date="2009-12-16">
        <action type="fix" dev="nbubna" issue="VELOCITY-731" due-to="Jorgen Rydenius">
            Add directive.if.tostring.nullcheck config switch to match
            past performance for those who do not need to check whether
            $foo.toString() returns null when doing #if( $foo ).
        </action>
    </release>

    <release version="1.6.2" date="2009-03-19">

      <action type="fix" dev="nbubna" issue="VELOCITY-702">
        Fix obscure caching problem in multiple resource loader situations
        where resources may exist in more than one loader and appear and
        disappear from loaders.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-701">
        Fix old regression from 1.4 in supporting methods declared as abstract
        in a public class but implemented in a non-public class.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-693">
        Fix problem with FileResourceLoader's resourceExists() when
        configured w/multiple paths.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-689">
        Fix ClassMap introspection bug introduced in 1.5,
        where public super-interface methods implemented in
        protected or private classes were unreachable.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-681">
        Fix regression in proxying of macro argument #set calls.
        Note that in 1.7, calling #set on a macro argument (for
        which a #set-able reference was passed) will not propagate
        the new value to the original reference, but merely set the
        value of the macro argument reference.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-682">
        Fix loss of inline macros when #evaluate is used.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-554" due-to="Adrian Tarau">
        Fix name of sources jar for maven deployment.
      </action>

      <action type="fix" dev="byron" issue="VELOCITY-667">
         Pre 1.6 behavior of specifying #macro without parenthesis
         would throw a VelocityException has been restored.
      </action>

      <action type="add" dev="byron" issue="VELOCITY-656">
     Better error reporting when toString() throw an exception
     when testing an #if conditional. For example #if($foo)
      </action>

      <action type="fix" dev="byron" issue="VELOCITY-658" due-to="Jarkko Viinamäki">
          Fix $velocityHasNext so that it works in nested foreach blocks.
      </action>

      <action type="fix" dev="byron" issue="VELOCITY-645">
          Throw an exception in strict mode when >=, &lt;=, &lt; or >
          comparisons can't be made.
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-657">
          Fix $velocityHasNext so it is not always true.
      </action>

    </release>

    <release version="1.6.1" date="2008-12-15">

      <action type="fix" dev="nbubna" issue="VELOCITY-654" due-to="Byron Foster">
          Correct/enhance template name reporting for #include and #parse.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-653" due-to="Byron Foster">
          Removed redundant error message in ASTReference.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-615" due-to="Steve O'Hara">
          Fix limitation in new macro implementation that resisted #set calls
          to change references defined as arguments for the macro.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-651" due-to="Stephan Schmid">
          Fix vararg bugs when calling overloaded methods like get(String,String,Object[])
          and get(String,List). (e.g. in VelocityStruts' MessageTool)
      </action>

    </release>

    <release version="1.6" date="2008-12-01">

      <action type="fix" dev="nbubna" issue="VELOCITY-649" due-to="Byron Foster">
          Fix NPE when null value is passed to array/vararg method.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-644" due-to="Byron Foster">
          Track template name in Node, to get proper template name in the exception
          message when a reference in a macro causes that exception.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-352" due-to="Gonzalo Diethelm, Joni Salonen">
          Update Finnish and Spanish User Guide sections on division operation.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-641" due-to="Will Glass-Husain">
          Fix classpath for XMLApp example.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-617" due-to="Adrian Tarau">
          Fix references to Oro dependency to make it clear that it is
          only necessary for certain reference event handlers.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-640" due-to="Will Glass-Husain">
          Remove old Anakia/Texen docs and examples.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-642" due-to="Ilkka Priha">
          Fix bug in vararg support where an array passed to a vararg method
          was being wrapped in another array.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-638" due-to="Benjamin Bentmann">
          Locked down versions for reporting plugins in Maven POM.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-466" due-to="Adrian Tarau">
          Add Maven-Ant tasks for installing and deploying Maven artifacts, including
          previously missing source and javadoc jars (VELOCITY-554).
      </action>

    </release>

    <release version="1.6-beta2" date="2008-10-26">

      <action type="fix" dev="nbubna" issue="VELOCITY-632" due-to="Sebb">
          Fix User Guide's Table of Contents anchor links.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-631" due-to="Byron Foster">
          Fix parser bug that prevented references from immediately preceding #set directives.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-630" due-to="Byron Foster">
          Revert change made for VELOCITY-285, as it broke pass-by-name nature
          of macro arguments.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-629" due-to="Byron Foster">
          Fix line numbers in string literals.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-627" due-to="Byron Foster">
          Fix line number for exceptions with body of #foreach directive.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-626" due-to="Byron Foster">
          Log full macro stack when a RuntimeException occurs in a template.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-622" due-to="Byron Foster">
          Format template and line/column numbers consistently in error and log messages.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-624" due-to="Byron Foster">
          Don't override pre-configured log levels for JdkLogChute or Log4JLogChute.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-618" due-to="Byron Foster">
          Add optional 'runtime.references.strict' property that has Velocity throw
          exceptions when it encounters undefined references or velocimacros in a template.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-554" due-to="Adrian Tarau">
          Inlude Maven Ant tasks jar in downloads and add support for downloading from Maven2 repos.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-585" due-to="Jon Seymour">
          Fix problem with single backslash in interpolated (double-quoted) strings.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-616" due-to="Alik">
          Fix escaping of bracketed directives (e.g. \#{if}($foo)$bar\#{end}).
      </action>

    </release>

    <release version="1.6-beta1" date="2008-09-22">

      <action type="add" dev="cbrisson" issue="VELOCITY-588" due-to="Vincent Massol, Sergiu Dumitriu">
          Uberspectors chaining
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-585" due-to="Tim White">
          Add ability to set a connection timeout for URLResourceLoader.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-227" due-to="Charles Morehead">
          Make it easier to override ResourceFactory.getResource(...) in ResourceManagerImpl.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-544" due-to="Adam Bishop, Jarkko Viinamaki">
          Fix BooleanPropertyExecutor to recognize "public Boolean isFoo" properties.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-439" due-to="Tassos Bassoukos, Henning Schmiedehausen">
          Add a separate resourceExists(String name) method to ResourceLoader(s) to improve performance.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-355" due-to="Geoffrey Lowney, Dan Ertman">
          Fix missing # and $ characters within #literal() directive output.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-102" due-to="Juozas Baliuka, Adrian Tarau, Jim Seach">
          Add support for static utility classes: context.put("math", Math.class) -> $math.sin(0)
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-174" due-to="Andrew Tetlaw">
          Add #define directive set an unrendered block of VTL as a reference.
          (e.g. #define( $foo )Hello, $bar!#end #set( $bar = 'world') $foo -> Hello, world!)
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-612" due-to="Jarkko Viinamaki">
          Add #break directive to exit #foreach loops early.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-607" due-to="Jarkko Viinamaki">
          Fixed major performance issues with Velocimacros.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-606" due-to="Jarkko Viinamaki">
          Removed many, various performance bottlenecks and concurrency issues. (Also see VELOCITY-595)
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-600" due-to="Adrian Tarau">
          New VTL syntax $velocityHasNext within #foreach loops
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-580" due-to="Marnix van Bochove">
          Multi-line comments in macros were rendering extra *# when evaluated.
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-570" due-to="Ronald Klop">
          Have VelocityCharStream use an exponential buffer expansion rate.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-566" due-to="Etienne Massip">
          Prevent exception due to simultaneous rendering of macros.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-533" due-to="Christopher Schultz">
          New VTL syntax allows arrays to be treated like fixed length lists.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-534">
          Added support for varargs in method calls.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-536" due-to="Lei Gu, Dima Tkach">
          Prevent NPE when template is parsed simultaneously by multiple users.  (may apply only to macros).
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-362" due-to="Supun Kamburugamuva">
          Users can now include libraries of macros with #parse in a template.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-529" due-to="Supun Kamburugamuva">
          Macro libraries can now be selected programatically when merging templates.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-452" due-to="Alexey Panchenko">
          Catch IllegalArgumentException when invoking method.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-538">
          Fixed parse error for map definitions ending with a reference.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-297" due-to="Supun Kamburugamuva">
          Add new property velocimacro.max.depth which limits max macro calling depth.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-547" due-to="Adam Heath">
          Add ability to add directives programmatically
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-548" due-to="Adam Heath">
          Allow user directives to have no content.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-551" due-to="Michiel Toneman">
          IncludeNotFound event handler was displaying "not found" template.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-541">
        Fix StringResourceLoader to make it possible to use more than one loader per VM.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-520" due-to="Stepan Koltsov">
        Make unicode encoding work in velocity templates.
      </action>

      <action type="add" dev="nbubna">
        Add a ServletLogChute that allows logging through the servlet API. Ported from the
        Velocity Tools project.
      </action>

      <action type="add" dev="nbubna">
        Add a CommonsLogLogChute that allows logging through commons-logging.
      </action>

      <action type="update" dev="wglass">
        Deprecate integrated texen and anakia, factor it out into separate jars.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-509">
        Added new directive #evaluate() to dynamically evaluate VTL.
      </action>
    </release>

    <release version="1.5" date="2007-01-28">
      <action type="fix" dev="wglass" issue="VELOCITY-516" due-to="Vincent Massol">
        Fix to SecureUberspector to work properly with #foreach and iterators.
      </action>

      <action type="add" dev="henning" issue="VELOCITY-191" due-to="Aki Nieminen">
        Make FileResourceLoader unicode aware to allow skipping over BOM markers
        like those created by Windows Notepad. This is a workaround for a Java
        bug, where Java itself does not recognize the UTF-8 BOM as defined by
        the unicode standard.
      </action>

    </release>

    <release version="1.5-beta2" date="2006-11-24">

      <action type="add" dev="henning" issue="VELOCITY-183" due-to="Eelco Hillenius">
        New StringResourceLoader can retrieve templates from repository of in-memory Strings.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-493" due-to="Claude Brisson">
    RuntimeInstance.getProperty now returns value set with RuntimeInstance.setProperty,
    even before initialization.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-435">
    When macros have incorrect number of arguments, if property
    "velocimacro.arguments.strict" is set to true a ParseErrorException
    will be thrown.
      </action>

      <action type="add" dev="henning" issue="VELOCITY-414" due-to="Matthijs Lambooy">
    MethodInvocationException now contains line, column, template name
    allowing application to produce more useful error messages.
      </action>

      <action type="fix" dev="henning" issue="VELOCITY-24">
    Fixed race condition in template retrieval that caused macros to
    fail under simultaneous load.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-423">
    New event handler InvalidReferenceHandler allows application
    to catch invalid references.  Sample implementation collects
    them in list and optionally throws exception.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-179">
          New, optional SecureIntrospector prohibits methods that involve manipulation of classes, classloaders
      or reflection objects.  Use this introspector to secure Velocity against a risk of
      template writers using reflection to perform malicious acts.
      </action>

      <action type="fix" dev="henning" issue="VELOCITY-458">
    Removed Serializable from InternalContextBase, because one of the members is not serializable anyway so this never worked (Found by Findbugs).
      </action>

      <action type="fix" dev="henning" issue="VELOCITY-449" due-to="Alexey Panchenko">
    Add an additional pair of Executors that are smart about Map.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-453" due-to="Alexey Panchenko">
      Method caching now uses consistent keys.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-459" due-to="Stephen Haberman">
    Change the meaning of localscope for macros to allow access to references from
    calling context.
      </action>

      <action type="add" dev="henning">
               Add a test for the DataSourceResource Loader.
      </action>

      <action type="add" dev="henning">
               Fix a problem in the DataSourceResource Loader, removing a potential security issue with SQL injection.
      </action>

      <action type="add" dev="henning">
               Build now creates the MD5 and SHA1 checksums for archives and jars.
      </action>

      <action type="fix" dev="henning">
    Fix a number of issues reported by running FindBugs on the Velocity source.
      </action>
    </release>

    <release version="1.5-beta1" date="2006-09-13">
      <action type="fix" dev="wglass" issue="VELOCITY-438" due-to="Stephen Haberman">
    Stop references from calling object.toString() twice.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-429" due-to="">
    Pass through all runtime exceptions.  Among other benefits, this
    allows plugins to throw a runtime exception to signify an application
    level problem in the calling application.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-98" due-to="Michal Chmielewski">
    When #include was followed by #parse with the same file name, a ClassCastException was thrown.
    </action>

      <action type="add" dev="wglass" issue="VELOCITY-425" due-to="Llewellyn Falco">
        Wrapped exceptions now have Cause property set on JDK 1.4.  (note that Velocity
        continues to run under JDK 1.3).
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-418" due-to="Jason Weinstein">
        When Velocity is initialized, default.properties stream was not being closed.  This
    made it difficult to undeploy webapps on Windows with Velocity unpacked.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-151" due-to="Kirk Wolf">
        Upgraded to latest commons collection, fixing problem with non-recognition
        of configuration file encoding in rare circumstances.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-370" due-to="Reggie Riser">
        The Introspector could throw a NPE when a parameter to an overloaded method was null.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-381" due-to="Llwellyn Falco and Dan Powell">
        If toString() returned null in a silent reference then "null" was displayed.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-359" due-to=""><![CDATA[
        Fixed bug in which empty body for #if (e.g. <code>#if(some expression)#end</code>
        caused ParseException.
      ]]></action>

      <action type="add" dev="wglass" issue="VELOCITY-222" due-to="">
        Added javacc task to build.xml simplifying modification process
        for editing syntax files.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-374" due-to="">
        Velocity Engine was throwing NPE when used without a call to
        init().  Now gives a more meaningful exception message.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-404" due-to="Llewellyn Falco">
        Fixed problem with Uberspect Info class being created incorrectly.
        Added template name to Info allowing better error reporting.
      </action>

      <action type="update" dev="wglass" issue="" due-to="">
        Numerous improvements to the documentation.  Reorganized table of
        contents, moved community content to the Wiki, added article on using
        Velocity in web applications.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-350" due-to="">
        When testing objects in VTL for equality, if both objects are a number, use
        number equality.  If both objects are the same class, use the equals method.
        New behavior: If objects are different classes, compare the String
        representation of both objects rather than logging an error.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-272" due-to="">
        Velocity would give error when last line of file was a ## comment.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-412" due-to="Malcolm Edgar">
        Added method to retrieve application attributes.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-196" due-to="">
        Velocity now searches in the current thread's context classloader
        before the system classloader for all templates loaded with the
        ClasspathResourceLoader and for all user-defined ResourceLoaders,
        introspectors, event handlers, etc.
        A typical use for this is to have Velocity in the application
        container classpath while keeping templates and plugins in the
        webapp classpath.
      </action>

      <action type="update" dev="wglass" issue="" due-to="Thomas Veith"><![CDATA[
        #set now sets references to null when required.  For backwards
        compatibility this must be enabled by setting the configuration key
        <code>directive.set.null.allowed</code> to true.
      ]]></action>

      <action type="add" dev="wglass" issue="" due-to="">
        New optional event handler that escapes all references.
        Regular expressions can be used to configure which references
        have HTML, JavaScript, SQL, or XML escaping.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-154" due-to="">
        New optional event handler implementation that forces #parse / #include to stay
        in same directory as parent template.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-260" due-to="">
        New event handler to modify behavior of #parse / #include.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-144" due-to="">
        FileResourceLoader now accepts absolute path when configured to accept it.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-126" due-to="">
        String containing "##" was treated as unterminated String.
      </action>

      <action type="add" dev="nbubna" issue="VELTOOLS-55" due-to="Charles Harvey">
        Spruced up Geir's old URLResourceLoader and promoted it from the whiteboard to
        the main distribution.
      </action>

      <action type="update" dev="henning" issue="VELOCITY-424" due-to="Malcom Edgar">
        Throw Runtime exceptions from nodes up the chain.
      </action>
      <action type="update" dev="henning" issue="VELOCITY-426" due-to="Malcom Edgar">
        Revert the split between org.apache.velocity.runtime.parser.node.Node and
        org.apache.velocity.runtime.parser.Node. The parser now only uses ...parser.node.Node
        because this change broke custom directives.
      </action>

      <action type="update" dev="nbubna" issue="VELOCITY-403" due-to="">
            Made a lot of internal logging upgrades including: Deprecated LogSystem interface
            and replaced it (and all its implementations) with a new LogChute interface and implementations,
            added getLog() to RuntimeServices (and all its friends) to improve on and replace its now deprecated
            logging methods, added a JdkLogChute as a 3rd default option for those using JDK 1.4+, and added a
            StandardOutLogChute as final resort if other LogChute inits fail. See JIRA issues VELOCITY-403, VELOCITY-166,
            VELOCITY-403,VELOCITY-166,VELOCITY-78, VELOCITY-157, VELOCITY-159, VELOCITY-193.
        </action>

        <action type="remove" dev="henning" issue="VELOCITY-401" due-to="">
            Removed all J2EE build tasks.  Now automatically detects availability
            of javax.sql.Datasource (in JDK 1.4+) and builds DatasourceResourceLoader
            when allowed.
        </action>

        <action type="add" dev="henning" issue="" due-to="">
            ant build now downloads the required dependency jars from ibiblio.org
        </action>

        <action type="update" dev="henning" issue="VELOCITY-373" due-to="Malcolm Edgar">
            Unified template name, line and column number reporting for ParserErrorException
        </action>

        <action type="remove" dev="henning" issue="" due-to="">
            Dropped the non-functional Velocity compiler.
        </action>

        <action type="update" dev="henning" issue="" due-to="">
            Started separating out the JavaCC generated parts of the Velocity Parser. Not yet complete to avoid user visible changes. Scheduled to be completed for 2.0
        </action>

        <action type="add" dev="henning" issue="" due-to="">
            Contributed a maven build for Velocity
        </action>

        <action type="fix" dev="henning" issue="" due-to="">
            Reworked the ant build to product only two jars: velocity.jar and velocity-dep.jar.
        </action>

        <action type="remove" dev="henning" issue="" due-to="">
            Removed the Configuration class and all methods that references it. This class was deprecated since Velocity 1.1 and was scheduled to be gone for Velocity 1.3 or 1.4. Now
        it was finally removed in 1.5.
        </action>

        <action type="add" dev="wglass" issue="VELOCITY-242" due-to="Peter Romianowski">
            Added support for decimal numbers.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-284" due-to="Mike Rettig">
            MethodInvocationException now consistently thrown
        (previously was hidden when in parameter to Velocimacro).
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-109" due-to="">
            Fixed problem in which foreach loop would fail to call overloaded method.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-86" due-to="">
            Removed ERROR level log message "Can't find 'VM_global_library.vm'".
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-348" due-to="">
            Anakia now generates consistent line endings based on platform.  Requires upgrade to JDom 1.0.
        </action>

        <action type="add" dev="wglass" issue="VELOCITY-190" due-to="Peter Ryan">
            Anakia can now be pre-loaded with custom context values from an optional XML file.
        </action>

        <action type="add" dev="wglass" issue="VELOCITY-43" due-to="">
            Directives can now be delimited with curly braces, for example #if($condition)something#{else}otherthing#{end}.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-254" due-to="Christopher Reck">
            Nulls now handled appropriate within #foreach.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-324" due-to="Shinobu Kuwai">
            Upgraded JavaCC to version 3.2, providing JDK 1.5 compatibility.
        (Older version used keyword 'enum' which is reserved in JDK 1.5).
        </action>

        <action type="update" dev="wglass" issue="VELOCITY-267" due-to="Matt Raible ">
            DatasourceResourceLoader now allows injection of Datasource, allowing it to be used in Inversion of Control (IOC) frameworks.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-218" due-to="">
            #stop now works properly.
        </action>

        <action type="update" dev="wglass" issue="VELOCITY-196" due-to="Charles Oliver Nutter">
            ClasspathResourceLoader now searches ContextClassLoader for template.
        </action>

        <action type="remove" dev="dlr" issue="VELOCITY-164" due-to=""><![CDATA[
            Removed use of <a href="http://jakarta.apache.org/log4j/">Log4J's</a>
            deprecated Category and Priority classes in favor of the corresponding
            and supported Logger and Level.  To update, replace necessary
            references, and Category.getInstance() with Logger.getLogger().
        ]]></action>

        <action type="add" dev="wglass" issue="VELOCITY-152" due-to="James Taylor">
            New Map literal syntax.
        </action>

        <action type="remove" dev="dlr" issue="" due-to="">
            Removed the long-deprecated Log4JLogSystem.  Never fear,
            SimpleLog4JLogSystem remains.
        </action>

        <action type="update" dev="dlr" issue="" due-to=""><![CDATA[
            Enhanced the implementation of ResourceCacheImpl using Jakarta Commons
            Collections LRUMap class.  The previous greedy implementation did not
            set an upper bound for the cache size, meaning that cached resources
            were never relinquished (a possible memory leak).  You can continue to
            use that behavior by setting the
            <code>resource.manager.cache.size</code> for your cache to less than
            1.
        ]]></action>

        <action type="update" dev="geirm" issue="" due-to="Daniel Rall">
            Took dan's modified SimpleLog4jLogSystem, and renamed Log4JLogSystem, and
            put back old version of SimpleLog4JLogSystem, as deprecated.  That way
            we can move forward with an up-to-date version that uses Logger, and
            for one release, be backwards compatile for the Category-using log4j
            crowd.
        </action>

        <action type="remove" dev="wglass" issue="" due-to="">
            Deprecated org.apache.velocity.tools.VelocityFormatter class in favor
            of the various format classes in the Velocity Tools library.
        </action>

        <action type="remove" dev="dlr" issue="" due-to="">
            Deprecated the org.apache.velocity.servlet.VelocityServlet class in
            favor of org.apache.velocity.tools.view.servlet.VelocityViewServlet
            from the Velocity Tools library.  Servlet interaction is more a core
            competency of the Velocity Tools package than of Velocity's
            core.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-185" due-to="wglass">
            Fix to BaseTestCase as suggested by Will Glass-Husain to handle line endings
        </action>

        <action type="update" dev="" issue="" due-to="henning">
         Parameterized cache and mod time control in TexenTask based on patch from
         Henning.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-150" due-to="wglass">
            Fix to DatasourceResourceLoader - stop using the old Runtime singleton as
            would leak a little memory for each instance of VelocityEngine created.
            Hunted down by Will Glass-Husain.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-161" due-to="wglass">
            SimplePool now removes elements from pool on a get(). NOTE : Previously, it left the
            reference to the object in the pool.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-61" due-to="wglass">
            Fixes problem with single line comment
            embedded in a multi-line comment.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-221" due-to="">
            Change for VELOCITY-221 and partial for VELOCITY-148, allowing newlines in
            directives.
        </action>

        <action type="update" dev="geirm" issue="VELOCITY-148" due-to="">
            Change to finish request VELOCITY-148, allowing '+' as a string concat. We'll have
            to see how the community likes it.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-239" due-to="">
            Didn't allow formal reference notation as first arg
            to foreach.
        </action>

        <action type="update" dev="geirm" issue="" due-to="">
            To make using w/ XML easier allow alternative logical operators 'and', 'or',
            'lt', 'gt', 'le', 'ge', 'eq', 'ne', 'not'.
        </action>

        <action type="update" dev="geirm" issue="" due-to="">
            Allow newlines in strings.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-148" due-to="">
            Tiny fix to VelocityWriter to prevent a NPE if someone passes it a null
        </action>

        <action type="fix" dev="geirm" issue="" due-to="">
            Anakia changes to accomodate finalization of JDOM API.  In AnakiaJDOMFactory,
            AnakiaTask, and OutputWrapper
        </action>

        <action type="update" dev="geirm" issue="" due-to="">
            Added template, line and column info to MIEs thrown by ASTMethod
        </action>

    </release>
  </body>
</document>
