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...@locus.apache.org on 2000/11/28 05:37:34 UTC
cvs commit: jakarta-velocity/src/java/org/apache/velocity/runtime/parser/node ASTStringLiteral.java
geirm 00/11/27 20:37:33
Modified: src/java/org/apache/velocity/runtime/parser/node
ASTStringLiteral.java
Log:
Changed the method to support interpolation. It now will interpolate in a string literal any valid VTL :)
Revision Changes Path
1.3 +124 -6 jakarta-velocity/src/java/org/apache/velocity/runtime/parser/node/ASTStringLiteral.java
Index: ASTStringLiteral.java
===================================================================
RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/node/ASTStringLiteral.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ASTStringLiteral.java 2000/11/28 02:29:12 1.2
+++ ASTStringLiteral.java 2000/11/28 04:37:32 1.3
@@ -1,10 +1,77 @@
/* Generated By:JJTree: Do not edit this line. ASTStringLiteral.java */
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000 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", "Tomcat", 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/>.
+ */
+
+/**
+ * ASTStringLiteral support. Will interpolate!
+ *
+ * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
+ * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
+ * @version $Id: ASTStringLiteral.java,v 1.3 2000/11/28 04:37:32 geirm Exp $
+ */
+
package org.apache.velocity.runtime.parser.node;
import org.apache.velocity.Context;
import org.apache.velocity.runtime.parser.*;
+import java.io.StringWriter;
+import java.io.ByteArrayInputStream;
+import org.apache.velocity.runtime.Runtime;
+import org.apache.velocity.runtime.RuntimeConstants;
+
public class ASTStringLiteral extends SimpleNode
{
public ASTStringLiteral(int id)
@@ -23,15 +90,66 @@
return visitor.visit(this, data);
}
+ /**
+ * renders the value of the string literal
+ * If the properties allow, and the string literal contains a $ or a #
+ * the literal is rendered against the context
+ * Otherwise, the stringlit is returned.
+ */
public Object value(Context context)
{
/*
- * This will remove the quotes and then interpolate
- * any variables from the context into the
- * the string.
+ * check to see if there are anything that might be a reference or directive in the string
*/
- return NodeUtils.interpolate(
- getFirstToken().image.substring(
- 1, getFirstToken().image.length() - 1), context);
+
+ if ( Runtime.getBoolean(RuntimeConstants.INTERPOLATE_STRINGLITERALS , true) &&
+ ( getFirstToken().image.indexOf("$") != -1 || getFirstToken().image.indexOf("#") != -1 ) )
+ {
+ /*
+ * if so, and allowed, parse() and render()
+ * In the future, we will get stringlits parsed into the AST at template parse time
+ */
+
+ ByteArrayInputStream inStream = new ByteArrayInputStream( getFirstToken().image.substring(1, getFirstToken().image.length() - 1).getBytes() );
+
+ try
+ {
+ /*
+ * parse the stringlit
+ */
+ SimpleNode nodeTree_ = Runtime.parse( inStream );
+
+ /*
+ * init with a cloned context
+ */
+ Context ctxt = (Context) context.clone();
+ nodeTree_.init( ctxt, null );
+
+ /*
+ * now render against the real context
+ */
+ StringWriter writer = new StringWriter();
+ nodeTree_.render(context, writer );
+
+ /*
+ * and return the result as a String
+ */
+ return writer.toString();
+ }
+ catch( Exception e )
+ {
+ /* eh. If anything wrong, just punt and output the literal */
+ Runtime.error("Error in interpolating string literal : " + e );
+ }
+ }
+
+ /*
+ * ok, either not allowed to interpolate, there wasn't a ref or directive, or we failed, so
+ * just output the literal
+ */
+
+ return getFirstToken().image.substring(1, getFirstToken().image.length() - 1);
+
}
}
+