X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Ftib%2FTibDoc.java;h=9e505491c646064922fb6aeafc2018624892362c;hp=73dcc9d18a450771703e824bc7f6f6c77501ee6a;hb=f7f669e438822dd46922e3d3b1c880fdec998a9b;hpb=3885d0596c6f13f432ecd2c46f87d6477cb773b0 diff --git a/src/edu/berkeley/sbp/tib/TibDoc.java b/src/edu/berkeley/sbp/tib/TibDoc.java index 73dcc9d..9e50549 100644 --- a/src/edu/berkeley/sbp/tib/TibDoc.java +++ b/src/edu/berkeley/sbp/tib/TibDoc.java @@ -7,6 +7,7 @@ package edu.berkeley.sbp.tib; //import org.ibex.io.*; import edu.berkeley.sbp.*; import edu.berkeley.sbp.misc.*; +import edu.berkeley.sbp.util.*; import java.util.*; import java.io.*; @@ -14,29 +15,130 @@ public class TibDoc { public static void main(String[] s) throws Exception { System.out.println("parsing " + s[0]); - Tree res = new CharToken.CharToStringParser(MetaGrammar.make()).parse1(new CharToken.Stream(new FileInputStream(s[0]))); + Tree res = new CharToken.CharToStringParser(MetaGrammar.make()).parse(new CharToken.Stream(new FileInputStream(s[0]))).expand1(); MetaGrammar gram = (MetaGrammar)new Tib.Grammar().walk(res); //System.out.println(gram); Union mg = gram.done(); System.out.println("\nparsing " + s[1]); Forest f = new CharToken.CharToStringParser(mg).parse(new Tib(new FileInputStream(s[1]))); + + System.out.println(); System.out.println(f); - System.out.println(((Tree)walk(f.expand1())).toString(0, 0, 120)); + System.out.println(); + System.out.println(((Tree)new StringifyWalker().walk(f.expand1())).toPrettyString()); + + String st = new HTMLWalker().walk(f.expand1()).toString(); + System.out.println(st); + FileOutputStream fos = new FileOutputStream("out.html"); + PrintWriter p = new PrintWriter(new OutputStreamWriter(fos)); + p.println(st); + p.flush(); + p.close(); + } + + public static class StringifyWalker extends ReflectiveWalker { + public Object walk(String head, Object[] children) { + if ("stringify".equals(head)) { + StringBuffer ret = new StringBuffer(); + for(Tree t : (Tree)children[0]) ret.append(t); + return new Tree(null, ret.toString()); + } + if (children.length==0) return new Tree(null, head, new Tree[0]); + return new Tree(null, head, (Tree[])Reflection.lub(children)); + } } - public static Tree walk(Tree tree) { - String head = tree.head(); - if ("stringify".equals(head)) { - String ret = ""; - for(Tree t : tree.child(0)) ret += t; - return new Tree(null, ret); + public static String join(String[] sa, String sep) { + StringBuffer ret = new StringBuffer(); + boolean first = true; + for(String s : sa) { + if (!first) ret.append(sep); + first = false; + ret.append(s); } - Tree[] children = new Tree[tree.numChildren()]; - for(int i=0; i(null, head, children); + return ret.toString(); } + public static class HTMLWalker extends ReflectiveWalker { + //public void header() { throw new Error(); } + public String li(Object o) { return "
  • "+o+"
  • "; } + public String li(Object a, Object o) { return "
  • "+o+"
  • "; } + public String ul(String[] li) { return "
      "+join(li,"")+"
    "; } + public String ol(String[] li) { return "
      "+join(li,"")+"
    "; } + public String hr() { return "\n
    \n"; } + public String it(Object o) { return ""+o+""; } + public String tt(Object o) { return ""+o+""; } + public String underline(Object o) { return "
      "+o+"
    "; } + public String p(Object o) { return "

    "+o+"

    "; } + public String smallcap(Object o) { return ""+o+""; } + public String blockquote(Object o) { return "
    "+o+"
    "; } + public String superscript(Object o) { return ""+o+""; } + public String subscript(Object o) { return ""+o+""; } + public String bold(Object o) { return ""+o+""; } + public String strikethrough(Object o) { throw new Error();/*return ""+o+"";*/ } + public Object top(Object o) { return ""+o+""; } + public Object doc(Object header, Object body) { return body; } + public String text(Object[] body) { + StringBuffer ret = new StringBuffer(); + for(Object o : body) { ret.append(o); ret.append(" "); } + return ret.toString(); + } + public String body(String[] sections) { return join(sections, "\n\n"); } + public String domain(String[] parts) { return join(parts, "."); } + public String ip(String[] parts) { return join(parts, "."); } + public String emailaddr(String user, String host) { + return link(user+"@"+host, "mailto:"+user+"@"+host); + } + //public String url(String method) { + public String link(Object text, Object target) { + return ""+text+""; + } + public String section(Object header, Object[] body) { + StringBuffer ret = new StringBuffer(); + ret.append(header); + ret.append(" "); + for(Object o : body) ret.append(o); + return ret.toString(); + } + private String escapify(Object o) { + String s = o==null ? "" : o.toString(); + StringBuffer sb = new StringBuffer(); + for(int i=0; i': sb.append(">"); break; + case '\'': sb.append("'"); break; + case '\"': sb.append("""); break; + default: sb.append(s.charAt(i)); break; + } + } + return sb.toString(); + } + private Tree lone(String s) { + return new Tree(null, s, new Tree[0]); + } + public Object walk(Tree t) { + String head = t.head(); + if ("stringify".equals(head)) { + StringBuffer ret = new StringBuffer(); + for(Tree child : t.child(0)) ret.append(child); + return ret.toString(); + } + return super.walk(t); + } + protected Object defaultWalk(String head, Object[] children) { + Tree[] kids = new Tree[children.length]; + for(int i=0; i)children[i]; + else kids[i] = lone(children[i].toString()); + } + return new Tree(null, head, kids); + } + } /* public static enum Style { H, UL, TT, SO, IT, Q, B, PRE, LIST, EMDASH; }