如何防止在表上下文之外转义表相关标记

时间:2015-03-05 12:26:47

标签: mediawiki scribunto

我正在开发一个Scribunto模块,它接受可变数量的参数来生成表。我有一个调用模块的模板,以及表中行的单独模板。但是,其中一个组件将始终位于表上下文之外,而这些表上下文似乎会转义<tr><td>个标记。

调用模板只包含{{#invoke:Module|module}}

行模板包含以下示例代码:

|-
| {{{InvokeTemplate
| {{InvokeTemplate row | data1 | data2}}
}}
}
| {{{2}}}

使用此模板的任何页面都包含

args = frame:getParent().args
t = mw.create.html('table')
t
    :tag('tr')
        :tag('th')
            :wikitext('Header1')
        :tag('th')
            :wikitext('Header2')
    :wikitext(args[1])

return tostring(t)

我尝试在lua模块中创建表

{|

此时行模板不在表上下文中,从而使行模板不再呈现。然后我尝试在行模板中使用HTML,但标签被转换为实体。最后,我尝试使用|}t = mw.create.html()将表创建标记添加到调用模板中,并将lua模块修改为{{1}},但是当行模板标记很好时,标记在lua模块被翻译了。

如何阻止MediaWiki将这些标签翻译成html实体?

1 个答案:

答案 0 :(得分:1)

除了Kasper所说的:AFAIK你的模块应输出wikitext,而不是HTML。此外,嵌套模板调用使整个事情变得非常脆弱,可能会补偿使用Lua产生的任何增益。

这个带有显式参数的调用已经不那么脆弱了:

{{InvokeTemplate
|1= {{InvokeTemplate row | data1 | data2}}
}}

更好的是,通常人们完全避免嵌套模板而只是这样做:

{{Table header}}
{{Table row | A | B }}
...
{{Table footer}}

或者,如果使用Lua,你应该创建一个模板,将无限数量的参数传递给一个模块,该模块为整个表格生成wikitext,包括标题。

但是从你的例子中可以看出为什么你需要模板等来隐藏表格语法,所以很难建议一个特定的解决方案。 https://meta.wikimedia.org/wiki/Help:Advanced_templates可以帮助解决许多模板问题。