This is a private module sandbox of ObnoxiousCoder, for their own experimentation. Items in this module may be added and removed at ObnoxiousCoder's discretion; do not rely on this module's stability.
local hit = require("Module:User:ObnoxiousCoder/hit-common")
function consonant(stem1, stem2, vowel)
local weni = "uw"..vowel.."ni"
local teni = "t"..vowel.."ni"
local table = {
nom = {
inf = stem2.."anna",
part = stem2.."anz",
noun = stem2.."ātar",
su = stem1.."uan"
},
act = {
pre = {
= stem1.."mi",
= stem1.."ši",
= stem1.."zzi",
= stem2.."uweni",
= stem2.."tteni",
= stem2.."anzi",
},
aor = {
= stem1.."un",
= stem1.."t",
= stem1.."t",
= stem1.."uen",
= stem1.."tteni",
= stem1.."er",
},
imp = {
= stem2.."allu",
= stem1,
= stem1.."du",
= stem1.."uen",
= stem1.."tten",
= stem2.."andu",
}
},
mid = {
pre = {
= stem2.."ḫa(ri)",
= stem2.."tta(ri), "..stem2.."tta(ti)",
= stem2.."a(ri), "..stem2.."ttari",
= stem2.."uwasta",
= stem2.."ttuma",
= stem2.."anta(ri)",
},
aor = {
= stem2.."ḫat",
= stem2.."ttat",
= stem2.."ttat",
= stem2.."uastat",
= stem2.."dumat",
= stem2.."antat",
},
imp = {
= stem2.."ḫḫaḫaru",
= stem2.."ḫut",
= stem2.."aru, "..stem2.."ttaru",
= stem2.."uwastat",
= stem2.."dumat",
= stem2.."antaru",
}
}
}
normalize_table(table)
return table
end
function thematic(stem_e, stem_a, vowel)
local weni = "uw"..vowel.."ni"
local teni = "tt"..vowel.."ni"
local table = {
nom = {
inf = stem_a.."wanzi",
part = stem_a.."nz",
noun = stem_a.."war",
su = stem_a.."wan"
},
act = {
pre = {
= stem_a.."mi",
= stem_e.."ši",
= stem_e.."zzi",
= stem_a.."uweni",
= stem_e.."tteni",
= stem_a.."nzi",
},
aor = {
= stem_e.."un",
= stem_e.."t",
= stem_e.."t",
= stem_a.."uen",
= stem_e.."tteni, "..stem_a.."tteni",
= stem_e.."r",
},
imp = {
= stem_a.."llu",
= stem_e.."(t), "..stem_a.."(t)",
= stem_a.."du",
= stem_a.."uen",
= stem_e.."tten, "..stem_a.."tten",
= stem_a.."ndu",
}
},
mid = {
pre = {
= stem_a.."ḫḫa(ri)",
= stem_a.."tta(ri), "..stem_a.."tta(ti)",
= stem_a.."(ri), "..stem_a.."ttari",
= stem_a.."uwasta",
= stem_a.."ttuma",
= stem_a.."nta(ri)",
},
aor = {
= stem_a.."ḫḫat",
= stem_e.."ttat",
= stem_e.."ttat",
= stem_a.."uastat",
= stem_e.."ddumat",
= stem_a.."ntat",
},
imp = {
= stem_a.."ḫḫaḫaru",
= stem_a.."ḫḫut",
= stem_a.."ru, "..stem_a.."ttaru",
= stem_a.."uwastat",
= stem_a.."ddumat",
= stem_a.."ntaru",
}
}
}
normalize_table(table)
return table
end
function normalize_table(tbl)
for key, value in pairs(tbl) do
if type(value) == "string" then
tbl = hit.normalize_geminates(value)
elseif type(value) == "table" then
normalize_table(value)
end
end
end
return function (args)
local stem1 = args
local stem2 = args or stem1
local ya_stem = mw.ustring.gmatch(stem1, "(.+)?a$")()
local ye_stem = mw.ustring.gmatch(stem1, "(.+)?e$")()
--local ess_stem = mw.ustring.gmatch(stem1, "(.+)ešš$")()
--local ai_stem = mw.ustring.gmatch(stem1, "(.+)ai$")()
--local a_stem = mw.ustring.gmatch(stem1, "(.+)e$")()
--local e_stem = mw.ustring.gmatch(stem1, "(.+)e$")()
--local nu_stem = mw.ustring.gmatch(stem1, "(.+)nu$")()
if ya_stem or ye_stem then
local thematic_stem = ya_stem or ye_stem
return thematic(thematic_stem..'ie', thematic_stem..'iya', 'e')
end
local vowel_broad = mw.ustring.match(stem1, "") and "a" or "e"
return consonant(stem1, stem2, vowel_broad)
end