【问题标题】:Mediawiki tag extension - chained tags do not get processedMediawiki 标签扩展 - 链接标签不被处理
【发布时间】:2011-10-03 19:43:29
【问题描述】:

我正在尝试为 Mediawiki 开发一个简单的Tag Extension。到目前为止,我基本上是输出输入。当存在链接标签时,就会出现问题。例如,对于这个例子:

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 的参考几乎不存在,如果有像 Doxygen 参考之类的东西会很棒。

【问题讨论】:

    标签: php mediawiki


    【解决方案1】:

    使用$parser-&gt;recursiveTagParse(),如Manual:Tag_extensions#How do I render wikitext in my extension?所示。

    这是一种笨拙的界面,并且没有很好的文档记录。这种看似自然的事情做起来如此棘手的根本原因是它有点违背标签扩展的原始设计意图——它们最初被认为是低级过滤器,接收原始未解析的文本并吐出 HTML ,完全绕过正常解析。因此,例如,如果您想在 wiki 页面上包含一些用 Markdown 编写的内容(例如 StackOverflow 帖子),那么您可以安装合适的扩展程序,然后编写

    <markdown>
    **Look,** here's some Markdown text!
    </markdown>
    

    在页面上,MediaWiki 解析器会将 标记之间的所有内容单独保留,并将其交给扩展程序进行解析。

    当然,事实证明大多数编写 MediaWiki 标签扩展的人并不是真的想要替换解析器,而只是对其进行一些调整。但是标签扩展接口的设置方式,唯一的方法是递归调用解析器。我有时认为向 MediaWiki 添加一个新的解析器扩展类型会很好,它看起来 像标签扩展,但不会以如此激烈的方式中断正常的解析。唉,到目前为止,我的动力和丰富的空闲时间还不足以真正做点什么。

    【讨论】:

    • 谢谢,但它似乎无法正确解析相同类型的嵌套标签。例如,使用这个:return "[ " . $parser -&gt; recursiveTagParse ($input, $frame) . " ]"; 这个输入:&lt;sample&gt;Before &lt;sample&gt; Inside &lt;/sample&gt; After &lt;/sample&gt; 我得到的输出是[ Before [ Inside ] ] After &lt;/sample&gt;
    • 啊,我明白了。你可能不走运:见MediaWiki bug #1310
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2023-04-08
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多