Documentation for this module may be created at Modulu:Declension/dok

local p = {}

-- Input: absolutive indefinite form
-- Output: absolutive singular form
-- Rules: -a > -a; -r > -rra; plural > nothing; else +a
function p.absolutive_singular(word)
	if type(word) == "table" then word = word.args[1] end
	if word == nil or word == '' then return end
	
	local suffix = ''
	if string.sub(word, -1) == 'r' then
		suffix = 'ra'
	elseif string.sub(word, -1) == 'k' then
		suffix = ''
	elseif string.sub(word, -1) ~= 'a' then
		suffix = 'a'
	end
	
	return word .. suffix
end

-- Input: absolutive indefinite form
-- Output: absolutive plural form
-- Rules: -a > -ak; -r > -rrak; else +ak
function p.absolutive_plural(word)
	if type(word) == "table" then word = word.args[1] end
	if word == nil or word == '' then return end
	
	local suffix = 'k'
	if string.sub(word, -1) == 'r' then
		suffix = 'rak'
	elseif string.sub(word, -1) ~= 'a' then
		suffix = 'ak'
	end
	
	return word .. suffix
end

-- Input: absolutive indefinite form
-- Output: ergative indefinite form
-- Rules: vowels > +k; -r > -rrek; else +ek
function p.ergative(word)
	if type(word) == "table" then word = word.args[1] end
	if word == nil or word == '' then return end
	
	local suffix = 'ek'
	local ending = string.sub(word, -1)
	
	if ending == 'r' then
		suffix = 'rek'
	elseif string.find(ending, "[aeiouy]") then
		suffix = 'k'
	end
	
	return word .. suffix
end

-- Input: absolutive indefinite form
-- Output: sociative adjectival form
-- Rules: vowels > +ren; -r > -rren; else +en
function p.zerekiko(word)
	if type(word) == "table" then word = word.args[1] end
	if word == nil or word == '' then return end
	
	local suffix = 'ekiko'
	local ending = string.sub(word, -1)
	
	if ending == 'r' then
		suffix = 'rekiko'
	elseif string.find(ending, "[aeiouy]") then
		suffix = 'rekiko'
	end
	
	return word .. suffix
end

-- Input: absolutive indefinite form
-- Output: genitive indefinite form
-- Rules: vowels > +ren; -r > -rren; else +en
function p.genitive(word)
	if type(word) == "table" then word = word.args[1] end
	if word == nil or word == '' then return end
	
	local suffix = 'en'
	local ending = string.sub(word, -1)
	
	if ending == 'r' then
		suffix = 'ren'
	elseif string.find(ending, "[aeiouy]") then
		suffix = 'ren'
	end
	
	return word .. suffix
end

-- Input: absolutive indefinite form
-- Output: locative indefinite form
-- Rules: vowels > +ko;  else +eko
function p.locative(word)
	if type(word) == "table" then word = word.args[1] end
	if word == nil or word == '' then return end
	
	local suffix = 'eko'
	local ending = string.sub(word, -1)
	
	if ending == 'r' then
		suffix = 'ko'
	elseif string.find(ending, "[aeiouy]") then
		suffix = 'ko'
	end
	
	return word .. suffix
end

return p