local export = {}
local data = {}
local m_table = require("Modül:de-eylem/tablo")
local irregular_verbs = {
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
}
local pp = {
= true,
}
local function append(stem,suffix)
stem = mw.text.split(stem,"_",true)
for i=1,#stem do
stem = stem .. suffix
end
return #stem==1 and stem or stem
end
local function make_pres_indc(conj,stem)
local len = mw.ustring.len(stem)
local final = mw.ustring.sub(stem,len,len)
conj = stem .. "en"
conj = stem .. "end"
conj = stem .. "e"
conj = stem .. "t"
conj = stem .. "en"
conj = stem .. "en"
if final == "s" or final == "ß" then
conj = stem .. "t"
conj = stem .. "t"
conj = {stem, stem .. "e"}
conj = stem .. "t"
elseif final == "t" then
conj = stem .. "est"
conj = stem .. "et"
conj = stem .. "et"
conj = stem .. "e"
conj = stem .. "t"
elseif final == "d" then
conj = stem .. "est"
conj = stem .. "et"
conj = stem .. "et"
conj = stem .. "e"
conj = stem .. "t"
else
conj = stem .. "st"
conj = stem .. "t"
conj = {stem, stem .. "e"}
conj = stem .. "t"
end
end
local function make_pres_subj(conj,stem)
conj = stem .. "e"
conj = stem .. "est"
conj = stem .. "e"
conj = stem .. "en"
conj = stem .. "et"
conj = stem .. "en"
end
local function make_pres(conj,stem)
make_pres_indc(conj,stem)
make_pres_subj(conj,stem)
end
local function make_past_indc(conj,stem)
local len = mw.ustring.len(stem)
local final = mw.ustring.sub(stem,len,len)
conj = append(stem,"")
conj = append(stem,"")
conj = append(stem,"en")
conj = append(stem,"en")
if final == "s" or final == "ß" then
conj = append(stem,"t")
conj = append(stem,"t")
elseif final == "t" then
conj = append(stem,"e")
conj = append(stem,"est")
conj = append(stem,"e")
conj = append(stem,"et")
elseif final == "d" then
conj = append(stem,"est")
conj = append(stem,"et")
else
conj = append(stem,"st")
conj = append(stem,"t")
end
end
local function make_past_subj(conj,stem)
conj = append(stem,"e")
conj = append(stem,"est")
conj = append(stem,"e")
conj = append(stem,"en")
conj = append(stem,"et")
conj = append(stem,"en")
end
local function make_past(conj,stem)
make_past_indc(conj,stem)
make_past_subj(conj,stem)
end
data = function(stem)
local conj = {}
conj = stem .. "en"
conj = stem .. "end"
conj = stem .. "t"
conj = stem .. "e"
conj = stem .. "st"
conj = stem .. "t"
conj = stem .. "en"
conj = stem .. "t"
conj = stem .. "en"
conj = stem .. "e"
conj = stem .. "est"
conj = stem .. "e"
conj = stem .. "en"
conj = stem .. "et"
conj = stem .. "en"
make_past(conj,stem.."t")
conj = {stem, stem .. "e"}
conj = stem .. "t"
return conj
end
data = function(stem)
local conj = data(stem .. "s")
conj = stem .. "st"
return conj
end
data = function(stem)
local conj = data(stem .. "ß")
conj = stem .. "ßt"
return conj
end
data = function(stem)
local conj = data(stem .. "t")
conj = stem .. "tet"
conj = stem .. "test"
conj = stem .. "tet"
conj = stem .. "tet"
make_past(conj,stem .. "tet")
conj = stem .. "te"
conj = stem .. "tet"
return conj
end
data = function(stem)
local conj = data(stem .. "d")
conj = stem .. "det"
conj = stem .. "dest"
conj = stem .. "det"
conj = stem .. "det"
make_past(conj,stem .. "det")
conj = stem .. "de"
conj = stem .. "det"
return conj
end
data = function(stem, consonant)
local conj = data(stem .. "ech")
conj = stem .. "ochen"
conj = stem .. "ichst"
conj = stem .. "icht"
make_past_indc(conj, stem .. "ach")
make_past_subj(conj, stem .. "äch")
conj = stem .. "ich"
return conj
end
data = function(stem, consonant)
local conj = data(stem .. "ehm")
conj = stem .. "ommen"
conj = stem .. "immst"
conj = stem .. "immt"
make_past_indc(conj, stem .. "ahm")
make_past_subj(conj, stem .. "ähm")
conj = stem .. "imm"
return conj
end
data = function(stem)
local conj = data(stem .. "eh")
conj = stem .. "ehen"
conj = stem .. "iehst"
conj = stem .. "ieht"
make_past_indc(conj, stem .. "ah")
make_past_subj(conj, stem .. "äh")
if stem == "sch" then
conj = "schieh"
else
conj = {stem .. "ieh", stem .. "iehe"}
end
return conj
end
data = function(stem)
local conj = data(stem .. "enn")
conj = stem .. "annt"
make_past_indc(conj, stem .. "annt")
return conj
end
data = function(stem)
local conj = data(stem .. "in")
conj = stem .. "unden"
make_past_indc(conj, stem .. "and")
make_past_subj(conj, stem .. "änd")
return conj
end
data = function(stem)
local conj = data(stem .. "ie")
conj = stem .. "ossen"
make_past_indc(conj, stem .. "oss")
make_past_subj(conj, stem .. "öss")
return conj
end
data = function(stem)
local conj = data("bring")
conj = "bracht"
make_past_indc(conj, "brach")
make_past_subj(conj, "bräch")
return conj
end
data = function(stem)
local conj = data("fahr")
conj = "fahren"
conj = "fährst"
conj = "fährt"
make_past_indc(conj,"fuhr")
make_past_subj(conj,"führ")
return conj
end
data = function(stem)
local conj = data("komm")
conj = "kommen"
make_past_indc(conj,"kam")
make_past_subj(conj,"käm")
return conj
end
data = function(stem)
local conj = data("las")
conj = "lassen"
conj = "lässt"
conj = "lässt"
make_past(conj,"ließ")
return conj
end
data = function(stem)
local conj = data("lösch")
conj = "loschen"
conj = "lischst"
conj = "lischt"
conj = {"lisch", "lische"}
make_past_indc(conj,"losch")
make_past_subj(conj,"lösch")
return conj
end
data = function(stem)
local conj = data("schaff")
conj = "schaffen"
make_past_indc(conj,"schuf")
make_past_subj(conj,"schüf")
return conj
end
data = function(stem)
local conj = data("schlaf")
conj = "schlafen"
conj = "schläfst"
conj = "schläft"
make_past(conj,"schlief")
return conj
end
data = function(stem)
local conj = data("schwör")
conj = "schworen"
make_past_indc(conj,"schwor_schwur")
make_past_subj(conj,"schwör_schwür")
return conj
end
data = function(stem)
local conj = {}
conj = "sein"
conj = "seiend"
conj = "wesen"
conj = "bin"
conj = "bist"
conj = "ist"
conj = "sind"
conj = "seid"
conj = "sind"
conj = "sei"
conj = "seist"
conj = "sei"
conj = "seien"
conj = "seiet"
conj = "seien"
make_past_indc(conj, "war")
make_past_subj(conj, "wär")
conj = "sei"
conj = "seid"
return conj
end
data = function(stem)
local conj = data("steh")
conj = "standen"
make_pres_subj(conj, "ständ_stünd")
make_past_indc(conj, stem .. "stand")
return conj
end
data = function(stem)
local conj = data("tu")
conj = "tun"
conj = "tuend"
conj = "tan"
conj = "tun"
conj = "tun"
make_past_indc(conj, "tat")
conj = "tat"
conj = "tat"
make_past_subj(conj, "tät")
return conj
end
data = function(stem)
local conj = data("thu")
conj = "thun"
conj = "thuend"
conj = "than"
conj = "thun"
conj = "thun"
make_past_indc(conj, "that")
conj = "that"
conj = "that"
make_past_subj(conj, "thät")
return conj
end
data = function(stem)
local conj = data("winn")
conj = "wonnen"
make_past_indc(conj,"wann")
make_past_subj(conj,"wänn")
return conj
end
data = function(stem)
local conj = data("woll")
conj = "will"
conj = "willst"
conj = "will"
return conj
end
function export.auto(frame)
args = frame:getParent().args
local sep_prefix = args or ""
local insep_prefix = args or ""
local stem = args or ""
local conj_type = args or ""
local aux = args or "h"
local insep = args or ""
local impersonal = args or args or false
sep_prefix = sep_prefix:gsub(" "," ")
if conj_type == "" and stem == "" and insep_prefix == "" and sep_prefix == "" then -- {{de-conj-auto}}
error("Please provide at least one argument")
elseif conj_type == "" and stem == "" and insep_prefix == "" then -- {{de-conj-auto|sein}}
conj_type = sep_prefix
sep_prefix = ""
elseif conj_type == "" and stem == "" then
if irregular_verbs then -- {{de-conj-auto|ab|tun}}
conj_type = insep_prefix
insep_prefix = ""
else -- {{de-conj-auto|mach|en}}
conj_type = insep_prefix
stem = sep_prefix
insep_prefix = ""
sep_prefix = ""
end
elseif conj_type == "" then
if irregular_verbs then -- {{de-conj-auto|an|ver|tun}} (does not exist)
conj_type = stem
stem = ""
else -- {{de-conj-auto|ab|f|inden}}
conj_type = stem
stem = insep_prefix
insep_prefix = ""
end
end
if insep ~= "" and insep ~= "no" and insep ~= "0" and insep_prefix == "" then
insep_prefix = sep_prefix
sep_prefix = ""
end
if not data then error("Conjugation type not recognized by module") end
conj = data(stem)
if pp then
conj = nil
conj = nil
end
text = m_table.maketable(sep_prefix,insep_prefix,conj,aux,impersonal)
return text
end
function export.stems(frame)
args = frame:getParent().args
local sep_prefix = args or ""
local stems = args or ""
local pp = args or ""
local aux = args or "h"
local impersonal = args or ""
if impersonal == "" then impersonal = args or "" end
if impersonal == "" then impersonal = false end
sep_prefix = sep_prefix:gsub(" "," ")
if sep_prefix == "" and stems == "" and pp == "" then -- {{de-conj-stems}}
error("Please provide at least one argument")
elseif stems == "" then -- {{de-conj-stems|abandonnier}}
stems = sep_prefix
sep_prefix = ""
elseif pp == "" then
if mw.ustring.match(sep_prefix,"/") then
pp = stems
stems = sep_prefix
sep_prefix = ""
end
end
local conj = {}
stems = mw.text.split(stems,"/")
if pp == "" then
conj = "ge" .. stems .. "t"
else
conj = pp
end
if #stems == 1 then
make_pres(conj,stems)
make_past(conj,stems)
elseif #stems == 2 then
make_pres(conj,stems)
make_past(conj,stems)
elseif #stems == 3 then
make_pres(conj,stems)
make_past_indc(conj,stems)
make_past_subj(conj,stems)
elseif #stems == 4 then
make_pres_indc(conj,stems)
make_pres_subj(conj,stems)
make_past_indc(conj,stems)
make_past_subj(conj,stems)
end
if args then
conj = nil
conj = nil
end
text = m_table.maketable(sep_prefix,"",conj,aux,impersonal,true)
return text
end
return export