我会尝试稍微破解MediaWiki的代码,但我发现如果我能获得一个独立的解析器就没有必要了。
任何人都可以帮我吗?
感谢。
答案 0 :(得分:6)
首先,它不是真正的解析器,因为它没有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),但这是一个混乱的混乱。我已经看到一些部分独立的,对于非常有限的标记子集来说几乎是合理的工作。
如果您碰巧实现了一个,或者重构当前的维基百科,请告诉我,因为它可能非常有用。