<?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.3" date="2021-02-27">
        <action type="fix" dev="cbrisson" issue="VELOCITY-927">
            Fix parser bug (newline and space inside an empty inline map definition).
        </action>        
        <action type="new" dev="cbrisson" issue="VELOCITY-933">
            Backported Spring framework Velocity Engine integration classes from Spring 4.x, in the new module <code>spring-velocity-support</code>.
        </action>        
        <action type="fix" dev="wglass" issue="VELOCITY-931">
            Let SecureUberspector block methods on ClassLoader and subclasses.
        </action>        
        <action type="new" dev="cbrisson" due-to="mgrigorov">
            Added Travis CI.
        </action>        
        <action type="fix" dev="cbrisson" due-to="donnerpeter">
            Don't leak classes via Stop.STOP_ALL stack trace.
        </action>
    </release>
    <release version="2.2" date="2020-02-02">
        <action type="new" dev="cbrisson">
            Deprecated 2.1 flag <code>velocimacro.arguments.preserve_literals</code> in favor of
            the new <code>valocimacro_enable_bc_mode</code> flag, which will also, like 1.7 does,
            use global context values as defaults for missing macro arguments which do not have
            an explicit default value.
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-926">
            Fixed regression: Macro arguments names cannot collide with external references names
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-925">
            Fixed macro calls without parenthesis eating the following newline in BC mode
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-924">
            Fixed bad cache handling for java.lang.Class methods
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-923">
            Fixed parser regression when || follow a Velocity expression
        </action>
        <action type="add" dev="cbrisson">
            Added BigInteger and BigDecimal implicit conversions
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-919">
            Fixed abnormal suppression of zero-width whitespaces
        </action>
        <action type="add" dev="cbrisson" issue="VELOCITY-917">
            Added an example of how to build a customized parser where the '#', '$', '*' and '@'
            can be replaced by any character
        </action>
        <action type="add" dev="cbrisson" issue="VELOCITY-916">
            Added the <code>runtime.log.track_locations</code> debugging flag (disabled by default), which:
            <ul>
                <li>display a VTL stack trace on any error</li>
                <li>Implement template location tracking with slf4j MDC tags: Once activated, an MDC-aware logger will be
            able to display the <code>file</code>, <code>line</code> and <code>column</code> MDC tags</li>
            </ul>
        </action>
        <action type="add" dev="cbrisson" issue="VELOCITY-915">
            Added the following 1.7.x backward compatibility flags:
            <ul>
                <li><code>event_handler.invalid_references.quiet</code> - warn on invalid quiet references</li>
                <li><code>event_handler.invalid_references.null</code> - warn on null references</li>
                <li><code>event_handler.invalid_references.tested</code> - warn on invalid references tested with <code>#if()</code></li>
            </ul>
            Those three flags are false by default, but can be set to true to mimic 1.7.x behavior
        </action>
        <action type="fix" dev="cbrisson">
            Introspection: favor non-vararg methods on ambiguities as does the Java compiler
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-912">
            Also allow hyphen in subproperties when the corresponding backward compatibility flag is on
        </action>
    </release>
    <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>
