You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cf...@apache.org on 2012/05/29 17:35:15 UTC

svn commit: r1343781 [4/17] - in /incubator/flex/trunk/modules: ./ thirdparty/velocity/ thirdparty/velocity/build/ thirdparty/velocity/build/lib/ thirdparty/velocity/build/xsl/ thirdparty/velocity/src/java/org/apache/velocity/anakia/ thirdparty/velocit...

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalHousekeepingContext.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalHousekeepingContext.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalHousekeepingContext.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalHousekeepingContext.java Tue May 29 15:35:01 2012
@@ -0,0 +1,91 @@
+package org.apache.velocity.context;
+
+/*
+ * Copyright 2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+import org.apache.velocity.util.introspection.IntrospectionCacheData;
+
+import org.apache.velocity.runtime.resource.Resource;
+
+/**
+ *  interface to encapsulate the 'stuff' for internal operation of velocity.  
+ *  We use the context as a thread-safe storage : we take advantage of the
+ *  fact that it's a visitor  of sorts  to all nodes (that matter) of the 
+ *  AST during init() and render().
+ *
+ *  Currently, it carries the template name for namespace
+ *  support, as well as node-local context data introspection caching.
+ *
+ *  @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
+ *  @author <a href="mailto:Christoph.Reck@dlr.de">Christoph Reck</a>
+ *  @version $Id: InternalHousekeepingContext.java,v 1.6.12.1 2004/03/03 23:22:54 geirm Exp $
+ */
+interface InternalHousekeepingContext
+{
+    /**
+     *  set the current template name on top of stack
+     *
+     *  @param s current template name
+     */
+    void pushCurrentTemplateName( String s );
+
+    /**
+     *  remove the current template name from stack
+     */
+    void popCurrentTemplateName();
+    
+    /**
+     *  get the current template name
+     *
+     *  @return String current template name
+     */
+    String getCurrentTemplateName();
+
+    /**
+     *  Returns the template name stack in form of an array.
+     *
+     *  @return Object[] with the template name stack contents.
+     */
+    Object[] getTemplateNameStack();
+
+    /**
+     *  returns an IntrospectionCache Data (@see IntrospectionCacheData)
+     *  object if exists for the key
+     *
+     *  @param key  key to find in cache
+     *  @return cache object
+     */
+    IntrospectionCacheData icacheGet( Object key );
+    
+    /**
+     *  places an IntrospectionCache Data (@see IntrospectionCacheData)
+     *  element in the cache for specified key
+     *
+     *  @param key  key 
+     *  @param o  IntrospectionCacheData object to place in cache
+     */
+    void icachePut( Object key, IntrospectionCacheData o );
+
+    /**
+     *  temporary fix to enable #include() to figure out
+     *  current encoding.
+     *
+     */
+    Resource getCurrentResource();
+    void setCurrentResource( Resource r );
+    
+    
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalHousekeepingContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalWrapperContext.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalWrapperContext.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalWrapperContext.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalWrapperContext.java Tue May 29 15:35:01 2012
@@ -0,0 +1,33 @@
+package org.apache.velocity.context;
+
+/*
+ * Copyright 2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+/**
+ *  interface for internal context wrapping functionality
+ *  
+ *  @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
+ *  @version $Id: InternalWrapperContext.java,v 1.2.14.1 2004/03/03 23:22:54 geirm Exp $ 
+ */
+public interface InternalWrapperContext
+{
+    /** returns the wrapped user context */
+    public Context getInternalUserContext();
+
+    /** returns the base full context impl */
+    public InternalContextAdapter getBaseContext();
+    
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/InternalWrapperContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/VMContext.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/VMContext.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/VMContext.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/VMContext.java Tue May 29 15:35:01 2012
@@ -0,0 +1,293 @@
+package org.apache.velocity.context;
+
+/*
+ * Copyright 2000,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+import java.util.HashMap;
+
+import org.apache.velocity.runtime.RuntimeServices;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.runtime.directive.VMProxyArg;
+import org.apache.velocity.util.introspection.IntrospectionCacheData;
+import org.apache.velocity.runtime.resource.Resource;
+import org.apache.velocity.app.event.EventCartridge;
+
+/**
+ *  This is a special, internal-use-only context implementation to be
+ *  used for the new Velocimacro implementation.
+ *
+ *  The main distinguishing feature is the management of the VMProxyArg objects
+ *  in the put() and get() methods.
+ *
+ *  Further, this context also supports the 'VM local context' mode, where
+ *  any get() or put() of references that aren't args to the VM are considered
+ *  local to the vm, protecting the global context.
+ *  
+ *  @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
+ *  @version $Id: VMContext.java,v 1.9.10.1 2004/03/03 23:22:54 geirm Exp $ 
+ */
+public class VMContext implements InternalContextAdapter
+{
+    /** container for our VMProxy Objects */
+    HashMap vmproxyhash = new HashMap();
+
+    /** container for any local or constant VMProxy items */
+    HashMap localcontext = new HashMap();
+
+    /** the base context store.  This is the 'global' context */
+    InternalContextAdapter innerContext = null;
+
+    /** context that we are wrapping */
+    InternalContextAdapter wrappedContext = null;
+
+    /** support for local context scope feature, where all references are local */
+    private  boolean localcontextscope = false;
+
+     /**
+     *  CTOR, wraps an ICA
+     */
+    public VMContext( InternalContextAdapter  inner, RuntimeServices rsvc )
+    {
+        localcontextscope = rsvc.getBoolean( RuntimeConstants.VM_CONTEXT_LOCALSCOPE, false );
+
+        wrappedContext = inner;
+        innerContext = inner.getBaseContext();
+    }
+
+    /**
+     *  return the inner / user context
+     */
+    public Context getInternalUserContext()
+    {
+        return innerContext.getInternalUserContext();
+    }
+
+    public InternalContextAdapter getBaseContext()
+    {
+        return innerContext.getBaseContext();
+    }
+
+    /**
+     *  Used to put VMProxyArgs into this context.  It separates
+     *  the VMProxyArgs into constant and non-constant types
+     *  pulling out the value of the constant types so they can
+     *  be modified w/o damaging the VMProxyArg, and leaving the
+     *  dynamic ones, as they modify context rather than their own
+     *  state
+     *  @param  vmpa VMProxyArg to add 
+     */
+    public void addVMProxyArg(  VMProxyArg vmpa )
+    {
+        /*
+         *  ask if it's a constant : if so, get the value and put into the
+         *  local context, otherwise, put the vmpa in our vmproxyhash
+         */
+
+        String key = vmpa.getContextReference();
+
+        if ( vmpa.isConstant() )
+        {
+            localcontext.put( key, vmpa.getObject( wrappedContext ) );
+        }
+        else
+        {
+            vmproxyhash.put( key, vmpa );
+        }
+    }
+
+    /**
+     *  Impl of the Context.put() method. 
+     *
+     *  @param key name of item to set
+     *  @param value object to set to key
+     *  @return old stored object
+     */
+    public Object put(String key, Object value)
+    {
+        /*
+         *  first see if this is a vmpa
+         */
+
+        VMProxyArg vmpa = (VMProxyArg) vmproxyhash.get( key );
+
+        if( vmpa != null)
+        {
+            return vmpa.setObject( wrappedContext, value );
+        }
+        else
+        {
+            if(localcontextscope)
+            {
+                /*
+                 *  if we have localcontextscope mode, then just 
+                 *  put in the local context
+                 */
+
+                return localcontext.put( key, value );
+            }
+            else
+            {
+                /*
+                 *  ok, how about the local context?
+                 */
+  
+                if (localcontext.containsKey( key ))
+                {
+                    return localcontext.put( key, value);
+                }
+                else
+                {
+                    /*
+                     * otherwise, let them push it into the 'global' context
+                     */
+
+                    return innerContext.put( key, value );   
+                }
+            }
+        }
+    }
+
+    /**
+     *  Impl of the Context.gut() method. 
+     *
+     *  @param key name of item to get
+     *  @return  stored object or null
+     */
+    public Object get( String key )
+    {
+        /*
+         * first, see if it's a VMPA
+         */
+        
+        Object o = null;
+        
+        VMProxyArg vmpa = (VMProxyArg) vmproxyhash.get( key );
+        
+        if( vmpa != null )
+        {
+            o = vmpa.getObject( wrappedContext );
+        }
+        else
+        {
+            if(localcontextscope)
+            {
+                /*
+                 * if we have localcontextscope mode, then just 
+                 * put in the local context
+                 */
+
+                o =  localcontext.get( key );
+            }
+            else
+            {
+                /*
+                 *  try the local context
+                 */
+            
+                o = localcontext.get( key );
+                
+                if ( o == null)
+                {
+                    /*
+                     * last chance
+                     */
+
+                    o = innerContext.get( key );
+                }
+            }
+        }
+       
+        return o;
+    }
+ 
+    /**
+     *  not yet impl
+     */
+    public boolean containsKey(Object key)
+    {
+        return false;
+    }
+  
+    /**
+     *  impl badly
+     */
+    public Object[] getKeys()
+    {
+        return vmproxyhash.keySet().toArray();
+    }
+
+    /**
+     *  impl badly
+     */
+    public Object remove(Object key)
+    {
+        return vmproxyhash.remove( key );
+    }
+
+    public void pushCurrentTemplateName( String s )
+    {
+        innerContext.pushCurrentTemplateName( s );
+    }
+
+    public void popCurrentTemplateName()
+    {
+        innerContext.popCurrentTemplateName();
+    }
+   
+    public String getCurrentTemplateName()
+    {
+        return innerContext.getCurrentTemplateName();
+    }
+
+    public Object[] getTemplateNameStack()
+    {
+        return innerContext.getTemplateNameStack();
+    }
+
+    public IntrospectionCacheData icacheGet( Object key )
+    {
+        return innerContext.icacheGet( key );
+    }
+   
+    public void icachePut( Object key, IntrospectionCacheData o )
+    {
+        innerContext.icachePut( key, o );
+    }
+
+    public EventCartridge attachEventCartridge( EventCartridge ec )
+    {
+        return innerContext.attachEventCartridge( ec );
+    }
+
+    public EventCartridge getEventCartridge()
+    {
+        return innerContext.getEventCartridge();
+    }
+
+
+    public void setCurrentResource( Resource r )
+    {
+        innerContext.setCurrentResource( r );
+    }
+
+    public Resource getCurrentResource()
+    {
+        return innerContext.getCurrentResource();
+    }
+}
+
+
+

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/context/VMContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/convert/WebMacro.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/convert/WebMacro.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/convert/WebMacro.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/convert/WebMacro.java Tue May 29 15:35:01 2012
@@ -0,0 +1,296 @@
+package org.apache.velocity.convert;
+
+/*
+ * Copyright 2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+import java.io.File;
+import java.io.FileWriter;
+
+import org.apache.oro.text.perl.Perl5Util;
+import org.apache.velocity.util.StringUtils;
+import org.apache.tools.ant.DirectoryScanner;
+
+/**
+ * This class will convert a WebMacro template to
+ * a Velocity template. Uses the ORO Regexp package to do the 
+ * rewrites. Note, it isn't 100% perfect, but will definitely get
+ * you about 99.99% of the way to a converted system. Please
+ * see the website documentation for more information on how to use
+ * this class.
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
+ * @version $Id: WebMacro.java,v 1.20.8.1 2004/03/03 23:22:54 geirm Exp $ 
+ */
+public class WebMacro
+{
+    protected static final String VM_EXT = ".vm";
+    protected static final String WM_EXT = ".wm";
+
+    /**
+     * The regexes to use for line by line substition. The regexes
+     * come in pairs. The first is the string to match, the second is
+     * the substitution to make.
+     */
+    protected static String[] perLineREs =
+    {
+        // Make #if directive match the Velocity directive style.
+        "#if\\s*[(]\\s*(.*\\S)\\s*[)]\\s*(#begin|{)[ \\t]?",
+        "#if( $1 )",
+
+        // Remove the WM #end #else #begin usage.
+        "[ \\t]?(#end|})[ \\t]*\n(\\s*)#else\\s*(#begin|{)[ \\t]?(\\w)",
+        "$2#else#**#$4", // avoid touching followup word with embedded comment
+        "[ \\t]?(#end|})[ \\t]*\n(\\s*)#else\\s*(#begin|{)[ \\t]?",
+        "$2#else",
+        "(#end|})(\\s*#else)\\s*(#begin|{)[ \\t]?",
+        "$1\n$2",
+
+        // Convert WM style #foreach to Velocity directive style.
+        "#foreach\\s+(\\$\\w+)\\s+in\\s+(\\$[^\\s#]+)\\s*(#begin|{)[ \\t]?",
+        "#foreach( $1 in $2 )",
+
+        // Convert WM style #set to Velocity directive style.
+        "#set\\s+(\\$[^\\s=]+)\\s*=\\s*([\\S \\t]+)",
+        "#set( $1 = $2 )",
+        "(##[# \\t\\w]*)\\)", // fix comments included at end of line
+        ")$1",
+
+        // Convert WM style #parse to Velocity directive style.
+        "#parse\\s+([^\\s#]+)[ \\t]?",
+        "#parse( $1 )",
+
+        // Convert WM style #include to Velocity directive style.
+        "#include\\s+([^\\s#]+)[ \\t]?",
+        "#include( $1 )",
+
+        // Convert WM formal reference to VTL syntax.
+        "\\$\\(([^\\)]+)\\)",
+        "${$1}",
+        "\\${([^}\\(]+)\\(([^}]+)}\\)", // fix encapsulated brakets: {(})
+        "${$1($2)}",
+
+        // Velocity currently does not permit leading underscore.
+        "\\$_",
+        "$l_",
+        "\\${(_[^}]+)}", // within a formal reference
+        "${l$1}",
+
+        // Eat semi-colons in (converted) VTL #set directives.
+        "(#set\\s*\\([^;]+);(\\s*\\))",
+        "$1$2",
+
+        // Convert explicitly terminated WM statements to VTL syntax.
+        "(^|[^\\\\])\\$(\\w[^=\n;'\"]*);",
+        "$1${$2}",
+
+        // Change extensions when seen.
+        "\\.wm",
+        ".vm"
+    };
+    
+    /**
+     * Iterate through the set of find/replace regexes
+     * that will convert a given WM template to a VM template
+     */
+    public void convert(String target)
+    {
+        File file = new File(target);
+        
+        if (!file.exists())
+        {
+            System.err.println
+                ("The specified template or directory does not exist");
+            System.exit(1);
+        }
+        
+        if (file.isDirectory())
+        {
+            String basedir = file.getAbsolutePath();
+            String newBasedir = basedir + VM_EXT;
+
+            DirectoryScanner ds = new DirectoryScanner();
+            ds.setBasedir(basedir);
+            ds.addDefaultExcludes();
+            ds.scan();
+            String[] files = ds.getIncludedFiles();
+            
+            for (int i = 0; i < files.length; i++)
+            {
+                writeTemplate(files[i], basedir, newBasedir);
+            }
+        }
+        else
+        {
+            writeTemplate(file.getAbsolutePath(), "", "");
+        }
+    }
+
+    /**
+     * Write out the converted template to the given named file
+     * and base directory.
+     */
+    private boolean writeTemplate(String file, String basedir,
+                                  String newBasedir)
+    {
+        if (file.indexOf(WM_EXT) < 0)
+        {
+            return false;
+        }
+    
+        System.out.println("Converting " + file + "...");
+        
+        String template;
+        String templateDir;
+        String newTemplate;
+        File outputDirectory;
+        
+        if (basedir.length() == 0)
+        {
+            template = file;
+            templateDir = "";
+            newTemplate = convertName(file);
+        }            
+        else
+        {
+            template = basedir + File.separator + file;
+            templateDir = newBasedir + extractPath(file);
+
+            outputDirectory = new File(templateDir);
+                
+            if (! outputDirectory.exists())
+            {
+                outputDirectory.mkdirs();
+            }
+                
+            newTemplate = newBasedir + File.separator + convertName(file);
+        }            
+        
+        String convertedTemplate = convertTemplate(template);
+                    
+        try
+        {
+            FileWriter fw = new FileWriter(newTemplate);
+            fw.write(convertedTemplate);
+            fw.close();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    
+        return true;
+    }
+
+    /**
+     * Gets the path segment of the full path to a file (i.e. one
+     * which originally included the file name).
+     */
+    private final String extractPath(String file)
+    {
+        int lastSepPos = file.lastIndexOf(File.separator);
+        return (lastSepPos == -1 ? "" :
+                File.separator + file.substring(0, lastSepPos));
+    }
+
+    /**
+     * Simple extension conversion of .wm to .vm
+     */
+    private String convertName(String name)
+    {
+        if (name.indexOf(WM_EXT) > 0)
+        {
+            return name.substring(0, name.indexOf(WM_EXT)) + VM_EXT;
+        }
+        else
+        {
+            return name;
+        }
+    }
+
+    /**
+     * How to use this little puppy :-)
+     */
+    private static final void usage()
+    {
+        System.err.println("Usage: convert-wm <template.wm | directory>");
+        System.exit(1);
+    }
+
+    /**
+     * Apply find/replace regexes to our WM template
+     */
+    public String convertTemplate(String template)
+    {
+        String contents = StringUtils.fileContentsToString(template);
+
+        // Overcome Velocity 0.71 limitation.
+        // HELP: Is this still necessary?
+        if (!contents.endsWith("\n"))
+        {
+            contents += "\n";
+        }
+
+        // Convert most markup.
+        Perl5Util perl = new Perl5Util();
+        for (int i = 0; i < perLineREs.length; i += 2)
+        {
+            contents = perl.substitute(makeSubstRE(i), contents);
+        }
+
+        // Convert closing curlies.
+        if (perl.match("m/javascript/i", contents))
+        {
+            // ASSUMPTION: JavaScript is indented, WM is not.
+            contents = perl.substitute("s/\n}/\n#end/g", contents);
+        }
+        else
+        {
+            contents = perl.substitute("s/(\n\\s*)}/$1#end/g", contents);
+            contents = perl.substitute("s/#end\\s*\n\\s*#else/#else/g",
+                                       contents);
+        }
+
+        return contents;
+    }
+
+    /**
+     * Makes a Perl 5 regular expression for use by ORO.
+     */
+    private final String makeSubstRE(int i)
+    {
+        return ("s/" + perLineREs[i] + '/' + perLineREs[i + 1] + "/g");
+    }
+
+    /**
+     * Main hook for the conversion process.
+     */
+    public static void main(String[] args)
+    {
+        if (args.length > 0)
+        {
+            for (int x=0; x < args.length; x++)
+            {
+                WebMacro converter = new WebMacro();
+                converter.convert(args[x]);
+            }
+        }
+        else
+        {
+            usage();
+        }
+    }
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/convert/WebMacro.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/MethodInvocationException.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/MethodInvocationException.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/MethodInvocationException.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/MethodInvocationException.java Tue May 29 15:35:01 2012
@@ -0,0 +1,93 @@
+package org.apache.velocity.exception;
+
+/*
+ * Copyright 2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+/**
+ *  Application-level exception thrown when a reference method is 
+ *  invoked and an exception is thrown.
+ *  <br>
+ *  When this exception is thrown, a best effort will be made to have
+ *  useful information in the exception's message.  For complete 
+ *  information, consult the runtime log.
+ *
+ * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
+ * @version $Id: MethodInvocationException.java,v 1.2.14.1 2004/03/03 23:22:54 geirm Exp $
+ */
+public class MethodInvocationException extends VelocityException
+{
+    private String methodName = "";
+    private String referenceName = "";
+    private Throwable wrapped = null;
+
+    /**
+     *  CTOR - wraps the passed in exception for
+     *  examination later
+     *
+     *  @param message 
+     *  @param e Throwable that we are wrapping
+     *  @param methodName name of method that threw the exception
+     */
+    public MethodInvocationException( String message, Throwable e, String methodName )
+    {
+        super(message);
+        this.wrapped = e;
+        this.methodName = methodName;
+    }       
+
+    /**
+     *  Returns the name of the method that threw the
+     *  exception
+     *
+     *  @return String name of method
+     */
+    public String getMethodName()
+    {
+        return methodName;
+    }
+
+    /**
+     *  returns the wrapped Throwable that caused this
+     *  MethodInvocationException to be thrown
+     *  
+     *  @return Throwable thrown by method invocation
+     */
+    public Throwable getWrappedThrowable()
+    {
+        return wrapped;
+    }
+
+    /**
+     *  Sets the reference name that threw this exception
+     *
+     *  @param reference name of reference
+     */
+    public void setReferenceName( String ref )
+    {
+        referenceName = ref;
+    }
+
+    /**
+     *  Retrieves the name of the reference that caused the 
+     *  exception
+     *
+     *  @return name of reference
+     */
+    public String getReferenceName()
+    {
+        return referenceName;
+    }
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/MethodInvocationException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ParseErrorException.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ParseErrorException.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ParseErrorException.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ParseErrorException.java Tue May 29 15:35:01 2012
@@ -0,0 +1,36 @@
+package org.apache.velocity.exception;
+
+/*
+ * Copyright 2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+/**
+ *  Application-level exception thrown when a resource of any type
+ *  has a syntax or other error which prevents it from being parsed.
+ *  <br>
+ *  When this resource is thrown, a best effort will be made to have
+ *  useful information in the exception's message.  For complete 
+ *  information, consult the runtime log.
+ *
+ * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
+ * @version $Id: ParseErrorException.java,v 1.2.14.1 2004/03/03 23:22:54 geirm Exp $
+ */
+public class ParseErrorException extends VelocityException
+{
+    public ParseErrorException(String exceptionMessage )
+    {
+        super(exceptionMessage);
+    }       
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ParseErrorException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ResourceNotFoundException.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ResourceNotFoundException.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ResourceNotFoundException.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ResourceNotFoundException.java Tue May 29 15:35:01 2012
@@ -0,0 +1,37 @@
+package org.apache.velocity.exception;
+
+/*
+ * Copyright 2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+/**
+ *  Application-level exception thrown when a resource of any type
+ *  isn't found by the Velocity engine.
+ *  <br>
+ *  When this exception is thrown, a best effort will be made to have
+ *  useful information in the exception's message.  For complete 
+ *  information, consult the runtime log.
+ *
+ * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
+ * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
+ * @version $Id: ResourceNotFoundException.java,v 1.3.8.1 2004/03/03 23:22:54 geirm Exp $
+ */
+public class ResourceNotFoundException extends VelocityException
+{
+    public ResourceNotFoundException(String exceptionMessage)
+    {
+        super(exceptionMessage);
+    }
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/ResourceNotFoundException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/VelocityException.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/VelocityException.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/VelocityException.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/VelocityException.java Tue May 29 15:35:01 2012
@@ -0,0 +1,32 @@
+package org.apache.velocity.exception;
+
+/*
+ * Copyright 2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+/**
+ *  Base class for Velocity exceptions thrown to the 
+ *  application layer.
+ *
+ * @author <a href="mailto:kdowney@amberarcher.com">Kyle F. Downey</a>
+ * @version $Id: VelocityException.java,v 1.2.14.1 2004/03/03 23:22:54 geirm Exp $
+ */
+public class VelocityException extends Exception
+{
+    public VelocityException(String exceptionMessage )
+    {
+        super(exceptionMessage);
+    }       
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/exception/VelocityException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/io/VelocityWriter.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/io/VelocityWriter.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/io/VelocityWriter.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/io/VelocityWriter.java Tue May 29 15:35:01 2012
@@ -0,0 +1,332 @@
+package org.apache.velocity.io;
+
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * Implementation of a fast Writer. It was originally taken from JspWriter
+ * and modified to have less syncronization going on.
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
+ * @author Anil K. Vijendran
+ * @version $Id: VelocityWriter.java,v 1.8.4.1 2004/03/03 23:22:54 geirm Exp $
+ */
+public final class VelocityWriter extends Writer
+{
+    /**
+     * constant indicating that the Writer is not buffering output
+     */
+    public static final int	NO_BUFFER = 0;
+
+    /**
+     * constant indicating that the Writer is buffered and is using the 
+     * implementation default buffer size
+     */
+    public static final int	DEFAULT_BUFFER = -1;
+
+    /**
+     * constant indicating that the Writer is buffered and is unbounded; 
+     * this is used in BodyContent
+     */
+    public static final int	UNBOUNDED_BUFFER = -2;
+
+    protected int     bufferSize;
+    protected boolean autoFlush;
+
+    private Writer writer;
+    
+    private char cb[];
+    private int nextChar;
+
+    private static int defaultCharBufferSize = 8 * 1024;
+
+    private boolean flushed = false;
+
+    /**
+     * Create a buffered character-output stream that uses a default-sized
+     * output buffer.
+     *
+     * @param  response  A Servlet Response
+     */
+    public VelocityWriter(Writer writer)
+    {
+        this(writer, defaultCharBufferSize, true);
+    }
+
+    /**
+     * private constructor.
+     */
+    private VelocityWriter(int bufferSize, boolean autoFlush)
+    {
+        this.bufferSize = bufferSize;
+        this.autoFlush  = autoFlush;
+    }
+
+    /**
+     * This method returns the size of the buffer used by the JspWriter.
+     *
+     * @return the size of the buffer in bytes, or 0 is unbuffered.
+     */
+    public int getBufferSize() { return bufferSize; }
+
+    /**
+     * This method indicates whether the JspWriter is autoFlushing.
+     *
+     * @return if this JspWriter is auto flushing or throwing IOExceptions on 
+     *         buffer overflow conditions
+     */
+    public boolean isAutoFlush() { return autoFlush; }
+
+    /**
+     * Create a new buffered character-output stream that uses an output
+     * buffer of the given size.
+     *
+     * @param  response A Servlet Response
+     * @param  sz   	Output-buffer size, a positive integer
+     *
+     * @exception  IllegalArgumentException  If sz is <= 0
+     */
+    public VelocityWriter(Writer writer, int sz, boolean autoFlush)
+    {
+        this(sz, autoFlush);
+        if (sz < 0)
+            throw new IllegalArgumentException("Buffer size <= 0");
+        this.writer = writer;
+        cb = sz == 0 ? null : new char[sz];
+        nextChar = 0;
+    }
+
+    private final void init( Writer writer, int sz, boolean autoFlush )
+    {
+        this.writer= writer;
+        if( sz > 0 && ( cb == null || sz > cb.length ) )
+            cb=new char[sz];
+        nextChar = 0;
+        this.autoFlush=autoFlush;
+        this.bufferSize=sz;
+    }
+
+    /**
+     * Flush the output buffer to the underlying character stream, without
+     * flushing the stream itself.  This method is non-private only so that it
+     * may be invoked by PrintStream.
+     */
+    private final void flushBuffer() throws IOException
+    {
+        if (bufferSize == 0)
+            return;
+        flushed = true;
+        if (nextChar == 0)
+            return;
+        writer.write(cb, 0, nextChar);
+        nextChar = 0;
+    }
+
+    /**
+     * Discard the output buffer.
+     */
+    public final void clear()
+    {
+        nextChar = 0;
+    }
+
+    private final void bufferOverflow() throws IOException
+    {
+        throw new IOException("overflow");
+    }
+
+    /**
+     * Flush the stream.
+     *
+     */
+    public final void flush()  throws IOException
+    {
+        flushBuffer();
+        if (writer != null)
+        {
+            writer.flush();
+        }
+    }
+
+    /**
+     * Close the stream.
+     *
+     */
+    public final void close() throws IOException {
+        if (writer == null)
+            return;
+        flush();
+    }
+
+    /**
+     * @return the number of bytes unused in the buffer
+     */
+    public final int getRemaining()
+    {
+        return bufferSize - nextChar;
+    }
+
+    /**
+     * Write a single character.
+     *
+     */
+    public final void write(int c) throws IOException
+    {
+        if (bufferSize == 0)
+        {
+            writer.write(c);
+        }
+        else
+        {
+            if (nextChar >= bufferSize)
+                if (autoFlush)
+                    flushBuffer();
+                else
+                    bufferOverflow();
+            cb[nextChar++] = (char) c;
+        }
+    }
+
+    /**
+     * Our own little min method, to avoid loading
+     * <code>java.lang.Math</code> if we've run out of file
+     * descriptors and we're trying to print a stack trace.
+     */
+    private final int min(int a, int b)
+    {
+	    return (a < b ? a : b);
+    }
+
+    /**
+     * Write a portion of an array of characters.
+     *
+     * <p> Ordinarily this method stores characters from the given array into
+     * this stream's buffer, flushing the buffer to the underlying stream as
+     * needed.  If the requested length is at least as large as the buffer,
+     * however, then this method will flush the buffer and write the characters
+     * directly to the underlying stream.  Thus redundant
+     * <code>DiscardableBufferedWriter</code>s will not copy data unnecessarily.
+     *
+     * @param  cbuf  A character array
+     * @param  off   Offset from which to start reading characters
+     * @param  len   Number of characters to write
+     *
+     */
+    public final void write(char cbuf[], int off, int len) 
+        throws IOException 
+    {
+        if (bufferSize == 0)
+        {
+            writer.write(cbuf, off, len);
+            return;
+        }
+
+        if (len == 0)
+        {
+            return;
+        } 
+
+        if (len >= bufferSize)
+        {
+            /* If the request length exceeds the size of the output buffer,
+            flush the buffer and then write the data directly.  In this
+            way buffered streams will cascade harmlessly. */
+            if (autoFlush)
+                flushBuffer();
+            else
+                bufferOverflow();
+                writer.write(cbuf, off, len);
+            return;
+        }
+
+        int b = off, t = off + len;
+        while (b < t)
+        {
+            int d = min(bufferSize - nextChar, t - b);
+            System.arraycopy(cbuf, b, cb, nextChar, d);
+            b += d;
+            nextChar += d;
+            if (nextChar >= bufferSize) 
+                if (autoFlush)
+                    flushBuffer();
+                else
+                    bufferOverflow();
+        }
+    }
+
+    /**
+     * Write an array of characters.  This method cannot be inherited from the
+     * Writer class because it must suppress I/O exceptions.
+     */
+    public final void write(char buf[]) throws IOException
+    {
+    	write(buf, 0, buf.length);
+    }
+
+    /**
+     * Write a portion of a String.
+     *
+     * @param  s     String to be written
+     * @param  off   Offset from which to start reading characters
+     * @param  len   Number of characters to be written
+     *
+     */
+    public final void write(String s, int off, int len) throws IOException
+    {
+        if (bufferSize == 0)
+        {
+            writer.write(s, off, len);
+            return;
+        }
+        int b = off, t = off + len;
+        while (b < t)
+        {
+            int d = min(bufferSize - nextChar, t - b);
+            s.getChars(b, b + d, cb, nextChar);
+            b += d;
+            nextChar += d;
+            if (nextChar >= bufferSize) 
+                if (autoFlush)
+                    flushBuffer();
+                else
+                    bufferOverflow();
+        }
+    }
+
+    /**
+     * Write a string.  This method cannot be inherited from the Writer class
+     * because it must suppress I/O exceptions.
+     */
+    public final void write(String s) throws IOException
+    {
+    	write(s, 0, s.length());
+    }
+
+    /**
+     * resets this class so that it can be reused
+     *
+     */
+    public final void recycle( Writer writer)
+    {
+        this.writer = writer;
+        flushed = false;
+        clear();
+    }
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/io/VelocityWriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/RuntimeLogger.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/RuntimeLogger.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/RuntimeLogger.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/RuntimeLogger.java Tue May 29 15:35:01 2012
@@ -0,0 +1,54 @@
+package org.apache.velocity.runtime;
+
+/*
+ * Copyright 2002,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+/**
+ * Interface for internal runtime logging services that are needed by the
+ *
+ * @author <a href="mailto:geirm@apache.org">Geir Magusson Jr.</a>
+ * @version $Id: RuntimeLogger.java,v 1.1.4.1 2004/03/03 23:22:55 geirm Exp $
+ */
+public interface RuntimeLogger
+{
+    /**
+     * Log a warning message.
+     *
+     * @param Object message to log
+     */
+    public void warn(Object message);
+
+    /**
+     * Log an info message.
+     *
+     * @param Object message to log
+     */
+    public  void info(Object message);
+
+    /**
+     * Log an error message.
+     *
+     * @param Object message to log
+     */
+    public void error(Object message);
+
+    /**
+     * Log a debug message.
+     *
+     * @param Object message to log
+     */
+    public void debug(Object message);
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/RuntimeLogger.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/compiler/Compiler.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/compiler/Compiler.java?rev=1343781&view=auto
==============================================================================
--- incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/compiler/Compiler.java (added)
+++ incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/compiler/Compiler.java Tue May 29 15:35:01 2012
@@ -0,0 +1,146 @@
+package org.apache.velocity.runtime.compiler;
+
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+import org.apache.bcel.generic.*;
+import org.apache.bcel.Constants;
+
+/**
+ * The start of a velocity template compiler. Incomplete.
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @version $Id: Compiler.java,v 1.6.8.1 2004/03/03 23:22:55 geirm Exp $
+ */
+public class Compiler implements InstructionConstants
+{
+    public static void main(String[] args)
+    {
+        String template = args[0].substring(0, args[0].indexOf("."));
+        ClassGen cg =
+                new ClassGen(template, "java.lang.Object", "<generated>",
+                Constants.ACC_PUBLIC | Constants.ACC_SUPER, null);
+        
+        ConstantPoolGen cp = cg.getConstantPool(); // cg creates constant pool
+        InstructionList il = new InstructionList();
+        MethodGen mg = new MethodGen(Constants.ACC_STATIC |
+                Constants.ACC_PUBLIC, // access flags
+                Type.VOID, // return type
+                new Type[]{ // argument types
+                new ArrayType(Type.STRING, 1)},
+                new String[]{ "argv" }, // arg names
+                "main", template, // method, class
+                il, cp);
+
+        //Add often needed constants to constant pool.
+
+        int br_index = cp.addClass("java.io.BufferedReader");
+        int ir_index = cp.addClass("java.io.InputStreamReader");
+        int system_out = cp.addFieldref("java.lang.System", "out", // System.out
+                "Ljava/io/PrintStream;");
+        int system_in = cp.addFieldref("java.lang.System", "in", // System.in
+                "Ljava/io/InputStream;");
+
+        // Create BufferedReader object and store it in local variable `in'.
+
+        il.append(new NEW(br_index));
+        il.append(DUP);
+        il.append(new NEW(ir_index));
+        il.append(DUP);
+        il.append(new GETSTATIC(system_in));
+
+        // Call constructors, i.e. BufferedReader(InputStreamReader())
+
+        il.append( new INVOKESPECIAL(
+                cp.addMethodref("java.io.InputStreamReader", "<init>",
+                "(Ljava/io/InputStream;)V")));
+        il.append( new INVOKESPECIAL(
+                cp.addMethodref("java.io.BufferedReader", "<init>", "(Ljava/io/Reader;)V")));
+        
+        // Create local variable `in'
+
+        LocalVariableGen lg = mg.addLocalVariable("in",
+                new ObjectType("java.io.BufferedReader"), null, null);
+        int in = lg.getIndex();
+        lg.setStart(il.append(new ASTORE(in))); // `i' valid from here
+
+        // Create local variable `name'
+
+        lg = mg.addLocalVariable("name", Type.STRING, null, null);
+        int name = lg.getIndex();
+        il.append(ACONST_NULL);
+        lg.setStart(il.append(new ASTORE(name))); // `name' valid from here
+
+        InstructionHandle try_start = il.append(new GETSTATIC(system_out));
+        il.append(new PUSH(cp, "I will be a template compiler!"));
+        il.append( new INVOKEVIRTUAL(
+                cp.addMethodref("java.io.PrintStream", "println", "(Ljava/lang/String;)V")));
+        
+        // Upon normal execution we jump behind exception handler,
+        // the target address is not known yet.
+
+        GOTO g = new GOTO(null);
+        InstructionHandle try_end = il.append(g);
+
+        InstructionHandle handler = il.append(RETURN);
+        mg.addExceptionHandler(try_start, try_end, handler,
+                new ObjectType("java.io.IOException"));
+
+        // Normal code continues, now we can set the branch target of the GOTO.
+
+        InstructionHandle ih = il.append(new GETSTATIC(system_out));
+        g.setTarget(ih);
+
+        // String concatenation compiles to StringBuffer operations.
+        
+        il.append(new NEW(cp.addClass("java.lang.StringBuffer")));
+        il.append(DUP);
+        il.append(new PUSH(cp, " "));
+        il.append( new INVOKESPECIAL(
+                cp.addMethodref("java.lang.StringBuffer", "<init>", "(Ljava/lang/String;)V")));
+        
+        il.append(new ALOAD(name));
+
+        // One can also abstract from using the ugly signature syntax by using
+        // the getMethodSignature() method. For example:
+
+        String sig = Type.getMethodSignature(Type.STRINGBUFFER,
+                new Type[]{ Type.STRING });
+        il.append( new INVOKEVIRTUAL(
+                cp.addMethodref("java.lang.StringBuffer", "append", sig)));
+
+        il.append( new INVOKEVIRTUAL(
+                cp.addMethodref("java.lang.StringBuffer", "toString", "()Ljava/lang/String;")));
+
+        il.append(RETURN);
+        
+        mg.setMaxStack(5); // Needed stack size
+        cg.addMethod(mg.getMethod());
+
+        // Add public <init> method, i.e. empty constructor
+        cg.addEmptyConstructor(Constants.ACC_PUBLIC);
+
+        // Get JavaClass object and dump it to file.
+        try
+        {
+            cg.getJavaClass().dump(template + ".class");
+        }
+        catch (java.io.IOException e)
+        {
+            System.err.println(e);
+        }
+    }
+}

Propchange: incubator/flex/trunk/modules/thirdparty/velocity/src/java/org/apache/velocity/runtime/compiler/Compiler.java
------------------------------------------------------------------------------
    svn:eol-style = native