X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FPrintableTree.java;h=a6c2f6e316578e0efc9e321eb222356369eb3a54;hb=74e53cbf7227f5958ff7495abe31cb0462d62c4e;hp=f0947fb75088dee5198ad83f3f99c89f20106f83;hpb=136bae5cb17061a7d1142450a67ee11a40ba7ef9;p=sbp.git diff --git a/src/edu/berkeley/sbp/util/PrintableTree.java b/src/edu/berkeley/sbp/util/PrintableTree.java index f0947fb..a6c2f6e 100644 --- a/src/edu/berkeley/sbp/util/PrintableTree.java +++ b/src/edu/berkeley/sbp/util/PrintableTree.java @@ -5,23 +5,32 @@ import java.io.*; import java.util.*; import java.lang.reflect.*; -public abstract class PrintableTree implements Iterable, ToJava { +public abstract class PrintableTree implements Iterable, ToJava /*, ToHTML*/ { 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; private boolean basic() { return toString().length() < MAXCHARS; } public String toPrettyString() { return toPrettyString("\n"); } + public StringBuffer toPrettyString(StringBuffer sb) { sb.append(this); return sb; } private String toPrettyString(String nl) { String str = toString(); 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,21 +44,26 @@ 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(); } + private String cached = null; public String toString() { + if (cached!=null) return cached; 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 cached = 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 + "}"; - return h + tail; + if (tail.length() > 0) tail = left() + tail + right(); + return cached = h + tail; } /** append Java code to sb which evaluates to this instance */