Иһинээҕитигэр көс

Модуль:Plural switch

Мегавики диэн сиртэн ылыллыбыт

Для документации этого модуля может быть создана страница Модуль:Plural switch/doc

local p = {}

function p.plural(frame)
	local text          = frame.args[1]
	local text_singular = frame.args[2]
	local text_plural   = frame.args[3]

	local is_plural = false

	-- проверка по тегам
	if not is_plural and string.find(text, "<br") then is_plural = true; end
	if not is_plural then
		_, count = string.gsub(text, "<li", "<li");
		if count > 1 then is_plural = true; end
	end

	-- анализ текста
	if not is_plural then
		text = string.gsub(text, '<sup.-</sup>', '')   -- убираем верхние индексы
		text = string.gsub(text, '%[%[.-%]%] <span lang=.-</span>', '') -- убираем расшифровки с других языков
		text = string.gsub(text, '<.->', '')           -- убираем все теги
		text = string.gsub(text, '&.-;', ' ')          -- заменяем спец. символы пробелами
		text = string.gsub(text, '%[%[Category.-%]%]', '') -- вырезаем ссылки на категории
		text = string.gsub(text, '%[%[File.-%]%]', '') -- вырезаем картинки
		text = string.gsub(text, '%[%[Файл.-%]%]', '')
		text = string.gsub(text, '%[%[.-%]%]', 'x,')   -- считаем [[...]] одним элементом
		text = string.gsub(text, '%[.-%]', 'x,')       -- считаем [...] одним элементом
		text = string.gsub(text, '.."`UNIQ.-QINU`"..', '')     -- убираем специальные коды викиразметки + возможные замены [[...]]
		text = string.gsub(text, '\n%*', ',')          -- звёздочка в начале - элемент списка
		text = string.gsub(text, 'x,%-x', 'x')         -- элементы-слова через дефис считаем одним
		text = string.gsub(text, '^ *,', '')           -- убираем первую запятую
		text = string.gsub(text, ', *$', '')           -- убираем последнюю запятую

		delimiters = {",", ";", "·", "/", " и "}
		for i,d in pairs(delimiters) do
			if not is_plural and string.find(text, d) then is_plural = true; end
		end
	end

	if is_plural then return text_plural; end
	return text_singular
end

return p