files in tests directory
authoradam <adam@megacz.com>
Sun, 25 Dec 2005 10:27:52 +0000 (05:27 -0500)
committeradam <adam@megacz.com>
Sun, 25 Dec 2005 10:27:52 +0000 (05:27 -0500)
darcs-hash:20051225102752-5007d-7fa9b78d32a44f0a98d1b359260b7a6963c71a7d.gz

tests/input.tibdoc [new file with mode: 0644]
tests/meta.g
tests/regression.tc
tests/tibdoc.g [new file with mode: 0644]

diff --git a/tests/input.tibdoc b/tests/input.tibdoc
new file mode 100644 (file)
index 0000000..ac0d1ea
--- /dev/null
@@ -0,0 +1,10 @@
+header
+  author   = Adam Megacz
+  email    = adam@megacz.com
+  comment  = my homepage is at
+
+== Introduction ==
+  this is the body adam@megacz.com text
+
+  the following paragraph demonstrates verbatim stuff, as well as a
+  footnote ((like this)) because they are coool
index 8a5b7e1..8be950d 100644 (file)
@@ -12,12 +12,16 @@ conjuncts     ::=  sequence
                 |  sequence ^"&"  e*/ws   /ws
                 |  sequence ^"&~" e*/ws   /ws
 
-ps          ::= e*/ws                              => "ps"
-              | (e+/ws ws)? "^" quoted (ws e+/ws)? => "ps2"
-psx         ::= ps
-              | ps wp ^"/" ws e
-sequence    ::= psx
-              | psx ^"=>" (word|quoted) /ws
+ps         ::= e*/ws                              => "ps"
+             | (e+/ws ws)? "^" quoted (ws e+/ws)? => "ps2"
+psy        ::= ps
+             | ps wp ^"/" ws e
+psx        ::= psy ^"?=>" e /ws
+             | psy ^"!=>" e /ws
+             > psy
+sequence   ::= quoted => "qprod"
+             > psx
+             | psx ^"=>" (word|quoted) /ws
 
 ec       ::= [~\-\]\\\~]
            | escaped
@@ -32,10 +36,10 @@ e        ::=  word                          => "nonTerminal"
            |    ^"["  range* "]"
            |    ^"[~" range* "]"
 
-           |  (e ws ^"**" > e ws ^"*")
-           |  e ^"*/" e                 /ws
-           |  (e ws ^"++" > e ws ^"+")
-           |  e ^"+/" e                 /ws
+           |  (e ^"++"    /ws > e ^"+"    /ws)
+           |  (e ^"++/" e /ws > e ^"+/" e /ws)
+           |  (e ^"**"    /ws > e ^"*"    /ws)
+           |  (e ^"**/" e /ws > e ^"*/" e /ws)
            |  e ^"?"                    /ws
 
            |     "(" word         ^")"  /ws
@@ -44,7 +48,7 @@ w       !::= " "
            | "//" ([~\n]*) "\n"
            | "\n"
            | "\r"
