Модуль:inflection adj pl
Модуль автоматического склонения польских прилагательных. Использует шаблон {{падежи pl 2}} для вывода таблицы словоизменения.
Функции
Вывод таблицы склонения
{{#invoke:inflection adj pl|template_decl_auto|<лемма>}}
Параметры
- неименованный — лемма
anim
:yes/no
— флаг для одушевленных и неодушевленных
local export = {}
-- automatic declension
local inflectors = {}
inflectors["^((.+)([kg]))[ia]e?$"] = function (pargs, base, base1, extra)
local ending = { ["k"] = "cy"; ["g"] = "dzy"; }
return {
base .. "i",
base .. "a",
base .. "ie",
base1 .. ending[extra],
base .. "ie",
base .. "iego",
base .. "iej",
base .. "ich",
base .. "iemu",
base .. "im",
base .. "ą",
base .. "im",
base .. "imi",
(pargs.olddat and (base .. "u") or nil)
}
end
inflectors["^((.+)[npbfwsz]i)[ae]?$"] = function (pargs, base, base1)
return {
base,
base .. "a",
base .. "e",
base,
base .. "e",
base .. "ego",
base .. "ej",
base .. "ch",
base .. "emu",
base .. "m",
base .. "ą",
base .. "m",
base .. "mi"
}
end
inflectors["^((.+)l)[iae]$"] = function (pargs, base, base1)
return {
base .. "i",
base .. "a",
base .. "e",
base .. "i",
base .. "e",
base .. "ego",
base .. "ej",
base .. "ich",
base .. "emu",
base .. "im",
base .. "ą",
base .. "im",
base .. "imi"
}
end
inflectors["^(.+c)i[ae]?$"] = function (pargs, base, base1)
return {
base .. "i",
base .. "ia",
base .. "ie",
base .. "i",
base .. "ie",
base .. "iego",
base .. "iej",
base .. "ich",
base .. "iemu",
base .. "im",
base .. "ią",
base .. "im",
base .. "imi"
}
end
inflectors["^((.+)([os])n)[yae]$"] = function (pargs, base, base1, extra)
local mpl_suffix
if base:match("zielon$") or base:match("czerwon$") or base:match("słon$") then
-- probably the only exceptions
mpl_suffix = "oni"
else
mpl_suffix = ({ ["o"] = "eni", ["s"] = "śni", ["z"] = "źni" })[extra]
end
return {
base .. "y",
base .. "a",
base .. "e",
base1 .. mpl_suffix,
base .. "e",
base .. "ego",
base .. "ej",
base .. "ych",
base .. "emu",
base .. "ym",
base .. "ą",
base .. "ym",
base .. "ymi",
}
end
inflectors["^((.+[^crs])(z)n)[yae]$"] = inflectors["^((.+)([os])n)[yae]$"]
inflectors["^(.+[^osz]n)[yae]$"] = function (pargs, base, base1, extra)
return {
base .. "y",
base .. "a",
base .. "e",
base .. "i",
base .. "e",
base .. "ego",
base .. "ej",
base .. "ych",
base .. "emu",
base .. "ym",
base .. "ą",
base .. "ym",
base .. "ymi"
}
end
inflectors["^(.+[crs]zn)[yae]$"] = inflectors["^(.+[^osz]n)[yae]$"]
inflectors["^(.+[wmpb])[yae]$"] = function (pargs, base, base1)
return {
base .. "y",
base .. "a",
base .. "e",
base .. "i",
base .. "e",
base .. "ego",
base .. "ej",
base .. "ych",
base .. "emu",
base .. "ym",
base .. "ą",
base .. "ym",
base .. "ymi"
}
end
inflectors["^((.+s)z?)[yae]$"] = function (pargs, base, base1)
return {
base .. "y",
base .. "a",
base .. "e",
base1 .. "i",
base .. "e",
base .. "ego",
base .. "ej",
base .. "ych",
base .. "emu",
base .. "ym",
base .. "ą",
base .. "ym",
base .. "ymi"
}
end
inflectors["^(.+[^fwtdmrłnizshpb])[yae]$"] = function (pargs, base, base1)
return {
base .. "y",
base .. "a",
base .. "e",
base .. "y",
base .. "e",
base .. "ego",
base .. "ej",
base .. "ych",
base .. "emu",
base .. "ym",
base .. "ą",
base .. "ym",
base .. "ymi"
}
end
inflectors["^(.+[cdr]z)[yae]$"] = inflectors["^(.+[^fwtdmrłnizshpb])[yae]$"]
inflectors["^((.+)([dr]))[yae]$"] = function (pargs, base, base1, extra)
local soft_mpl_cons = { ["ch"] = "si", ["h"] = "si", ["zł"] = "źli", ["sł"] = "śli", ["ł"] = "li", ["r"] = "rzy", ["t"] = "ci", ["st"] = "ści", ["d"] = "dzi" }
return {
base .. "y",
base .. "a",
base .. "e",
base1 .. soft_mpl_cons[extra],
base .. "e",
base .. "ego",
base .. "ej",
base .. "ych",
base .. "emu",
base .. "ym",
base .. "ą",
base .. "ym",
base .. "ymi",
(pargs.olddat and (base .. "u") or nil)
}
end
inflectors["^((.-)(c?h))[yae]$"] = inflectors["^((.+)([dr]))[yae]$"]
inflectors["^((.*[^s])(zł))[yae]$"] = inflectors["^((.+)([dr]))[yae]$"]
inflectors["^((.*)(sł))[yae]$"] = inflectors["^((.+)([dr]))[yae]$"]
inflectors["^((.*[^sz])(ł))[yae]$"] = inflectors["^((.+)([dr]))[yae]$"]
inflectors["^((.*sz)(ł))[yae]$"] = inflectors["^((.+)([dr]))[yae]$"]
inflectors["^((.*)(st))[yae]$"] = inflectors["^((.+)([dr]))[yae]$"]
inflectors["^((.*[^s])(t))[yae]$"] = inflectors["^((.+)([dr]))[yae]$"]
-- archaic forms
inflectors["^(.+[^i])en$"] = function (pargs, base, base1, extra)
return {
base .. "en",
base .. "na",
base .. "ne",
base .. "ni",
base .. "ne",
base .. "nego",
base .. "nej",
base .. "nych",
base .. "nemu",
base .. "nym",
base .. "ną",
base .. "nym",
base .. "nymi"
}
end
inflectors["^(.+)on$"] = function (pargs, base, base1, extra)
return {
base .. "on",
base .. "ona",
base .. "one",
base .. "eni",
base .. "one",
base .. "onego",
base .. "onej",
base .. "onych",
base .. "onemu",
base .. "onym",
base .. "oną",
base .. "onym",
base .. "onymi"
}
end
-- jakikolwiek, którykolwiek
inflectors["^(.+)kolwiek$"] = function (pargs, base)
local result = export.autoinflect(base, pargs)
if result then
for i, item in ipairs(result) do
result[i] = item .. "kolwiek"
end
return result
end
end
function export.autoinflect(lemma, pargs)
pargs = pargs or {}
for pat, inflector in pairs(inflectors) do
local st, en, stem, substem, extra = mw.ustring.find(lemma, pat)
if st then
return inflector(pargs, stem, substem, extra)
end
end
end
function export.template_decl_auto(frame)
local title = mw.title.getCurrentTitle()
local pargs = frame:getParent().args
local lemma = frame.args[1] or pargs[1];
local nom_m_sg = pargs["nom_m_sg"];
if nom_m_sg == "" then
nom_m_sg = nil
end
local nom_vr_pl = pargs["nom_vr_pl"];
if nom_vr_pl == "" then
nom_vr_pl = nil
end
if lemma == "" then
lemma = nil
end
lemma = lemma or (title.namespace == 0 and title.text)
local params;
if title.fullText == frame:getParent():getTitle() then
params = {
"[[-ski]], [[-ty]]",
"[[-ska]], [[-ta]]",
"[[-skie]], [[-te]]",
"[[-scy]], [[-ci]]",
"[[-skie]], [[-te]]",
"[[-skiego]], [[-tego]]",
"[[-skiej]], [[-tej]]",
"[[-skich]], [[-tych]]",
"[[-skiemu]], [[-temu]]",
"[[-skim]], [[-tym]]",
"[[-ską]], [[-tą]]",
"[[-skim]], [[-tym]]",
"[[-skimi]], [[-tymi]]",
"[[-sku]], [[-tu]]"
}
else
params = export.autoinflect(lemma, pargs);
if params == nil then
return error(("No declension pattern matches '%s'"):format(lemma))
else
if nom_m_sg then
-- support short adjectives
params[1] = nom_m_sg
end
if nom_vr_pl then
-- support [[wesół]]
params[4] = nom_vr_pl
end
end
end
local anum = pargs['anim'] or '';
if anum ~= '' then
params['anim'] = anum;
end
return frame:expandTemplate{ title = "Шаблон:падежи pl 2", args = params }
end
return export