nodeashtmlprinter.java
来自「Groovy动态语言 运行在JVM中的动态语言 可以方便的处理业务逻辑变化大的业」· Java 代码 · 共 315 行 · 第 1/2 页
JAVA
315 行
/**
*
* Copyright 2005 Jeremy Rayner
*
* 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.
*
**/
package org.codehaus.groovy.antlr.treewalker;
import java.io.PrintStream;
import java.util.Stack;
import org.codehaus.groovy.antlr.GroovySourceAST;
import org.codehaus.groovy.antlr.parser.GroovyTokenTypes;
/**
* A visitor that prints a html tags of each node to the supplied PrintStream
*
* @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
* @version $Revision: 4526 $
*/
public class NodeAsHTMLPrinter extends VisitorAdapter {
private String[] tokenNames;
private PrintStream out;
private Stack stack;
/**
* A visitor that prints a html tags, for each node, to the supplied PrintStream.
* @param out supplied PrintStream to output nodes to
* @param tokenNames an array of token names to use
*/
public NodeAsHTMLPrinter(PrintStream out,String[] tokenNames) {
this.tokenNames = tokenNames;
this.out = out;
this.stack = new Stack();
}
public void setUp() {
out.println("<html><head></head><body><pre>");
}
public void visitDefault(GroovySourceAST t,int visit) {
if (visit == OPENING_VISIT) {
out.print("<code title='" + tokenNames[t.getType()] + "'><font color='#" + colour(t) + "'>");
} else {
out.print("</font></code>");
}
}
public void tearDown() {
out.println("</pre></body></html>");
}
private String colour(GroovySourceAST t) {
String black = "000000";
String blue = "17178B";
String green = "008000";
//String purple = "7C308D";
String colour = black;
switch (t.getType()) {
case GroovyTokenTypes.ABSTRACT :
case GroovyTokenTypes.ANNOTATION :
case GroovyTokenTypes.ANNOTATIONS :
case GroovyTokenTypes.ANNOTATION_ARRAY_INIT :
case GroovyTokenTypes.ANNOTATION_DEF :
case GroovyTokenTypes.ANNOTATION_FIELD_DEF :
case GroovyTokenTypes.ANNOTATION_MEMBER_VALUE_PAIR :
case GroovyTokenTypes.ARRAY_DECLARATOR :
case GroovyTokenTypes.ASSIGN :
case GroovyTokenTypes.AT :
case GroovyTokenTypes.BAND :
case GroovyTokenTypes.BAND_ASSIGN :
case GroovyTokenTypes.BIG_SUFFIX :
case GroovyTokenTypes.BLOCK :
case GroovyTokenTypes.BNOT :
case GroovyTokenTypes.BOR :
case GroovyTokenTypes.BOR_ASSIGN :
case GroovyTokenTypes.BSR :
case GroovyTokenTypes.BSR_ASSIGN :
case GroovyTokenTypes.BXOR :
case GroovyTokenTypes.BXOR_ASSIGN :
case GroovyTokenTypes.CASE_GROUP :
case GroovyTokenTypes.CLOSABLE_BLOCK :
case GroovyTokenTypes.CLOSABLE_BLOCK_OP :
case GroovyTokenTypes.COLON :
case GroovyTokenTypes.COMMA :
case GroovyTokenTypes.COMPARE_TO :
case GroovyTokenTypes.CTOR_CALL :
case GroovyTokenTypes.CTOR_IDENT :
case GroovyTokenTypes.DEC :
case GroovyTokenTypes.DIGIT :
case GroovyTokenTypes.DIV :
case GroovyTokenTypes.DIV_ASSIGN :
case GroovyTokenTypes.DOLLAR :
case GroovyTokenTypes.DOT :
case GroovyTokenTypes.DYNAMIC_MEMBER :
case GroovyTokenTypes.ELIST :
case GroovyTokenTypes.EMPTY_STAT :
case GroovyTokenTypes.ENUM_CONSTANT_DEF :
case GroovyTokenTypes.ENUM_DEF :
case GroovyTokenTypes.EOF :
case GroovyTokenTypes.EQUAL :
case GroovyTokenTypes.ESC :
case GroovyTokenTypes.EXPONENT :
case GroovyTokenTypes.EXPR :
case GroovyTokenTypes.FINAL :
case GroovyTokenTypes.FLOAT_SUFFIX :
case GroovyTokenTypes.FOR_CONDITION :
case GroovyTokenTypes.FOR_EACH_CLAUSE :
case GroovyTokenTypes.FOR_INIT :
case GroovyTokenTypes.FOR_IN_ITERABLE :
case GroovyTokenTypes.FOR_ITERATOR :
case GroovyTokenTypes.GE :
case GroovyTokenTypes.GT :
case GroovyTokenTypes.HEX_DIGIT :
case GroovyTokenTypes.IDENT :
case GroovyTokenTypes.IMPLICIT_PARAMETERS :
case GroovyTokenTypes.INC :
case GroovyTokenTypes.INDEX_OP :
case GroovyTokenTypes.INSTANCE_INIT :
case GroovyTokenTypes.INTERFACE_DEF :
case GroovyTokenTypes.LABELED_ARG :
case GroovyTokenTypes.LABELED_STAT :
case GroovyTokenTypes.LAND :
case GroovyTokenTypes.LBRACK :
case GroovyTokenTypes.LCURLY :
case GroovyTokenTypes.LE :
case GroovyTokenTypes.LETTER :
case GroovyTokenTypes.LIST_CONSTRUCTOR :
case GroovyTokenTypes.LNOT :
case GroovyTokenTypes.LOR :
case GroovyTokenTypes.LPAREN :
case GroovyTokenTypes.LT :
case GroovyTokenTypes.MAP_CONSTRUCTOR :
case GroovyTokenTypes.MEMBER_POINTER :
case GroovyTokenTypes.METHOD_CALL :
case GroovyTokenTypes.METHOD_DEF :
case GroovyTokenTypes.MINUS :
case GroovyTokenTypes.MINUS_ASSIGN :
case GroovyTokenTypes.ML_COMMENT :
case GroovyTokenTypes.MOD :
case GroovyTokenTypes.MODIFIERS :
case GroovyTokenTypes.MOD_ASSIGN :
case GroovyTokenTypes.NLS :
case GroovyTokenTypes.NOT_EQUAL :
case GroovyTokenTypes.NULL_TREE_LOOKAHEAD :
case GroovyTokenTypes.NUM_BIG_DECIMAL :
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?