|
|
| Строка 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
| |
Для документации этого модуля может быть создана страница Модуль:Множественное число/doc