Для документации этого модуля может быть создана страница Модуль: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&#59;</span> <span style='white-space:nowrap'>%s</span>''";
	local nobr3 = " ''<span style='white-space:nowrap'>%s&#59;</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 = "&lowast; " 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 .. "]]''']&#32;", 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;