Модуль:Песочница/Pok: различия между версиями

мНет описания правки
мНет описания правки
Строка 1: Строка 1:
local p = {}
local p = {}


-- Простые правила образования множественного числа
local rules = {
local rules = {
     {"ие$", "ие", "ия"},  -- здание -> здания
     {"ие$", "ие", "ия"},  -- здание -> здания
Строка 8: Строка 7:
     {"ец$", "ец", "цы"},  -- молодец -> молодцы
     {"ец$", "ец", "цы"},  -- молодец -> молодцы
     {"ье$", "ье", "ья"},  -- зелье -> зелья
     {"ье$", "ье", "ья"},  -- зелье -> зелья
    {"о$", "о", "а"},    -- окно -> окна
     {"е$", "е", "я"},    -- поле -> поля
     {"е$", "е", "я"},    -- поле -> поля
     {"й$", "й", "и"},    -- край -> края
     {"й$", "й", "и"},    -- край -> края
Строка 14: Строка 12:
}
}


-- Функция преобразования в множественное число для каждого слова
function p.main(frame)
function p.main(frame)
     local text = frame.args[1] or ""
     local text = frame.args[1] or ""
     local words = {}
     local words = {}
     for word in text:gmatch("%S+") do
     for word in text:gmatch("%S+") do
         local pluralized = word
         -- Если слово заканчивается на "о" или "я", оставляем без изменений
        -- Применяем правила для образования множественного числа
        if word:match("[оя]$") then
        for _, rule in ipairs(rules) do
            table.insert(words, word)
            if word:match(rule[1]) then
        else
                pluralized = word:gsub(rule[2].."$", rule[3])
            local pluralized = nil
                 break
            for _, rule in ipairs(rules) do
                if word:match(rule[1]) then
                    pluralized = word:gsub(rule[2].."$", rule[3])
                    break
                 end
             end
             end
            if not pluralized then
                pluralized = word .. "ы"
            end
            table.insert(words, pluralized)
         end
         end
        table.insert(words, pluralized)
     end
     end
     return table.concat(words, " ")
     return table.concat(words, " ")