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

Материал из Space Station 14 Вики
мНет описания правки
мНет описания правки
Строка 2: Строка 2:


local rules = {
local rules = {
     {"ие$", "ие", "ия"}, -- здание -> здания
    {"ия$", "ия", "ии"},    -- стратегия -> стратегии
     {"ка$", "ка", "ки"}, -- собака -> собаки
     {"ие$", "ие", "ия"},     -- здание -> здания
     {"ок$", "ок", "ки"}, -- носок -> носки
     {"ка$", "ка", "ки"},     -- собака -> собаки
     {"ец$", "ец", "цы"}, -- столбец -> столбцы
     {"ок$", "ок", "ки"},     -- носок -> носки
     {"ье$", "ье", "ья"}, -- зелье -> зелья
     {"ец$", "ец", "цы"},     -- столбец -> столбцы
     {"е$", "е", "я"},    -- поле -> поля
     {"ье$", "ье", "ья"},     -- зелье -> зелья
     {"й$", "й", "и"},    -- край -> края
     {"ый$", "ый", "ые"},    -- малый -> малые, новый -> новые
     {"ь$", "ь", "и"},    -- лошадь -> лошади
     {"ий$", "ий", "ие"},    -- синий -> синие
     {"о$", "о", "а"},    -- окно -> окна
     {"ой$", "ой", "ие"},    -- большой -> большие
     {"ый$", "ый", "ые"}, -- малый -> малые, новый -> новые
     {"ое$", "ое", "ые"},    -- холодное -> холодные
     {"ий$", "ий", "ие"}, -- синий -> синие
     {"ее$", "ее", "ие"},     -- синее -> синие
     {"ой$", "ой", "ие"}, -- большой -> большие
    {"а$", "а", "ы"},       -- кошка -> кошки
     {"ое$", "ое", "ые"}, -- холодное -> холодные
     {"е$", "е", "я"},       -- поле -> поля
     {"ее$", "ее", "ие"}   -- синее -> синие
     {"й$", "й", "и"},       -- край -> края
     {"ь$", "ь", "и"},       -- лошадь -> лошади
     {"о$", "о", "а"}         -- окно -> окна
}
}


Строка 22: Строка 24:
     local words = {}
     local words = {}
     for word in text:gmatch("%S+") do
     for word in text:gmatch("%S+") do
         -- Если слово заканчивается на "о" или "я", оставляем без изменений
         -- Если слово заканчивается на "о" или "я", оставляем без изменений,
         if word:match("[оя]$") then
        -- за исключением случаев, когда слово оканчивается на "мя" (например, "время")
         if word:match("[оя]$") and not word:match("мя$") then
             table.insert(words, word)
             table.insert(words, word)
         else
         else
Строка 29: Строка 32:
             for _, rule in ipairs(rules) do
             for _, rule in ipairs(rules) do
                 if word:match(rule[1]) then
                 if word:match(rule[1]) then
                     pluralized = word:gsub(rule[2].."$", rule[3])
                     pluralized = word:gsub(rule[2] .. "$", rule[3])
                     break
                     break
                 end
                 end

Версия от 22:45, 3 апреля 2025

Для документации этого модуля может быть создана страница Модуль:Песочница/Pok/doc

local p = {}

local rules = {
    {"ия$", "ия", "ии"},     -- стратегия -> стратегии
    {"ие$", "ие", "ия"},     -- здание -> здания
    {"ка$", "ка", "ки"},     -- собака -> собаки
    {"ок$", "ок", "ки"},     -- носок -> носки
    {"ец$", "ец", "цы"},     -- столбец -> столбцы
    {"ье$", "ье", "ья"},     -- зелье -> зелья
    {"ый$", "ый", "ые"},     -- малый -> малые, новый -> новые
    {"ий$", "ий", "ие"},     -- синий -> синие
    {"ой$", "ой", "ие"},     -- большой -> большие
    {"ое$", "ое", "ые"},     -- холодное -> холодные
    {"ее$", "ее", "ие"},     -- синее -> синие
    {"а$", "а", "ы"},        -- кошка -> кошки
    {"е$", "е", "я"},        -- поле -> поля
    {"й$", "й", "и"},        -- край -> края
    {"ь$", "ь", "и"},        -- лошадь -> лошади
    {"о$", "о", "а"}         -- окно -> окна
}

function p.main(frame)
    local text = frame.args[1] or ""
    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