• Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

模块:Flatten/doc

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

这是Module:Flatten的文档页面

此模块用于把多行wikitext压缩至一行。

用途

此模块最初是为了{{Hid}}编写的。由于MediaWiki的wikitext解析器存在问题,导致把多行wikitext放在列表(*#)缩进(:;)上时会出现错误的结果。

一个著名的例子就是{{Hide}}不能与列表和缩进联用(参见Special:滥用过滤器/30):

SVG 示例
    • 文本

    文本

* {{Hide}}
* 文本
文本

由于{{Hide}}展开后是多行wikitext,与列表或缩进连用会导致后续内容全部缩进。而此模块能够预先把多行wikitext压缩至一行,从而避免该问题。

SVG 示例
  • 文本

文本

* {{#invoke:Flatten|main| {{Hide}} }}
* 文本
文本

此模块同样适用于面临相同困扰的其他模板,例如{{VersionHistory}}、{{Clade}}等。

技术细节

参见:敌我同源

此模块用Lua部分重写了MediaWiki内置的wikitext解析器,能够事先将表格、列表以及段落解析为HTML,再将它们压缩至一行。

然而,此模块尚未经过相对充分的测试,其解析结果可能会与预期存在一定的差别。

关于解析器扩展标签

MediaWiki原生的解析器标签(如<ref>)和各种扩展带来的扩展标签(如<poem>)在传入模块时会被替换为条状标记,这使得模块无法得知标签内部有什么内容。因此,此模块无法将这些标签压缩为一行。但这包括<nowiki>,因为Scribunto唯独提供了展开此条状标记的方法。[1]

不过,由于<poem>使用较频繁且原理简单,此模块实现了<poem>的部分效果,可以利用[poem]标签来替代:

SVG 示例
<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>这六个标签,若存在相关的条状标记则会报错。

注释

  1. 实际上,低版本的Scribunto可以展开任何条状标记,但高版本移除了这一功能。