Модуль:Article
Для документации этого модуля может быть создана страница Модуль:Article/Документация
local p = {};
function p.article(frame)
local args = frame:getParent().args;
local page = mw.title.getCurrentTitle(); local basename = page.baseText;
local root, sub = basename:match("^([^/]+)/") or basename, basename:match("^[^/]+/Словник/([^/]+)") or "";
local isPRS = basename:match("^[^/]+/ДО/"); isPRS = not not isPRS;
local oncolor = "<span style='background-color:%s'>%s</span>";
local nobr = " ''<span style='white-space:nowrap'>%s</span>''";
local nobr2 = " ''<span style='white-space:nowrap'>%s;</span> <span style='white-space:nowrap'>%s</span>''";
local nobr3 = " ''<span style='white-space:nowrap'>%s;</span> <span style='white-space:nowrap'>%s;</span> <span style='white-space:nowrap'>%s</span>''";
local l = {
["Библейская энциклопедия архимандрита Никифора"] = { [false] = "БЭАН" },
["Био-библиографический словарь русских писателей XX века"] = { [false] = "ББСРП" },
["Проект:БСЭ1"] = { [false] = "БСЭ1" },
["Большая энциклопедия Южакова"] = { [false] = { ["Дополнение"] = "БЭЮ1", ["2-е издание"] = "БЭЮ2", [""] = "БЭЮ", } },
["Военная энциклопедия (Сытин, 1911—1915)"] = { [true] = "ВЭ/ДО", [false] = "ВЭ/ВТ" },
["Военный энциклопедический лексикон"] = { [false] = "ВЭЛ/ВТ", [2] = "ВЭЛ/ДО/%s|ДО" },
["Географический лексикон Российскаго государства"] = {
[true] = "Географический лексикон Российскаго государства/ДО",
[false] = "Географический лексикон Российскаго государства/ДО"
},
["Географическо-статистический словарь Российской империи"] = { [true] = "ГСС/ДО", [false] = "ГСС/ДО" },
["Еврейская энциклопедия Брокгауза и Ефрона"] = { [false] = "ЕЭБЕ" },
["Малая советская энциклопедия"] = { [false] = { ["1-е издание"] = "МСЭ1", ["2-е издание"] = "МСЭ2", } },
["Малый энциклопедический словарь Брокгауза и Ефрона"] = { [false] = "МЭСБЕ" },
["Музыкальный словарь Римана"] = { [false] = "МСР/ВТ", [2] = "МСР/ДО/%s|ДО" },
["Настольный словарь Толля"] = { [false] = "НСТ" },
["Настольный энциклопедический словарь"] = { [false] = "НЭСГ" },
["Новый энциклопедический словарь"] = { [false] = "НЭС" },
["Опыт исторического словаря о российских писателях (Новиков)"] = { [false] = "ОИСРП/ВТ", [2] = "ОИСРП/ДО/%s|ДО" },
["Подробный словарь русских граверов XVI—XIX вв. (Ровинский)"] = {
[false] = "Подробный словарь русских граверов XVI—XIX вв. (Ровинский)/ВТ",
[2] = "Подробный словарь русских граверов XVI—XIX вв. (Ровинский)/ДО/%s|ДО"
},
["Полный православный богословский энциклопедический словарь"] = { [false] = "ППБЭС/ВТ", [2] = "ППБЭС/ДО/%s|ДО" },
["Православная богословская энциклопедия"] = { [false] = "ПБЭ/ВТ", [2] = "ПБЭ/ДО/%s|ДО" },
["Русский биографический словарь"] = { [false] = "РБС/ВТ", [2] = "РБС/ДО/%s|ДО" },
["Русский энциклопедический словарь И. Н. Березина"] = { [false] = "РЭСБ" },
["Словарь Академии Российской"] = {
[false] = { ["1-е издание"] = "САР1/ДО", ["2-е издание"] = "САР2/ДО" },
[2] = { ["1-е издание"] = "САР1/ВТ/%s|ВТ", ["2-е издание"] = "САР2/ВТ/%s|ВТ" },
}, -- 2O
["Словарь достопамятных людей русской земли"] = { [false] = "СДЛРЗ/ВТ", [2] = "СДЛРЗ/ДО/%s|ДО" },
["Словарь членов Общества любителей Российской словесности при Московском Университете"] = { [false] = "СЧОЛРС/ВТ", [2] = "СЧОЛРС/ДО/%s|ДО" },
["Справочный энциклопедический словарь"] = { [false] = "СЭС/ВТ", [2] = "СЭС/ДО/%s|ДО" },
["Техническая энциклопедия"] = { [false] = "ТЭ1" },
["Энциклопедический лексикон"] = { [true] = "ЭЛ/ДО", [false] = "ЭЛ/ВТ" },
["Энциклопедический словарь Брокгауза и Ефрона"] = { [false] = "ЭСБЕ", [2] = "ЭСБЕ/%s/ДО|ДО" }, -- 2O
["Энциклопедический словарь Гранат"] = { [false] = "ЭСГ" },
["Энциклопедический словарь Павленкова"] = { [false] = "ЭСП" },
["Энциклопедия военных и морских наук"] = { [false] = "ЭВМН/ВТ", [2] = "ЭВМН/ДО/%s|ДО" },
[""] = { [true] = basename .. "/ДО", [false] = basename .. "/ВТ" },
};
mw.logObject(root,"root")
mw.logObject(sub,"sub")
local src = l[root] or l[""]; local pre, link2 = src[isPRS], src[2];
if type(pre) == "table" then pre = pre[sub] end
if type(link2) == "table" then link2 = link2[sub] end
local q = ""; local ast = "";
if args.style then
if args.style:find("i") then q = q .. "''" end
if args.style:find("b") then q = q .. "'''" end
if args.style:find("r") then ast = "∗ " end
elseif is(args[5]) then
if is(args[3]) then q = "'''" else q = "''" end
end;
local name = args[1]; local title = name; if isPRS then title = is(args[2]) or title end;
if args.color then title = string.format(oncolor, is(args.color) or "#ff0", title) end;
title = q .. title .. q;
local link = string.format("[[%s/%s|%s]]", pre, name, title);
if link2 then link2 = string.format("['''[[" .. link2 .. "]]'''] ", name) else link2 = "" end
local pagenums = ""; local function strip(s) return s:gsub("/.*","") end
local volume2 = args.volume2 or ""; if is(volume2) then volume2 = volume2 .. ", " end
local volume3 = args.volume3 or ""; if is(volume3) then volume3 = volume3 .. ", " end
if is(args[3]) then
if is(args[5]) then
if is(args[7]) then
pagenums = string.format(nobr3, strip(args[3]), volume2 .. strip(args[5]), volume3 .. strip(args[7]))
else
pagenums = string.format(nobr2, strip(args[3]), volume2 .. strip(args[5]))
end
else
pagenums = string.format(nobr, strip(args[3]))
end
elseif is(args[5]) then
pagenums = string.format(nobr, strip(args[5]))
end;
return link2 .. ast ..link .. pagenums;
end
function is(var)
if (var == '' or var == nil) then return nil else return var end
end
return p;