checkpoint
authoradam <adam@megacz.com>
Sat, 8 Jul 2006 04:13:28 +0000 (00:13 -0400)
committeradam <adam@megacz.com>
Sat, 8 Jul 2006 04:13:28 +0000 (00:13 -0400)
darcs-hash:20060708041328-5007d-e452ecdbfece168c7bd16aee0ca68a4ad466562d.gz

src/edu/berkeley/sbp/meta/MetaGrammar.java
src/edu/berkeley/sbp/tib/TibDoc.java
src/edu/berkeley/sbp/util/ToHTML.java
tests/tibdoc.g

index e39fd4b..78c654a 100644 (file)
@@ -16,9 +16,6 @@ public class MetaGrammar {
             System.err.println("usage: java " + MetaGrammar.class.getName() + " grammarfile.g com.yourdomain.package.ClassName");
             System.exit(-1);
         }
             System.err.println("usage: java " + MetaGrammar.class.getName() + " grammarfile.g com.yourdomain.package.ClassName");
             System.exit(-1);
         }
-        //StringBuffer sbs = new StringBuffer();
-        //((MetaGrammar)new MetaGrammar().walk(meta)).nt.get("e").toString(sbs);
-        //System.err.println(sbs);
         String className   = args[1].substring(args[1].lastIndexOf('.')+1);
         String packageName = args[1].substring(0, args[1].lastIndexOf('.'));
         String fileName    = packageName.replace('.', '/') + "/" + className + ".java";
         String className   = args[1].substring(args[1].lastIndexOf('.')+1);
         String packageName = args[1].substring(0, args[1].lastIndexOf('.'));
         String fileName    = packageName.replace('.', '/') + "/" + className + ".java";
