X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=tests%2Ftibdoc.g;h=1df3fb80ee6e86e142fe9fb181b3bc49c5f24aa8;hb=92632cd2b60dc20e157128696edc81e3a07eaec6;hp=918e80cccf12995c8b0e60a55954253a6c0a2dd1;hpb=a172395c46dac0c9fe82b6aa236abcd4f422fc08;p=sbp.git diff --git a/tests/tibdoc.g b/tests/tibdoc.g index 918e80c..1df3fb8 100644 --- a/tests/tibdoc.g +++ b/tests/tibdoc.g @@ -1,3 +1,5 @@ +x::="x" +// interactions between !=> and &~ mean that I need to rethink the chartage // indentation styling... // literal blocks [[need to ignore bracing]] double-colon style? // definition -- by prior line indentation, like headings in the original structured text @@ -5,80 +7,86 @@ // dropcap // output formats: latex, contex, ps, pdf, html, man, txt, rfc -// URGENT: why does swapping [a-zA-Z0-9] for alphanum in "item" cause severe breakage? -// URGENT: why does enabling "url" cause severe breakage? (probably same cause) -// ... something to do with unit productions - -// output formats: latex, contex, ps, pdf, html, man, txt, rfc -// bullet list -// numbered list -// horizontal rule -// dropcap -// smallcap -// strikethrough -// link +// escapification +// comment // math // image -// today's date, last edit date -// blockquote -// superscript -// subscript -// citations/references -// typewriter-text // 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\ ] +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 /ws => section +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 -kv ::= word "=" text /ws => kv1 +sp !::= " "** +blank ::= sp "\n" sp "\n" ws +kv ::= word "=" text /ws => kv1 +wp !::= w++ num !::= [0-9]++ -Paragraph ::= { "\"\"" ws text } => "blockquote" - > { "*" " " ws text } => "ul" - > { "#" " " ws text } => "ol" - > { num " " ws text } => "ol" - > { "---" "-"* } => "hr" - > { text } => "p" - -text ::= item */ ws -pre ::= "[verbatim]" { [~]+ } /ws => "verbatim" // FIXME doesn't work -item ::= pre - > email - > structured - > styled - > "\"" text "\"" => quoted - > [a-zA-Z0-9]++ - > symbol - -symbol ::= symbolx & sym++ -symbolx ::= "--" => emdash - | "," - | ":" - | ";" - -styled ::= "**" text "**" => bold - | "__" text "__" => ul - | "~~" text "~~" => it // hard to type - | "((" text "))" => footnote - -structured ::= glyph -// | url - -glyph ::= "(r)" | "(c)" | "(tm)" // euro symbol? +Paragraph ::= { "\"\"" ws text } => "blockquote" + > uli+/ws => "ul" + > { "# " text } => "ol" + > { num " " ws text } => "ol" + > { "---" "-"* } => "hr" + > { text } => "p" +uli ::= { "* " text } => "li" + +text ::= Item => text +Itemx ::= ws Item + | () +Item ::= blockquote + > pre Itemx => [] + > structured Itemx => [] + > structuredx Itemx => [] + > styled Itemx => [] + > qtext Itemx => [] + > (alphanum++ => stringify) Itemx => [] + > symbol Itemx => [] + > (sym++ => stringify) Itemx => [] + > Paragraph => "" + > Paragraph Itemx => [] + +blockquote ::= "\"\"" text "\"\"" => "blockquote" + | "\"\"" block => "blockquote" + +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 + > email + > url + +glyph ::= "(r)" | "(c)" | "(tm)" | "--" // euro symbol? + | "\\today" -> ~[a-z] => today // URLs ////////////////////////////////////////////////////////////////////////////// @@ -88,43 +96,43 @@ glyph ::= "(r)" | "(c)" | "(tm)" // euro symbol? // only gets parsed once urlpath ::= urlchar* -username ::= [a-zA-Z0-9;/?:&=$\-_.+]++ -password ::= [a-zA-Z0-9;/?:&=$\-_.+]++ +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 (":" port)? ("/" urlpath)? => "url" -url_login ::= username (":" password) "@" => "login" -method ::= [+\-.a-z0-9]+ -port ::= [0-9]+ - -domain ::= part +/ "." -part ::= [a-zA-Z0-9\-]++ // interesting use of boolean grammars -// &~ ([\-0-9] [~]* | [~]* [\-0-9]) - -email ::= username "@" host => email -host ::= [0-9]+ "." [0-9]+ "." [0-9]+ "." [0-9]+ => "ip" + > 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 +// interesting use of boolean grammars +// &~ ([\-0-9] ~[]* | ~[]* [\-0-9]) + +email ::= username "@" host -> ~[.] => emailaddr +nums ::= [0-9]++ => stringify +host ::= nums "." nums "." nums "." nums => "ip" | domain // Tokens /////////////////////////////////////////////////////////////////// -word ::= alphanum++ +word ::= alphanum++ => stringify | quoted -quoted ::= "\"" (([~\"\\] | escaped)+) "\"" +quoted ::= "\"" ((~[\"\\] | escaped)+) "\"" | "\"\"" => "" escaped ::= "\\n" => "\n" | "\\r" => "\r" - | "\\" [~nr] + | "\\" ~[nr] // Chars /////////////////////////////////////////////////////////////// alpha ::= [a-zA-Z] -num ::= [0-9] +//num ::= [0-9] alphanum ::= [a-zA-Z0-9] -sym ::= [~a-zA-Z0-9\ \r\n] +sym ::= ~[a-zA-Z0-9\ \r\n=\">]