মডিউল:dum-nouns
অবয়ব
এই মডিউলের জন্য মডিউল:dum-nouns/নথি-এ নথিপত্র তৈরি করা হয়ে থাকতে পারে
local m_links = require("Module:links")
local lang = require("Module:languages").getByCode("dum")
local export = {}
local function devoice(stem)
stem = mw.ustring.gsub(stem, "ng$", "nc")
stem = mw.ustring.gsub(stem, "g$", "ch")
stem = mw.ustring.gsub(stem, "d$", "t")
stem = mw.ustring.gsub(stem, "b$", "p")
stem = mw.ustring.gsub(stem, "v$", "f")
stem = mw.ustring.gsub(stem, "z$", "s")
return stem
end
local function degeminate(stem)
stem = mw.ustring.gsub(stem, "([cdghjklmnprstvwz])%1$", "%1")
stem = mw.ustring.gsub(stem, "ck$", "k")
return stem
end
local function C_to_K(stem)
stem = mw.ustring.gsub(stem, "cc$", "ck")
stem = mw.ustring.gsub(stem, "c$", "k")
return stem
end
local function K_to_C(stem)
stem = mw.ustring.gsub(stem, "ck$", "cc")
stem = mw.ustring.gsub(stem, "k$", "c")
return stem
end
local function syl_length(stem)
stem = stem:gsub("([aeiou])([^aeiou]*)$", function(vowel, rest)
local long = { a = "āe", e = "ēe", i = "ēe", o = "ōo"}
return (long[vowel] or vowel) .. rest
end)
return stem
end
local function contr_long_vowel(stem)
local replacements = {
["āe"] = "ā", ["âe"] = "â", ["ōo"] = "ō", ["ôo"] = "ô",
["ēe"] = "ē", ["êe"] = "ê", ["uu"] = "u", ["ij"] = "i"
}
for pattern, repl in pairs(replacements) do
stem = stem:gsub(pattern, repl)
end
return stem
end
local function postprocess(args, data)
for key, form in pairs(data.forms) do
-- Do not show singular or plural forms for nominals that don't have them
if ((args["n"] == "sg") and not key:find("_sg$")) or ((args["n"] == "pl") and not key:find("_pl$")) then
form = nil
end
data.forms[key] = form
end
end
function export.strong_m(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}" or mw.title.getCurrentTitle().subpageText},
[2] = {},
["open_syl"] = {},
["e_sing"] = {},
["s_plur"] = {},
["n"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "strong masculine noun", categories = {lang:getCanonicalName() .. " strong masculine nouns"}}
stem_1 = degeminate(devoice(args[1]))
if args.open_syl then
stem_2 = C_to_K(contr_long_vowel(syl_length(args[1])))
stem_3 = devoice(syl_length(args[1]))
table.insert(data.categories, "Middle Dutch nouns with open syllable lengthening")
else
stem_2 = C_to_K(contr_long_vowel(args[1]))
stem_3 = stem_1
end
if args.e_sing then
data.forms["nom_sg"] = {stem_2 .. "e"}
data.forms["acc_sg"] = {stem_2 .. "e"}
else
data.forms["nom_sg"] = {stem_1}
data.forms["acc_sg"] = {stem_1}
end
if args.open_syl then
data.forms["gen_sg"] = {degeminate(stem_1 .. "s"), degeminate(stem_3 .. "s"), stem_2 .. "es"}
else
data.forms["gen_sg"] = {degeminate(stem_1 .. "s")}
end
data.forms["dat_sg"] = {stem_2 .. "e"}
if args.s_plur then
data.forms["nom_pl"] = {stem_2 .. "e", stem_2 .. "s"}
data.forms["acc_pl"] = {stem_2 .. "e", stem_2 .. "s"}
table.insert(data.categories, "Middle Dutch nouns with plural in -s")
else
data.forms["nom_pl"] = {stem_2 .. "e"}
data.forms["acc_pl"] = {stem_2 .. "e"}
end
data.forms["gen_pl"] = {stem_2 .. "e"}
data.forms["dat_pl"] = {stem_2 .. "en"}
postprocess(args, data)
return make_table(data)
end
function export.strong_n(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}" or mw.title.getCurrentTitle().subpageText},
["open_syl"] = {},
["e_sing"] = {},
["r_plur"] = {},
["n"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "strong neuter noun", categories = {lang:getCanonicalName() .. " strong neuter nouns"}}
stem_1 = degeminate(devoice(args[1]))
if args.open_syl then
stem_2 = C_to_K(contr_long_vowel(syl_length(args[1])))
stem_3 = devoice(syl_length(args[1]))
table.insert(data.categories, "Middle Dutch nouns with open syllable lengthening")
else
stem_2 = C_to_K(contr_long_vowel(args[1]))
stem_3 = stem_1
end
if args.e_sing then
data.forms["nom_sg"] = {stem_2 .. "e"}
data.forms["acc_sg"] = {stem_2 .. "e"}
else
data.forms["nom_sg"] = {stem_1}
data.forms["acc_sg"] = {stem_1}
end
if args.open_syl then
data.forms["gen_sg"] = {degeminate(stem_1 .. "s"), degeminate(stem_3 .. "s"), stem_2 .. "es"}
else
data.forms["gen_sg"] = {degeminate(stem_1 .. "s")}
end
data.forms["dat_sg"] = {stem_2 .. "e"}
if args.r_plur then
data.forms["nom_pl"] = {stem_2 .. "er", stem_2 .. "ere"}
data.forms["acc_pl"] = {stem_2 .. "er", stem_2 .. "ere"}
data.forms["gen_pl"] = {stem_2 .. "er", stem_2 .. "ere"}
data.forms["dat_pl"] = {stem_2 .. "eren"}
table.insert(data.categories, "Middle Dutch nouns with plural in -er")
elseif args.open_syl then
data.forms["nom_pl"] = {stem_2 .. "e"}
data.forms["acc_pl"] = {stem_2 .. "e"}
data.forms["gen_pl"] = {stem_2 .. "e"}
data.forms["dat_pl"] = {stem_2 .. "en"}
elseif args.e_sing then
data.forms["nom_pl"] = {stem_2 .. "e"}
data.forms["acc_pl"] = {stem_2 .. "e"}
data.forms["gen_pl"] = {stem_2 .. "e"}
data.forms["dat_pl"] = {stem_2 .. "en"}
else
data.forms["nom_pl"] = {stem_1, stem_2 .. "e"}
data.forms["acc_pl"] = {stem_1, stem_2 .. "e"}
data.forms["gen_pl"] = {stem_2 .. "e"}
data.forms["dat_pl"] = {stem_2 .. "en"}
end
postprocess(args, data)
return make_table(data)
end
function export.strong_f(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}" or mw.title.getCurrentTitle().subpageText},
[2] = {},
["n"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "strong feminine noun", categories = {lang:getCanonicalName() .. " strong feminine nouns"}}
stem_1 = degeminate(devoice(args[1]))
stem_2 = C_to_K(contr_long_vowel(args[1]))
data.forms["nom_sg"] = {stem_1}
data.forms["acc_sg"] = {stem_1}
data.forms["gen_sg"] = {stem_1, stem_2 .. "e"}
data.forms["dat_sg"] = {stem_1, stem_2 .. "e"}
data.forms["nom_pl"] = {stem_2 .. "e"}
data.forms["acc_pl"] = {stem_2 .. "e"}
data.forms["gen_pl"] = {stem_2 .. "e"}
data.forms["dat_pl"] = {stem_2 .. "en"}
postprocess(args, data)
return make_table(data)
end
function export.weak_m(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}" or mw.title.getCurrentTitle().subpageText},
[2] = {},
["n"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "weak masculine noun", categories = {lang:getCanonicalName() .. " weak masculine nouns"}}
stem= args[1]
data.forms["nom_sg"] = {stem}
data.forms["acc_sg"] = {stem}
data.forms["gen_sg"] = {stem .. "n"}
data.forms["dat_sg"] = {stem}
data.forms["nom_pl"] = {stem .. "n"}
data.forms["acc_pl"] = {stem .. "n"}
data.forms["gen_pl"] = {stem .. "n"}
data.forms["dat_pl"] = {stem .. "n"}
postprocess(args, data)
return make_table(data)
end
function export.weak_n(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}" or mw.title.getCurrentTitle().subpageText},
["n"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "weak neuter noun", categories = {lang:getCanonicalName() .. " weak neuter nouns"}}
stem= args[1]
data.forms["nom_sg"] = {stem}
data.forms["acc_sg"] = {stem}
data.forms["gen_sg"] = {stem .. "n"}
data.forms["dat_sg"] = {stem}
data.forms["nom_pl"] = {stem .. "n"}
data.forms["acc_pl"] = {stem .. "n"}
data.forms["gen_pl"] = {stem .. "n"}
data.forms["dat_pl"] = {stem .. "n"}
postprocess(args, data)
return make_table(data)
end
function export.weak_f(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}" or mw.title.getCurrentTitle().subpageText},
[2] = {},
["n"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "weak feminine noun", categories = {lang:getCanonicalName() .. " weak feminine nouns"}}
stem=args[1]
data.forms["nom_sg"] = {stem}
data.forms["acc_sg"] = {stem}
data.forms["gen_sg"] = {stem, stem .. "n"}
data.forms["dat_sg"] = {stem, stem .. "n"}
data.forms["nom_pl"] = {stem .. "n"}
data.forms["acc_pl"] = {stem .. "n"}
data.forms["gen_pl"] = {stem .. "n"}
data.forms["dat_pl"] = {stem .. "n"}
postprocess(args, data)
return make_table(data)
end
function export.manual(frame)
local params = {
[1] = {default = "{{{1}}}" or mw.title.getCurrentTitle().subpageText},
[2] = {default = "{{{2}}}" or mw.title.getCurrentTitle().subpageText},
[3] = {default = "{{{3}}}" or mw.title.getCurrentTitle().subpageText},
[4] = {default = "{{{4}}}" or mw.title.getCurrentTitle().subpageText},
[5] = {default = "{{{5}}}" or mw.title.getCurrentTitle().subpageText},
[6] = {default = "{{{6}}}" or mw.title.getCurrentTitle().subpageText},
[7] = {default = "{{{7}}}" or mw.title.getCurrentTitle().subpageText},
[8] = {default = "{{{8}}}" or mw.title.getCurrentTitle().subpageText},
["type"] = {default = "{{{9}}}" or mw.title.getCurrentTitle().subpageText},
["n"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = args.type, categories = {lang:getCanonicalName() .. " irregular nouns"}}
data.forms["nom_sg"] = {args[1]}
data.forms["acc_sg"] = {args[2]}
data.forms["gen_sg"] = {args[3]}
data.forms["dat_sg"] = {args[4]}
data.forms["nom_pl"] = {args[5]}
data.forms["acc_pl"] = {args[6]}
data.forms["gen_pl"] = {args[7]}
data.forms["dat_pl"] = {args[8]}
postprocess(args, data)
return make_table(data)
end
-- Make the table
function make_table(data)
local function repl(param)
local form = data.forms[param]
if not form or #form == 0 then
return "—"
end
local ret = {}
for key, subform in ipairs(form) do
table.insert(ret, m_links.full_link({lang = lang, alt = subform}))
end
return table.concat(ret, ", ")
end
local names = {
["nom"] = "nominative",
["acc"] = "accusative",
["gen"] = "genitive",
["dat"] = "dative",
["sg"] = "singular",
["pl"] = "plural",
}
local cases = {"nom", "acc", "gen", "dat"}
local numbers = {"sg", "pl"}
local wikicode = {}
table.insert(wikicode, mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = mw.getContentLanguage():ucfirst(data.info or ""),
palette = 'indigo',
tall = 'yes',
},
})
table.insert(wikicode, "!")
for _, num in ipairs(numbers) do
table.insert(wikicode, "! " .. names[num])
end
for _, case in ipairs(cases) do
table.insert(wikicode, "|- ")
table.insert(wikicode, "! " .. names[case])
for _, num in ipairs(numbers) do
table.insert(wikicode, "| {{{" .. case .. "_" .. num .. "}}}")
end
end
table.insert(wikicode, mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' })
wikicode = table.concat(wikicode, "\n")
return (mw.ustring.gsub(wikicode, "{{{([a-z0-9_]+)}}}", repl)) .. require("Module:utilities").format_categories(data.categories, lang)
end
return export