Модуль:authors
Для документации этого модуля может быть создана страница Модуль:authors/doc
local data = mw.loadData("Module:authors/data")
local p = {}
local function getAuthors ()
local result = {};
for key,v in pairs(data) do
local firstname = v[1];
local secondname = v[2];
local thirdname = v[3];
if v.alias ~= nil then
result[key] = { alias = v.alias };
else
result[key] = { link = v.link, cat = v.cat};
end
if v.cat ~= nil then
result[key].cat = "[[Төркем:Өзекләр/" .. v.cat .. "]]";
end
if firstname ~= nil and firstname ~= "" then
if firstname ~= key then
result[firstname] = { alias = key };
end
if secondname ~= nil and secondname ~= "" then
local a = secondname .. " " .. firstname;
result[a] = { alias = key };
if thirdname ~= nil and thirdname ~= "" then
local sn = mw.ustring.sub(secondname,1,1);
local tn = mw.ustring.sub(thirdname,1,1);
a = sn .. ". " .. tn .. ". " .. firstname;
result[a] = { alias = key };
if v.link == nil then
result[key].link = mw.text.decode("[[w:" .. firstname .. ", " .. secondname .. " " .. thirdname .. "|" ..
sn ..". " .. tn .. ". " .. firstname .. "]]");
end
if v.cat == nil then
result[key].cat = "[[Төркем:Өзекләр/" .. firstname .. " " .. sn .. ". " .. tn .. ".]]";
end;
end
end
end
end
return result;
end;
function p.list(frame)
local authors = getAuthors();
local list_type = frame.args["type"];
local result = "";
local names = {};
local aliases = {};
for key, value in pairs(authors) do
if value.alias == nil then
table.insert(names, key);
else
if aliases[value.alias] == nil then
aliases[value.alias] = { key };
else
table.insert(aliases[value.alias], key);
end
end
end
table.sort(names);
for i, key in ipairs(names) do
local catlink = authors[key].cat;
if catlink ~= nil then
catlink = mw.ustring.gsub(catlink, "Төркем", ":Төркем");
else
catlink = "nil"
end
local wikilink = authors[key].link;
if list_type == "table" then
local code = "<code>{{автор|" .. key .. "}}</code>";
if aliases[key] ~= nil then
for j, alias in ipairs(aliases[key]) do
code = code .. "<br/><code>{{автор|" .. alias .. "}}</code>"
end
else
end
result = result .. mw.text.tag("tr", nil,
table.concat(
{ mw.text.tag("td", nil, code),
mw.text.tag("td", nil, authors[key].link or "nil"),
mw.text.tag("td", nil, catlink)
}, "")) .. "\n";
elseif list_type == "list" then
result = result .. "* <code>{{автор|" .. key .. "}}</code> → " .. (authors[key].link or "nil") .. " - " .. catlink .. "\n";
else
result = result .. table.concat( {key, authors[key].link or "nil", catlink}, ", ") .. "\n";
end
end
if result ~= "" and list_type == "table" then
result = mw.text.tag("tr", nil,
table.concat(
{ mw.text.tag("th", nil, "Код"),
mw.text.tag("th", nil, "Сылтама"),
mw.text.tag("th", nil, "Төркем")
}, "")) .. "\n" .. result;
result = mw.text.tag("table", {class="standard"}, result) .. "\n";
end
return result;
end
function p.find(frame)
local result = frame.args[1];
if result ~= nil and type(result)=='string' and result ~= "" then
local authors = getAuthors();
local name = mw.ustring.gsub(result, mw.ustring.char(160), " "); -- замена неразрывных пробелов
local f = authors[name];
if f ~= nil then
if f.alias ~= nil then
local af = authors[f.alias];
if af ~= nil then
f = af
end
end;
if f.link ~= nil then
result = f.link;
end
if mw.title.getCurrentTitle().namespace == 0 and f.cat ~= nil then
result = result .. f.cat;
end
end;
end
return result;
end
--
return p;