01: /*
02: [The "BSD licence"]
03: Copyright (c) 2003-2005 Terence Parr
04: All rights reserved.
05:
06: Redistribution and use in source and binary forms, with or without
07: modification, are permitted provided that the following conditions
08: are met:
09: 1. Redistributions of source code must retain the above copyright
10: notice, this list of conditions and the following disclaimer.
11: 2. Redistributions in binary form must reproduce the above copyright
12: notice, this list of conditions and the following disclaimer in the
13: documentation and/or other materials provided with the distribution.
14: 3. The name of the author may not be used to endorse or promote products
15: derived from this software without specific prior written permission.
16:
17: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27: */
28: package org.antlr.stringtemplate.language;
29:
30: import org.antlr.stringtemplate.StringTemplate;
31: import org.antlr.stringtemplate.StringTemplateGroup;
32: import org.antlr.stringtemplate.StringTemplateWriter;
33:
34: import java.io.Writer;
35: import java.io.IOException;
36: import java.util.Hashtable;
37: import java.util.Enumeration;
38:
39: /** A string template expression embedded within the template.
40: * A template is parsed into a tokenized vector of Expr objects
41: * and then executed after the user sticks in attribute values.
42: *
43: * This list of Expr objects represents a "program" for the StringTemplate
44: * evaluator.
45: */
46: abstract public class Expr {
47: /** The StringTemplate object surrounding this expr */
48: protected StringTemplate enclosingTemplate;
49:
50: /** Any thing spit out as a chunk (even plain text) must be indented
51: * according to whitespace before the action that generated it. So,
52: * plain text in the outermost template is never indented, but the
53: * text and attribute references in a nested template will all be
54: * indented by the amount seen directly in front of the attribute
55: * reference that initiates construction of the nested template.
56: */
57: protected String indentation = null;
58:
59: public Expr(StringTemplate enclosingTemplate) {
60: this .enclosingTemplate = enclosingTemplate;
61: }
62:
63: /** How to write this node to output; return how many char written */
64: abstract public int write(StringTemplate self,
65: StringTemplateWriter out) throws IOException;
66:
67: public StringTemplate getEnclosingTemplate() {
68: return enclosingTemplate;
69: }
70:
71: public String getIndentation() {
72: return indentation;
73: }
74:
75: public void setIndentation(String indentation) {
76: this.indentation = indentation;
77: }
78: }
|