X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=tests%2Ftibdoc.g;h=6287afa4e2e0d233b44f59fe5a016dd73ca1b9d8;hp=442e203214b2d88794bb76e92d072d4e802cfe75;hb=0ab024f487647f99eb000345c29c2f8e9b52a200;hpb=2a11d8ca5ae3af89ac2bdea58f71e463b6e4affe diff --git a/tests/tibdoc.g b/tests/tibdoc.g index 442e203..6287afa 100644 --- a/tests/tibdoc.g +++ b/tests/tibdoc.g @@ -1,4 +1,3 @@ -x ="x" // interactions between !=> and &~ mean that I need to rethink the chartage // indentation styling... // literal blocks [[need to ignore bracing]] double-colon style? @@ -53,82 +52,86 @@ x ="x" // [c] ... // FIXME: these have to go at the top so they have their dropAll bit set before PreSequence.build... -ws ! = w** -w ! = [\r\n\ ] +ws = w** +w = [\r\n\ ] nw = ~[\r\n\ ] ////////////////////////////////////////////////////////////////////////////// -s = Doc => top +s = top:: Doc -Doc = {Header} Body /ws => doc -Header = "header" { kv */ ws } /ws => header -Body = Section*/ws => body -Section = { SectionHeader Paragraph* /ws => section } +Doc = doc:: {Header} Body /ws +Header = header:: "header" { kv */ ws } /ws +Body = body:: Section*/ws +Section = { section:: SectionHeader Paragraph* /ws } SectionHeader = "==" SectionHeaderBody "==" SectionHeaderBody = "=" SectionHeaderBody "=" - > ws text ws + > !ws text !ws -sp ! = " "** -blank = sp "\n" sp "\n" ws +sp = " "** +blank = !sp "\n" !sp "\n" !ws -kv = word "=" text /ws => kv1 -wp ! = w++ -num ! = [0-9]++ -Paragraph = { "\"\"" ws text } => "blockquote" - > { "---" "-"* } => "hr" - > { text } => "p" +kv = kv1:: word "=" text /ws +wp = w++ +num = [0-9]++ +Paragraph = blockquote:: { "\"\"" !ws text } + > hr:: { "---" "-"* } + > p:: { text } -onums ! = nums (". "|") ") -any ! = ~[]* +onums = nums !(". "|") ") +any = ~[]* -uli = "* " (ws text &~ any (oli|uli)) => "li" -oli = ("# "|onums) (ws text &~ any (oli|uli)) => "li" +uli = li:: "* " (!ws text &~ any (oli|uli)) +oli = li:: ("# "|onums) (!ws text &~ any (oli|uli)) -text = Item => text -Itemx = ws Item +// + +text = text:: Item +Itemx = !ws Item | () Item = blockquote - > { uli+/ws => "ul" } Itemx => [] - | { oli+/ws => "ol" } Itemx => [] - > pre Itemx => [] - > structured Itemx => [] - > structuredx Itemx => [] - > styled Itemx => [] - > qtext Itemx => [] - > (alphanum++ => stringify) Itemx => [] - > symbol Itemx => [] - > (sym++ => stringify) Itemx => [] - > Paragraph Itemx => [] - -blockquote = "\"\"" text "\"\"" => "blockquote" - | "\"\"" block => "blockquote" + > "[]":: { ul:: uli+/ws } Itemx + | "[]":: { ol:: oli+/ws } Itemx + > "[]":: pre Itemx + > "[]":: structured Itemx + > "[]":: structuredx Itemx + > "[]":: styled Itemx + > "[]":: qtext Itemx + > "[]":: (stringify:: alphanum++) Itemx + > "[]":: symbol Itemx + > "[]":: (stringify:: sym++) Itemx + > "[]":: Paragraph Itemx + +blockquote = blockquote:: "\"\"" text "\"\"" + | blockquote:: "\"\"" block -qtext = "\"" text "\"" => "quoted" -pre = "[verbatim]" { ~[]+ } /ws => "verbatim" // FIXME doesn't work +qtext = quoted:: "\"" text "\"" +pre = verbatim:: "[verbatim]" { ~[]+ } /ws // FIXME doesn't work -styled = "__" text "__" => underline - | "((" text "))" => footnote - | ( "[[" text "]]" => tt - > "[" word "]" => citation +styled = underline:: "__" text "__" + | footnote:: "((" text "))" + | ( tt:: "[[" text "]]" + > citation:: "[" word "]" ) - | "!!" text "!!" => strikethrough - | "^^" (word|block) => superscript - | ",," (word|block) => subscript - | "\\sc" block => smallcap - | "**" text "**" => bold - | "!" (word|block) => keyword - > "*" text "*" => it + | strikethrough:: "!!" text "!!" + | superscript:: "^^" (word|block) + | subscript:: ",," (word|block) + | smallcap:: "\\sc" block + | bold:: "**" text "**" + | keyword:: "!" (word|block) + > it:: "*" text "*" + +// block = { text } -structured = { text } "->" (url|email) => link +structured = link:: { text } "->" (url|email) //> alphanum++ "->" (url|email) => link structuredx = glyph > email > url glyph = "(r)" | "(c)" | "(tm)" | "--" // euro symbol? - | "\\today" -> ~[a-z] => today + | today:: "\\today" -> ~[a-z] // URLs ////////////////////////////////////////////////////////////////////////////// @@ -138,35 +141,35 @@ glyph = "(r)" | "(c)" | "(tm)" | "--" // euro symbol? // only gets parsed once urlpath = urlchar* -username = [a-zA-Z0-9;/?:&=$\-_.+]++ => stringify -password = [a-zA-Z0-9;/?:&=$\-_.+]++ => stringify +username = stringify:: [a-zA-Z0-9;/?:&=$\-_.+]++ +password = stringify:: [a-zA-Z0-9;/?:&=$\-_.+]++ urlchar = [a-zA-Z0-9;/?:&=$\-_.+@] - | "%" [0-9] [0-9] => "%" + | "%":: "%" [0-9] [0-9] url = "mailto" ":" email - > method "://" url_login? host (":" nums)? ("/" urlpath)? => "url" -url_login = username (":" password) "@" => "login" -method = [+\-.a-z0-9]+ => stringify -domain = (part +/ ".") -> ~"." => domain -part = [a-zA-Z0-9\-]++ => stringify + > url:: method "://" url_login? host (":" nums)? ("/" urlpath)? +url_login = login:: username (":" password) "@" +method = stringify:: [+\-.a-z0-9]+ +domain = domain:: (part +/ ".") -> ~"." +part = stringify:: [a-zA-Z0-9\-]++ // interesting use of boolean grammars // &~ ([\-0-9] ~[]* | ~[]* [\-0-9]) -email = username "@" host -> ~[.] => emailaddr -nums = [0-9]++ => stringify -host = nums "." nums "." nums "." nums => "ip" +email = emailaddr:: username "@" host -> ~[.] +nums = stringify:: [0-9]++ +host = ip:: nums "." nums "." nums "." nums | domain // Tokens /////////////////////////////////////////////////////////////////// -word = alphanum++ => stringify +word = stringify:: alphanum++ | quoted quoted = "\"" ((~[\"\\] | escaped)+) "\"" - | "\"\"" => "" -escaped = "\\n" => "\n" - | "\\r" => "\r" + | "":: "\"\"" +escaped = "\n":: "\\n" + | "\r":: "\\r" | "\\" ~[nr]