Модуль:Множественное число: различия между версиями
Pok (обсуждение | вклад) м Содержимое страницы заменено на «-- Удалить» Метка: замена |
Pok (обсуждение | вклад) мНет описания правки |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 1: | Строка 1: | ||
-- | local p = {} | ||
local getArgs = require('Module:Arguments').getArgs | |||
local rules = { | |||
{"вь$", "вь", "вь"}, -- обувь -> обувь | |||
{"ия$", "ия", "ии"}, -- стратегия -> стратегии | |||
{"ие$", "ие", "ия"}, -- здание -> здания | |||
{"ка$", "ка", "ки"}, -- собака -> собаки | |||
{"ок$", "ок", "ки"}, -- носок -> носки | |||
{"ец$", "ец", "цы"}, -- столбец -> столбцы | |||
{"ье$", "ье", "ья"}, -- зелье -> зелья | |||
{"ый$", "ый", "ые"}, -- малый -> малые, новый -> новые | |||
{"ий$", "ий", "ие"}, -- синий -> синие | |||
{"ой$", "ой", "ие"}, -- большой -> большие | |||
{"ое$", "ое", "ые"}, -- холодное -> холодные | |||
{"ее$", "ее", "ие"}, -- синее -> синие | |||
{"т$", "т", "ты"}, -- предмет -> предметы | |||
{"е$", "е", "я"}, -- поле -> поля | |||
{"й$", "й", "и"}, -- край -> края | |||
{"ь$", "ь", "и"}, -- лошадь -> лошади | |||
{"о$", "о", "а"}, -- окно -> окна | |||
} | |||
function p.main(frame) | |||
local args = getArgs(frame) | |||
local text = args[1] | |||
local words = {} | |||
for word in text:gmatch("%S+") do | |||
-- Если слово заканчивается на "о" или "я", оставляем без изменений, | |||
-- за исключением случаев, когда слово оканчивается на "мя" (например, "время") | |||
if word:match("[оя]$") and not word:match("мя$") then | |||
table.insert(words, word) | |||
else | |||
local pluralized = nil | |||
for _, rule in ipairs(rules) do | |||
if word:match(rule[1]) then | |||
pluralized = word:gsub(rule[2] .. "$", rule[3]) | |||
break | |||
end | |||
end | |||
if not pluralized then | |||
pluralized = word | |||
end | |||
table.insert(words, pluralized) | |||
end | |||
end | |||
return table.concat(words, " ") | |||
end | |||
return p | |||