mindmapprinter.java
来自「Groovy动态语言 运行在JVM中的动态语言 可以方便的处理业务逻辑变化大的业」· Java 代码 · 共 361 行 · 第 1/2 页
JAVA
361 行
/**
*
* 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 org.codehaus.groovy.antlr.GroovySourceAST;
import org.codehaus.groovy.antlr.parser.GroovyTokenTypes;
/**
* An antlr AST visitor that prints a format suitable for viewing in http://freemind.sourceforge.net
*
* @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
* @version $Revision: 4526 $
*/
public class MindMapPrinter extends VisitorAdapter {
private String[] tokenNames;
private PrintStream out;
private int depth;
/**
* A visitor that prints a format suitable for viewing in http://freemind.sourceforge.net
* @param out where to print the mindmap file contents to
* @param tokenNames an array of token names from antlr
*/
public MindMapPrinter(PrintStream out,String[] tokenNames) {
this.tokenNames = tokenNames;
this.out = out;
}
public void setUp() {
depth = 0;
out.println("<map version='0.7.1'><node TEXT='AST'>");
}
public void visitDefault(GroovySourceAST t,int visit) {
if (visit == OPENING_VISIT) {
depth++;
String name = getName(t);
String colour = getColour(t);
String folded = getFolded(t);
out.print("<node TEXT='" + name + "' POSITION='right'" + colour + folded + ">");
} else {
out.println("</node>");
depth--;
}
}
public void tearDown() {
out.println("</node></map>");
}
private String getFolded(GroovySourceAST t) {
if (depth > 2 && t.getNumberOfChildren() > 0) {
switch (t.getType()) {
case GroovyTokenTypes.EXPR :
case GroovyTokenTypes.METHOD_DEF :
case GroovyTokenTypes.VARIABLE_DEF :
return " FOLDED='true'";
}
}
if (t.getType() == GroovyTokenTypes.IMPORT) {
return " FOLDED='true'";
}
return "";
}
private String getColour(GroovySourceAST t) {
String colour = "";
String black = " COLOR=\"#000000\"";
String cyan = " COLOR=\"#006699\"";
String blue = " COLOR=\"#17178B\"";
String green = " COLOR=\"#008000\"";
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.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 :
case GroovyTokenTypes.NUM_BIG_INT :
case GroovyTokenTypes.NUM_DOUBLE :
case GroovyTokenTypes.NUM_FLOAT :
case GroovyTokenTypes.NUM_INT :
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?