-package edu.berkeley.sbp;
-import edu.berkeley.sbp.*;
+package edu.berkeley.sbp.util;
import edu.berkeley.sbp.*;
import edu.berkeley.sbp.util.*;
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
-public abstract class PrintableTree<T extends PrintableTree> implements Iterable<T> {
+public abstract class PrintableTree<T extends PrintableTree> implements Iterable<T>, ToJava /*, ToHTML*/ {
protected abstract String headToString();
protected abstract String headToJava();
+ protected abstract int numChildren();
+
+ private static final int MAXCHARS=40;
+
+ private boolean basic() { return toString().length() < MAXCHARS; }
+ public String toPrettyString() { return toPrettyString("\n"); }
+ 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));
+ boolean first = true;
+ int len = 0;
+ for(T t : this) {
+ String s = t.basic() ? t.toString() : t.toPrettyString(nl+" ");
+ if (!first) {
+ if (!t.basic()) ret.append(nl);
+ if (s.length()+len>MAXCHARS) { ret.append(nl); len = 0; }
+ else { ret.append(" "); len++; }
+ }
+ first = false;
+ ret.append(s);
+ len += s.length();
+ }
+ if (head==null) ret.append(" }");
+ return ret.toString();
+ }
public String toString() {
StringBuffer ret = new StringBuffer();