Module:sma-common


local export = {}

local langdata = {
	consonant = {
		"^(.-)([^aeiïouyæöåAEIÏOUYÆÖÅ{}-]*)$",
	},
	vowel = {
		"^(.-)([aeu][ae])$",
		"^(.-)([iïo]e)$",
		"^(.-)([yö]ö)$",
		"^(.-)(å[aeå])$",
		"^(.-)([aeiïouyæå]?)$",
	},
	vowel_variants = {
		normal       = {                                     ["i"] = {"e"} ,                                           ["u"] = {"e"} },
		normal3      = {["a"] = {"e"} ,                      ["i"] = {"e"} , ["ie"] = {"e"}     , ["oe"] = {"o"}     , ["u"] = {"e"} },
		h            = {                ["e"] = {""}       , ["i"] = {""}                                            , ["u"] = {""}  },
		j            = {                ["e"] = {""}       , ["i"] = {""}                                            , ["u"] = {""}  },
		j_I          = {                ["e"] = {""}       , ["i"] = {""}  , ["ie"] = {"", "I"}                      , ["u"] = {""}  },
		jV           = {                ["e"] = {"i"}                                                                , ["u"] = {"i"} },
		i3           = {["a"] = {""}  , ["e"] = {""}       ,                 ["ie"] = {""}      , ["oe"] = {"o"}                     },
		i3_I         = {["a"] = {""}  , ["e"] = {""}       ,                 ["ie"] = {"", "I"} , ["oe"] = {"o"}                     },
		j3           = {["a"] = {"i"} , ["e"] = {"i"}      ,                 ["ie"] = {"i"}     , ["oe"] = {"o"}                     },
		j3_I         = {["a"] = {"i"} , ["e"] = {"i"}      ,                 ["ie"] = {"i", "I"}, ["oe"] = {"o"}                     },
		e            = {                                                     ["ie"] = {"a", "L"}, ["oe"] = {"e", "U"}                },
		e3           = {                                     ["i"] = {"e"} , ["ie"] = {"e", "L"}, ["oe"] = {"e", "U"}, ["u"] = {"e"} },
		pres_1sg     = {                                     ["i"] = {"e"} , ["ie"] = {"a", "L"}                     , ["u"] = {"e"} },
		pres_2sg     = {                ["e"] = {""}       , ["i"] = {""}  , ["ie"] = {"a", "L"}                     , ["u"] = {""}  },
		pres_3sg     = {["a"] = {"oe"}, ["e"] = {"a", "L"} , ["i"] = {"ie"}, ["ie"] = {"a", "L"}, ["oe"] = {"e", "U"}, ["u"] = {"oe"}},
		pres_1du_3pl = {                ["e"] = {"ie", "R"}, ["i"] = {"ie"}                                          , ["u"] = {"oe"}},
	},
	postprocess = function(form, vowel_effect)
		-- j > i when the vowel is dropped
		if form.uvowel == "" then
			form.ending = form.ending:gsub("^ji?", "i")
		end
		
		if vowel_effect == "L" then
			if form.svowel == "e" then
				form.svowel = "a"
			elseif form.svowel == "i" or form.svowel == "ï" then
				form.svowel = "æ"
			elseif form.svowel == "o" or form.svowel == "u" then
				form.svowel = "å"
			elseif form.svowel == "ae" then
				form.svowel = "aa"
			elseif form.svowel == "ie" or form.svowel == "ïe" then
				form.svowel = "ea"
			elseif form.svowel == "oe" or form.svowel == "ue" then
				form.svowel = "ua"
			elseif form.svowel == "åe" then
				form.svowel = "åa"
			end
		elseif vowel_effect == "R" then
			if form.svowel == "a" then
				form.svowel = "e"
			elseif form.svowel == "ï" then
				form.svowel = "i"
			elseif form.svowel == "o" then
				form.svowel = "u"
			elseif form.svowel == "aa" then
				form.svowel = "ae"
			elseif form.svowel == "ïe" then
				form.svowel = "ie"
			elseif form.svowel == "oe" then
				form.svowel = "ue"
			elseif form.svowel == "åa" then
				form.svowel = "åe"
			end
		elseif vowel_effect == "I" then
			if form.svowel == "ae" or form.svowel == "ie" then
				form.svowel = "ee"
			elseif form.svowel == "ue" or form.svowel == "åe" then
				form.svowel = "öö"
			end
		elseif vowel_effect == "U" then
			if form.svowel == "æ" then
				form.svowel = "y"
			elseif form.svowel == "a" or form.svowel == "å" then
				form.svowel = "o"
			elseif form.svowel == "aa" or form.svowel == "åa" then
				form.svowel = "åå"
			elseif form.svowel == "ea" then
				form.svowel = "yö"
			end
		end
	end,
}

export.Stem = require("Module:smi-common").make_constructor(langdata)

return export