You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by ge...@apache.org on 2003/10/22 21:31:23 UTC
cvs commit: jakarta-velocity/contrib/temporary/localdirective LocalDirective.java foo.vm readme.txt recurse.vm velocity.properties
geirm 2003/10/22 12:31:22
Added: contrib/temporary/localdirective LocalDirective.java foo.vm
readme.txt recurse.vm velocity.properties
Log:
A little directive to protect references
Revision Changes Path
1.1 jakarta-velocity/contrib/temporary/localdirective/LocalDirective.java
Index: LocalDirective.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Velocity", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.runtime.parser.node.Node;
import org.apache.velocity.runtime.parser.node.SimpleNode;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.parser.ParserTreeConstants;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.runtime.parser.node.ASTReference;
import java.io.Writer;
import java.io.IOException;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
/**
* Simple directive to provide ability to trap a local value for
* iteration.
*
* Ex :
*
* #set($foo = 1)
* $foo
* #local($foo)
* #set($foo = 2)
* $foo
* #end
* $foo
*
* should output
*
* 1
* 2
* 1
*
* @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
* @version $Id: LocalDirective.java,v 1.1 2003/10/22 19:31:22 geirm Exp $
*/
public class LocalDirective extends Directive
{
public String getName()
{
return "local";
}
public int getType()
{
return BLOCK;
}
public boolean render(InternalContextAdapter context,
Writer writer, Node node)
throws IOException, MethodInvocationException, ResourceNotFoundException,
ParseErrorException
{
Map data = new HashMap();
int num = node.jjtGetNumChildren();
/*
* get the references
*/
for (int i=0; i < num; i++)
{
SimpleNode child = (SimpleNode) node.jjtGetChild(i);
/*
* if a block, just execute
*/
if (child.getType() == ParserTreeConstants.JJTBLOCK)
{
child.render(context, writer);
break;
}
else
{
/* save the values - for now, just w/ ref to test */
if (child.getType() == ParserTreeConstants.JJTREFERENCE)
{
data.put(child, child.execute(null, context));
}
else
{
System.out.println("unhandled type");
}
}
}
Iterator it = data.keySet().iterator();
while(it.hasNext())
{
ASTReference ref = (ASTReference) it.next();
ref.setValue(context, data.get(ref));
}
return true;
}
}
1.1 jakarta-velocity/contrib/temporary/localdirective/foo.vm
Index: foo.vm
===================================================================
#set($foo = 1)
$foo
#local( $foo)
$foo
#set($foo = 2)
$foo
#local($foo)
#set($foo = 5)
$foo
#end
$foo
#end
$foo
1.1 jakarta-velocity/contrib/temporary/localdirective/readme.txt
Index: readme.txt
===================================================================
This is an implementation of a #local() directive.
Use :
#local($arg $arg1...)
#end
and the values for $arg etc will be 'protected' - the will be the same
after the block as before. Currently this is limited to references $<foo>
1.1 jakarta-velocity/contrib/temporary/localdirective/recurse.vm
Index: recurse.vm
===================================================================
#macro(foo $value)
$value
#if ($value > 0)
#set($value = $value - 1)
#foo($value)
#end
$value
#end
#macro(foofoo $value)
$value
#local($value)
#if ($value > 0)
#set($value = $value - 1)
#foofoo($value)
#end
#end
$value
#end
#foo(5)
#foofoo(5)
1.1 jakarta-velocity/contrib/temporary/localdirective/velocity.properties
Index: velocity.properties
===================================================================
userdirective=LocalDirective
---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-dev-help@jakarta.apache.org
Re: cvs commit: jakarta-velocity/contrib/temporary/localdirective LocalDirective.java foo.vm readme.txt recurse.vm velocity.properties
Posted by "Geir Magnusson Jr." <ge...@optonline.net>.
indeed. Been switching to a new box now that I'm done with Adeptra and
have to give the pb17 back. I guess I've screwed up some settings in
Idea.
Thx
Will fix
On Wednesday, October 22, 2003, at 07:25 PM, Daniel Rall wrote:
> The indentation appears to be horked. Tab problem, perhaps?
>
> geirm@apache.org wrote:
>> geirm 2003/10/22 12:31:22
>> Added: contrib/temporary/localdirective LocalDirective.java
>> foo.vm
>> readme.txt recurse.vm velocity.properties
>> Log:
>> A little directive to protect references
>> Revision Changes Path
>> 1.1
>> jakarta-velocity/contrib/temporary/localdirective/LocalDirective.java
>> Index: LocalDirective.java
>> ===================================================================
>> /*
>> * The Apache Software License, Version 1.1
>> *
>> * Copyright (c) 2003 The Apache Software Foundation. All rights
>> * reserved.
>> *
>> * Redistribution and use in source and binary forms, with or
>> without
>> * modification, are permitted provided that the following
>> conditions
>> * are met:
>> *
>> * 1. Redistributions of source code must retain the above copyright
>> * notice, this list of conditions and the following disclaimer.
>> *
>> * 2. Redistributions in binary form must reproduce the above
>> copyright
>> * notice, this list of conditions and the following disclaimer
>> in
>> * the documentation and/or other materials provided with the
>> * distribution.
>> *
>> * 3. The end-user documentation included with the redistribution,
>> if
>> * any, must include the following acknowlegement:
>> * "This product includes software developed by the
>> * Apache Software Foundation (http://www.apache.org/)."
>> * Alternately, this acknowlegement may appear in the software
>> itself,
>> * if and wherever such third-party acknowlegements normally
>> appear.
>> *
>> * 4. The names "The Jakarta Project", "Velocity", and "Apache
>> Software
>> * Foundation" must not be used to endorse or promote products
>> derived
>> * from this software without prior written permission. For
>> written
>> * permission, please contact apache@apache.org.
>> *
>> * 5. Products derived from this software may not be called "Apache"
>> * nor may "Apache" appear in their names without prior written
>> * permission of the Apache Group.
>> *
>> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
>> AND
>> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
>> LIABILITY,
>> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
>> OUT
>> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
>> OF
>> * SUCH DAMAGE.
>> *
>> ====================================================================
>> *
>> * This software consists of voluntary contributions made by many
>> * individuals on behalf of the Apache Software Foundation. For
>> more
>> * information on the Apache Software Foundation, please see
>> * <http://www.apache.org/>.
>> */
>> import org.apache.velocity.context.InternalContextAdapter;
>> import org.apache.velocity.runtime.parser.node.Node;
>> import org.apache.velocity.runtime.parser.node.SimpleNode;
>> import org.apache.velocity.runtime.directive.Directive;
>> import org.apache.velocity.runtime.parser.ParserTreeConstants;
>> import org.apache.velocity.exception.MethodInvocationException;
>> import org.apache.velocity.exception.ResourceNotFoundException;
>> import org.apache.velocity.exception.ParseErrorException;
>> import org.apache.velocity.runtime.parser.node.ASTReference;
>> import java.io.Writer;
>> import java.io.IOException;
>> import java.util.Map;
>> import java.util.HashMap;
>> import java.util.Iterator;
>> /**
>> * Simple directive to provide ability to trap a local value for
>> * iteration.
>> *
>> * Ex :
>> *
>> * #set($foo = 1)
>> * $foo
>> * #local($foo)
>> * #set($foo = 2)
>> * $foo
>> * #end
>> * $foo
>> *
>> * should output
>> *
>> * 1
>> * 2
>> * 1
>> *
>> * @author <a href="mailto:geirm@optonline.net">Geir Magnusson
>> Jr.</a>
>> * @version $Id: LocalDirective.java,v 1.1 2003/10/22 19:31:22
>> geirm Exp $ */
>> public class LocalDirective extends Directive
>> {
>> public String getName()
>> {
>> return "local";
>> }
>> public int getType()
>> {
>> return BLOCK;
>> }
>> public boolean render(InternalContextAdapter context,
>> Writer writer, Node node)
>> throws IOException, MethodInvocationException,
>> ResourceNotFoundException,
>> ParseErrorException
>> {
>> Map data = new HashMap();
>> int num = node.jjtGetNumChildren();
>> /*
>> * get the references
>> */
>> for (int i=0; i < num; i++)
>> {
>> SimpleNode child = (SimpleNode) node.jjtGetChild(i);
>> /*
>> * if a block, just execute
>> */
>> if (child.getType() ==
>> ParserTreeConstants.JJTBLOCK)
>> {
>> child.render(context, writer);
>> break;
>> }
>> else
>> {
>> /* save the values - for now, just w/ ref to
>> test */
>> if (child.getType() ==
>> ParserTreeConstants.JJTREFERENCE)
>> {
>> data.put(child, child.execute(null,
>> context));
>> }
>> else
>> {
>> System.out.println("unhandled type");
>> }
>> }
>> }
>> Iterator it = data.keySet().iterator();
>> while(it.hasNext())
>> {
>> ASTReference ref = (ASTReference) it.next();
>> ref.setValue(context, data.get(ref));
>> }
>> return true;
>> }
>> }
>> 1.1
>> jakarta-velocity/contrib/temporary/localdirective/foo.vm
>> Index: foo.vm
>> ===================================================================
>> #set($foo = 1)
>> $foo
>> #local( $foo)
>> $foo
>> #set($foo = 2)
>> $foo
>> #local($foo)
>> #set($foo = 5)
>> $foo
>> #end
>> $foo
>> #end
>> $foo
>> 1.1
>> jakarta-velocity/contrib/temporary/localdirective/readme.txt
>> Index: readme.txt
>> ===================================================================
>> This is an implementation of a #local() directive.
>> Use :
>> #local($arg $arg1...)
>> #end
>> and the values for $arg etc will be 'protected' - the will be the
>> same
>> after the block as before. Currently this is limited to references
>> $<foo>
>> 1.1
>> jakarta-velocity/contrib/temporary/localdirective/recurse.vm
>> Index: recurse.vm
>> ===================================================================
>> #macro(foo $value)
>> $value
>> #if ($value > 0)
>> #set($value = $value - 1)
>> #foo($value)
>> #end
>> $value
>> #end
>> #macro(foofoo $value)
>> $value
>> #local($value)
>> #if ($value > 0)
>> #set($value = $value - 1)
>> #foofoo($value)
>> #end
>> #end
>> $value
>> #end
>> #foo(5)
>> #foofoo(5)
>> 1.1
>> jakarta-velocity/contrib/temporary/localdirective/velocity.properties
>> Index: velocity.properties
>> ===================================================================
>> userdirective=LocalDirective
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: velocity-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: velocity-dev-help@jakarta.apache.org
>
>
--
Geir Magnusson Jr 203-247-1713(m)
geirm@optonline.net
---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-dev-help@jakarta.apache.org
Re: cvs commit: jakarta-velocity/contrib/temporary/localdirective
LocalDirective.java foo.vm readme.txt recurse.vm velocity.properties
Posted by Daniel Rall <dl...@finemaltcoding.com>.
The indentation appears to be horked. Tab problem, perhaps?
geirm@apache.org wrote:
> geirm 2003/10/22 12:31:22
>
> Added: contrib/temporary/localdirective LocalDirective.java foo.vm
> readme.txt recurse.vm velocity.properties
> Log:
> A little directive to protect references
>
> Revision Changes Path
> 1.1 jakarta-velocity/contrib/temporary/localdirective/LocalDirective.java
>
> Index: LocalDirective.java
> ===================================================================
> /*
> * The Apache Software License, Version 1.1
> *
> * Copyright (c) 2003 The Apache Software Foundation. All rights
> * reserved.
> *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following conditions
> * are met:
> *
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> *
> * 2. Redistributions in binary form must reproduce the above copyright
> * notice, this list of conditions and the following disclaimer in
> * the documentation and/or other materials provided with the
> * distribution.
> *
> * 3. The end-user documentation included with the redistribution, if
> * any, must include the following acknowlegement:
> * "This product includes software developed by the
> * Apache Software Foundation (http://www.apache.org/)."
> * Alternately, this acknowlegement may appear in the software itself,
> * if and wherever such third-party acknowlegements normally appear.
> *
> * 4. The names "The Jakarta Project", "Velocity", and "Apache Software
> * Foundation" must not be used to endorse or promote products derived
> * from this software without prior written permission. For written
> * permission, please contact apache@apache.org.
> *
> * 5. Products derived from this software may not be called "Apache"
> * nor may "Apache" appear in their names without prior written
> * permission of the Apache Group.
> *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> * SUCH DAMAGE.
> * ====================================================================
> *
> * This software consists of voluntary contributions made by many
> * individuals on behalf of the Apache Software Foundation. For more
> * information on the Apache Software Foundation, please see
> * <http://www.apache.org/>.
> */
>
>
> import org.apache.velocity.context.InternalContextAdapter;
> import org.apache.velocity.runtime.parser.node.Node;
> import org.apache.velocity.runtime.parser.node.SimpleNode;
> import org.apache.velocity.runtime.directive.Directive;
> import org.apache.velocity.runtime.parser.ParserTreeConstants;
> import org.apache.velocity.exception.MethodInvocationException;
> import org.apache.velocity.exception.ResourceNotFoundException;
> import org.apache.velocity.exception.ParseErrorException;
>
> import org.apache.velocity.runtime.parser.node.ASTReference;
>
> import java.io.Writer;
> import java.io.IOException;
> import java.util.Map;
> import java.util.HashMap;
> import java.util.Iterator;
>
>
> /**
> * Simple directive to provide ability to trap a local value for
> * iteration.
> *
> * Ex :
> *
> * #set($foo = 1)
> * $foo
> * #local($foo)
> * #set($foo = 2)
> * $foo
> * #end
> * $foo
> *
> * should output
> *
> * 1
> * 2
> * 1
> *
> * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
> * @version $Id: LocalDirective.java,v 1.1 2003/10/22 19:31:22 geirm Exp $
> */
> public class LocalDirective extends Directive
> {
> public String getName()
> {
> return "local";
> }
>
> public int getType()
> {
> return BLOCK;
> }
>
> public boolean render(InternalContextAdapter context,
> Writer writer, Node node)
> throws IOException, MethodInvocationException, ResourceNotFoundException,
> ParseErrorException
> {
> Map data = new HashMap();
>
> int num = node.jjtGetNumChildren();
>
> /*
> * get the references
> */
>
> for (int i=0; i < num; i++)
> {
> SimpleNode child = (SimpleNode) node.jjtGetChild(i);
>
> /*
> * if a block, just execute
> */
>
> if (child.getType() == ParserTreeConstants.JJTBLOCK)
> {
> child.render(context, writer);
> break;
> }
> else
> {
> /* save the values - for now, just w/ ref to test */
>
> if (child.getType() == ParserTreeConstants.JJTREFERENCE)
> {
> data.put(child, child.execute(null, context));
> }
> else
> {
> System.out.println("unhandled type");
> }
> }
> }
>
> Iterator it = data.keySet().iterator();
>
> while(it.hasNext())
> {
> ASTReference ref = (ASTReference) it.next();
>
> ref.setValue(context, data.get(ref));
> }
>
> return true;
> }
> }
>
>
>
> 1.1 jakarta-velocity/contrib/temporary/localdirective/foo.vm
>
> Index: foo.vm
> ===================================================================
> #set($foo = 1)
> $foo
> #local( $foo)
> $foo
> #set($foo = 2)
> $foo
>
> #local($foo)
> #set($foo = 5)
> $foo
> #end
>
> $foo
>
> #end
>
> $foo
>
>
>
>
> 1.1 jakarta-velocity/contrib/temporary/localdirective/readme.txt
>
> Index: readme.txt
> ===================================================================
> This is an implementation of a #local() directive.
>
> Use :
>
> #local($arg $arg1...)
>
>
> #end
>
> and the values for $arg etc will be 'protected' - the will be the same
> after the block as before. Currently this is limited to references $<foo>
>
>
>
>
> 1.1 jakarta-velocity/contrib/temporary/localdirective/recurse.vm
>
> Index: recurse.vm
> ===================================================================
> #macro(foo $value)
> $value
> #if ($value > 0)
> #set($value = $value - 1)
> #foo($value)
> #end
> $value
> #end
>
> #macro(foofoo $value)
> $value
> #local($value)
> #if ($value > 0)
> #set($value = $value - 1)
> #foofoo($value)
> #end
> #end
> $value
> #end
>
>
> #foo(5)
> #foofoo(5)
>
>
>
> 1.1 jakarta-velocity/contrib/temporary/localdirective/velocity.properties
>
> Index: velocity.properties
> ===================================================================
> userdirective=LocalDirective
---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-dev-help@jakarta.apache.org