Модуль:ЭтоПарсер

Материал из IFВики
Перейти к навигации Перейти к поиску

Модуль, который в первом нумерованном параметре принимает название страницы игры и возвращает «да», если игра является парсерной, или «нет», если парсерной не является.

В начале выполняется проверка на игры-исключения, которые написаны на парсерных платформах, но парсерными не являются, а затем, если исключение не обнаружено, проверка на парсерность используемой платформы.

Название страниц с играми-исключениями надо добавлять по аналогии в первую таблицу notParser, а названия новых парсерных платформ во вторую таблицу platforms. Причём, названия парсерных платформ в шаблоне должны указываться по названию их фактической страницы в вики (указание перенаправляющей страницы с названием-псевдонимом не сработает).

Для того, чтобы обозначить в вики какую-то игру на непарсерной платформе как парсерную, следует использовать явное указание темы «Парсер» в её карточке.


local getArgs = require("Module:Arguments").getArgs
local p = {}

function p.main(frame)
	local args = getArgs(frame)
	return p._main(args, frame)
end

local function has_value(tab, val)
	for index, value in ipairs(tab) do
		if value == val then
			return true
		end
	end

	return false
end

function p._main(args, frame)
	-- Исключения (отдельные игры) сюда
	local notParser = {
		"Deja vu (RInform)",
		"TADSTRIS",
		"Аргинк (RTADS)",
		"Граф Нулин",
		"Лабиринт (Ласточкин, Антон)",
		"На Страже",
		"Наводчик",
		"Ничто не забыто",
		"Остров (ТОМ 2)",
		"Остров (ТОМ)",
		"Последняя мечта",
		"Похождения отважного хомяка Семена-1: Побег (RTADS)",
		"Спроси Алису",
		"Супрематизм в IF",
		"Шаблон РПГ",
	}
	if has_value(notParser, args[1]) then
		return "нет"
	end
	local platform_parser = frame:callParserFunction(
		"#ask",
		{
			args[1],
			'?Платформа',
			link = 'none'
		}
	)
	-- Платформы (всё что предполагается парсерным если сделано на этой платформе) сюда
	local platforms = {
		"6days LUA",
		"ADRIFT",
		"Az (web/parser)",
		"Inform",
		"INTER QUEST",
		"Jaiffa",
		"Protoparser.js",
		"Quazatron Adventure",
		"RInform",
		"RTADS",
		"TADS",
		"TDZ",
		"ZIL",
		"Декодер 2002",
		"Метапарсер",
		"ТКР 2",
		"ТОМ 0.9 бета",
		"ТОМ 2",
		"ЯРИЛ",
	}
	if has_value(platform_parser, platforms) then
		return "да"
	end
  return "нет"
end

return p