我该在哪里找到一个好的PHP MediaWiki标记解析器?

5

我本来想尝试一下黑客攻击MediaWiki的代码,但是后来发现如果能够获得一个独立的解析器,这样做就不必要了。

有人可以帮助我吗?

谢谢。


不是完全相同的问题,但请参考这个链接:https://dev59.com/lEXRa4cB1Zd3GeqPveEw - Sasha Chedygov
2个回答

6
Ben Hughes说得对。特别是如果你想要以100%的准确性解析来自维基百科等大型维基网站的真实文章,这将非常困难。这个问题经常在wikitech邮件列表中讨论,尽管有许多尝试,但没有其他可替代的解析器能够胜任。
首先,它实际上并不是一个解析器,因为它没有抽象语法树(AST)的概念。它是一个专门将文本转换为HTML的转换器。
其次,不要陷入认为维基文本是一个可以偶尔使用HTML扩展的标记语言的陷阱。你必须把它看作是HTML的扩展。向HTML解析器添加维基文本支持比向维基文本解析器添加HTML支持容易得多。
总之,如果你想要任何其他格式,你需要从HTML转换到该格式。
基本上,只有MediaWiki可以解析维基文本。但是,解析器与其他代码紧密集成。有经验的MediaWiki黑客对于隔离解析器的问题反应不佳 - 我已经尝试过了(-:
但我还是隔离了它。它还不完整,也没有准备好与任何人分享。但基本上,你需要从未安装或连接到数据库或Web服务器的MediaWiki源代码开始。创建一个包含解析器的PHP存根程序,并调用入口点。当它无法运行时检查错误并制作一个虚假的存根类、函数或全局变量。重复这个过程,直到你已经为解析器与MediaWiki的大部分交互位置制作了存根。
然后问题就来了,如何保持你的黑客存根版本与源代码树的同步,因为源代码树变化很快,现有的维基网站会非常快地接受解析器的变化,如果你想要让它在未来继续工作,你的变体也必须跟上变化。
请查看我的功能请求:Bug 25984 - 隔离解析器与数据库依赖关系

1
现在至少有一些文档可供参考了... (https://doc.wikimedia.org/mediawiki-core/master/php/classParser.html#details) - mb21

3

实际上,这是一种非常难以解析的格式。您可以尝试将解析器组件从MediaWiki中分离出来(因为它也是PHP),但它是一个混乱的麻烦。我见过一些部分独立的解析器,对于极其有限的标记子集,它们做得相当不错。

如果您恰好实现了其中之一,或重构了当前的维基百科解析器,请告诉我,因为它可能非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接