@@ -35,15 +32,6 @@ public class MetaGrammar {
 
         out.append("\n        // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
 
 
         out.append("\n        // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
 
-        /*
-        GrammarCompiler m = new GrammarCompiler();
-        Tree<String> res = new CharParser(MetaGrammar.make()).parse(new FileInputStream(args[0])).expand1();
-        MetaGrammar.Meta.MetaGrammarFile mgf = m.new MetaGrammarFile(res);
-        MetaGrammar.BuildContext bc = new MetaGrammar.BuildContext(mgf);
-
-        Union meta = mgf.get("s").build(bc);
-        Tree t = new CharParser(meta).parse(new FileInputStream(args[0])).expand1();
-        */
         Tree t = MetaGrammarTree.meta;
         Union u = MetaGrammar.make(t, "s");
 
         Tree t = MetaGrammarTree.meta;
         Union u = MetaGrammar.make(t, "s");
 
@@ -51,14 +39,6 @@ public class MetaGrammar {
         System.err.println("== parsing with parsed grammar =================================================================================");
         t = new CharParser((Union)u).parse(new FileInputStream(args[0])).expand1();
         System.out.println(t.toPrettyString());
         System.err.println("== parsing with parsed grammar =================================================================================");
         t = new CharParser((Union)u).parse(new FileInputStream(args[0])).expand1();
         System.out.println(t.toPrettyString());
-        //Forest<String> fs = new CharParser(make()).parse(new FileInputStream(args[0]));
-        //System.out.println(fs.expand1());
-
-        //GraphViz gv = new GraphViz();
-        //fs.toGraphViz(gv);
-        //FileOutputStream fox = new FileOutputStream("out.dot");
-        //gv.dump(fox);
-        //fox.close();
 
         t.toJava(out);
         out.append("\n        // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n");
 
         t.toJava(out);
         out.append("\n        // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n");
@@ -232,23 +212,7 @@ public class MetaGrammar {
 
 
     public static Union cached = null;
 
 
     public static Union cached = null;
-    public static Union make() {
-        /*
-        if (cached != null) return cached;
-        try {
-            GrammarBindingResolver m = new GrammarBindingResolver();
-            Tree<String> res = new CharParser(MetaGrammar.make()).parse(new FileInputStream("tests/meta.g")).expand1();
-            MetaGrammar.Meta.MetaGrammarFile mgf = m.new MetaGrammarFile(res);
-            MetaGrammar.BuildContext bc = new MetaGrammar.BuildContext(mgf);
-            Union meta = mgf.get("s").build(bc);
-            Tree t = new CharParser(meta).parse(new FileInputStream("tests/meta.g")).expand1();
-            return cached = make(t, "s");
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        */
-        return make(MetaGrammarTree.meta, "s");
-    }
+    public static Union make() { return make(MetaGrammarTree.meta, "s"); }
     public static Union make(Tree t, String s) { return make(t, s, new AnnotationGrammarBindingResolver()); }
     public static Union make(Tree t, String s, GrammarBindingResolver rm) {
         Tree.TreeFunctor<Object,Object> red = (Tree.TreeFunctor<Object,Object>)t.head();
     public static Union make(Tree t, String s) { return make(t, s, new AnnotationGrammarBindingResolver()); }
     public static Union make(Tree t, String s, GrammarBindingResolver rm) {
         Tree.TreeFunctor<Object,Object> red = (Tree.TreeFunctor<Object,Object>)t.head();
index 27f6ae1..1057673 100644 (file)
@@ -385,7 +385,7 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix
         }
 
         public @bind.as("Euro") Object euro() { return null; }
         }
 
         public @bind.as("Euro") Object euro() { return null; }
-        public @bind.as("Citation") Object cite(Object o) { return null; }
+        public @bind.as("Citation") Object cite(Object o) { return new Chars("*cite*"); }
         public @bind.as("Symbol") Object sym(Object o) { return null; }
 
         public static abstract class List extends Text {
         public @bind.as("Symbol") Object sym(Object o) { return null; }
 
         public static abstract class List extends Text {
@@ -425,12 +425,15 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix
             public void toHTML(HTML h) { for(Text t : text) t.toHTML(h); }
         }
         public static class TextWrap extends Text {
             public void toHTML(HTML h) { for(Text t : text) t.toHTML(h); }
         }
         public static class TextWrap extends Text {
-            public Text text;
+            public @bind.arg Text[] text;
             public void toHTML(HTML h) {
             public void toHTML(HTML h) {
-                if (htmlTag()!=null)
-                    h.tag(htmlTag(), htmlTagParams(), text);
-                else
-                    text.toHTML(h);
+                if (htmlTag()!=null) {
+                    h.openTag(htmlTag(), htmlTagParams());
+                }
+                for(Text t : text) t.toHTML(h);
+                if (htmlTag()!=null) {
+                    h.closeTag(htmlTag());
+                }
             }
             public String   htmlTag() { return null; }
             public Object[] htmlTagParams() { return null; }
             }
             public String   htmlTag() { return null; }
             public Object[] htmlTagParams() { return null; }
@@ -441,7 +444,7 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix
         public static @bind class Footnote extends TextWrap { public String htmlTag() { return "small"; } }
         public static @bind class TT extends TextWrap { public String htmlTag() { return "tt"; } }
         //public @bind class Citation extends Text {       "[" word "]" }
         public static @bind class Footnote extends TextWrap { public String htmlTag() { return "small"; } }
         public static @bind class TT extends TextWrap { public String htmlTag() { return "tt"; } }
         //public @bind class Citation extends Text {       "[" word "]" }
-        public static @bind class Strikethrough extends TextWrap { public String htmlTag() { return "strikethrough"; } }
+        public static @bind class Strikethrough extends TextWrap { public String htmlTag() { return "strike"; } }
         public static @bind class Superscript extends TextWrap { public String htmlTag() { return "sup"; } }
         public static @bind class Subscript extends TextWrap { public String htmlTag() { return "sub"; } }
         public static @bind class Smallcap extends TextWrap { public String htmlTag() { return "sc"; } }
         public static @bind class Superscript extends TextWrap { public String htmlTag() { return "sup"; } }
         public static @bind class Subscript extends TextWrap { public String htmlTag() { return "sub"; } }
         public static @bind class Smallcap extends TextWrap { public String htmlTag() { return "sc"; } }
@@ -454,7 +457,7 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix
         public static @bind class LineBreak extends Command { public void toHTML(HTML h) { h.tag("br"); } }
 
         public abstract static class Glyph extends Text { }
         public static @bind class LineBreak extends Command { public void toHTML(HTML h) { h.tag("br"); } }
 
         public abstract static class Glyph extends Text { }
-        public static @bind.as("emdash") class Emdash extends Glyph { public void toHTML(HTML h) { h.append("&emdash;"); } }
+        public static @bind.as("emdash") class Emdash extends Glyph { public void toHTML(HTML h) { h.appendLiterally("&mdash;"); } }
 
         public static class Link extends Text {
             public Text[] t;
 
         public static class Link extends Text {
             public Text[] t;
index 34d03bf..88e4f57 100644 (file)
@@ -9,6 +9,9 @@ public interface ToHTML {
         private final StringBuffer sb;
         public HTML(StringBuffer sb) { this.sb = sb; }
 
         private final StringBuffer sb;
         public HTML(StringBuffer sb) { this.sb = sb; }
 
+        public void appendLiterally(String s) {
+            sb.append(s);
+        }
         public void append(String s) {
             /* FIXME */
             sb.append(s);
         public void append(String s) {
             /* FIXME */
             sb.append(s);
@@ -43,9 +46,7 @@ public interface ToHTML {
             append(s);
             sb.append("/>");
         }
             append(s);
             sb.append("/>");
         }
-        public void tag(String s, Object o) { tag(s, null, o); }
-        public void tag(String s, Object[] attrs, Object o) {
-            if (s != null) {
+        public void openTag(String s, Object[] attrs) {
                 sb.append("<");
                 append(s);
                 if (attrs != null)
                 sb.append("<");
                 append(s);
                 if (attrs != null)
@@ -57,7 +58,15 @@ public interface ToHTML {
                         sb.append("\'");
                     }
                 sb.append(">");
                         sb.append("\'");
                     }
                 sb.append(">");
-            }
+        }
+        public void closeTag(String s) {
+            sb.append("<");
+            append(s);
+            sb.append(">");
+        }
+        public void tag(String s, Object o) { tag(s, null, o); }
+        public void tag(String s, Object[] attrs, Object o) {
+            if (s != null) openTag(s, attrs);
             append(o);
             if (s != null) {
                 sb.append("</");
             append(o);
             if (s != null) {
                 sb.append("</");
index f012231..80c8cef 100644 (file)
@@ -59,7 +59,7 @@ s                   = Doc
 Doc                 = head:Header body:Body  /ws
 Header              = H:: { "header" { KeyVal */ ws } /ws }
 Body                = B:: {Section}*/ws
 Doc                 = head:Header body:Body  /ws
 Header              = H:: { "header" { KeyVal */ ws } /ws }
 Body                = B:: {Section}*/ws
-Section             = SectionHeader Paragraph* /ws
+Section             = SectionHeader ws! (Paragraph Paragraph)
 SectionHeader       = "==" SectionHeaderBody "=="
 SectionHeaderBody   =  "=" SectionHeaderBody "="
                     >      ws! alphanum++ ws!
 SectionHeader       = "==" SectionHeaderBody "=="
 SectionHeaderBody   =  "=" SectionHeaderBody "="
                     >      ws! alphanum++ ws!
@@ -82,8 +82,6 @@ uli          =  "* "         (ws! text &~ any (oli|uli)!)
 oli          = ("# "|onums)! (ws! text &~ any (oli|uli)!)
 
 text         = Item
 oli          = ("# "|onums)! (ws! text &~ any (oli|uli)!)
 
 text         = Item
-Itemx        = ws! Item
-             | ()
 
 Item*/ws     =
                blockquote
 
 Item*/ws     =
                blockquote
@@ -96,7 +94,7 @@ Item*/ws     =
              > (Chars:: alphanum++)       
              > "\"" text "\""             
              > (Symbol:: sym++)           
              > (Chars:: alphanum++)       
              > "\"" text "\""             
              > (Symbol:: sym++)           
-             > { Block:: text }           
+//             > { Block:: text }           
 
 blockquote = "adsfafewag"
 //blockquote   = Blockquote:: "\"\"" (block | text "\"\"")
 
 blockquote = "adsfafewag"
 //blockquote   = Blockquote:: "\"\"" (block | text "\"\"")