X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=tests%2Ftibdoc.g;h=80c8cefaa01077bc7d13787d028ecce72c29a3c3;hp=442e203214b2d88794bb76e92d072d4e802cfe75;hb=59eead6bf0f2d9a7abeba03f3fdab04625521faf;hpb=6ba9ea820f9626a7504da6cf442e2cef1601914f diff --git a/tests/tibdoc.g b/tests/tibdoc.g index 442e203..80c8cef 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? @@ -20,10 +19,7 @@ x ="x" // [1] http://... // -// consider ++bold++ and **italic**? -// \br // nonbreaking text? -// ellipsis detection (...) // degree: 15^o // Arrows: <- -> => <= <-> @@ -40,7 +36,6 @@ x ="x" // #include // simple macros (#define) (\define) -// today's date // table representation // @@ -53,83 +48,85 @@ 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 = Doc -Doc = {Header} Body /ws => doc -Header = "header" { kv */ ws } /ws => header -Body = Section*/ws => body -Section = { SectionHeader Paragraph* /ws => section } +Doc = head:Header body:Body /ws +Header = H:: { "header" { KeyVal */ ws } /ws } +Body = B:: {Section}*/ws +Section = SectionHeader ws! (Paragraph Paragraph) SectionHeader = "==" SectionHeaderBody "==" SectionHeaderBody = "=" SectionHeaderBody "=" - > ws text 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" - -onums ! = nums (". "|") ") -any ! = ~[]* - -uli = "* " (ws text &~ any (oli|uli)) => "li" -oli = ("# "|onums) (ws text &~ any (oli|uli)) => "li" - -text = Item => text -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" + > ws! alphanum++ ws! + +sp = " "** +blank = sp! "\n" sp! "\n" ws! + +KeyVal = key:word "=" val:text /ws +wp = w++ +num = [0-9]++ + +Paragraph = Blockquote:: { "\"\" " text } + > HR:: { "---" "-"* } + > P:: { text } + +onums = nums (". "|") ")! +any = ~[]* + +uli = "* " (ws! text &~ any (oli|uli)!) +oli = ("# "|onums)! (ws! text &~ any (oli|uli)!) + +text = Item + +Item*/ws = + blockquote + > { UL:: uli+/ws } + | { OL:: oli+/ws } + > pre + > link + > structured + > styled + > (Chars:: alphanum++) + > "\"" text "\"" + > (Symbol:: sym++) +// > { Block:: text } + +blockquote = "adsfafewag" +//blockquote = Blockquote:: "\"\"" (block | text "\"\"") -qtext = "\"" text "\"" => "quoted" -pre = "[verbatim]" { ~[]+ } /ws => "verbatim" // FIXME doesn't work - -styled = "__" text "__" => underline - | "((" text "))" => footnote - | ( "[[" text "]]" => tt - > "[" word "]" => citation - ) - | "!!" text "!!" => strikethrough - | "^^" (word|block) => superscript - | ",," (word|block) => subscript - | "\\sc" block => smallcap - | "**" text "**" => bold - | "!" (word|block) => keyword - > "*" text "*" => it - -block = { text } -structured = { text } "->" (url|email) => link - //> alphanum++ "->" (url|email) => link -structuredx = glyph +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 = LinkText:: text:({ text }) "->" href:(url|email) + > LinkChars:: text:alphanum++ ws! "->" href:(url|email) + +structured = command & "\\" ([a-zA-Z0-9]++)! block? + > glyph > email > url -glyph = "(r)" | "(c)" | "(tm)" | "--" // euro symbol? - | "\\today" -> ~[a-z] => today +glyph = Euro:: "(e)" | "(r)" | "(c)" | "(tm)" | emdash:: "--" | "..." +command = Today:: "\\today" + | LineBreak:: "\\br" // URLs ////////////////////////////////////////////////////////////////////////////// @@ -138,42 +135,50 @@ glyph = "(r)" | "(c)" | "(tm)" | "--" // euro symbol? // only gets parsed once 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 - > 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 +username = [a-zA-Z0-9;/?:&=$\-_.+]++ +password = [a-zA-Z0-9;/?:&=$\-_.+]++ +urlc = [a-zA-Z0-9;/?:&=$\-_.+@] +urlv = urlc | [%] +urlchar = urlc + | urlescape:: "%" [0-9] [0-9] +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 +/ ".") -> ~"." +part = [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" - | domain +email = user:username "@" host:host -> ~[.] +nums = [0-9]++ +host = IP:: nums "." nums "." nums "." nums + | DNS:: domain // Tokens /////////////////////////////////////////////////////////////////// -word = alphanum++ => stringify +word = alphanum++ | quoted quoted = "\"" ((~[\"\\] | escaped)+) "\"" - | "\"\"" => "" -escaped = "\\n" => "\n" - | "\\r" => "\r" + | "\"\"":: "\"\"" +escaped = lf:: "\\n" + | cr:: "\\r" | "\\" ~[nr] // Chars /////////////////////////////////////////////////////////////// alpha = [a-zA-Z] -//num = [0-9] alphanum = [a-zA-Z0-9] sym = ~[a-zA-Z0-9\ \r\n=\">]