Модуль:Песочница/DonRumata/CountryCodes
Перейти к навигации
Перейти к поиску
Документация
local debug_path = "Песочница/DonRumata/"
local data = mw.loadData("Module:" .. debug_path .. "CountryCodes/data")
p = {}
local function getCountryAliases()
local result = {} -- алиасы
for key, v in pairs(data) do
local name -- название
if type(v)=='table' then
local i = 2;
while v[i] ~= nil do
local alias = v[i]
if type(alias)=='string' then
if result[key] == nil then
result[key] = { alias }
else
table.insert(result[key], alias)
end
end
i = i + 1
end
end
end
return result;
end
local function getCodeAliases()
local result = {} -- алиасы
for key, v in pairs(data) do
local name -- название
if type(v)=='table' then
local i = 2;
while v[i] ~= nil do
local alias = v[i]
if type(alias)=='string' then
result[alias] = key;
end
i = i + 1
end
end
end
return result;
end
local function getCountryCodes ()
-- Страна по коду
local result = {}
for key, v in pairs(data) do
local name -- название
if type(v)=='string' then
name = v
elseif type(v)=='table' then
name = v[1];
end
local nom = mw.ustring.gsub(name, "%(([^%|]*)%|([^%)]*)%)", "%1")
local gen = mw.ustring.gsub(name, "%(([^%|]*)%|([^%)]*)%)", "%2")
result[key] = {nom, gen}
end
return result
end
function p.get(frame)
local result = ""
local code = frame.args[1] or ""
local case = frame.args[2] or ""
local n = 1
if case == 'р' then
n = 2
end
if code ~= "" then
local ucode = mw.ustring.upper(code);
local codes = getCountryCodes();
local aliases = getCodeAliases();
local t = codes[ucode];
if t == nil then
local key = aliases[ucode];
if key ~= nil then
t = codes[key];
else
return code -- возвращаем без изменения
end
end
result = t[n]
end
return result
end
function p.list(frame)
local codes = getCountryCodes();
local aliases = getCountryAliases();
-- Формируем индекс
local index = {}
for key, value in pairs(codes) do
table.insert(index, key);
end
table.sort(index);
-- mw.logObject(countries);
local result = "";
for i, key in ipairs(index) do
local talias = aliases[key];
local keys = { }
if talias ~= nil then
for j, alias in ipairs(talias) do
table.insert(keys, alias);
end
if #keys > 1 then
table.sort(keys);
end
end
local v = codes[key]
result = result .. mw.text.tag("tr", nil,
table.concat(
{ mw.text.tag("td", nil, key),
mw.text.tag("td", nil, table.concat( keys, ", ")),
mw.text.tag("td", nil, v[1]),
mw.text.tag("td", nil, v[2])
}, "")) .. "\n";
end
if result ~= "" then
result = mw.text.tag("tr", nil,
table.concat(
{ mw.text.tag("th", nil, "Код"),
mw.text.tag("th", nil, "Другие коды"),
mw.text.tag("th", nil, "Страна в им. п."),
mw.text.tag("th", nil, "Страна в род. п.")
}, "")) .. "\n" .. result;
result = mw.text.tag("table", {class="standard sortable"}, result) .. "\n";
end
return result;
end
return p;