X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=tests%2Ftibdoc.g;h=650b06e52e8c1b6439e11363fa37749005f6b6cb;hp=a2f5cacac3fad3e838888e932aad54ee3c5fd85b;hb=86e7e1298601b60df964e3c0a71f3fe3cca230b8;hpb=5964a1161340a16d7dea471372737f2474576ceb diff --git a/tests/tibdoc.g b/tests/tibdoc.g index a2f5cac..650b06e 100644 --- a/tests/tibdoc.g +++ b/tests/tibdoc.g @@ -1,4 +1,4 @@ -x::="x" +x ="x" // interactions between !=> and &~ mean that I need to rethink the chartage // indentation styling... // literal blocks [[need to ignore bracing]] double-colon style? @@ -14,42 +14,42 @@ x::="x" // 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\ ] +ws ! = w** +w ! = [\r\n\ ] +nw = ~[\r\n\ ] ////////////////////////////////////////////////////////////////////////////// -s ::= Doc => top +s = Doc => top -Doc ::= {Header} Body /ws => doc -Header ::= "header" { kv */ ws } /ws => header -Body ::= Section*/ws => body -Section ::= { SectionHeader Paragraph* /ws => section } -SectionHeader ::= "==" SectionHeaderBody "==" -SectionHeaderBody ::= "=" SectionHeaderBody "=" +Doc = {Header} Body /ws => doc +Header = "header" { kv */ ws } /ws => header +Body = Section*/ws => body +Section = { SectionHeader Paragraph* /ws => section } +SectionHeader = "==" SectionHeaderBody "==" +SectionHeaderBody = "=" SectionHeaderBody "=" > 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" +kv = word "=" text /ws => kv1 +wp ! = w++ +num ! = [0-9]++ +Paragraph = { "\"\"" ws text } => "blockquote" > { "---" "-"* } => "hr" > { text } => "p" -onums !::= nums (". "|") ") -any !::= ~[]* +onums ! = nums (". "|") ") +any ! = ~[]* -uli ::= "* " (ws text &~ any (oli|uli)) => "li" -oli ::= ("# "|onums) (ws text &~ any (oli|uli)) => "li" +uli = "* " (ws text &~ any (oli|uli)) => "li" +oli = ("# "|onums) (ws text &~ any (oli|uli)) => "li" -text ::= Item => text -Itemx ::= ws Item +text = Item => text +Itemx = ws Item | () -Item ::= blockquote +Item = blockquote > { uli+/ws => "ul" } Itemx => [] | { oli+/ws => "ol" } Itemx => [] > pre Itemx => [] @@ -62,13 +62,13 @@ Item ::= blockquote > (sym++ => stringify) Itemx => [] > Paragraph Itemx => [] -blockquote ::= "\"\"" text "\"\"" => "blockquote" +blockquote = "\"\"" text "\"\"" => "blockquote" | "\"\"" block => "blockquote" -qtext ::= "\"" text "\"" => "quoted" -pre ::= "[verbatim]" { ~[]+ } /ws => "verbatim" // FIXME doesn't work +qtext = "\"" text "\"" => "quoted" +pre = "[verbatim]" { ~[]+ } /ws => "verbatim" // FIXME doesn't work -styled ::= "__" text "__" => underline +styled = "__" text "__" => underline | "((" text "))" => footnote | ( "[[" text "]]" => tt > "[" word "]" => citation @@ -81,14 +81,14 @@ styled ::= "__" text "__" => underline | "!" (word|block) => keyword > "*" text "*" => it -block ::= { text } -structured ::= { text } "->" (url|email) => link +block = { text } +structured = { text } "->" (url|email) => link //> alphanum++ "->" (url|email) => link -structuredx ::= glyph +structuredx = glyph > email > url -glyph ::= "(r)" | "(c)" | "(tm)" | "--" // euro symbol? +glyph = "(r)" | "(c)" | "(tm)" | "--" // euro symbol? | "\\today" -> ~[a-z] => today @@ -98,44 +98,44 @@ glyph ::= "(r)" | "(c)" | "(tm)" | "--" // euro symbol? // subtypes of url (ftp, etc) as conjunctions, but the "master pattern" // only gets parsed once -urlpath ::= urlchar* -username ::= [a-zA-Z0-9;/?:&=$\-_.+]++ => stringify -password ::= [a-zA-Z0-9;/?:&=$\-_.+]++ => stringify -urlchar ::= [a-zA-Z0-9;/?:&=$\-_.+@] +urlpath = urlchar* +username = [a-zA-Z0-9;/?:&=$\-_.+]++ => stringify +password = [a-zA-Z0-9;/?:&=$\-_.+]++ => stringify +urlchar = [a-zA-Z0-9;/?:&=$\-_.+@] | "%" [0-9] [0-9] => "%" -url ::= "mailto" ":" email +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_login = username (":" password) "@" => "login" +method = [+\-.a-z0-9]+ => stringify +domain = (part +/ ".") -> ~"." => domain +part = [a-zA-Z0-9\-]++ => stringify // interesting use of boolean grammars // &~ ([\-0-9] ~[]* | ~[]* [\-0-9]) -email ::= username "@" host -> ~[.] => emailaddr -nums ::= [0-9]++ => stringify -host ::= nums "." nums "." nums "." nums => "ip" +email = username "@" host -> ~[.] => emailaddr +nums = [0-9]++ => stringify +host = nums "." nums "." nums "." nums => "ip" | domain // Tokens /////////////////////////////////////////////////////////////////// -word ::= alphanum++ => stringify +word = alphanum++ => stringify | quoted -quoted ::= "\"" ((~[\"\\] | escaped)+) "\"" +quoted = "\"" ((~[\"\\] | escaped)+) "\"" | "\"\"" => "" -escaped ::= "\\n" => "\n" +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=\">] +alpha = [a-zA-Z] +//num = [0-9] +alphanum = [a-zA-Z0-9] +sym = ~[a-zA-Z0-9\ \r\n=\">]