Модуль:Множественное число: различия между версиями

м Содержимое страницы заменено на «-- Удалить»
Метка: замена
мНет описания правки
 
(не показана 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