package org.jetbrains.ether; import java.io.BufferedWriter; import java.io.PrintStream; /** * Created by IntelliJ IDEA. * User: db * Date: 18.01.11 * Time: 6:33 * To change this template use File | Settings | File Templates. */ public class DotPrinter { private final PrintStream stream; public DotPrinter(final PrintStream stream) { this.stream = stream; } private static String escape(final String s) { final StringBuilder b = new StringBuilder(); for (int i = 0; i < s.length(); i++) { final char c = s.charAt(i); if (c == '_' || Character.isDigit(c) || Character.isLetter(c)) { b.append(c); } else if (c == '-') { b.append('_'); } else { b.append(Character.getNumericValue(c)); } } return b.toString(); } public static void header(final PrintStream s) { if (s != null) s.println("digraph X {"); } public void header() { header(stream); } public static void footer(final PrintStream s) { if (s != null) s.println("}"); } public void footer() { footer(stream); } public static void node(final PrintStream s, String n) { if (s != null) { n = escape(n); s.println(" " + n + "[label=\"" + n + "\"];"); } } public void node(final String n) { node(stream, n); } public static void edge(final PrintStream s, String b, String e) { if (s != null) { b = escape(b); e = escape(e); s.println(" " + b + " -> " + e + ";"); } } public void edge(final String b, final String e) { edge(stream, b, e); } }