【问题标题】:Where can I find a good MediaWiki Markup parser in PHP?我在哪里可以找到 PHP 中好的 MediaWiki 标记解析器?
【发布时间】:2009-06-22 19:33:16
【问题描述】:

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

谁能帮我解决这个问题?

谢谢。

【问题讨论】:

标签: php parsing mediawiki markup


【解决方案1】:

本休斯是对的。很难做到正确,特别是如果您想以 100% 的准确率解析来自大型 wiki(如 Wikipedia 本身)的真实文章。它在 wikitech 邮件列表中经常被讨论,尽管经过多次尝试,但没有任何替代解析器提出。

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

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

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

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

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

问题在于保持你被黑的存根变体同步,因为源代码树变化很快,实时 wiki 很快接受解析器中的变化,如果它要在未来工作,你的变体必须跟上。

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

【讨论】:

【解决方案2】:

这实际上是一种非常难以解析的格式。您可以尝试将解析器组件从媒体 wiki 中分离出来(因为它也是 php),但它是一团糟。我见过一些部分独立的,它们为非常有限的标记子集做了几乎合理的工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2011-03-04
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多