checkpoint
[sbp.git] / src / edu / berkeley / sbp / util / GraphViz.java
index ef08fae..d5f1bcf 100644 (file)
@@ -33,9 +33,14 @@ public class GraphViz {
             labels.add(label);
             n.inbound.add(this);
         }
+        public String getParentName() {
+            if (inbound.size()==1 && inbound.get(0).simple())
+                return inbound.get(0).getParentName();
+            return name();
+        }
         public String name() {
             if (inbound.size()==1 && inbound.get(0).simple())
-                return inbound.get(0).name()+":node_"+idx;
+                return inbound.get(0).getParentName()+":node_"+idx;
             return "node_"+idx;
         }
         public void edges(PrintWriter pw) {
@@ -43,7 +48,8 @@ public class GraphViz {
             for(int i=0; i<edges.size(); i++) {
                 Node n = edges.get(i);
                 Object label = labels.get(i);
-                pw.println("    "+name()+" -> " + n.name() + " [color="+color+" " +(label==null?"":("label=\""+label+"\""))+ "];\n");
+                pw.println("    "+name()+" -> " + n.name() + " [color="+color+" "
+                           +(label==null?"":("label=\""+StringUtil.escapify(label.toString(), "\\\"\r\n")+"\""))+ "];\n");
             }
         }
         public int numEdges() { return edges.size(); }
@@ -80,17 +86,17 @@ public class GraphViz {
                     if (!first) pw.print("|");
                     first = false;
                     pw.print("<node_"+n.idx+">");
-                    pw.print(StringUtil.escapify(n.label,"\\\""));
+                    pw.print(StringUtil.escapify(n.label,"\\\"\r\n"));
                 }
                 if (!complex) pw.print("}");
-                pw.print("\"");
+                pw.print("\" ");
             } else {
                 pw.print(" label=\"");
-                pw.print(StringUtil.escapify(label,"\\\""));
-                pw.print("\"");
+                pw.print(StringUtil.escapify(label,"\\\"\r\n"));
+                pw.print("\" ");
             }
             pw.print("color="+color);
-            if (comment!=null) pw.print(" comment=\""+StringUtil.escapify(comment,"\\\"")+"\" ");
+            if (comment!=null) pw.print(" comment=\""+StringUtil.escapify(comment,"\\\"\r\n")+"\" ");
             pw.print("];\n");
         }
     }
@@ -117,6 +123,7 @@ public class GraphViz {
         Runtime.getRuntime().exec(new String[] { "dot", "-Tsvg" });
     }
 
+    public void dump(OutputStream os) { dump(new PrintWriter(new OutputStreamWriter(os))); }
     public void dump(PrintWriter pw) {
         IdentityHashMap<Node,Node> done = new IdentityHashMap<Node,Node>();
         pw.println("digraph G { rankdir=LR; ordering=out; \n");