Bước tới nội dung

Mô đun:njo-conj

Từ điển mở Wiktionary
local export = {}

local m_str_utils = require("Module:string utilities")
local m_table = require("Module:table")
local lang = require("Module:languages").getByCode("njo")

local gsub = m_str_utils.gsub
local len = m_str_utils.len
local match = m_str_utils.match
local sub = m_str_utils.sub
local find = m_str_utils.find
local char = m_str_utils.char
local upper = m_str_utils.upper
local lower = m_str_utils.lower

-- Generates the inflected forms of a verb
function conjugate(args)
	local forms = {}
	local pagename = mw.loadData("Module:headword/data").pagename
	local root
	if find(pagename, "^a") and not args["a"] then
		root = gsub(pagename, "^a", "")
	else
		root = pagename
	end	
	
	-- Applies affixes to form conjugated forms
	forms.past = pagename
	forms.past_neg = "me" .. pagename
	forms.perf = root .. "ogo"
	forms.perf_neg = "me" .. forms.perf
	
	forms.pres = pagename .. "er"
	forms.pres_neg = "me" .. forms.pres
	forms.prog = root .. "dar"
	forms.prog2 = root .. "dagi"
	forms.prog_neg = "me" .. forms.prog
	forms.prog_neg2 = "me" .. forms.prog2
	
	forms.fut = pagename .. "tsü"
	forms.fut_neg = "me" .. forms.fut
	
	forms.imp = root .. "ang"
	forms.imp_neg = "te" .. pagename
	
	forms.cond = root .. "ra"
	forms.cond2 = root .. "rabang"
	forms.cond_neg = "me" .. forms.cond
	forms.cond_neg2 = "me" .. forms.cond2
	
	forms.prespart = root .. "a"
	forms.prespart_neg = "me" .. root .. "i"
	
	-- Post-processing of forms
	local forms2 = {}
	for tam, combo in pairs(forms) do
		-- Remove series of vowels created by affixation where a stem boundary has a vowel
		form = gsub(combo, "^([mt])e([ao])", "%1%2")
		form = gsub(form, "aang$", "ang")
		form = gsub(form, "aa$", "a-a")
		form = gsub(form, "([aoiuü])er$", "%1r")
		
		-- Irregular contracted forms
		form = gsub(form, "^(m?)aruang$", "%1arung")
		form = gsub(form, "^(m?)e?oogo$", "%1ogo")
		
		forms2[tam] = form
	end
	
	return forms2
end

-- Inserts forms into a chart
function export.cchart(frame)
	
	local parent_args = frame:getParent().args
	local params = {
		["a"] = {},
	}
	local args = require("Module:parameters").process(parent_args, params)
	
	local forms = conjugate(args)
	local pagename = mw.loadData("Module:headword/data").pagename
	local table_top = mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = { 
			title = "Biến tố của ''" .. pagename .. "'' (Chungli)",
			palette = 'blue',
			tall = "yes"
		},
	}
	local table_bottom = mw.getCurrentFrame():expandTemplate{
		title= "inflection-table-bottom",
	}
	
	local chart 
	chart = table_top
	chart = chart .. "! colspan=2| \n ! Khẳng định !! Phủ định \n|-\n"
	chart = chart .. "! rowspan=2| Quá khứ \n ! Đơn \n| " .. forms.past .. " || " .. forms.past_neg .. "\n|-\n"
	chart = chart .. "! Hoàn thành \n|" .. forms.perf .. " || " .. forms.perf_neg ..  "\n|-\n"
	chart = chart .. "! rowspan=2| Hiện tại \n ! Đơn \n |" .. forms.pres .. " || " .. forms.pres_neg .. "\n|-\n"
	chart = chart .. "! Tiếp diễn \n |" .. forms.prog .. " <br/> " .. forms.prog2 .. " || " .. forms.prog_neg .. " <br/> " .. forms.prog_neg2 .. "\n|-\n"
	chart = chart .. "! colspan=2| Tương lai/nguyên mẫu \n | " .. forms.fut .. " || " .. forms.fut_neg .. "\n|-\n"
	chart = chart .. "! colspan=2| Mệnh lệnh \n|" .. forms.imp .. " || " .. forms.imp_neg .. "\n|-\n"
	chart = chart .. "! colspan=2| Phân từ hiện tại \n | " .. forms.prespart .. " || " .. forms.prespart_neg .. "\n|-\n"
	chart = chart .. "! colspan=2| Điều kiện \n | " .. forms.cond .. "<br/>" .. forms.cond2 .. " || " .. forms.cond_neg .. "<br/>" .. forms.cond_neg2 .. "\n"
	chart = chart .. table_bottom
	
	return chart
end

return export