我有兴趣有选择地解析Mediawiki XML标记,以生成一个自定义HTML页面,该页面是实际PHP Mediawiki渲染引擎生成的HTML的一部分.
我想要它用于BzReader,一个用C#编写的离线Mediawiki压缩转储读取器.所以C#解析器是理想的,但任何好的代码都会有所帮助.
当然,如果以前没有人做过,我想是时候开始一个项目维护一个免费的,独立的Mediawiki解析器,基于Mediawiki自己的解析器,但与Mediawiki本身不太紧密集成.
那么,有没有人知道我可以开始的任何基础,这比通过Mediawiki PHP代码的黑客攻击更好?
http://www.mediawiki.org/wiki/Alternative_parsers上有一个解析器列表,但是那里不包含ac#parser ...
更新
Bare记住Screwturn不会坚持Mediawiki语法,但使用自己的变体,它确实有所不同.
Mediawiki语法不适用于LALR解析器(甚至LL*),因为它在定义中有很多含糊之处,并且还允许使用HTML.在这个问题中有一个讨论,你基本上是编写自己的解析器和标记器,而不是简单地为它编写BNF文件,然后使用ANTLR/Gold/Irony.
Roadkill Wiki使用Creole解析器进行Mediawiki解析,但支持有限.
Screwturn是在GPL许可下发布的,并且有一个C#解析器:
Screwturn许可证
Screwturn源代码下载(遗憾的是没有web svn)
你所经历的类是Core.Formatter,它有很多正则表达式来完成它的工作:
public static class Formatter { }
这不是最好看的代码"但它有效".