<?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.

-->
<!--
  Action attributes:
    type    "add" (new feature) or "fix" (bug fix). Only these two render an
            icon in the rendered changelog (see velocity-site changes.xsl).
    dev     Author Apache handle.
    due-to  Contributor credit when the change came from outside the
            committers. Apache handle when applicable, GitHub username
            otherwise.
    issue   Apache JIRA issue ID, e.g. VELOCITY-988. Rendered as a link to
            the JIRA browser.
    pr      GitHub pull-request number on apache/velocity-engine. Rendered
            as a link to the PR. May coexist with @issue.
-->
<document>
  <properties>
    <title>Changelog</title>
  </properties>

  <body>
    <release version="2.5" date="2026-06-14">
        <action type="fix" dev="cbrisson" due-to="ogawaffm" issue="VELOCITY-996">
            Fix precision loss when converting <code>Long</code> values to
            <code>BigDecimal</code> in VTL math operations.
        </action>
        <action type="add" dev="cbrisson" issue="VELOCITY-995">
            Add deprecation warnings for VTL syntax constructs not supported by the
            next major version: the informal <code>$foo.bar</code> notation rendered
            to output, the <code>${foo|default}</code> default-value operator, the
            extra <code>$</code> in <code>${$foo}</code>, and the
            <code>parser.allow_hyphen_in_identifiers</code> backward compatibility option.
            Gated by the new <code>runtime.deprecation.warn</code> property, off by default for now.
        </action>
        <action type="update" dev="cbrisson" issue="VELOCITY-994">
            <code>spring-velocity-support</code> now targets the current, Jakarta-based
            Spring framework (Spring 6.x and 7.x) on Java 17. The previous Spring 5.x /
            Java 8 support moves to the new <code>spring5-velocity-support</code> module.
            Note: while this is a minor Velocity release, it is a major upgrade for the
            <code>spring-velocity-support</code> artifact, which jumps from Spring 5 to 6/7.
        </action>
        <action type="add" dev="cbrisson">
            Add a new <code>introspector.restrict.methods</code> property to restrict
            method calls in the secure introspector. Block by default
            <code>VelocityEngine.init()</code> and <code>VelocityEngine.reset()</code>.
        </action>
        <action type="fix" dev="cbrisson" due-to="fschlimme" issue="VELOCITY-989">
            Fix connection leaks in <code>DataSourceResourceLoader</code>. Deprecate
            <code>DatabaseObjectsFactory</code> in favor of <code>PreparedStatementsFactory</code>.
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-988">
            Restore Velocity 1.7 behaviour: allow an extra dollar after <code>{</code>,
            i.e. <code>${$foo}</code> and <code>$!{$foo}</code>.
        </action>
        <action type="fix" dev="cbrisson" due-to="ravimergu" issue="VELOCITY-986" pr="59">
            <code>Map.size()</code> method is now called instead of any provided
            <code>size</code> property.
        </action>
        <action type="add" dev="cbrisson">
            Bump several dependencies and plugin versions. On JDK 8, dom4j 2.1.5 and
            Spring 5.3.39 are the latest supported.
        </action>
        <action type="fix" dev="cbrisson" due-to="nate-dev" pr="55">
            Fix time zone dependency in <code>Velocity952TestCase</code>
            (<code>testEnd2End</code> failed outside GMT+1).
        </action>
    </release>
    <release version="2.4.1" date="2024-10-14">
        <action type="fix" dev="tmortagne" issue="VELOCITY-983">
            Finding the topmost method when introspecting a class should stop
            at the first static method found
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-944">
            Direct evaluation of VTL code via <code>RuntimeInstance.evaluate()</code>
            should update the current rendering template information for
            local velocimacros to be visible in string literals interpolation.
        </action>
    </release>
    <release version="2.4" date="2024-09-07">
        <action type="add" dev="cbrisson" issue="VELOCITY-948">
            Add a new compatibility flag for integer ranges immutability.
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-961">
            Fix a regression in the parser.
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-962">
            An unclosed verbatim section should give an error, as in Velocity 1.7.
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCIY-982" due-to="John Tal">
            Add a few more dangerous classes to introspector blacklist.
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-957">
            Fix overzealous string to number conversion in comparison, which gave unexpected comparison results in some case, and was also most
            probably the cause of a performance regression (VELOCITY-969, VELOCITY-979).
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-952" due-to="Thomas Mortagne">
            Introspection should use the top-most declaration of methods.
        </action>
        <action type="fix" dev="cbrisson" issue="VELOCITY-965">
            Fix <code>DataSourceResourceLoader</code> thread safety issue. Also Introduces a <code>DatabaseObjectsFactory</code> plugin mechanism
            which allows to customize caching of database connections and prepared statements.
        </action>
        <action type="fix" dev="cbrisson" due-to="Scott Cantor" issue="VELOCITY-943">
            Refactor <code>SpringResourceLoader</code>.
        </action>
        <action type="add" dev="cbrisson" due-to="J. Tóth Tamás">
            Support Java 16 records in property lookup.
        </action>
    </release>
    <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="add" 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="add" 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="add" 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>
