diff --git a/topics/grammars/wiki/simple/MediaWiki.rsc b/topics/grammars/wiki/simple/MediaWiki.rsc new file mode 100644 index 00000000..9a147614 --- /dev/null +++ b/topics/grammars/wiki/simple/MediaWiki.rsc @@ -0,0 +1,54 @@ +module MediaWiki + +syntax WikiText = WikiSymbol*; + +syntax WikiSymbol + = MWWord w + | WikiLink wl; + +syntax WikiLink + = simple: "[[" PageName destination "]]" + | barred: "[[" PageName destination "|" MWWord+ description "]]" + ; + +lexical MWWord + = ![\ \t\n\r\[\]]+ !>> ![\ \t\n\r\[\]] + ; + +// http://en.wikipedia.org/wiki/Wikipedia:Naming_conventions_(technical_restrictions)#Forbidden_characters +lexical PageName + = ![#\<\>\[\]|{}\t\n\r]+ !>> ![#\<\>\[\]|{}\t\n\r] + ; + +layout MediaWiki = [\ \t\n\r]* !>> [\ \t\n\r]; + +// needed if you want to run an eclipse editor +public WikiText parsewikitext(str i, loc s){return parse(#WikiText, i, s);} +// import util::IDE; +// import MediaWiki; +// registerLanguage("MediaWiki","wiki",parsewikitext); +// registerContributions("MediaWiki",{popup(menu("ANTLR",[edit("transform", ppWT)]))}); + + +public str ppWT((WikiText)``) +{ + return "<}>"; +} + +public str ppWS((WikiSymbol)``) +{ + return ""; +} + +public str ppWS((WikiSymbol)``) +{ + if ( wl.prod.def.name == "simple" ) + return "[[]]"; + else + return "[[|]]"; +} + +// import MediaWiki; +// parse(#WikiText,|project://wiki/src/test.wiki|) +// parse(#WikiText,"some [[Wiki]] text") +// ppWT(parse(#WikiText,"some [[Wiki]] text"))