Module:Flatten/doc
来自Vocawiki
更多语言
更多操作
这是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]标签来替代:{{#tag:pre|{{#invoke:Flatten|main|1= [poem style="color:red;"] 第一行文本 第二行文本 [/poem] }}}}<div class="poem" style="color:red;">第一行文本<br/>第二行文本</div>
目前,本模块检测
<categorytree>、<choose>、<dynamicpagelist>、<gallery>、<poem>、<poll>这六个标签,若存在相关的条状标记则会报错。注释
- ↑ 实际上,低版本的Scribunto可以展开任何条状标记,但高版本移除了这一功能。