我正在尝试为Mediawiki开发一个简单的标签扩展。到目前为止,我基本上是把输入输出出来。当有链式标签时,问题就出现了。例如,对于这个例子:
function efSampleParserInit( Parser &$parser ) {
$parser->setHook( 'sample', 'efSampleRender' );
return true;
}
function efSampleRender( $input, array $args, Parser $parser, PPFrame $frame ) {
return "hello ->" . $input . "<- hello";
}
如果我在一篇文章中这样写:
This is the text <sample type="1">hello my <sample type="2">brother</sample> John</sample>
只处理第一个sample
标签。另一个不是。我想我应该工作与$parser
对象,我收到,所以我返回解析的输入,但我不知道如何做到这一点。
此外,Mediawiki的参考资料几乎不存在,如果有类似氧气参考之类的东西就太好了。
使用$parser->recursiveTagParse()
,如Manual:Tag_extensions#我如何在扩展中呈现wikittext .
它是一种笨拙的界面,并且没有很好的文档。这样一件看似自然的事情却很难完成,其根本原因是它违背了标签扩展的原始设计意图。它们最初被认为是低级过滤器,可以接收未解析的原始文本并生成HTML,完全绕过正常的解析。因此,例如,如果您想在wiki页面上包含一些用Markdown编写的内容(例如StackOverflow帖子),那么您可以安装一个合适的扩展,然后写入
<markdown>
**Look,** here's some Markdown text!
</markdown>
, MediaWiki解析器会在
当然,大多数编写MediaWiki标签扩展的人并不是真的想要替换解析器,而只是对它进行一些调整。但是根据设置标记扩展接口的方式,唯一的方法是递归地调用解析器。我有时会想,在MediaWiki中添加一种新的解析器扩展类型会很好,这种类型的看起来像标签扩展,但不会以如此激烈的方式中断正常的解析。唉,到目前为止,我的动机和大量的空闲时间还不足以真正做些什么。