Module:Peter Bowman/reg-es
Documentation for this module may be created at Module:Peter Bowman/reg-es/doc
local d = mw.loadData 'Module:Peter Bowman/reg-es/datos' -- ustalona lista regionów
-- przenosi wykryte ciągi znaków oddzielone przecinkami do tablicy "words"
local function analizujLancuch(s)
local words = {}
for w in string.gfind(s, "%s*([^,]+)%s*") do words[#words + 1] = w end
return words
end
-- porównuje tablicę zawierającą listę regionów podanych przez uzytkownika do ustalonej w kodzie
-- tablicy z regionami, uporządkowuje je i tworzy kategorie
local function znajdzRegiony(t, op)
local regs = {} -- tablica pomocnicza do przechowywania regionów obecnych w tablicy "d"
local no_regs = {} -- tablica pomocnicza do przechowywania regionów nieobecnych w tablicy "d"
local j = 0
-- iteracja przechodzi przez wszystkie pozycje w tablicy "t"
for i = 1, #t do
--local temp = t[i]
if d[t[i]] then
regs[j+1] = d[t[i]] -- jeśli dany element występuje w tablicy "d", wpisuje go do tablicy "regs"
j = j + 1
else
no_regs[i-j] = t[i] -- w przeciwnym wypadku wpisuje go do "no_regs"
end
end
-- uporządkowuje regiony według kolejności ustalonej w tablicy "d"
if #t ~= 1 then table.sort(regs, function (a, b) return a[1] < b[1] end) end
local cat = 'Kat:'
local _regs = #regs
-- przenosi elementy tablic "regs" i "no_regs" do "t"
for i = 1, #t do
if i <= _regs then t[i] = '[[:'..cat..regs[i][2]..']]'..(op and '[['..cat..regs[i][2]..']]' or '')
else t[i] = no_regs[i-_regs] end
end
-- zwraca wartości logiczne TRUE, jeśli tablice "regs" i "no_regs" nie są puste
return (#regs ~= 0), (#no_regs ~= 0)
end
-- podlinkowuje podany łańcuch, jeżeli pierwszym znakiem jest nawias otwierający
local function linkuj(s)
local znak = string.sub(s, 1, 1)
if (znak == '[') or (znak == '<') or (znak == '(') then return s
else return '[['..s..']]' end
end
local p = {
main = function(frame)
local pframe = frame:getParent()
--local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
--local args = pframe.args -- the arguments passed TO the template, in the wikitext that transcludes the template
local arg1, arg2 = pframe.args[1], pframe.args[2] -- pierszy i drugi argument z szablonu {{reg-es}}
if not arg1 then return '<b>nie podano listy regionów w pierwszym argumencie</b>' end
local tablica = analizujLancuch(arg1) -- regiony zawarte w łańcuchu przenosi do nowej tablicy
local ns = mw.title.getCurrentTitle():inNamespace(0) -- ns = TRUE jeśli szablon wywoływany jest w {{ns:0}}
local op1, op2 = znajdzRegiony(tablica, (ns and not arg2)) -- porównuje owe regiony z ustaloną w kodzie listą
return '<i>('..mw.text.listToText(tablica, ', ', ' i ')..')</i>'..(op1 -- region/y jest/są na liście
and (ns and 'Kat:tak' or '') or '')..(op2 -- regionu/ów nie ma na liście
and (ns and 'Kat:nie' or '') or '')..(arg2 -- podano drugi parametr?
and ' '..linkuj(arg2) or '')
end }
return p