Mediawiki标记的开源解析器代码

Asa*_*tov 7 php c# parsing mediawiki open-source

我有兴趣有选择地解析Mediawiki XML标记,以生成一个自定义HTML页面,该页面是实际PHP Mediawiki渲染引擎生成的HTML的一部分.

我想要它用于BzReader,一个用C#编写的离线Mediawiki压缩转储读取器.所以C#解析器是理想的,但任何好的代码都会有所帮助.

当然,如果以前没有人做过,我想是时候开始一个项目维护一个免费的,独立的Mediawiki解析器,基于Mediawiki自己的解析器,但与Mediawiki本身不太紧密集成.

那么,有没有人知道我可以开始的任何基础,这比通过Mediawiki PHP代码的黑客攻击更好?

wim*_*ica 7

http://www.mediawiki.org/wiki/Alternative_parsers上有一个解析器列表,但是那里不包含ac#parser ...

  • @Francis,查看不到一个月前它似乎更新的历史(PHP5 WP已被添加).但你可能是对的,它不完整,而且不再存在的项目仍在列表中.与所有维基媒体项目一样,任何人都可以编辑该页面以改进它.这并不意味着有人有责任让它完全保持最新状态. (2认同)

Chr*_*s S 6

更新
Bare记住Screwturn不会坚持Mediawiki语法,但使用自己的变体,它确实有所不同.

Mediawiki语法不适用于LALR解析器(甚至LL*),因为它在定义中有很多含糊之处,并且还允许使用HTML.在这个问题中有一个讨论,你基本上是编写自己的解析器和标记器,而不是简单地为它编写BNF文件,然后使用ANTLR/Gold/Irony.

Roadkill Wiki使用Creole解析器进行Mediawiki解析,但支持有限.


Screwturn是在GPL许可下发布的,并且有一个C#解析器:

你所经历的类是Core.Formatter,它有很多正则表达式来完成它的工作:

public static class Formatter {

}
Run Code Online (Sandbox Code Playgroud)

这不是最好看的代码"但它有效".