Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2003-2007 the original author or authors.
   *
   * 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;
 
 
An antlr AST visitor that prints a format suitable for viewing in http://freemind.sourceforge.net

Author(s):
Jeremy Rayner
Version:
$Revision: 8794 $
 
 
 public class MindMapPrinter extends VisitorAdapter {
     private final String[] tokenNames;
     private final PrintStream out;
     private int depth;
     private SourceBuffer sourceBuffer;

    
A visitor that prints a format suitable for viewing in http://freemind.sourceforge.net

Parameters:
out where to print the mindmap file contents to
tokenNames an array of token names from antlr
 
 
     public MindMapPrinter(PrintStream out,String[] tokenNames) {
         this. = tokenNames;
         this. = out;
     }
 
     public MindMapPrinter(PrintStream out,String[] tokenNamesSourceBuffer sourceBuffer) {
         this. = tokenNames;
         this. = out;
         this. = sourceBuffer;
     }
     public void setUp() {
          = 0;
         .println("<map version='0.7.1'><node TEXT='AST'>");
     }
 
     public void visitDefault(GroovySourceAST t,int visit) {
         if (visit == ) {
             ++;
             String name = getName(t);
             String colour = getColour(t);
             String folded = getFolded(t);
             .print("<node TEXT='" + name + "' POSITION='right'" + colour + folded + ">");
         } else if (visit == ) {
             .println("</node>");
             --;
         }
     }
 
     public void tearDown() {
         .println("</node></map>");
     }
 
     private String getFolded(GroovySourceAST t) {
         if ( > 2 && t.getNumberOfChildren() > 0) {
             switch (t.getType()) {
                 case . :
                 case . :
                 case . :
                     return " FOLDED='true'";
             }
         }
         if (t.getType() == .) {
             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 .                      :
             case .                    :
            case .                   :
            case .         :
            case .                :
            case .          :
            case .  :
            case .              :
            case .                        :
            case .                            :
            case .                          :
            case .                   :
            case .                    :
            case .                         :
            case .                          :
            case .                           :
            case .                    :
            case .                           :
            case .                    :
            case .                          :
            case .                   :
            case .                    :
            case .                :
            case .             :
            case .                         :
            case .                         :
            case .                    :
            case .                     :
            case .                    :
            case .                           :
            case .                         :
            case .                           :
            case .                    :
            case .                        :
            case .                           :
            case .                :
            case .                         :
            case .                    :
            case .             :
            case .                      :
            case .                           :
            case .                         :
            case .                           :
            case .                      :
            case .                          :
            case .                         :
            case .                  :
            case .                 :
            case .               :
            case .                      :
            case .               :
            case .                  :
            case .                            :
            case .                            :
            case .                     :
            case .           :
            case .                           :
            case .                      :
            case .                 :
            case .                 :
            case .                   :
            case .                  :
            case .                          :
            case .                        :
            case .                        :
            case .                            :
            case .                        :
            case .              :
            case .                          :
            case .                           :
            case .                        :
            case .                            :
            case .               :
            case .                :
            case .                   :
            case .                    :
            case .                         :
            case .                  :
            case .                    :
            case .                           :
            case .                     :
            case .                    :
            case .                           :
            case .                     :
            case .           :
            case .               :
            case .                   :
            case .                    :
            case .                     :
            case .                       :
            case .                      :
            case .                      :
            case .                        :
            case .                  :
            case .                    :
            case .                 :
            case .                          :
            case .                   :
            case .                      :
            case .                      :
            case .                      :
            case .               :
            case .               :
            case .                        :
            case .                        :
            case .               :
            case .                 :
            case .                    :
            case .                   :
            case .                        :
            case .                   :
            case .                          :
            case .                    :
            case .                            :
            case .                         :
            case .                     :
            case .                    :
            case .                    :
            case .                    :
            case .                :
            case .                            :
            case .                     :
            case .                          :
            case .                   :
            case .                     :
            case .              :
            case .                 :
            case .                   :
            case .                      :
            case .                     :
            case .            :
            case .               :
            case .            :
            case .             :
            case .                     :
            case .               :
            case .                    :
            case .                      :
            case .                 :
            case .                :
            case .             :
            case .                :
            case .               :
            case .             :
            case .                   :
            case .                    :
            case .                  :
            case .                     :
            case .                   :
            case .                  :
            case .        :
            case .                         :
            case .                 :
            case .                            :
                colour = black;
                break;
            case .                :
            case .                :
                colour = green;
                break;
            case .                     :
            case .                :
            case .             :
            case .                        :
            case .                    :
            case .                :
            case .               :
            case .                 :
            case .                  :
            case .                  :
            case .                 :
            case .                  :
            case .                 :
            case .              :
            case .                   :
            case .               :
            case .                :
            case .                  :
            case .                  :
            case .               :
            case .                 :
            case .               :
            case .                 :
            case .                   :
            case .                    :
            case .            :
            case .                :
            case .                    :
            case .            :
            case .                   :
            case .             :
            case .                  :
            case .                :
            case .                   :
            case .                  :
            case .               :
            case .               :
            case .             :
            case .                :
            case .                :
            case .                 :
            case .                :
            case .                 :
            case .                :
            case .          :
            case .                  :
            case .            :
            case .                 :
            case .                :
            case .             :
            case .                  :
            case .                   :
            case .                  :
            case .              :
            case .                 :
            case .                   :
            case .                          :
                colour = blue;
                break;
            case .                         :
                colour = cyan;
                break;
            default:
                colour = black;
                break;
        }
        // leaf nodes that haven't been coloured yet
        if (black.equals(colour) && t.getNumberOfChildren() == 0) {
            colour = cyan;
        }
        return colour;
    }
    private String getName(GroovySourceAST t) {
        String name = [t.getType()] + " <" + t.getType() + ">";
        if (!(escape([t.getType()]).equals(escape(t.getText())))) {
            name = name + " : " + t.getText();
        }
        switch (t.getType()) {
            case . :
            case . :
                GroovySourceAST identNode = t.childOfType(.);
                if (identNode != null) {
                    name = name + " : " + identNode.getText() + "";
                }
        }
        name = escape(name);
        if ( != null) {
            name += "&#xa;";
            name += t.getLine() + "," + t.getColumn() + " - " + t.getLineLast() + "," + t.getColumnLast();
            name += "&#xa;";
            name += escape(.getSnippet(new LineColumn(t.getLine(), t.getColumn()), new LineColumn(t.getLineLast(), t.getColumnLast())));
        }
        return name;
    }
    private String escape(String name) {
        if (name == nullreturn null;
        // remove middle of large bits of text
        if (name.length() > 200) {
            name = name.substring(0,100) + " ..... " + name.substring(name.length() - 100);
        }
        name = name.replace('"',' ');
        name = name.replace('\'',' ');
        name = name.replaceAll("&","&amp;");
        name = name.replaceAll("<","&lt;");
        name = name.replaceAll(">","&gt;");
        name = name.trim();
        return name;
    }
New to GrepCode? Check out our FAQ X