+ 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(toPrettyString()); return sb; }
+ private String toPrettyString(String nl) {
+ String str = toString();
+ if (str.length() < MAXCHARS) return str;
+ String head = headToString();
+ StringBuffer ret = new StringBuffer();
+
+ Iterator<T> iterator = iterator();
+ if (!iterator.hasNext()) return head==null ? (left()+right()) : head;
+ PrintableTree t0 = iterator.next();
+ if (!iterator.hasNext() && ignoreSingleton())
+ return t0.toPrettyString(nl);