From: adam Date: Sun, 25 Dec 2005 10:27:52 +0000 (-0500) Subject: files in tests directory X-Git-Tag: tag_for_25-Mar~487 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=56319e11eb20cb67c4221b0d7a2567ec3b2df002;ds=sidebyside files in tests directory darcs-hash:20051225102752-5007d-7fa9b78d32a44f0a98d1b359260b7a6963c71a7d.gz --- diff --git a/tests/input.tibdoc b/tests/input.tibdoc new file mode 100644 index 0000000..ac0d1ea --- /dev/null +++ b/tests/input.tibdoc @@ -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 diff --git a/tests/meta.g b/tests/meta.g index 8a5b7e1..8be950d 100644 --- a/tests/meta.g +++ b/tests/meta.g @@ -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" diff --git a/tests/regression.tc b/tests/regression.tc index 0d4b8d4..c359fa8 100644 --- a/tests/regression.tc +++ b/tests/regression.tc @@ -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 index 0000000..df52b10 --- /dev/null +++ b/tests/tibdoc.g @@ -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] + +