【发布时间】:2020-09-29 16:23:40
【问题描述】:
这是在 MediaWiki 中显示源代码的方式:
<syntaxhighlight lang="xml" line>
<abc x="123" />
</syntaxhighlight>
在本例中,“<abc x="123"/>”将正确呈现。但是,如果我想将这个 XML 片段“<abc x="123"/>”传递给某个任意模板,而 反过来 会将此内容传递给 syntaxhighlight 扩展,该怎么办?如何才能做到这一点?标准方法似乎不起作用。
我已经想通了:
-
syntaxhighlight扩展可以通过{{#tag:syntaxhighlight{{{1}}}|lang="xml"|line=1}}调用。这可以放入模板中。 - 将一些任意 XML 内容传递给模板似乎是个问题。无论我尝试什么似乎都不起作用。即使使用
<nowiki>...</nowiki>也无济于事:在这种情况下,所有“&lt;”都会被“&lt;”替换。
你有什么想法,甚至知道解决这个问题的方法吗?
更新:我全新安装了 MW 1.34.3,以使其与试图在 stackoverflow 上帮助我的人尽可能相同。现在:
- MW:1.34.3
- SMW:3.2.0
- 语法高亮:2.0
名为SVGExample的模板:
{{#tag:syntaxhighlight|{{{1|}}}|lang="xml"|line=1}}
维基页面的内容:
{{SVGExample|<nowiki><abc x="123"/></nowiki>}}
结果:
1 <abc x="123"/>
这似乎与 MediaWiki 扩展无关。我停用了除MagicNoCache、SyntaxHighlight_GeSHi、ParserFunctions 之外的所有扩展程序,我得到了相同的结果。
为那些想要深入研究的人更新:
似乎解决占位符会在这里引入问题。即使使用建议的将数据传递给参数的方式,也有一些处理:评论被过滤掉。我在自定义扩展中的实验表明,一旦你解析了传递给模板的参数,数据就会被 HTML 编码,从而导致不需要的 &lt; 实体(和其他实体)。 SyntaxHighlight 扩展做了某种魔术来避免这种现象,因为它在解析模板参数后接收原始数据,而 $parser->recursiveTagParse(...) 的经典方法在这方面失败了。
【问题讨论】: