我在哪里可以找到一个好的MediaWiki Markup解析器?

时间:2009-06-22 19:33:17

标签: php parsing mediawiki markup

我会尝试稍微破解MediaWiki的代码,但我发现如果我能获得一个独立的解析器就没有必要了。

任何人都可以帮我吗?

感谢。

2 个答案:

答案 0 :(得分:6)

本休斯是对的。这很难做到正确,特别是如果你想以100%的准确率解析维基百科等大维基的真实文章。 wikitech邮件列表中经常对此进行讨论,尽管进行了多次尝试,但没有替代解析器提供商品。

首先,它不是真正的解析器,因为它没有AST(抽象语法树)这样的概念。它是一个专门转换为HTML的转换器。

其次不要陷入将wikitext视为标记语言的陷阱,这种语言可以在极少数情况下使用HTML进行扩展。您必须将其视为HTML的扩展。向HTML解析器添加wiki文本支持要比向wiki文本解析器添加HTML支持要容易得多。

这归结为如果你想要任何其他格式,你需要从HTML转换为该格式。

基本上声明只有MediaWiki可以解析wiki文本。但是,解析器与其余代码紧密集成。有经验的MediaWiki黑客对隔离解析器的问题反应不好 - 我试过( - :

但我还是继续前进并将其隔离开来。它还没有完整或准备好与任何人分享。但基本上你想从未安装或连接到数据库或Web服务器的MediaWiki源开始。创建一个包含解析器并调用入口点的PHP存根程序。无法运行时检查错误,并为访问的类,函数或全局创建虚假存根。重复,直到您将解析器与MediaWiki的其余部分交互的大多数位置存根。

然后问题在于保持被黑客的存根变体同步,因为源树快速变化,而实时wiki很快就会接受解析器中的更改,如果要在未来工作,您的变体将不得不跟上。

查看我的功能请求:Bug 25984 - Isolate parser from database dependencies

答案 1 :(得分:3)

这实际上是一种非常难以解析的格式。你可以尝试将解析器组件从媒体wiki中分离出来(因为它也是php),但这是一个混乱的混乱。我已经看到一些部分独立的,对于非常有限的标记子集来说几乎是合理的工作。

如果您碰巧实现了一个,或者重构当前的维基百科,请告诉我,因为它可能非常有用。