X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=tests%2Ftibdoc.g;h=ec31d30dadd269c693174ffa0b21081719892537;hp=7841855bf13bbbafab769f6ab9b70341fca04f1e;hb=225993309e6183afa9a88fc13d39df56be54b992;hpb=45d799349e635f1a99e3974e4504a43d5a7aaf33 diff --git a/tests/tibdoc.g b/tests/tibdoc.g index 7841855..ec31d30 100644 --- a/tests/tibdoc.g +++ b/tests/tibdoc.g @@ -58,11 +58,11 @@ s = Doc Doc = Doc:: head:{Header} body:Body /ws Header = Header:: "header" attrs:{ kv */ ws } /ws -Body = sections:Section*/ws -Section = { section:: SectionHeader Paragraph* /ws } +Body = Body:: sections:(Section*/ws) +Section = { Section:: header:SectionHeader paragraphs:Paragraph* /ws } SectionHeader = "==" SectionHeaderBody "==" SectionHeaderBody = "=" SectionHeaderBody "=" - > !ws text !ws + > !ws (Chars:: text:alphanum++) !ws sp = " "** blank = !sp "\n" !sp "\n" !ws @@ -70,64 +70,63 @@ blank = !sp "\n" !sp "\n" !ws kv = kv:: key:word "=" val:text /ws wp = w++ num = [0-9]++ -Paragraph = blockquote:: { "\"\"" !ws text } - > hr:: { "---" "-"* } - > p:: { text } +Paragraph = Blockquote:: { "\"\" " text } + > HR:: { "---" "-"* } + > { P:: t:text } onums = nums !(". "|") ") any = ~[]* -uli = li:: "* " (!ws text &~ any (oli|uli)) -oli = li:: ("# "|onums) (!ws text &~ any (oli|uli)) +uli = "* " (!ws text &~ any (oli|uli)) +oli = !("# "|onums) (!ws text &~ any (oli|uli)) text = Item Itemx = !ws Item | () Item = blockquote - > "[]":: { ul:: uli+/ws } Itemx - | "[]":: { ol:: oli+/ws } Itemx - > "[]":: pre Itemx - > "[]":: link Itemx - > "[]":: structured Itemx - > "[]":: styled Itemx - > "[]":: (Chars:: alphanum++) Itemx - > "[]":: qtext Itemx - > "[]":: symbol Itemx - > "[]":: (Symbol:: sym++) Itemx - > "[]":: Paragraph Itemx - -blockquote = blockquote:: "\"\"" text "\"\"" - | blockquote:: "\"\"" block + > "[]":: { 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 -qtext = quoted:: "\"" text "\"" -pre = verbatim:: "[verbatim]" { ~[]+ } /ws // FIXME doesn't work - -styled = underline:: "__" text "__" - | footnote:: "((" text "))" - | tt:: "[[" text "]]" - | citation:: "[" word "]" - | strikethrough:: "!!" text "!!" - | superscript:: "^^" (word|block) - | subscript:: ",," (word|block) - | smallcap:: "\\sc" block - | bold:: "++" text "++" - | keyword:: "!" (word|block) +pre = Verbatim:: "[verbatim]" { ~[]+ } /ws // FIXME doesn't work + +styled = Underline:: "__" text "__" + | Footnote:: "((" text "))" + | TT:: "[[" text "]]" + | Citation:: "[" word "]" + | Strikethrough:: "!!" text "!!" + | Superscript:: "^^" (word|block) + | Subscript:: ",," (word|block) + | Smallcap:: "\\sc" block + | Bold:: "++" text "++" + | Keyword:: "!" (word|block) | Italic:: "**" text "**" block = { text } -link = link:: text:({ text }) "->" href:(url|email) - > link:: text:alphanum++ !ws "->" href:(url|email) +link = Link:: text:({ text }) "->" href:(url|email) + > Link:: text:alphanum++ !ws "->" href:(url|email) 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" - | bre:: "\\br" +command = Today:: "\\today" + | LineBreak:: "\\br" // URLs ////////////////////////////////////////////////////////////////////////////// @@ -141,17 +140,17 @@ password = [a-zA-Z0-9;/?:&=$\-_.+]++ urlc = [a-zA-Z0-9;/?:&=$\-_.+@] urlv = urlc | [%] urlchar = urlc - | "%":: "%" [0-9] [0-9] + | urlescape:: "%" [0-9] [0-9] url = "mailto" ":" email -> ~urlv - > method:method "://" url_login? host:host port:(":" nums)? path:("/" urlpath)? -> ~urlv -url_login = login:: username (":" password) "@" + > 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 +/ ".") -> ~"." part = [a-zA-Z0-9\-]++ // interesting use of boolean grammars // &~ ([\-0-9] ~[]* | ~[]* [\-0-9]) -email = user:username "@" host:host -> ~[.] +email = Email:: user:username "@" host:host -> ~[.] nums = [0-9]++ host = IP:: nums "." nums "." nums "." nums | DNS:: domain @@ -165,8 +164,8 @@ word = alphanum++ quoted = "\"" ((~[\"\\] | escaped)+) "\"" | "":: "\"\"" -escaped = "\n":: "\\n" - | "\r":: "\\r" +escaped = lf:: "\\n" + | cr:: "\\r" | "\\" ~[nr]