Module to create Mohawk conjugation tables. Right now it's rudimentary, and needs to be passed the stem with the accent already there (so it can't deal with short nouns) It also currently only makes the Kahnawake forms

References

edit
  • Akwiratékha’ Martin (2018) Tekawennahsonterónnion - Kanien’kéha Morphology, Kahnawà:ke: Kanien’kehá:ka Onkwawén:na Raotitióhkwa Language and Cultural Center

local export = {}

local div_top = [=[
<div class="NavFrame" style="width: 30em;">
<div class="NavHead" style="background: #CCCCFF; text-align: left;">Possesive forms of <i lang="moh">PAGENAME</i></div>
<div class="NavContent">
]=]

local div_bottom = [=[</div>
</div>]=]

local poss_table = [=[
{| class="wikitable" style="width:30em"
|+ {TYPE}
|-
! Person !! Sing. !! Dual !! Plur.
|-
| 1st || {1|s} || {1|d} || {1|p}
|-
| 2nd || {2|s} || {2|d} || {2|p}
|-
| 3rd 
|| {3|m|s}  <br> {3|f//impers|s} <br> {3|f//n|s}
|colspan=2 style="text-align: center;"|  {3|m|d//p} <br> {3|f|d//p}
|}]=]

local lang = require("Module:languages").getByCode("moh")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")


local rfind = mw.ustring.find
local rsubn = mw.ustring.gsub
local ulower = mw.ustring.lower
local usub = mw.ustring.sub


local function rsub(term, foo, bar)
	local retval = rsubn(term, foo, bar)
	return retval
end

local function penultimate(form)
	return form
end

local form_names = {"1|s", "2|s", "3|m|s", "3|f//impers|s", "3|f//n|s", "1|d", "2|d", "1|p", "2|p", "3|m|d//p", "3|f|d//p"}
local poss = {
	["C"] = {"ak", "sa", "rao", "ako", "ao", "onkeni",  "seni", "onkwa", "sewa", "raoti", "aoti"},
	["R"] = {"ake", "sa", "rao", "ako", "ao", "onkeni",  "seni", "onkwa", "sewa", "raoti", "aoti"},
	["A"] = {"akwa", "sa", "rao", "ako", "ao", "ontia", "tsa", "onkwa", "sewa", "raona", "aona"},
	["E"] = {"akw", "s", "raw", "akaw", "aw", "onken", "sen", "onkw", "sew", "raon", "aon"},
	["O"] = {"ak", "s", "ra", "aka", "a", "onken", "sen", "onti", "ts", "raon", "aon"},
	["I"] = {"aki", "sen", "rao", "ako", "ao", "onkeni", "seni", "onkwen", "sewen", "raoti", "aoti"},
	["Y"] = {"at", "sen", "rao", "ako", "ao", "onkeni", "seni", "onkwen", "sewen", "raoti", "aoti"},
}

local neg_poss = {
	["C"] = {"tewak", "tesa", "teho", "teio", "teiako", "teionkeni",  "teseni", "teionkwa", "tesewa", "tehoti", "teioti"},
	["R"] = {"tewake", "tesa", "teho", "teio", "teiako", "teionkeni",  "teseni", "teionkwa", "tesewa", "tehoti", "teioti"},
	["A"] = {"tewaka", "tesa", "teho", "teio", "teiako", "teiontia",  "tetsa", "teionkwa", "tesewa", "tehona", "teiona"},
	["E"] = {"tewak", "tes", "tehaw", "teiaw", "teiakaw", "teionken",  "tesen", "teionkw", "tesew", "tehon", "teion"},
	["O"] = {"tewak", "tes", "teha", "teia", "teiaka", "teionken",  "tesen", "teionti", "tets", "tehon", "teion"},
	["Y"] = {"tewat", "tesa", "teho", "teio", "teiako", "teionkeni",  "teseni", "teionkwa", "tesewa", "tehoti", "teioti"}
}

local function build_table(PAGENAME, forms, neg_forms)
	full_table = rsub(div_top, "PAGENAME", PAGENAME) .. "\n" .. m_string_utilities.format(poss_table, forms) .. "\n" .. m_string_utilities.format(poss_table, neg_forms) .. div_bottom
	return full_table
end

function export.show(frame)
	PAGENAME = mw.title.getCurrentTitle().text
	text = frame.args[1] 
	ending = frame.args[2]
	-- control whether links get generated
	links = frame.args["link"]
	if links ~= nil and links == "true" then
		links = true
	else
		links = false
	end
	-- figure out the stem, and cut off initial vowel
	stem = ulower(text)
	init = usub(stem,1,1)
	second = usub(stem,2,2)
	class = nil
	if init == "a" then
		class = "A"
		stem = usub(stem,2,-1)
	elseif init == "e" then class = "E"
	elseif init == "o" then	class = "O"
	elseif init == "i" then
		if second == "a" or second == "e" or second == "o" then class = "Y"
		else 
			class = "I"
			stem = ulower(usub(stem,2,-1))
		end
	elseif init == "n" or init == "r" or init == "w" or init == "’" then class = "R"
	else class = "C"
	end
	prefixes = poss[class]
	neg_prefixes = neg_poss[class]
	local forms = {}
	local neg_forms = {}
	forms["TYPE"] = "Possesive"
	forms["PAGENAME"] = PAGENAME
	neg_forms["TYPE"] = "Negative possesive"
	neg_forms["PAGENAME"] = PAGENAME
	for i = 1,11 do
		form =  prefixes[i] .. stem .. ending
		neg_form = neg_prefixes[i] .. stem .. ending
		if links then
			link = m_links.full_link({term = form, lang = lang, accel = {form = form_names[i] .. "|poss"}}, "term", false)
			forms[form_names[i]] = link
			neg_link = m_links.full_link({term = form, lang = lang, accel = {form = form_names[i] .. "|neg|poss"}}, "term", false)
			neg_forms[form_names[i]] = neg_link
		else
			forms[form_names[i]] = form
			neg_forms[form_names[i]] = neg_form
		end
	end
	return build_table(PAGENAME ,forms, neg_forms)
end

return export