Модуль: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