-word     ::= [a-zA-Z0-9_]++
+word     ::= [a-zA-Z0-9_]+ !=> [a-zA-Z0-9_]
 quoted   ::= "\"" (([~\"\\] | escaped)+) "\""
            | "\"\"" => ""
 escaped  ::= "\\n" => "\n"
index 0d4b8d4..c359fa8 100644 (file)
@@ -27,7 +27,7 @@ tibcase {
     how
       { are }
 ";
-    output "yep";
+    output "yep:{are}";
 
     s        ::= { Hello } => "yep"
     w        ::= " " | "\n"
@@ -35,6 +35,7 @@ tibcase {
     Hello    ::= "hello" ws { "there" "how" { "are" } }
 }
 
+
 testcase {
     input "ab c";
     output "1:{{a b} {c}}";
@@ -61,11 +62,11 @@ testcase {
 
 testcase {
     input "aaabbbccc";
-    output "";
+    output "ab";
 
     s   ::= ab & dc
-    ab  ::= a b
-    dc  ::= d c
+    ab  ::= a b       => ab
+    dc  ::= d c       => dc
     a   ::= "a" a     | ()
     b   ::= "b" b "c" | ()
     c   ::= "c" c     | ()
@@ -76,8 +77,8 @@ testcase {
     input "aaabbbbccc";
 
     s   ::= ab & dc
-    ab !::= a b
-    dc !::= d c
+    ab !::= a b       => ab
+    dc !::= d c       => dc
     a   ::= "a" a     | ()
     b   ::= "b" b "c" | ()
     c   ::= "c" c     | ()
@@ -107,7 +108,7 @@ testcase {
 
 testcase {
     input  "xbambambam";
-    output "bam:{a bam:{a bam:{a x}}}";
+    output "bam:{a bam:{a bam:{a x:{x}}}}";
 
     s ::= a s ^"bam"
     s ::= ^"x"
@@ -317,3 +318,12 @@ ws        ::= w*
 
 
 }
+
+testcase {
+  input "aa bb";
+  output "{q:{{a a}} q:{{b b}}}";
+
+  s  ::= q */ ws
+  ws ::= " "*
+  q  ::= [a-z]+ !=> [a-z] => "q"
+}
\ No newline at end of file
diff --git a/tests/tibdoc.g b/tests/tibdoc.g
new file mode 100644 (file)
index 0000000..df52b10
--- /dev/null
@@ -0,0 +1,118 @@
+
+// URGENT: why does swapping [a-zA-Z0-9] for alphanum in "item" cause severe breakage?
+// URGENT: why does enabling "url" cause severe breakage? (probably same cause)
+//   ... something to do with unit productions
+
+
+
+// output formats: latex, contex, ps, pdf, html, man, txt, rfc
+// bullet list
+// numbered list
+// horizontal rule
+// dropcap
+// smallcap
+// strikethrough
+// link
+// math
+// image
+// today's date, last edit date
+// blockquote
+// superscript
+// subscript
+// citations/references
+// typewriter-text
+// figures
+
+// FIXME: these have to go at the top so they have their dropAll bit set before PreSequence.build...
+ws      !::= w**
+w       !::=  [\r\n\ ]
+nw       ::= [~\r\n\ ]
+
+//////////////////////////////////////////////////////////////////////////////
+
+s                 ::= {Doc} => top
+
+Doc               ::= Header   Body                       /ws => doc
+Header            ::= "header" { kv */ ws }               /ws => header
+Body              ::= Section*/ws                             => body
+Section           ::= SectionHeader ({text}*/ws)          /ws => section
+SectionHeader     ::= "==" SectionHeaderBody "=="
+SectionHeaderBody ::=  "=" SectionHeaderBody "="
+                    >      ws text ws
+
+kv         ::= word "=" text /ws => kv1
+
+text       ::= item */ ws
+pre        ::= "[verbatim]" { [~]+ } /ws => "verbatim"   // FIXME doesn't work
+item       ::= pre
+             > email
+             > structured
+             > styled
+             > "\"" text "\""    => quoted
+             > [a-zA-Z0-9]++
+             > symbol
+
+symbol     ::= symbolx & sym++
+symbolx    ::= "--"  => emdash
+             | ","
+             | ":"
+             | ";"
+
+styled     ::= "**" text "**" => bold
+             | "__" text "__" => ul
+             | "~~" text "~~" => it     // hard to type
+             | "((" text "))" => footnote
+
+structured ::= glyph
+//             | url
+
+glyph      ::= "(r)" | "(c)" | "(tm)"  // euro symbol?
+
+
+// URLs //////////////////////////////////////////////////////////////////////////////
+
+// interesting opportunity to show off boolean grammars here: define other
+// subtypes of url (ftp, etc) as conjunctions, but the "master pattern"
+// only gets parsed once
+
+urlpath    ::= urlchar*
+username   ::= [a-zA-Z0-9;/?:&=$\-_.+]++
+password   ::= [a-zA-Z0-9;/?:&=$\-_.+]++
+urlchar    ::= [a-zA-Z0-9;/?:&=$\-_.+@]
+             | "%" [0-9] [0-9]       => "%"
+url        ::= "mailto" ":"   email
+             > method "://" url_login? host (":" port)? ("/" urlpath)?     => "url"
+url_login  ::= username (":" password) "@" => "login"
+method     ::= [+\-.a-z0-9]+ 
+port       ::= [0-9]+
+
+domain     ::= part +/ "."
+part       ::= [a-zA-Z0-9\-]++    // interesting use of boolean grammars
+//            &~ ([\-0-9] [~]* | [~]* [\-0-9])
+
+email      ::= username "@" host      => email
+host       ::= [0-9]+ "." [0-9]+ "." [0-9]+ "." [0-9]+ => "ip"
+             | domain
+
+
+
+// Tokens ///////////////////////////////////////////////////////////////////
+
+word     ::= alphanum++
+           | quoted
+
+quoted   ::= "\"" (([~\"\\] | escaped)+) "\""
+           | "\"\"" => ""
+escaped  ::= "\\n" => "\n"
+           | "\\r" => "\r"
+           | "\\" [~nr]
+
+
+// Chars ///////////////////////////////////////////////////////////////
+
+alpha    ::= [a-zA-Z]
+num      ::= [0-9]
+alphanum ::= [a-zA-Z0-9]
+sym      ::= [~a-zA-Z0-9\ \r\n]
+
+