सामग्री पर जाएँ

मॉड्यूल:moh-noun

विक्षनरी से

इस मॉड्यूल हेतु प्रलेख मॉड्यूल:moh-noun/doc पर बनाया जा सकता है

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