php - 我在哪里可以找到一个好的 MediaWiki 标记解析器在 PHP 中?

标签 php parsing mediawiki markup

我会尝试对 MediaWiki 的代码进行一些修改,但我发现如果我可以获得一个独立的解析器就没有必要了。

谁能帮我解决这个问题?

谢谢。

最佳答案

本·休斯是对的。很难做到正确,尤其是如果您想以 100% 的准确度解析来自像维基百科这样的大型维基百科的真实文章。它在 wikitech 邮件列表中经常被讨论,尽管进行了多次尝试,但没有替代解析器提出这个问题。

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

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

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

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

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

接下来的问题是保持你被黑的 stub 变体同步,因为源代码树变化很快,实时维基很快接受解析器的变化,如果你的变体要在未来工作,就必须跟上。

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

关于php - 我在哪里可以找到一个好的 MediaWiki 标记解析器在 PHP 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1029012/

相关文章:

php - 用 WooCommerce 4+ 中选择的变化价格替换可变价格范围

php - 我的表格只提交一次

javascript - 通过 ajax 将变量从我的表单获取到我的解析器文件

json - 如何在 Elasticsearch 中进行部分匹配?

javascript - 通过浏览器后退按钮访问表单未触发 "Confirm form resubmit"

MediaWiki 中的 Javascript

php - 多维数组中的数组排列保持键PHP

parsing - 为什么静态解析器生成器比动态解析器​​生成器更普遍?

css - mediawiki:如何覆盖给定皮肤的 css 命令?

php - 如何使用 DOMDocument 获取标签内容?