模組: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可以展開任何條狀標記,但高版本移除了這一功能。