Модуль:Песочница/Pok: различия между версиями
Материал из Space Station 14 Вики
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 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