我会尝试稍微破解 MediaWiki 的代码,但我发现如果我能获得一个独立的解析器,那将是不必要的。
谁能帮我这个?
谢谢。
本休斯是对的。很难做到正确,特别是如果您想以 100% 的准确率解析来自大型 wiki(如 Wikipedia 本身)的真实文章。它在 wikitech 邮件列表中经常讨论,尽管进行了多次尝试,但没有替代解析器提出该商品。
首先,它不是真正的解析器,因为它没有像 AST(抽象语法树)这样的概念。它是一个专门转换为 HTML 的转换器。
其次,不要陷入将 wikitext 视为一种标记语言的陷阱,这种语言在极少数情况下可以使用 HTML 进行扩展。您必须将其视为 HTML 的扩展。将 wikitext 支持添加到 HTML 解析器比将 HTML 支持添加到 wikitext 解析器要容易得多。
这归结为,如果您想要任何其他格式,则需要将 HTML 转换为该格式。
基本上说只有 MediaWiki 可以解析 wikitext。但是是的,解析器与其余代码紧密集成。经验丰富的 MediaWiki 黑客对有关隔离解析器的问题反应不佳 - 我尝试过 (-:
但无论如何,我也已经将其隔离了。它尚未完成或准备好与任何人分享。但基本上你想从没有安装或连接到数据库或 Web 服务器的 MediaWiki 源开始。制作一个包含解析器并调用入口点的 PHP 存根程序。当它运行失败时检查错误,并为访问的类、函数或全局创建一个假存根。重复,直到您将解析器与 MediaWiki 的其余部分交互的大部分地方都存根。
然后问题就在于保持你被黑的存根变体同步,因为源代码树变化很快,实时 wiki 很快接受解析器中的变化,如果它要在未来工作,你的变体必须跟上。
查看我的功能请求:错误 25984 - 将解析器与数据库依赖项隔离开来
它实际上是一种非常难以解析的格式。您可以尝试将解析器组件从媒体 wiki 中分离出来(因为它也是 php),但它是一团糟。我见过一些部分独立的,它们为非常有限的标记子集做了几乎合理的工作。
如果您碰巧实现了一个,或者重构了当前的维基百科,请告诉我,因为它可能非常有用。