From: adam Date: Thu, 12 Jan 2006 07:18:47 +0000 (-0500) Subject: added pretty good pretty-printing X-Git-Tag: tag_for_25-Mar~390 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=136bae5cb17061a7d1142450a67ee11a40ba7ef9 added pretty good pretty-printing darcs-hash:20060112071847-5007d-fb5bea953ae6d64db23b1e1612efed112fa25100.gz --- diff --git a/src/edu/berkeley/sbp/Tree.java b/src/edu/berkeley/sbp/Tree.java index e7f2ef7..6b295a5 100644 --- a/src/edu/berkeley/sbp/Tree.java +++ b/src/edu/berkeley/sbp/Tree.java @@ -30,6 +30,13 @@ public class Tree extends PrintableTree> implements Iterable> this.children = children2; } + /** since Tree instances are immutable, we can cache this to make pretty-printing MUCH faster */ + public String toString() { + if (toString!=null) return toString; + return toString = super.toString(); + } + private String toString = null; + protected String headToString() { return head==null?null:head.toString(); } protected String headToJava() { return head==null?null:StringUtil.toJavaString(head+""); } } diff --git a/src/edu/berkeley/sbp/tib/TibDoc.java b/src/edu/berkeley/sbp/tib/TibDoc.java index a262191..a823b36 100644 --- a/src/edu/berkeley/sbp/tib/TibDoc.java +++ b/src/edu/berkeley/sbp/tib/TibDoc.java @@ -22,7 +22,8 @@ public class TibDoc { System.out.println("\nparsing " + s[1]); Forest f = new CharToken.CharToStringParser(mg).parse(new Tib(new FileInputStream(s[1]))); System.out.println(f); - System.out.println(((Tree)walk(f.expand1())).toString(0, 0, 120)); + //System.out.println(((Tree)walk(f.expand1())).toString(0, 0, 120)); + System.out.println(((Tree)walk(f.expand1())).toPrettyString()); } public static Tree walk(Tree tree) { diff --git a/src/edu/berkeley/sbp/util/PrintableTree.java b/src/edu/berkeley/sbp/util/PrintableTree.java index c805cab..f0947fb 100644 --- a/src/edu/berkeley/sbp/util/PrintableTree.java +++ b/src/edu/berkeley/sbp/util/PrintableTree.java @@ -9,68 +9,33 @@ public abstract class PrintableTree implements Iterable protected abstract String headToString(); protected abstract String headToJava(); + protected abstract int numChildren(); - private boolean empty() { - for(T t : this) return false; - return true; - } - - private static final int MAXDEPTH=3; - public int depth() { - int depth = headToString()==null ? 0 : 1; - int ret = depth; - for(T t : this) ret = Math.max(ret, depth+t.depth()); - return ret; - } - public String toString(int indent0, int cur, int limit) { - int indent = indent0; - String s = toString(); - if (depth()indent) { - ret.append('\n'); for(int i=0; i 0) ret.append("\n "); + 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); - if (s.indexOf('\n')!=-1) - cur = s.length()-s.lastIndexOf('\n'); - else - cur += s.length(); - if (cur>indent) { - ret.append(' '); - cur += s.length()+1; - } - } - if (head==null) { - ret.append("}"); - } else if (cur>indent) { - /* - indent = indent0; - ret.append('\n'); for(int i=0; i