Modulu:Declension
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