X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=tests%2Ftibdoc.g;h=51e66e1ca564613cb53aa6455c329c5994021691;hp=216a77ce647dd9ac70a67f31e8eadb87a4667073;hb=439f7fedebf5fdf586c18e6c3ce0c50e703ec0ed;hpb=2177e4743ea680e24f0cc0525185e8f95d0dd41b diff --git a/tests/tibdoc.g b/tests/tibdoc.g index 216a77c..51e66e1 100644 --- a/tests/tibdoc.g +++ b/tests/tibdoc.g @@ -56,49 +56,52 @@ nw = ~[\r\n\ ] s = Doc -Doc = Doc:: head:{Header} body:Body /ws -Header = Header:: "header" attrs:{ kv */ ws } /ws -Body = Body:: sections:(Section*/ws) -Section = { Section:: header:SectionHeader paragraphs:Paragraph* /ws } +Doc = head:Header body:Body /ws +Header = H:: { "header" { KeyVal */ ws } /ws } +Body = B:: {Section}*/ws +Section = SectionHeader Paragraph* /ws SectionHeader = "==" SectionHeaderBody "==" SectionHeaderBody = "=" SectionHeaderBody "=" - > !ws (Chars:: text:alphanum++) !ws + > ws! alphanum++ ws! sp = " "** -blank = !sp "\n" !sp "\n" !ws +blank = sp! "\n" sp! "\n" ws! - -kv = kv:: key:word "=" val:text /ws +KeyVal = key:word "=" val:text /ws wp = w++ num = [0-9]++ -Paragraph = Blockquote:: { "\"\" " text } - > HR:: { "---" "-"* } - > { P:: t:text } -onums = nums !(". "|") ") +Paragraph = Blockquote:: { "\"\" " text } + > HR:: { "---" "-"* } + > P:: { text } + +onums = nums (". "|") ")! any = ~[]* -uli = "* " (!ws text &~ any (oli|uli)) -oli = !("# "|onums) (!ws text &~ any (oli|uli)) +uli = "* " (ws! text &~ any (oli|uli)!) +oli = ("# "|onums)! (ws! text &~ any (oli|uli)!) text = Item -Itemx = !ws Item +Itemx = ws! Item | () -Item = blockquote - > "[]":: { UL:: uli+/ws } Itemx - | "[]":: { OL:: oli+/ws } Itemx - > "[]":: pre Itemx - > "[]":: link Itemx - > "[]":: structured Itemx - > "[]":: styled Itemx - > "[]":: (Chars:: text:alphanum++) Itemx - > "[]":: "\"" text "\"" Itemx - > "[]":: symbol Itemx - > "[]":: (Symbol:: sym++) Itemx - > "[]":: Paragraph Itemx - -blockquote = Blockquote:: "\"\"" text "\"\"" - | Blockquote:: "\"\"" block +Item +//*/ws + = +// "[]":: blockquote ((ws! Item) | ()) +// > + "[]":: { UL:: uli+/ws } ((ws! Item) | ()) + | "[]":: { OL:: oli+/ws } ((ws! Item) | ()) + > "[]":: pre ((ws! Item) | ()) + > "[]":: link ((ws! Item) | ()) + > "[]":: structured ((ws! Item) | ()) + > "[]":: styled ((ws! Item) | ()) + > "[]":: (Chars:: alphanum++) ((ws! Item) | ()) + > "[]":: "\"" text "\"" ((ws! Item) | ()) + > "[]":: (Symbol:: sym++) ((ws! Item) | ()) + > "[]":: { Block:: text } ((ws! Item) | ()) + + +//blockquote = Blockquote:: "\"\"" (block | text "\"\"") pre = Verbatim:: "[verbatim]" { ~[]+ } /ws // FIXME doesn't work @@ -116,15 +119,15 @@ styled = Underline:: "__" text "__" block = { text } -link = Link:: text:({ text }) "->" href:(url|email) - > Link:: text:alphanum++ !ws "->" href:(url|email) +link = LinkText:: text:({ text }) "->" href:(url|email) + > LinkChars:: text:alphanum++ ws! "->" href:(url|email) -structured = command & "\\" [a-zA-Z0-9]++ block? +structured = command & "\\" ([a-zA-Z0-9]++)! block? > glyph > email > url -glyph = Euro:: "(e)" | "(r)" | "(c)" | "(tm)" | "--" | "..." +glyph = Euro:: "(e)" | "(r)" | "(c)" | "(tm)" | emdash:: "--" | "..." command = Today:: "\\today" | LineBreak:: "\\br" @@ -142,8 +145,15 @@ urlc = [a-zA-Z0-9;/?:&=$\-_.+@] urlv = urlc | [%] urlchar = urlc | urlescape:: "%" [0-9] [0-9] -url = "mailto" ":" email -> ~urlv - > URL:: method:method "://" login:url_login? host:host port:(":" nums)? path:("/" urlpath)? -> ~urlv +url = Mailto:: "mailto" ":" email -> ~urlv + > URL:: + method:method + "://" + login:url_login? + host:host + port:(":" nums)? + path:("/" urlpath)? + -> ~urlv url_login = Login:: username:username password:(":" password) "@" method = [+\-.a-z0-9]+ domain = (part +/ ".") -> ~"." @@ -151,7 +161,7 @@ part = [a-zA-Z0-9\-]++ // interesting use of boolean grammars // &~ ([\-0-9] ~[]* | ~[]* [\-0-9]) -email = Email:: user:username "@" host:host -> ~[.] +email = user:username "@" host:host -> ~[.] nums = [0-9]++ host = IP:: nums "." nums "." nums "." nums | DNS:: domain @@ -164,7 +174,7 @@ word = alphanum++ | quoted quoted = "\"" ((~[\"\\] | escaped)+) "\"" - | "":: "\"\"" + | "\"\"":: "\"\"" escaped = lf:: "\\n" | cr:: "\\r" | "\\" ~[nr] @@ -173,7 +183,6 @@ escaped = lf:: "\\n" // Chars /////////////////////////////////////////////////////////////// alpha = [a-zA-Z] -//num = [0-9] alphanum = [a-zA-Z0-9] sym = ~[a-zA-Z0-9\ \r\n=\">]