这就是在MediaWiki中显示源代码的方法:
<syntaxhighlight lang="xml" line>
<abc x="123" />
</syntaxhighlight>
在这个例子中;CCD_ 1";将正确渲染。但是如果我想传递这个XML snipplet";CCD_ 2";到某个任意模板,反过来会将此内容传递给syntaxhighlight
扩展?如何做到这一点?标准方法似乎不起作用。
我已经明白了:
- 可以通过
{{#tag:syntaxhighlight{{{1}}}|lang="xml"|line=1}}
调用syntaxhighlight
扩展。这可以放入模板中 - 将一些任意的XML内容传递给模板似乎是个问题。不管我怎么做似乎都不起作用。即使使用CCD_ 6也无济于事:在这种情况下;CCD_ 7";被替换为";
<
">
你对这个问题有什么想法,甚至知道解决方案吗?
更新:我重新安装了MW 1.34.3,以便使其与stackoverflow上试图帮助我的人尽可能相同。现在:
- 兆瓦:1.34.3
- SMW:3.2.0
- SyntaxHighlight:2.0
名为SVGExample
:的模板
{{#tag:syntaxhighlight|{{{1|}}}|lang="xml"|line=1}}
wiki页面的内容:
{{SVGExample|<nowiki><abc x="123"/></nowiki>}}
结果:
1 <abc x="123"/>
这似乎不是MediaWiki扩展的问题。我停用了除<abc x="123"/>
0、SyntaxHighlight_GeSHi
、ParserFunctions
之外的所有扩展,得到了相同的结果。
为那些想深入了解这一点的人更新:
似乎解决占位符在这里引入了问题。即使使用建议的将数据传递给参数的方式,也需要一些处理:注释会被过滤掉。我在自定义扩展中的实验表明,一旦解析了传递给模板的参数,数据就会被HTML编码,从而产生不需要的<
实体(和其他实体(。SyntaxHighlight扩展做了一些神奇的事情来避免这种现象,因为它在解决模板参数后接收原始数据,而$parser->recursiveTagParse(...)
的经典方法在这方面失败了。
创建一个模板,比如Template:Xml
:
<includeonly>{{#tag:syntaxhighlight|{{{1|}}}|lang="xml"|line=1}}</includeonly>
调用此模板如下:{{xml|1=<abc x="123" />}}
。注|1=
。
或者,将Template:=
创建为=
,并调用<abc x="123"/>
0,转义每个等号:=
→CCD_ 22。
解析函数的匿名参数中的等号需要转义,这样MediaWiki就不会将其作为参数名称和值之间的分隔符。
因此,另一种选择是用命名的parameter声明Template:xml
,如下所示:
<includeonly>{{#tag:syntaxhighlight|{{{xml|}}}|lang="xml"|line=1}}</includeonly>
并这样称呼它:CCD_ 24。