Moduł:odmiana-czasownik-japoński
Wygląd
Moduł wykorzystywany przez szablon {{odmiana-czasownik-japoński}}.
require('strict')
local p = {}
--[[ Helper functions ]]
local is_str_empty = function (str)
return str == "" or str == nil
end
local ifexpr = function(cond, on_true, on_false)
if cond then
return on_true
end
return on_false
end
--[[ Error handling ]]
local error_message = {
["missing_first_parameter"] = "Nie podano czasownika",
["ambiguous_ending"] = "Nie można automatycznie wywnioskować grupy czasownika. Wymagane jest podanie, do której grupy należy czasownik",
["godan_group_mismatch"] = "Nieznana końcówka dla grupy spółgłoskowej. Proszę sprawdzić, czy podane parametry są poprawne",
["ichidan_group_mismatch"] = "Nieznana końcówka dla grupy samogłoskowej. Grupy samogłoskowe oczekują tylko czasowników kończących się na る. Proszę sprawdzić, czy podane parametry są poprawne",
["missing_suru"] = "Rzeczownik czynnościowy wymaga zakończenia する. Proszę sprawdzić, czy podane parametry są poprawne",
["missing_kuru"] = "Czasownik brakuje zakończenia 来る lub くる. Proszę sprawdzić, czy podane parametry są poprawne",
}
--[[ Conjugation forms ]]
local forms = {
["czas-teraźniejszo-przyszły"] = {
["V"] = "?る",
["C1"] = "?う",
["C2"] = "?く",
["C3"] = "?ぐ",
["C4"] = "?す",
["C5"] = "?つ",
["C6"] = "?ぬ",
["C7"] = "?ぶ",
["C8"] = "?む",
["C9"] = "?る",
["S"] = "?する",
["K"] = "?くる"
},
["czas-przeszły"] = {
["V"] = "?た",
["C1"] = "?った",
["C2"] = "?いた",
["C3"] = "?いだ",
["C4"] = "?した",
["C5"] = "?った",
["C6"] = "?んだ",
["C7"] = "?んだ",
["C8"] = "?んだ",
["C9"] = "?った",
["S"] = "?した",
["K"] = "?きた"
},
["forma-adresatywna"] = {
["V"] = "?ます",
["C1"] = "?います",
["C2"] = "?きます",
["C3"] = "?ぎます",
["C4"] = "?します",
["C5"] = "?ちます",
["C6"] = "?にます",
["C7"] = "?びます",
["C8"] = "?みます",
["C9"] = "?ります",
["S"] = "?します",
["K"] = "?きます"
},
["negacja"] = {
["V"] = "?ない",
["C1"] = "?わない",
["C2"] = "?かない",
["C3"] = "?がない",
["C4"] = "?さない",
["C5"] = "?たない",
["C6"] = "?なない",
["C7"] = "?ばない",
["C8"] = "?まない",
["C9"] = "?らない",
["S"] = "?しない",
["K"] = "?こない"
},
["forma-wolitywna"] = {
["V"] = "?たい",
["C1"] = "?いたい",
["C2"] = "?きたい",
["C3"] = "?ぎたい",
["C4"] = "?したい",
["C5"] = "?ちたい",
["C6"] = "?にたい",
["C7"] = "?びたい",
["C8"] = "?みたい",
["C9"] = "?りたい",
["S"] = "?したい",
["K"] = "?きたい"
},
["forma-imperceptywna"] = {
["V"] = "?そう",
["C1"] = "?いそう",
["C2"] = "?きそう",
["C3"] = "?ぎそう",
["C4"] = "?しそう",
["C5"] = "?ちそう",
["C6"] = "?にそう",
["C7"] = "?びそう",
["C8"] = "?みそう",
["C9"] = "?りそう",
["S"] = "?しそう",
["K"] = "?きそう"
},
["forma-niefinitywna-1"] = {
["V"] = "?",
["C1"] = "?い",
["C2"] = "?き",
["C3"] = "?ぎ",
["C4"] = "?し",
["C5"] = "?ち",
["C6"] = "?に",
["C7"] = "?び",
["C8"] = "?み",
["C9"] = "?り",
["S"] = "?し",
["K"] = "?き"
},
["forma-niefinitywna-2"] = {
["V"] = "?て",
["C1"] = "?って",
["C2"] = "?いて",
["C3"] = "?いで",
["C4"] = "?して",
["C5"] = "?って",
["C6"] = "?んで",
["C7"] = "?んで",
["C8"] = "?んで",
["C9"] = "?って",
["S"] = "?して",
["K"] = "?きて"
},
["forma-niefinitywna-przeczenie-1"] = {
["V"] = "?ないで",
["C1"] = "?わないで",
["C2"] = "?かないで",
["C3"] = "?がないで",
["C4"] = "?さないで",
["C5"] = "?たないで",
["C6"] = "?なないで",
["C7"] = "?ばないで",
["C8"] = "?まないで",
["C9"] = "?らないで",
["S"] = "?しないで",
["K"] = "?こないで"
},
["forma-niefinitywna-przeczenie-2"] = {
["V"] = "?ず(に)",
["C1"] = "?わず(に)",
["C2"] = "?かず(に)",
["C3"] = "?がず(に)",
["C4"] = "?さず(に)",
["C5"] = "?たず(に)",
["C6"] = "?なず(に)",
["C7"] = "?ばず(に)",
["C8"] = "?まず(に)",
["C9"] = "?らず(に)",
["S"] = "?せず(に)",
["K"] = "?こず(に)",
},
["forma-gerundialna-1"] = {
["V"] = "?ながら",
["C1"] = "?いながら",
["C2"] = "?きながら",
["C3"] = "?ぎながら",
["C4"] = "?しながら",
["C5"] = "?ちながら",
["C6"] = "?にながら",
["C7"] = "?びながら",
["C8"] = "?みながら",
["C9"] = "?りながら",
["S"] = "?しながら",
["K"] = "?きながら"
},
["forma-gerundialna-2"] = {
["V"] = "?つつ",
["C1"] = "?いつつ",
["C2"] = "?きつつ",
["C3"] = "?ぎつつ",
["C4"] = "?しつつ",
["C5"] = "?ちつつ",
["C6"] = "?につつ",
["C7"] = "?びつつ",
["C8"] = "?みつつ",
["C9"] = "?りつつ",
["S"] = "?しつつ",
["K"] = "?きつつ"
},
["forma-warunkowa-1"] = {
["V"] = "?れば",
["C1"] = "?えば",
["C2"] = "?けば",
["C3"] = "?げば",
["C4"] = "?せば",
["C5"] = "?てば",
["C6"] = "?ねば",
["C7"] = "?べば",
["C8"] = "?めば",
["C9"] = "?れば",
["S"] = "?すれば",
["K"] = "?くれば"
},
["forma-warunkowa-2"] = {
["V"] = "?たら(ば)",
["C1"] = "?ったら(ば)",
["C2"] = "?いたら(ば)",
["C3"] = "?いだら(ば)",
["C4"] = "?したら(ば)",
["C5"] = "?ったら(ば)",
["C6"] = "?んだら(ば)",
["C7"] = "?んだら(ば)",
["C8"] = "?んだら(ば)",
["C9"] = "?ったら(ば)",
["S"] = "?したら(ば)",
["K"] = "?きたら(ば)"
},
["forma-strony-sprawczej"] = {
["V"] = "?させる",
["C1"] = "?わせる",
["C2"] = "?かせる",
["C3"] = "?がせる",
["C4"] = "?させる",
["C5"] = "?たせる",
["C6"] = "?なせる",
["C7"] = "?ばせる",
["C8"] = "?ませる",
["C9"] = "?らせる",
["S"] = "?させる",
["K"] = "?こさせる",
},
["potoczna-forma-strony-sprawczej"] = {
["V"] = "?さす",
["C1"] = "?わす",
["C2"] = "?かす",
["C3"] = "?がす",
["C4"] = "?さす",
["C5"] = "?たす",
["C6"] = "?なす",
["C7"] = "?ばす",
["C8"] = "?ます",
["C9"] = "?らす",
["S"] = "?さす",
["K"] = "?こさす",
},
["forma-strony-biernej"] = {
["V"] = "?られる",
["C1"] = "?われる",
["C2"] = "?かれる",
["C3"] = "?がれる",
["C4"] = "?される",
["C5"] = "?たれる",
["C6"] = "?なれる",
["C7"] = "?ばれる",
["C8"] = "?まれる",
["C9"] = "?られる",
["S"] = "?される",
["K"] = "?こられる",
},
["forma-strony-sprawczo-biernej"] = {
["V"] = "?させられる",
["C1"] = "?わされる<br>?わせられる",
["C2"] = "?かされる<br>?かせられる",
["C3"] = "?がされる<br>?わせられる",
["C4"] = "?させられる",
["C5"] = "?たされる<br>?たせられる",
["C6"] = "?なされる<br>?なせられる",
["C7"] = "?ばされる<br>?ばせられる",
["C8"] = "?まされる<br>?ませられる",
["C9"] = "?らされる<br>?らせられる",
["S"] = "?させられる",
["K"] = "?こさせられる"
},
["forma-wywyższająca"] = {
["V"] = "?られる",
["C1"] = "?われる",
["C2"] = "?かれる",
["C3"] = "?がれる",
["C4"] = "?される",
["C5"] = "?たれる",
["C6"] = "?なれる",
["C7"] = "?ばれる",
["C8"] = "?まれる",
["C9"] = "?られる",
["S"] = "?される",
["K"] = "?こられる",
},
["forma-potencjalna"] = {
["V"] = "?られる",
["C1"] = "?える",
["C2"] = "?ける",
["C3"] = "?げる",
["C4"] = "?せる",
["C5"] = "?てる",
["C6"] = "?ねる",
["C7"] = "?べる",
["C8"] = "?める",
["C9"] = "?れる",
["S"] = "?[[できる]]",
["K"] = "?こられる"
},
["potoczna-forma-potencjalna"] = {
["V"] = "?れる",
["C1"] = "",
["C2"] = "",
["C3"] = "",
["C4"] = "",
["C5"] = "",
["C6"] = "",
["C7"] = "",
["C8"] = "",
["C9"] = "",
["S"] = "",
["K"] = ""
},
["forma-hortatywna"] = {
["V"] = "?よう",
["C1"] = "?おう",
["C2"] = "?こう",
["C3"] = "?ごう",
["C4"] = "?そう",
["C5"] = "?とう",
["C6"] = "?のう",
["C7"] = "?ぼう",
["C8"] = "?もう",
["C9"] = "?ろう",
["S"] = "?しよう",
["K"] = "?こよう"
},
["forma-przypuszczająca"] = {
["V"] = "?よう",
["C1"] = "?おう",
["C2"] = "?こう",
["C3"] = "?ごう",
["C4"] = "?そう",
["C5"] = "?とう",
["C6"] = "?のう",
["C7"] = "?ぼう",
["C8"] = "?もう",
["C9"] = "?ろう",
["S"] = "?しよう",
["K"] = "?こよう"
},
["forma-przypuszczająca-czasu-przeszłego"] = {
["V"] = "?たろう",
["C1"] = "?ったろう",
["C2"] = "?いたろう",
["C3"] = "?いだろう",
["C4"] = "?したろう",
["C5"] = "?ったろう",
["C6"] = "?んだろう",
["C7"] = "?んだろう",
["C8"] = "?んだろう",
["C9"] = "?ったろう",
["S"] = "?したろう",
["K"] = "?きたろう",
},
["forma-negatywno-przypuszczająca"] = {
["V"] = "?るまい",
["C1"] = "?うまい",
["C2"] = "?くまい",
["C3"] = "?ぐまい",
["C4"] = "?すまい",
["C5"] = "?つまい",
["C6"] = "?ぬまい",
["C7"] = "?ぶまい",
["C8"] = "?むまい",
["C9"] = "?るまい",
["S"] = "?するまい<br>?すまい",
["K"] = "?くるまい<br>?こまい",
},
["rzadsza-forma-negatywno-przypuszczająca"] = {
["V"] = "?まい",
["C1"] = "",
["C2"] = "",
["C3"] = "",
["C4"] = "",
["C5"] = "",
["C6"] = "",
["C7"] = "",
["C8"] = "",
["C9"] = "",
["S"] = "",
["K"] = ""
},
["forma-rozkazująca-1"] = {
["V"] = "?ろ",
["C1"] = "?え",
["C2"] = "?け",
["C3"] = "?げ",
["C4"] = "?せ",
["C5"] = "?て",
["C6"] = "?ね",
["C7"] = "?べ",
["C8"] = "?め",
["C9"] = "?れ",
["S"] = "?しろ",
["K"] = "?こい"
},
["pisana-forma-rozkazująca-1"] = {
["V"] = "?よ",
["C1"] = "",
["C2"] = "",
["C3"] = "",
["C4"] = "",
["C5"] = "",
["C6"] = "",
["C7"] = "",
["C8"] = "",
["C9"] = "",
["S"] = "?せよ",
["K"] = ""
},
["forma-rozkazująca-2"] = {
["V"] = "?なさい",
["C1"] = "?いなさい",
["C2"] = "?きなさい",
["C3"] = "?ぎなさい",
["C4"] = "?しなさい",
["C5"] = "?ちなさい",
["C6"] = "?になさい",
["C7"] = "?びなさい",
["C8"] = "?みなさい",
["C9"] = "?りなさい",
["S"] = "?しなさい",
["K"] = "?きなさい"
},
["forma-prohibitywna"] = {
["V"] = "?るな",
["C1"] = "?うな",
["C2"] = "?くな",
["C3"] = "?ぐな",
["C4"] = "?すな",
["C5"] = "?つな",
["C6"] = "?ぬな",
["C7"] = "?ぶな",
["C8"] = "?むな",
["C9"] = "?るな",
["S"] = "?するな",
["K"] = "?くるな"
},
["forma-egzemplifikatywna"] = {
["V"] = "?たり",
["C1"] = "?ったり",
["C2"] = "?いたり",
["C3"] = "?いだり",
["C4"] = "?したり",
["C5"] = "?ったり",
["C6"] = "?んだり",
["C7"] = "?んだり",
["C8"] = "?んだり",
["C9"] = "?ったり",
["S"] = "?したり",
["K"] = "?きたり"
},
}
local convert_name_to_group = function(group)
local to_single_letter = {
["samogłoskowy"] = "V",
["spółgłoskowy"] = "C",
["suru"] = "S",
["odrzeczownikowy"] = "S",
["kuru"] = "K",
["nieregularny"] = "X",
}
return to_single_letter[group]
end
local find_group_based_on_verb = function(verb)
local possible_endings = {
["でくる"] = "K",
["で来る"] = "K",
["てくる"] = "K",
["て来る"] = "K",
["出来る"] = "V",
["くる"] = "K",
["来る"] = "K",
["する"] = "S",
["う"] = "C",
["く"] = "C",
["ぐ"] = "C",
["す"] = "C",
["つ"] = "C",
["ぬ"] = "C",
["ぶ"] = "C",
["む"] = "C",
}
for i=4,1,-1 do
local ending = mw.ustring.sub(verb, -i)
if possible_endings[ending] ~= nil then
return possible_endings[ending]
end
end
return nil
end
local detect_verb_group = function(verb, group)
if is_str_empty(group) then
return find_group_based_on_verb(verb)
elseif #group > 1 then
return convert_name_to_group(group)
else
return group
end
end
local get_stem_and_group = function(verb, group)
local stem = ""
local group = detect_verb_group(verb, group)
local err = nil
local godan_groups = {
["う"] = "C1",
["く"] = "C2",
["ぐ"] = "C3",
["す"] = "C4",
["つ"] = "C5",
["ぬ"] = "C6",
["ぶ"] = "C7",
["む"] = "C8",
["る"] = "C9"
}
local get_stem = {
["V"] = function(verb)
stem = mw.ustring.sub(verb, 1, mw.ustring.len(verb) - 1)
if mw.ustring.sub(verb, -1) ~= "る" then
err = "ichidan_group_mismatch"
end
end,
["C"] = function(verb)
local ending = mw.ustring.sub(verb, -1)
stem = mw.ustring.sub(verb, 1, mw.ustring.len(verb) - 1)
group = godan_groups[ending]
if group == nil then
err = "godan_group_mismatch"
end
end,
["K"] = function(verb)
local ending = mw.ustring.sub(verb, -2)
stem = mw.ustring.sub(verb, 1, mw.ustring.len(verb) - 2)
if ending ~= "来る" and ending ~="くる" then
err = "missing_kuru"
end
end,
["S"] = function(verb)
local ending = mw.ustring.sub(verb, -2)
stem = mw.ustring.sub(verb, 1, mw.ustring.len(verb) - 2)
if ending ~= "する" then
err = "missing_suru"
end
end
}
if group == nil then
err = "ambiguous_ending"
else
get_stem[group](verb)
end
return stem, group, err
end
local get_form_names = function()
local lst = {}
for k, _ in pairs(forms) do
table.insert(lst, k)
end
return lst
end
local get_group_name = function(group)
local group_name = {
["V"] = "czasownik z grupy samogłoskowej",
["C1"] = "czasownik z grupy spółgłoskowej, zakończony na う",
["C2"] = "czasownik z grupy spółgłoskowej, zakończony na く",
["C3"] = "czasownik z grupy spółgłoskowej, zakończony na ぐ",
["C4"] = "czasownik z grupy spółgłoskowej, zakończony na す",
["C5"] = "czasownik z grupy spółgłoskowej, zakończony na つ",
["C6"] = "czasownik z grupy spółgłoskowej, zakończony na ぬ",
["C7"] = "czasownik z grupy spółgłoskowej, zakończony na ぶ",
["C8"] = "czasownik z grupy spółgłoskowej, zakończony na む",
["C9"] = "czasownik z grupy spółgłoskowej, zakończony na る",
["X"] = "czasownik nieregularny",
["S"] = "czasownik nieregularny",
["K"] = "czasownik nieregularny",
["NS"] = "czasownik odrzeczownikowy",
}
return group_name[group]
end
local get_frame_args = function(frame, args_to_fetch, arglist)
local ret = arglist or {}
local args = frame.args
for _, n in pairs(args_to_fetch) do
ret[n] = args[n]
end
return ret
end
--[[
Main function
]]
p.main = function(frame)
local args = frame.args
local template = {}
local template_name = "Szablon:odmiana-czasownik-japoński/tabela"
local stem, group, err = get_stem_and_group(args[1], args[2])
if err ~= nil then
error(error_message[err])
end
template = get_frame_args(frame, get_form_names(), template)
for name, _ in pairs(template) do
if not is_str_empty(template[name]) or group == 'X' then
if template[name] == '-' then
template[name] = ""
end
else
template[name] = string.gsub(forms[name][group], "?", stem)
end
end
template["grupa"] = get_group_name(ifexpr(group == "S" and stem ~= "", "NS", group))
return frame:expandTemplate{title = template_name, args = template}
end
return p