checkpoint
authoradam <adam@megacz.com>
Thu, 12 Jan 2006 07:26:44 +0000 (02:26 -0500)
committeradam <adam@megacz.com>
Thu, 12 Jan 2006 07:26:44 +0000 (02:26 -0500)
darcs-hash:20060112072644-5007d-f797bb6aae249f450d10db56b6aa8cf838c85c28.gz

src/edu/berkeley/sbp/misc/ReflectiveWalker.java
src/edu/berkeley/sbp/misc/StringWalker.java
src/edu/berkeley/sbp/tib/TibDoc.java
src/edu/berkeley/sbp/util/Reflection.java

index f22f4b8..c99a463 100644 (file)
@@ -67,6 +67,10 @@ public class ReflectiveWalker extends StringWalker {
         return super.walk(tree);
     }
     */
+    public void walk(String tag) {
+        Member m = member(normalize(tag), 0, false);
+        if (m!=null) Reflection.fuzzyInvoke(target, m);
+    }
     public Object walk(String tag, Object[] argo) {
         if (argo.length==0) return super.walk(tag, argo);
         if (argo==null) return tag;
index 923c639..ae150e6 100644 (file)
@@ -6,7 +6,11 @@ import java.util.*;
 import java.lang.reflect.*;
 
 public abstract class StringWalker extends TreeWalker<String> {
-    public Object walk(Tree<String> tree) { return super.walk(tree); }
+    public void   walk(String tag) { }
+    public Object walk(Tree<String> tree) {
+        walk(tree.head());
+        return super.walk(tree);
+    }
     public Object walk(String tag, Object[] tokens) {
         if (tokens.length==0) return tag;
         if (tag==null) return null;
index a823b36..c3b7871 100644 (file)
@@ -10,7 +10,7 @@ import edu.berkeley.sbp.misc.*;
 import java.util.*;
 import java.io.*;
 
-public class TibDoc {
+public class TibDoc extends ReflectiveWalker {
     
     public static void main(String[] s) throws Exception {
         System.out.println("parsing " + s[0]);
@@ -23,15 +23,15 @@ public class TibDoc {
         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())).toPrettyString());
+        System.out.println(((Tree)new TibDoc().walk(f.expand1())).toPrettyString());
     }
 
-    public static Tree<String> walk(Tree<String> tree) {
+    public Tree<String> walk(Tree<String> tree) {
         String head = tree.head();
         if ("stringify".equals(head)) {
-            String ret = "";
-            for(Tree<String> t : tree.child(0)) ret += t;
-            return new Tree<String>(null, ret);
+            StringBuffer ret = new StringBuffer();
+            for(Tree<String> t : tree.child(0)) ret.append(t);
+            return new Tree<String>(null, ret.toString());
         }
         Tree<String>[] children = new Tree[tree.numChildren()];
         for(int i=0; i<children.length; i++) children[i] = walk(tree.child(i));
index fea79e3..beb8d41 100644 (file)
@@ -78,6 +78,7 @@ public final class Reflection {
         }
     }
 
+    public static Object fuzzyInvoke(Object o, Member m) { return fuzzyInvoke(o, m, new Object[0]); }
     /** invoke method/constructor m on object o with arguments args, and perform reasonable coercions as needed */
     public static Object fuzzyInvoke(Object o, Member m, Object[] args) {
         try {