Modul:Senarai padat
Penampilan
local getArgs = require('Module:Arguments').getArgs
local clist = require('Module:Collapsible list').main
local hlist = require('Module:List').horizontal
local compressSparseArray = require('Module:TableTools').compressSparseArray
local p = {}
--[[
Menggabungkan argumen-argumen nama dan nombor kepada suatu senarai.
"Nama dan nombor" bermaksud foo, foo0, foo_1, foo234: apa-apa yang sepadan dengan foo_?%d+
Argumen-argumen:
args[1] = nama untuk mencari argumen
args selebihnya = argumen untuk dicari
Mengembalikan:
Senarai, dalam turutan bilangan argumen.
"foo" datang dahulu, kemudian "foo0", "foo1", ... "fooN"
Bilangan argumen tidak perlu berturutan
Jika bilangan args yang sepadan <= args[_limit] (lalainya 4),
kembalikan senarai teks bagi bentuk "A, B, C and D"
sebaliknya mengembalikan senarai yang boleh dilipat ({{clist}})
--]]
function p._main(args)
local pattern = "^"..args[1].."_?(%d+)$" -- corak untuk dipadankan
local values = {}
for k, v in pairs(args) do --- menggelung melalui semua argumen
if k == args[1] then --- jika argumen cuma "foo", letakkanya dahulu
values[1] = v
else
ord = tonumber(mw.ustring.match(k,pattern)) --- jika "foo_?%d+", sarikan nombor
if ord then
values[ord+2] = v --- letakkan nilai ke dalam senarai pada nombor+2 (untuk mengekalkan "foo" dahulu, walaupun untuk foo0)
end
end
end
values = compressSparseArray(values) --- himpitkan celahan/kosong pada nilai, kekalkan turutan
local limit = tonumber(args._limit) or 4
if #values == 0 then
return ''
end
if #values == 1 then
return values[1]
end
if #values > limit then
return clist(values) --- jika nilainya lebih banyak daripada had, panggil Modul:Collapsible list
end
return hlist(values) --- sebaliknya buat senarai mendatar
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
return p