Moduuli:tekstifunktiot
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:tekstifunktiot/ohje
local p = {}
function p.luettele(t, e, v, f, d)
-- Luettelee annetun taulukon t tekstinä siten, että kutsuu jokaiselle sen alkiolle funktiota f.
-- Jokaisen alkion väliin tulee erotin e, paitsi, jos v on annettu, viimeisen eteen erotin v.
-- d on funktiolle välitettävä data
f = f or function(a) return a end -- oletusfunktio, jos muuta ei anneta
-- ensimmäinen alkio
local l = '' .. f(t[1], d)
-- ensimmäisen ja viimeisen välissä olevat alkiot
for i = 2, (#t-1) do
l = l .. e .. f(t[i], d)
end
-- viimeinen alkio
if #t > 1 then
l = l .. (v or e) .. f(t[#t], d)
end
return l
end
-- Palauttaa yks tai mon sen mukaan onko n 1 vai ei.
function p.y_tai_m(n, yks, mon)
if n == 1 then return yks else return mon end
end
-- Palauttaa 'erottimella' erotetun tekstiluettelon jokaiselle 'listan' alkiolle, siten
-- että 'tmplistä' on korvattu teksti "{{{p}}}" listan alkiolla.
-- Esim. luettele2("{{{p}}}keitto", ", ", ["kala", "kasvis"]) palauttaa "kalakeitto, kasviskeitto"
function p.luettele2(tmpl, erotin, lista, urlencode)
local output = {}
for i,v in ipairs(lista) do
if i > 0 then
if urlencode then
v = mw.uri.encode(v, "QUERY"):gsub("%%", "%%%%")
end
local teksti,r = string.gsub(tmpl, "{{{p}}}", v)
if r then
table.insert(output, teksti)
else
-- lisätään teksti sellaisenaan, TODO onko hyödyllinen?
table.insert(output, tmpl)
end
end
end
return table.concat(output, erotin, 1, #output)
end
function p.Luettele(frame)
local pframe = frame:getParent()
local tmpl = frame.args.t or "{{{p}}}"
local erotin = frame.args.e or ""
erotin,r = string.gsub(erotin, "&sp;", " ") -- alku- ja loppuvälien lisäämiseksi
return p.luettele2(tmpl, erotin, pframe.args, frame.urlencode or 0)
end
return p