1 package org.apache.velocity.runtime.visitor;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.velocity.runtime.parser.Token;
23 import org.apache.velocity.runtime.parser.node.ASTAddNode;
24 import org.apache.velocity.runtime.parser.node.ASTAndNode;
25 import org.apache.velocity.runtime.parser.node.ASTAssignment;
26 import org.apache.velocity.runtime.parser.node.ASTBlock;
27 import org.apache.velocity.runtime.parser.node.ASTDirective;
28 import org.apache.velocity.runtime.parser.node.ASTDivNode;
29 import org.apache.velocity.runtime.parser.node.ASTEQNode;
30 import org.apache.velocity.runtime.parser.node.ASTElseIfStatement;
31 import org.apache.velocity.runtime.parser.node.ASTElseStatement;
32 import org.apache.velocity.runtime.parser.node.ASTEscape;
33 import org.apache.velocity.runtime.parser.node.ASTEscapedDirective;
34 import org.apache.velocity.runtime.parser.node.ASTExpression;
35 import org.apache.velocity.runtime.parser.node.ASTFalse;
36 import org.apache.velocity.runtime.parser.node.ASTFloatingPointLiteral;
37 import org.apache.velocity.runtime.parser.node.ASTGENode;
38 import org.apache.velocity.runtime.parser.node.ASTGTNode;
39 import org.apache.velocity.runtime.parser.node.ASTIdentifier;
40 import org.apache.velocity.runtime.parser.node.ASTIfStatement;
41 import org.apache.velocity.runtime.parser.node.ASTIntegerLiteral;
42 import org.apache.velocity.runtime.parser.node.ASTIntegerRange;
43 import org.apache.velocity.runtime.parser.node.ASTLENode;
44 import org.apache.velocity.runtime.parser.node.ASTLTNode;
45 import org.apache.velocity.runtime.parser.node.ASTMap;
46 import org.apache.velocity.runtime.parser.node.ASTMethod;
47 import org.apache.velocity.runtime.parser.node.ASTModNode;
48 import org.apache.velocity.runtime.parser.node.ASTMulNode;
49 import org.apache.velocity.runtime.parser.node.ASTNENode;
50 import org.apache.velocity.runtime.parser.node.ASTNotNode;
51 import org.apache.velocity.runtime.parser.node.ASTObjectArray;
52 import org.apache.velocity.runtime.parser.node.ASTOrNode;
53 import org.apache.velocity.runtime.parser.node.ASTReference;
54 import org.apache.velocity.runtime.parser.node.ASTSetDirective;
55 import org.apache.velocity.runtime.parser.node.ASTStop;
56 import org.apache.velocity.runtime.parser.node.ASTStringLiteral;
57 import org.apache.velocity.runtime.parser.node.ASTSubtractNode;
58 import org.apache.velocity.runtime.parser.node.ASTText;
59 import org.apache.velocity.runtime.parser.node.ASTTrue;
60 import org.apache.velocity.runtime.parser.node.ASTWord;
61 import org.apache.velocity.runtime.parser.node.ASTprocess;
62 import org.apache.velocity.runtime.parser.node.Node;
63 import org.apache.velocity.runtime.parser.node.SimpleNode;
64
65
66
67
68
69
70
71
72
73
74
75
76 public class NodeViewMode extends BaseVisitor
77 {
78 private int indent = 0;
79 private boolean showTokens = true;
80
81
82
83
84 private String indentString()
85 {
86 StringBuffer sb = new StringBuffer();
87 for (int i = 0; i < indent; ++i)
88 {
89 sb.append(" ");
90 }
91 return sb.toString();
92 }
93
94
95
96
97
98 private Object showNode(Node node, Object data)
99 {
100 String tokens = "";
101 String special = "";
102 Token t;
103
104 if (showTokens)
105 {
106 t = node.getFirstToken();
107
108 if (t.specialToken != null && ! t.specialToken.image.startsWith("##"))
109 special = t.specialToken.image;
110
111 tokens = " -> " + special + t.image;
112 }
113
114 System.out.println(indentString() + node + tokens);
115 ++indent;
116 data = node.childrenAccept(this, data);
117 --indent;
118 return data;
119 }
120
121
122
123
124 public Object visit(SimpleNode node, Object data)
125 {
126 return showNode(node,data);
127 }
128
129
130
131
132 public Object visit(ASTprocess node, Object data)
133 {
134 return showNode(node,data);
135 }
136
137
138
139
140 public Object visit(ASTExpression node, Object data)
141 {
142 return showNode(node,data);
143 }
144
145
146
147
148 public Object visit(ASTAssignment node, Object data)
149 {
150 return showNode(node,data);
151 }
152
153
154
155
156 public Object visit(ASTOrNode node, Object data)
157 {
158 return showNode(node,data);
159 }
160
161
162
163
164 public Object visit(ASTAndNode node, Object data)
165 {
166 return showNode(node,data);
167 }
168
169
170
171
172 public Object visit(ASTEQNode node, Object data)
173 {
174 return showNode(node,data);
175 }
176
177
178
179
180 public Object visit(ASTNENode node, Object data)
181 {
182 return showNode(node,data);
183 }
184
185
186
187
188 public Object visit(ASTLTNode node, Object data)
189 {
190 return showNode(node,data);
191 }
192
193
194
195
196 public Object visit(ASTGTNode node, Object data)
197 {
198 return showNode(node,data);
199 }
200
201
202
203
204 public Object visit(ASTLENode node, Object data)
205 {
206 return showNode(node,data);
207 }
208
209
210
211
212 public Object visit(ASTGENode node, Object data)
213 {
214 return showNode(node,data);
215 }
216
217
218
219
220 public Object visit(ASTAddNode node, Object data)
221 {
222 return showNode(node,data);
223 }
224
225
226
227
228 public Object visit(ASTSubtractNode node, Object data)
229 {
230 return showNode(node,data);
231 }
232
233
234
235
236 public Object visit(ASTMulNode node, Object data)
237 {
238 return showNode(node,data);
239 }
240
241
242
243
244 public Object visit(ASTDivNode node, Object data)
245 {
246 return showNode(node,data);
247 }
248
249
250
251
252 public Object visit(ASTModNode node, Object data)
253 {
254 return showNode(node,data);
255 }
256
257
258
259
260 public Object visit(ASTNotNode node, Object data)
261 {
262 return showNode(node,data);
263 }
264
265
266
267
268 public Object visit(ASTFloatingPointLiteral node, Object data)
269 {
270 return showNode(node,data);
271 }
272
273
274
275
276
277 public Object visit(ASTIntegerLiteral node, Object data)
278 {
279 return showNode(node,data);
280 }
281
282
283
284
285 public Object visit(ASTStringLiteral node, Object data)
286 {
287 return showNode(node,data);
288 }
289
290
291
292
293 public Object visit(ASTIdentifier node, Object data)
294 {
295 return showNode(node,data);
296 }
297
298
299
300
301 public Object visit(ASTMethod node, Object data)
302 {
303 return showNode(node,data);
304 }
305
306
307
308
309 public Object visit(ASTReference node, Object data)
310 {
311 return showNode(node,data);
312 }
313
314
315
316
317 public Object visit(ASTTrue node, Object data)
318 {
319 return showNode(node,data);
320 }
321
322
323
324
325 public Object visit(ASTFalse node, Object data)
326 {
327 return showNode(node,data);
328 }
329
330
331
332
333 public Object visit(ASTBlock node, Object data)
334 {
335 return showNode(node,data);
336 }
337
338
339
340
341 public Object visit(ASTText node, Object data)
342 {
343 return showNode(node,data);
344 }
345
346
347
348
349 public Object visit(ASTIfStatement node, Object data)
350 {
351 return showNode(node,data);
352 }
353
354
355
356
357 public Object visit(ASTElseStatement node, Object data)
358 {
359 return showNode(node,data);
360 }
361
362
363
364
365 public Object visit(ASTElseIfStatement node, Object data)
366 {
367 return showNode(node,data);
368 }
369
370
371
372
373 public Object visit(ASTObjectArray node, Object data)
374 {
375 return showNode(node,data);
376 }
377
378
379
380
381 public Object visit(ASTDirective node, Object data)
382 {
383 return showNode(node,data);
384 }
385
386
387
388
389 public Object visit(ASTWord node, Object data)
390 {
391 return showNode(node,data);
392 }
393
394
395
396
397 public Object visit(ASTSetDirective node, Object data)
398 {
399 return showNode(node,data);
400 }
401
402
403
404
405
406 public Object visit(ASTEscapedDirective node, Object data)
407 {
408 return showNode(node,data);
409 }
410
411
412
413
414
415 public Object visit(ASTEscape node, Object data)
416 {
417 return showNode(node,data);
418 }
419
420
421
422
423
424 public Object visit(ASTMap node, Object data)
425 {
426 return showNode(node,data);
427 }
428
429
430
431
432 public Object visit(ASTIntegerRange node, Object data)
433 {
434 return showNode(node,data);
435 }
436
437
438
439
440
441 public Object visit(ASTStop node, Object data)
442 {
443 return showNode(node,data);
444 }
445 }