这是Module:Flatten的文档页面
此模块用于把多行wikitext压缩至一行。
此模块最初是为了{{Hid}}编写的。由于MediaWiki的wikitext解析器存在问题,导致把多行wikitext放在列表(*#)缩进(:;)上时会出现错误的结果。
一个著名的例子就是{{Hide}}不能与列表和缩进联用(参见Special:滥用过滤器/30):
| 示例 | ||
|---|---|---|
| ||
* {{Hide}}
* 文本
文本
|
由于{{Hide}}展开后是多行wikitext,与列表或缩进连用会导致后续内容全部缩进。而此模块能够预先把多行wikitext压缩至一行,从而避免该问题。
| 示例 | ||
|---|---|---|
文本 | ||
* {{#invoke:Flatten|main| {{Hide}} }}
* 文本
文本
|
此模块同样适用于面临相同困扰的其他模板,例如{{VersionHistory}}、{{Clade}}等。
此模块用Lua部分重写了MediaWiki内置的wikitext解析器,能够事先将表格、列表以及段落解析为HTML,再将它们压缩至一行。
然而,此模块尚未经过相对充分的测试,其解析结果可能会与预期存在一定的差别。
MediaWiki原生的解析器标签(如<ref>)和各种扩展带来的扩展标签(如<poem>)在传入模块时会被替换为条状标记,这使得模块无法得知标签内部有什么内容。因此,此模块无法将这些标签压缩为一行。但这不包括<nowiki>,因为Scribunto唯独提供了展开此条状标记的方法。[1]
不过,由于<poem>使用较频繁且原理简单,此模块实现了<poem>的部分效果,可以利用[poem]标签来替代:
| 示例 |
|---|
<div class="poem" style="color:red;">第一行文本<br/>第二行文本</div> |
{{#tag:pre|{{#invoke:Flatten|main|1=
[poem style="color:red;"]
第一行文本
第二行文本
[/poem]
}}}}
|
目前,本模块检测<categorytree>、<choose>、<dynamicpagelist>、<gallery>、<poem>、<poll>这六个标签,若存在相关的条状标记则会报错。