X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FPrintableTree.java;h=180d2eaaf83fe3a46a895bae9d7a2bdece9bf510;hp=73b7f0281dfbf726f35d6ccc2d8b6e65bdb134bb;hb=fc1e5069ec5401c425dd29b77b04285916b62d10;hpb=c7af09d552a9cf2d53a72baa975c9a73384813ea diff --git a/src/edu/berkeley/sbp/util/PrintableTree.java b/src/edu/berkeley/sbp/util/PrintableTree.java index 73b7f02..180d2ea 100644 --- a/src/edu/berkeley/sbp/util/PrintableTree.java +++ b/src/edu/berkeley/sbp/util/PrintableTree.java @@ -9,7 +9,9 @@ public abstract class PrintableTree implements Iterable protected abstract String headToString(); protected abstract String headToJava(); - protected abstract int numChildren(); + protected abstract String left(); + protected abstract String right(); + protected abstract boolean ignoreSingleton(); private static final int MAXCHARS=40; @@ -20,8 +22,14 @@ public abstract class PrintableTree implements Iterable if (str.length() < MAXCHARS) return str; String head = headToString(); StringBuffer ret = new StringBuffer(); - if (numChildren()==0) return head==null ? "{}" : head; - ret.append(head==null?"{ ":(head+":"+nl)); + + Iterator iterator = iterator(); + if (!iterator.hasNext()) return head==null ? (left()+right()) : head; + PrintableTree t0 = iterator.next(); + if (!iterator.hasNext() && ignoreSingleton()) + return t0.toPrettyString(nl); + + ret.append(head==null?(left()+" "):(head+":"+nl)); boolean first = true; int len = 0; for(T t : this) { @@ -35,20 +43,23 @@ public abstract class PrintableTree implements Iterable ret.append(s); len += s.length(); } - if (head==null) ret.append(" }"); + if (head==null) ret.append(" "+right()); return ret.toString(); } public String toString() { StringBuffer ret = new StringBuffer(); + int count=0; for(T t : this) { + count++; String q = t==null ? "null" : t.toString(); if (q.length() > 0) { ret.append(q); ret.append(" "); } } + if (count==1 && ignoreSingleton()) return ret.toString().trim(); String tail = ret.toString().trim(); String head = headToString(); String h = (head!=null && !head.toString().equals("")) ? (tail.length() > 0 ? head+":" : head+"") : ""; - if (tail.length() > 0) tail = "{" + tail + "}"; + if (tail.length() > 0) tail = left() + tail + right(); return h + tail; }