Module:fi-verb

Definition from Wiktionary, the free dictionary
Jump to: navigation, search
The following documentation is located at Module:fi-verb/documentation. [edit]
Useful links: subpage listtransclusionstestcases

This module is used for the various Finnish verb inflection tables.


local m_utilities = require("Module:utilities")
local m_links = require("Module:links")
 
local export = {}
 
local lang = require("Module:languages").getByCode("fi")
 
-- Functions that do the actual inflecting by creating the forms of a basic term.
local inflections = {}
 
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
	local infl_type = frame.args[1] or error("Inflection type has not been specified. Please pass parameter 1 to the module invocation")
	local args = frame:getParent().args
 
	if not inflections[infl_type] then
		error("Unknown inflection type '" .. infl_type .. "'")
	end
 
	local data = {forms = {}, title = nil, categories = {}}
 
	-- Generate the forms
	inflections[infl_type](args, data)
 
	-- Postprocess
	postprocess(args, data)
 
	if args["apo"] then
		table.insert(data.categories, "fi-conj with apo")
	end
 
	if args["appendix"] then
		table.insert(data.categories, "fi-conj with appendix")
	end
 
	if args["nav"] then
		table.insert(data.categories, "fi-conj with nav")
	end
 
	if args["noagent"] then
		table.insert(data.categories, "fi-conj with noagent")
	end
 
	if args["nocheck"] then
		table.insert(data.categories, "fi-conj with nocheck")
	end
 
	if args["qual"] or
		args["q1sg"] or args["q2sg"] or args["q1pl"] or args["q2pl"] or args["q3p"] or args["qpass"] or
		args["q1sgp"] or args["q2sgp"] or args["q1plp"] or args["q2plp"] or args["q3pp"] or args["qpassp"] then
		table.insert(data.categories, "fi-conj with qual")
	end
 
	if args["rare"] then
		table.insert(data.categories, "fi-conj with rare")
	end
 
	if args["title"] then
		table.insert(data.categories, "fi-conj with title")
	end
 
	if args["type"] then
		table.insert(data.categories, "fi-conj with type")
	end
 
	return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
 
-- Get parameters from the template, in standard order and numbering
function get_params(args, num, default_2, default_3, default_4)
	local params = {}
 
	if num == 5 then
		params.base = args[1] or (mw.title.getCurrentTitle().nsText == "Template" and "-"); if not params.base or params.base == "" then error("Parameter 1 (base stem) may not be empty.") end
		params.inf_grade = args[2] or (mw.title.getCurrentTitle().nsText == "Template" and default_2); if not params.inf_grade then error("Parameter 2 (infinitive grade) may not be omitted.") end
		params.other_grade = args[3] or (mw.title.getCurrentTitle().nsText == "Template" and default_3); if not params.other_grade then error("Parameter 3 (other grade) may not be omitted.") end
		params.final = args[4] or (mw.title.getCurrentTitle().nsText == "Template" and default_4); if not params.final or params.final == "" then error("Parameter 4 (final letter(s)) may not be empty.") end
		params.a = args[5] or (mw.title.getCurrentTitle().nsText == "Template" and "a"); if params.a ~= "a" and params.a ~= "ä" then error("Parameter 5 must be \"a\" or \"ä\".") end
 
		if args[6] or args[7] then
			error("Parameters 6 and 7 are deprecated.")
		end
	elseif num == 4 then
		params.base = args[1] or (mw.title.getCurrentTitle().nsText == "Template" and "-"); if not params.base or params.base == "" then error("Parameter 1 (base stem) may not be empty.") end
		params.inf_grade = args[2] or (mw.title.getCurrentTitle().nsText == "Template" and default_2); if not params.inf_grade then error("Parameter 2 (infinitive grade) may not be omitted.") end
		params.other_grade = args[3] or (mw.title.getCurrentTitle().nsText == "Template" and default_3); if not params.other_grade then error("Parameter 3 (other grade) may not be omitted.") end
		params.a = args[4] or (mw.title.getCurrentTitle().nsText == "Template" and "a"); if params.a ~= "a" and params.a ~= "ä" then error("Parameter 4 must be \"a\" or \"ä\".") end
 
		if args[5] or args[6] then
			error("Parameters 5 and 6 are deprecated.")
		end
	elseif num == 2 then
		params.base = args[1] or (mw.title.getCurrentTitle().nsText == "Template" and "-" .. (default_2 or "")); if not params.base or params.base == "" then error("Parameter 1 (base stem) may not be empty.") end
		params.a = args[2] or (mw.title.getCurrentTitle().nsText == "Template" and "a"); if params.a ~= "a" and params.a ~= "ä" then error("Parameter 2 must be \"a\" or \"ä\".") end
 
		if args[3] or args[4] then
			error("Parameters 3 and 4 are deprecated.")
		end
	elseif num == 1 then
		params.base = args[1] or ""
	end
 
	if params.a then
		params.o = params.a == "ä" and "ö" or "o"
		params.u = params.a == "ä" and "y" or "u"
	end
 
	return params	
end
 
local make_weak = require("Module:fi-utilities").make_weak
 
 
--[=[
	Inflection functions
]=]--
 
inflections["sanoa"] = function(args, data)
	data.title = "[[Kotus]] type 52/[[Appendix:Finnish conjugation/sanoa|sanoa]]"
	table.insert(data.categories, "Finnish sanoa-type verbs")
 
	local params = get_params(args, 5, "kk", "k", "o")
 
	make_weak(params.base, params.inf_grade, params.final, params.other_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.inf_grade .. "-" .. params.other_grade .. "'' gradation"
	end
 
	local apo = (params.other_grade == "" and mw.ustring.sub(params.base, -1) == params.final) and "'" or ""
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. apo .. params.final .. "n"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. apo .. params.final .. "t"}
	data.forms["pres_3sg"] = {params.base .. params.inf_grade .. params.final .. params.final}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. apo .. params.final .. "mme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. apo .. params.final .. "tte"}
	data.forms["pres_3pl"] = {params.base .. params.inf_grade .. params.final .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.other_grade .. apo .. params.final .. "t" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. apo .. params.final}
	data.forms["pres_pasv_conn"] = {params.base .. params.other_grade .. apo .. params.final .. "t" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. apo .. params.final .. "in"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. apo .. params.final .. "it"}
	data.forms["past_3sg"] = {params.base .. params.inf_grade .. params.final .. "i"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. apo .. params.final .. "imme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. apo .. params.final .. "itte"}
	data.forms["past_3pl"] = {params.base .. params.inf_grade .. params.final .. "iv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.other_grade .. apo .. params.final .. "ttiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.inf_grade .. params.final .. "isin"}
	data.forms["cond_2sg"] = {params.base .. params.inf_grade .. params.final .. "isit"}
	data.forms["cond_3sg"] = {params.base .. params.inf_grade .. params.final .. "isi"}
	data.forms["cond_1pl"] = {params.base .. params.inf_grade .. params.final .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. params.inf_grade .. params.final .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. params.inf_grade .. params.final .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.inf_grade .. params.final .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. apo .. params.final}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. params.final .. "nen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. params.final .. "net"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. params.final .. "nee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. params.final .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. params.final .. "nette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. params.final .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. params.final .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. params.final .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. params.final .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. params.final .. "ess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. params.final .. "en"}
 
	data.forms["inf3_ine"] = {params.base .. params.inf_grade .. params.final .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.inf_grade .. params.final .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.inf_grade .. params.final .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.inf_grade .. params.final .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.inf_grade .. params.final .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.inf_grade .. params.final .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.inf_grade .. params.final .. "minen"}
	data.forms["inf4_par"] = {params.base .. params.inf_grade .. params.final .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.inf_grade .. params.final .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.inf_grade .. params.final .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. params.final .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. params.final .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. params.other_grade .. apo .. params.final .. "tt" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.inf_grade .. params.final .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. params.inf_grade .. params.final .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["muistaa"] = function(args, data)
	data.title = "[[Kotus]] type 53/[[Appendix:Finnish conjugation/muistaa|muistaa]]"
	table.insert(data.categories, "Finnish muistaa-type verbs")
 
	local params = get_params(args, 4, "t", "d")
 
	make_weak(params.base, params.inf_grade, params.a, params.other_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.inf_grade .. "-" .. params.other_grade .. "'' gradation"
	end
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. params.a .. "n"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. params.a .. "t"}
	data.forms["pres_3sg"] = {params.base .. params.inf_grade .. params.a .. params.a}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. params.a .. "mme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. params.a .. "tte"}
	data.forms["pres_3pl"] = {params.base .. params.inf_grade .. params.a .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.other_grade .. "et" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. params.a}
	data.forms["pres_pasv_conn"] = {params.base .. params.other_grade .. "et" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. "in"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. "it"}
	data.forms["past_3sg"] = {params.base .. params.inf_grade .. "i"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. "imme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. "itte"}
	data.forms["past_3pl"] = {params.base .. params.inf_grade .. "iv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.other_grade .. "ettiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.inf_grade .. params.a .. "isin"}
	data.forms["cond_2sg"] = {params.base .. params.inf_grade .. params.a .. "isit"}
	data.forms["cond_3sg"] = {params.base .. params.inf_grade .. params.a .. "isi"}
	data.forms["cond_1pl"] = {params.base .. params.inf_grade .. params.a .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. params.inf_grade .. params.a .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. params.inf_grade .. params.a .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.other_grade .. "ett" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.inf_grade .. params.a .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.other_grade .. "ett" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. params.a}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.other_grade .. "ett" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.other_grade .. "ett" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. params.a .. "nen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. params.a .. "net"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. params.a .. "nee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. params.a .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. params.a .. "nette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. params.a .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.other_grade .. "ett" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. params.a .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. params.other_grade .. "ett" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. params.a .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. params.a .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. params.a .. "ess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.other_grade .. "ett" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. params.a .. "en"}
 
	data.forms["inf3_ine"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.other_grade .. "ett" .. params.a .. "m" .. params.a .. "n "}
 
	data.forms["inf4_nom"] = {params.base .. params.inf_grade .. params.a .. "minen"}
	data.forms["inf4_par"] = {params.base .. params.inf_grade .. params.a .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.inf_grade .. params.a .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.other_grade .. "ett" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. params.a .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. params.a .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. params.other_grade .. "ett" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["huutaa"] = function(args, data)
	data.title = "[[Kotus]] type 54/[[Appendix:Finnish conjugation/huutaa|huutaa]]"
	table.insert(data.categories, "Finnish huutaa-type verbs")
 
	local params = get_params(args, 2)
 
	local wk = mw.ustring.sub(params.base, -1)
 
	if wk == "l" or wk == "n" or wk == "r" then
		data.title = data.title .. ", ''" .. wk .. "t-" .. wk .. wk .. "'' gradation"
	else
		wk = "d"
		data.title = data.title .. ", ''t-d'' gradation"
	end
 
	make_weak(params.base, "t", params.a, wk)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. wk .. params.a .. "n"}
	data.forms["pres_2sg"] = {params.base .. wk .. params.a .. "t"}
	data.forms["pres_3sg"] = {params.base .. "t" .. params.a .. params.a}
	data.forms["pres_1pl"] = {params.base .. wk .. params.a .. "mme"}
	data.forms["pres_2pl"] = {params.base .. wk .. params.a .. "tte"}
	data.forms["pres_3pl"] = {params.base .. "t" .. params.a .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. wk .. "et" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. wk .. params.a}
	data.forms["pres_pasv_conn"] = {params.base .. wk .. "et" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "sin"}
	data.forms["past_2sg"] = {params.base .. "sit"}
	data.forms["past_3sg"] = {params.base .. "si"}
	data.forms["past_1pl"] = {params.base .. "simme"}
	data.forms["past_2pl"] = {params.base .. "sitte"}
	data.forms["past_3pl"] = {params.base .. "siv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. wk .. "ettiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "t" .. params.a .. "isin"}
	data.forms["cond_2sg"] = {params.base .. "t" .. params.a .. "isit"}
	data.forms["cond_3sg"] = {params.base .. "t" .. params.a .. "isi"}
	data.forms["cond_1pl"] = {params.base .. "t" .. params.a .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. "t" .. params.a .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. "t" .. params.a .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. wk .. "ett" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "t" .. params.a .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. wk .. params.a}
	data.forms["impr_3sg"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "t" .. params.a .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "t" .. params.a .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. wk .. "ett" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "t" .. params.a .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "t" .. params.a .. "nen"}
	data.forms["potn_2sg"] = {params.base .. "t" .. params.a .. "net"}
	data.forms["potn_3sg"] = {params.base .. "t" .. params.a .. "nee"}
	data.forms["potn_1pl"] = {params.base .. "t" .. params.a .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. "t" .. params.a .. "nette"}
	data.forms["potn_3pl"] = {params.base .. "t" .. params.a .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. wk .. "ett" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "t" .. params.a .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "t" .. params.a .. params.a}
	data.forms["inf1_long"] = {params.base .. "t" .. params.a .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "t" .. params.a .. "ess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. wk .. "ett" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "t" .. params.a .. "en"}
 
	data.forms["inf3_ine"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "t" .. params.a .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. wk .. "ett" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "t" .. params.a .. "minen"}
	data.forms["inf4_par"] = {params.base .. "t" .. params.a .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "t" .. params.a .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. wk .. "ett" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "t" .. params.a .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "t" .. params.a .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. wk .. "ett" .. params.u}
	data.forms["agnt_part"] = {params.base .. "t" .. params.a .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["soutaa"] = function(args, data)
	data.title = "[[Kotus]] type 55/[[Appendix:Finnish conjugation/soutaa|soutaa]]"
	table.insert(data.categories, "Finnish soutaa-type verbs")
 
	local params = get_params(args, 2)
	local wk = mw.ustring.sub(params.base, -1)
 
	if wk == "l" or wk == "n" or wk == "r" then
		data.title = data.title .. ", ''" .. wk .. "t-" .. wk .. wk .. "'' gradation"
	else
		wk = "d"
		data.title = data.title .. ", ''t-d'' gradation"
	end
 
	make_weak(params.base, "t", params.a, wk)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. wk .. params.a .. "n"}
	data.forms["pres_2sg"] = {params.base .. wk .. params.a .. "t"}
	data.forms["pres_3sg"] = {params.base .. "t" .. params.a .. params.a}
	data.forms["pres_1pl"] = {params.base .. wk .. params.a .. "mme"}
	data.forms["pres_2pl"] = {params.base .. wk .. params.a .. "tte"}
	data.forms["pres_3pl"] = {params.base .. "t" .. params.a .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. wk .. "et" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. wk .. params.a}
	data.forms["pres_pasv_conn"] = {params.base .. wk .. "et" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. wk .. "in", params.base .. "sin"}
	data.forms["past_2sg"] = {params.base .. wk .. "it", params.base .. "sit"}
	data.forms["past_3sg"] = {params.base .. wk .. "i", params.base .. "si"}
	data.forms["past_1pl"] = {params.base .. wk .. "imme", params.base .. "simme"}
	data.forms["past_2pl"] = {params.base .. wk .. "itte", params.base .. "sitte"}
	data.forms["past_3pl"] = {params.base .. wk .. "iv" .. params.a .. "t", params.base .. "siv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. wk .. "ettiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "t" .. params.a .. "isin"}
	data.forms["cond_2sg"] = {params.base .. "t" .. params.a .. "isit"}
	data.forms["cond_3sg"] = {params.base .. "t" .. params.a .. "isi"}
	data.forms["cond_1pl"] = {params.base .. "t" .. params.a .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. "t" .. params.a .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. "t" .. params.a .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. wk .. "ett" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "t" .. params.a .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. wk .. params.a}
	data.forms["impr_3sg"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "t" .. params.a .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "t" .. params.a .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. wk .. "ett" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "t" .. params.a .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "t" .. params.a .. "nen"}
	data.forms["potn_2sg"] = {params.base .. "t" .. params.a .. "net"}
	data.forms["potn_3sg"] = {params.base .. "t" .. params.a .. "nee"}
	data.forms["potn_1pl"] = {params.base .. "t" .. params.a .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. "t" .. params.a .. "nette"}
	data.forms["potn_3pl"] = {params.base .. "t" .. params.a .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. wk .. "ett" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "t" .. params.a .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "t" .. params.a .. params.a}
	data.forms["inf1_long"] = {params.base .. "t" .. params.a .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "t" .. params.a .. "ess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. wk .. "ett" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "t" .. params.a .. "en"}
 
	data.forms["inf3_ine"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "t" .. params.a .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. wk .. "ett" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "t" .. params.a .. "minen"}
	data.forms["inf4_par"] = {params.base .. "t" .. params.a .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "t" .. params.a .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. wk .. "ett" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "t" .. params.a .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "t" .. params.a .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. wk .. "ett" .. params.u}
	data.forms["agnt_part"] = {params.base .. "t" .. params.a .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["kaivaa"] = function(args, data)
	data.title = "[[Kotus]] type 56/[[Appendix:Finnish conjugation/kaivaa|kaivaa]]"
	table.insert(data.categories, "Finnish kaivaa-type verbs")
 
	local params = get_params(args, 4, "kk", "k")
 
	make_weak(params.base, params.inf_grade, params.a, params.other_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.inf_grade .. "-" .. params.other_grade .. "'' gradation"
	end
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. params.a .. "n"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. params.a .. "t"}
	data.forms["pres_3sg"] = {params.base .. params.inf_grade .. params.a .. params.a}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. params.a .. "mme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. params.a .. "tte"}
	data.forms["pres_3pl"] = {params.base .. params.inf_grade .. params.a .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.other_grade .. "et" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. params.a}
	data.forms["pres_pasv_conn"] = {params.base .. params.other_grade .. "et" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. params.o .. "in"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. params.o .. "it"}
	data.forms["past_3sg"] = {params.base .. params.inf_grade .. params.o .. "i"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. params.o .. "imme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. params.o .. "itte"}
	data.forms["past_3pl"] = {params.base .. params.inf_grade .. params.o .. "iv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.other_grade .. "ettiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.inf_grade .. params.a .. "isin"}
	data.forms["cond_2sg"] = {params.base .. params.inf_grade .. params.a .. "isit"}
	data.forms["cond_3sg"] = {params.base .. params.inf_grade .. params.a .. "isi"}
	data.forms["cond_1pl"] = {params.base .. params.inf_grade .. params.a .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. params.inf_grade .. params.a .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. params.inf_grade .. params.a .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.other_grade .. "ett" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.inf_grade .. params.a .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.other_grade .. "ett" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. params.a}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.other_grade .. "ett" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. params.a .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.other_grade .. "ett" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. params.a .. "nen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. params.a .. "net"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. params.a .. "nee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. params.a .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. params.a .. "nette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. params.a .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.other_grade .. "ett" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. params.a .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. params.other_grade .. "ett" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. params.a .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. params.a .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. params.a .. "ess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.other_grade .. "ett" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. params.a .. "en"}
 
	data.forms["inf3_ine"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.other_grade .. "ett" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.inf_grade .. params.a .. "minen"}
	data.forms["inf4_par"] = {params.base .. params.inf_grade .. params.a .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.inf_grade .. params.a .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.other_grade .. "ett" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. params.a .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. params.a .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. params.other_grade .. "ett" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. params.inf_grade .. params.a .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["saartaa"] = function(args, data)
	data.title = "[[Kotus]] type 57/[[Appendix:Finnish conjugation/saartaa|saartaa]]"
	table.insert(data.categories, "Finnish saartaa-type verbs")
 
	local params = get_params(args, 2)
	local wk = mw.ustring.sub(params.base, -1)
 
	if wk == "l" or wk == "n" or wk == "r" then
		data.title = data.title .. ", ''" .. wk .. "t-" .. wk .. wk .. "'' gradation"
	else
		wk = "d"
		data.title = data.title .. ", ''t-d'' gradation"
	end
 
	make_weak(params.base, "t", params.a, wk)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. wk .. params.a .. "n"}
	data.forms["pres_2sg"] = {params.base .. wk .. params.a .. "t"}
	data.forms["pres_3sg"] = {params.base .. "t" .. params.a .. params.a}
	data.forms["pres_1pl"] = {params.base .. wk .. params.a .. "mme"}
	data.forms["pres_2pl"] = {params.base .. wk .. params.a .. "tte"}
	data.forms["pres_3pl"] = {params.base .. "t" .. params.a .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. wk .. "et" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. wk .. params.a}
	data.forms["pres_pasv_conn"] = {params.base .. wk .. "et" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "sin", params.base .. wk .. params.o .. "in"}
	data.forms["past_2sg"] = {params.base .. "sit", params.base .. wk .. params.o .. "it"}
	data.forms["past_3sg"] = {params.base .. "si", params.base .. "t" .. params.o .. "i"}
	data.forms["past_1pl"] = {params.base .. "simme", params.base .. wk .. params.o .. "imme"}
	data.forms["past_2pl"] = {params.base .. "sitte", params.base .. wk .. params.o .. "itte"}
	data.forms["past_3pl"] = {params.base .. "siv" .. params.a .. "t", params.base .. "t" .. params.o .. "iv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. wk .. "ettiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "t" .. params.a .. "isin"}
	data.forms["cond_2sg"] = {params.base .. "t" .. params.a .. "isit"}
	data.forms["cond_3sg"] = {params.base .. "t" .. params.a .. "isi"}
	data.forms["cond_1pl"] = {params.base .. "t" .. params.a .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. "t" .. params.a .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. "t" .. params.a .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. wk .. "ett" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "t" .. params.a .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. wk .. params.a}
	data.forms["impr_3sg"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "t" .. params.a .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "t" .. params.a .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. wk .. "ett" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "t" .. params.a .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "t" .. params.a .. "nen"}
	data.forms["potn_2sg"] = {params.base .. "t" .. params.a .. "net"}
	data.forms["potn_3sg"] = {params.base .. "t" .. params.a .. "nee"}
	data.forms["potn_1pl"] = {params.base .. "t" .. params.a .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. "t" .. params.a .. "nette"}
	data.forms["potn_3pl"] = {params.base .. "t" .. params.a .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. wk .. "ett" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "t" .. params.a .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "t" .. params.a .. params.a}
	data.forms["inf1_long"] = {params.base .. "t" .. params.a .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "t" .. params.a .. "ess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. wk .. "ett" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "t" .. params.a .. "en"}
 
	data.forms["inf3_ine"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "t" .. params.a .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. wk .. "ett" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "t" .. params.a .. "minen"}
	data.forms["inf4_par"] = {params.base .. "t" .. params.a .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "t" .. params.a .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. wk .. "ett" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "t" .. params.a .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "t" .. params.a .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. wk .. "ett" .. params.u}
	data.forms["agnt_part"] = {params.base .. "t" .. params.a .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["laskea"] = function(args, data)
	data.title = "[[Kotus]] type 58/[[Appendix:Finnish conjugation/laskea|laskea]]"
	table.insert(data.categories, "Finnish laskea-type verbs")
 
	local params = get_params(args, 4, "kk", "k")
 
	make_weak(params.base, params.inf_grade, "e", params.other_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.inf_grade .. "-" .. params.other_grade .. "'' gradation"
	end
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. "en"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. "et"}
	data.forms["pres_3sg"] = {params.base .. params.inf_grade .. "ee"}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. "emme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. "ette"}
	data.forms["pres_3pl"] = {params.base .. params.inf_grade .. "ev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.other_grade .. "et" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. "e"}
	data.forms["pres_pasv_conn"] = {params.base .. params.other_grade .. "et" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. "in"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. "it"}
	data.forms["past_3sg"] = {params.base .. params.inf_grade .. "i"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. "imme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. "itte"}
	data.forms["past_3pl"] = {params.base .. params.inf_grade .. "iv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.other_grade .. "ettiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.inf_grade .. "isin"}
	data.forms["cond_2sg"] = {params.base .. params.inf_grade .. "isit"}
	data.forms["cond_3sg"] = {params.base .. params.inf_grade .. "isi"}
	data.forms["cond_1pl"] = {params.base .. params.inf_grade .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. params.inf_grade .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. params.inf_grade .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.other_grade .. "ett" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.inf_grade .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.other_grade .. "ett" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. "e"}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. "ek" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. "ek" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. "ek" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. "ek" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.other_grade .. "ett" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. "ek" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.other_grade .. "ett" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. "enen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. "enet"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. "enee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. "enemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. "enette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. "enev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.other_grade .. "ett" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. "ene"}
	data.forms["potn_pasv_conn"] = {params.base .. params.other_grade .. "ett" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. "e" .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. "e" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. "iess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.other_grade .. "ett" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. "ien"}
 
	data.forms["inf3_ine"] = {params.base .. params.inf_grade .. "em" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.inf_grade .. "em" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.inf_grade .. "em" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.inf_grade .. "em" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.inf_grade .. "em" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.inf_grade .. "em" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.other_grade .. "ett" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.inf_grade .. "eminen"}
	data.forms["inf4_par"] = {params.base .. params.inf_grade .. "emist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.inf_grade .. "em" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.inf_grade .. "ev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.other_grade .. "ett" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. "en" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. "eneet"}
	data.forms["past_pasv_part"] = {params.base .. params.other_grade .. "ett" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.inf_grade .. "em" .. params.a}
	data.forms["nega_part"] = {params.base .. params.inf_grade .. "em" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["tuntea"] = function(args, data)
	data.title = "[[Kotus]] type 59/[[Appendix:Finnish conjugation/tuntea|tuntea]]"
	table.insert(data.categories, "Finnish tuntea-type verbs")
 
	local params = get_params(args, 2)
	local wk = mw.ustring.sub(params.base, -1)
 
	if wk == "l" or wk == "n" or wk == "r" then
		data.title = data.title .. ", ''" .. wk .. "t-" .. wk .. wk .. "'' gradation"
	else
		wk = "d"
		data.title = data.title .. ", ''t-d'' gradation"
	end
 
	make_weak(params.base, "t", "e", wk)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. wk .. "en"}
	data.forms["pres_2sg"] = {params.base .. wk .. "et"}
	data.forms["pres_3sg"] = {params.base .. "tee"}
	data.forms["pres_1pl"] = {params.base .. wk .. "emme"}
	data.forms["pres_2pl"] = {params.base .. wk .. "ette"}
	data.forms["pres_3pl"] = {params.base .. "tev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. wk .. "et" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. wk .. "e"}
	data.forms["pres_pasv_conn"] = {params.base .. wk .. "et" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "sin"}
	data.forms["past_2sg"] = {params.base .. "sit"}
	data.forms["past_3sg"] = {params.base .. "si"}
	data.forms["past_1pl"] = {params.base .. "simme"}
	data.forms["past_2pl"] = {params.base .. "sitte"}
	data.forms["past_3pl"] = {params.base .. "siv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. wk .. "ettiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "tisin"}
	data.forms["cond_2sg"] = {params.base .. "tisit"}
	data.forms["cond_3sg"] = {params.base .. "tisi"}
	data.forms["cond_1pl"] = {params.base .. "tisimme"}
	data.forms["cond_2pl"] = {params.base .. "tisitte"}
	data.forms["cond_3pl"] = {params.base .. "tisiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. wk .. "ett" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "tisi"}
	data.forms["cond_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. wk .. "e"}
	data.forms["impr_3sg"] = {params.base .. "tek" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "tek" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "tek" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "tek" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. wk .. "ett" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "tek" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "tenen"}
	data.forms["potn_2sg"] = {params.base .. "tenet"}
	data.forms["potn_3sg"] = {params.base .. "tenee"}
	data.forms["potn_1pl"] = {params.base .. "tenemme"}
	data.forms["potn_2pl"] = {params.base .. "tenette"}
	data.forms["potn_3pl"] = {params.base .. "tenev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. wk .. "ett" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "tene"}
	data.forms["potn_pasv_conn"] = {params.base .. wk .. "ett" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "te" .. params.a}
	data.forms["inf1_long"] = {params.base .. "te" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "tiess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. wk .. "ett" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "tien"}
 
	data.forms["inf3_ine"] = {params.base .. "tem" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "tem" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "tem" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "tem" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "tem" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "tem" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. wk .. "ett" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "teminen"}
	data.forms["inf4_par"] = {params.base .. "temist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "tem" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "tev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. wk .. "ett" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "ten" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "teneet"}
	data.forms["past_pasv_part"] = {params.base .. wk .. "ett" .. params.u}
	data.forms["agnt_part"] = {params.base .. "tem" .. params.a}
	data.forms["nega_part"] = {params.base .. "tem" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["lähteä"] = function(args, data)
	data.title = "[[Kotus]] type 60/[[Appendix:Finnish conjugation/lähteä|lähteä]], ''t-d'' gradation"
	table.insert(data.categories, "Finnish lähteä-type verbs")
 
	local params = get_params(args, 2)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. "hden"}
	data.forms["pres_2sg"] = {params.base .. "hdet"}
	data.forms["pres_3sg"] = {params.base .. "htee"}
	data.forms["pres_1pl"] = {params.base .. "hdemme"}
	data.forms["pres_2pl"] = {params.base .. "hdette"}
	data.forms["pres_3pl"] = {params.base .. "htev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. "hdet" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. "hde"}
	data.forms["pres_pasv_conn"] = {params.base .. "hdet" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "hdin", params.base .. "ksin"}
	data.forms["past_2sg"] = {params.base .. "hdit", params.base .. "ksit"}
	data.forms["past_3sg"] = {params.base .. "hti", params.base .. "ksi"}
	data.forms["past_1pl"] = {params.base .. "hdimme", params.base .. "ksimme"}
	data.forms["past_2pl"] = {params.base .. "hditte", params.base .. "ksitte"}
	data.forms["past_3pl"] = {params.base .. "htiv" .. params.a .. "t", params.base .. "ksiv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. "hdettiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "htisin"}
	data.forms["cond_2sg"] = {params.base .. "htisit"}
	data.forms["cond_3sg"] = {params.base .. "htisi"}
	data.forms["cond_1pl"] = {params.base .. "htisimme"}
	data.forms["cond_2pl"] = {params.base .. "htisitte"}
	data.forms["cond_3pl"] = {params.base .. "htisiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. "hdett" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "htisi"}
	data.forms["cond_pasv_conn"] = {params.base .. "hdett" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. "hde"}
	data.forms["impr_3sg"] = {params.base .. "htek" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "htek" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "htek" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "htek" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. "hdett" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "htek" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. "hdett" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "htenen"}
	data.forms["potn_2sg"] = {params.base .. "htenet"}
	data.forms["potn_3sg"] = {params.base .. "htenee"}
	data.forms["potn_1pl"] = {params.base .. "htenemme"}
	data.forms["potn_2pl"] = {params.base .. "htenette"}
	data.forms["potn_3pl"] = {params.base .. "htenev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. "hdett" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "htene"}
	data.forms["potn_pasv_conn"] = {params.base .. "hdett" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "hte" .. params.a}
	data.forms["inf1_long"] = {params.base .. "hte" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "htiess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. "hdett" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "htien"}
 
	data.forms["inf3_ine"] = {params.base .. "htem" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "htem" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "htem" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "htem" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "htem" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "htem" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. "hdett" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "hteminen"}
	data.forms["inf4_par"] = {params.base .. "htemist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "htem" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "htev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. "hdett" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "hten" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "hteneet"}
	data.forms["past_pasv_part"] = {params.base .. "hdett" .. params.u}
	data.forms["agnt_part"] = {params.base .. "htem" .. params.a}
	data.forms["nega_part"] = {params.base .. "htem" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["sallia"] = function(args, data)
	data.title = "[[Kotus]] type 61/[[Appendix:Finnish conjugation/sallia|sallia]]"
	table.insert(data.categories, "Finnish sallia-type verbs")
 
	local params = get_params(args, 4, "kk", "k")
 
	make_weak(params.base, params.inf_grade, "i", params.other_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.inf_grade .. "-" .. params.other_grade .. "'' gradation"
	end
 
	local apo = (params.other_grade == "" and mw.ustring.sub(params.base, -1) == "i") and "'" or ""
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. apo .. "in"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. apo .. "it"}
	data.forms["pres_3sg"] = {params.base .. params.inf_grade .. "ii"}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. apo .. "imme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. apo .. "itte"}
	data.forms["pres_3pl"] = {params.base .. params.inf_grade .. "iv" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.other_grade .. apo .. "it" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. apo .. "i"}
	data.forms["pres_pasv_conn"] = {params.base .. params.other_grade .. apo .. "it" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. apo .. "in"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. apo .. "it"}
	data.forms["past_3sg"] = {params.base .. params.inf_grade .. "i"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. apo .. "imme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. apo .. "itte"}
	data.forms["past_3pl"] = {params.base .. params.inf_grade .. "iv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.other_grade .. apo .. "ittiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.inf_grade .. "isin"}
	data.forms["cond_2sg"] = {params.base .. params.inf_grade .. "isit"}
	data.forms["cond_3sg"] = {params.base .. params.inf_grade .. "isi"}
	data.forms["cond_1pl"] = {params.base .. params.inf_grade .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. params.inf_grade .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. params.inf_grade .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.other_grade .. apo .. "itt" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.inf_grade .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.other_grade .. apo .. "itt" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. apo .. "i"}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. "ik" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. "ik" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. "ik" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. "ik" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.other_grade .. apo .. "itt" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. "ik" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.other_grade .. apo .. "itt" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. "inen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. "inet"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. "inee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. "inemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. "inette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. "inev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.other_grade .. apo .. "itt" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. "ine"}
	data.forms["potn_pasv_conn"] = {params.base .. params.other_grade .. apo .. "itt" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. "i" .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. "i" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. "iess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.other_grade .. apo .. "itt" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. "ien"}
 
	data.forms["inf3_ine"] = {params.base .. params.inf_grade .. "im" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.inf_grade .. "im" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.inf_grade .. "im" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.inf_grade .. "im" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.inf_grade .. "im" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.inf_grade .. "im" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.other_grade .. apo .. "itt" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.inf_grade .. "iminen"}
	data.forms["inf4_par"] = {params.base .. params.inf_grade .. "imist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.inf_grade .. "im" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.inf_grade .. "iv" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.other_grade .. apo .. "itt" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. "in" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. "ineet"}
	data.forms["past_pasv_part"] = {params.base .. params.other_grade .. apo .. "itt" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.inf_grade .. "im" .. params.a}
	data.forms["nega_part"] = {params.base .. params.inf_grade .. "im" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["voida"] = function(args, data)
	data.title = "[[Kotus]] type 62/[[Appendix:Finnish conjugation/voida|voida]], no gradation"
	table.insert(data.categories, "Finnish voida-type verbs")
 
	local params = get_params(args, 2)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. "n"}
	data.forms["pres_2sg"] = {params.base .. "t"}
	data.forms["pres_3sg"] = {params.base}
	data.forms["pres_1pl"] = {params.base .. "mme"}
	data.forms["pres_2pl"] = {params.base .. "tte"}
	data.forms["pres_3pl"] = {params.base .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. "d" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base}
	data.forms["pres_pasv_conn"] = {params.base .. "d" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "n"}
	data.forms["past_2sg"] = {params.base .. "t"}
	data.forms["past_3sg"] = {params.base}
	data.forms["past_1pl"] = {params.base .. "mme"}
	data.forms["past_2pl"] = {params.base .. "tte"}
	data.forms["past_3pl"] = {params.base .. "v" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. "tiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "sin"}
	data.forms["cond_2sg"] = {params.base .. "sit"}
	data.forms["cond_3sg"] = {params.base .. "si"}
	data.forms["cond_1pl"] = {params.base .. "simme"}
	data.forms["cond_2pl"] = {params.base .. "sitte"}
	data.forms["cond_3pl"] = {params.base .. "siv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. "t" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "si"}
	data.forms["cond_pasv_conn"] = {params.base .. "t" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base}
	data.forms["impr_3sg"] = {params.base .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. "t" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "nen"}
	data.forms["potn_2sg"] = {params.base .. "net"}
	data.forms["potn_3sg"] = {params.base .. "nee"}
	data.forms["potn_1pl"] = {params.base .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. "nette"}
	data.forms["potn_3pl"] = {params.base .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. "t" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. "t" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "d" .. params.a}
	data.forms["inf1_long"] = {params.base .. "d" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "dess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. "t" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "den"}
 
	data.forms["inf3_ine"] = {params.base .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "minen"}
	data.forms["inf4_par"] = {params.base .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. "t" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. "t" .. params.u}
	data.forms["agnt_part"] = {params.base .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["saada"] = function(args, data)
	data.title = "[[Kotus]] type 63/[[Appendix:Finnish conjugation/saada|saada]], no gradation"
	table.insert(data.categories, "Finnish saada-type verbs")
 
	local params = get_params(args, 2)
	local final = mw.ustring.sub(params.base, -1)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. final .. "n"}
	data.forms["pres_2sg"] = {params.base .. final .. "t"}
	data.forms["pres_3sg"] = {params.base .. final}
	data.forms["pres_1pl"] = {params.base .. final .. "mme"}
	data.forms["pres_2pl"] = {params.base .. final .. "tte"}
	data.forms["pres_3pl"] = {params.base .. final .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. final .. "d" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. final}
	data.forms["pres_pasv_conn"] = {params.base .. final .. "d" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "in"}
	data.forms["past_2sg"] = {params.base .. "it"}
	data.forms["past_3sg"] = {params.base .. "i"}
	data.forms["past_1pl"] = {params.base .. "imme"}
	data.forms["past_2pl"] = {params.base .. "itte"}
	data.forms["past_3pl"] = {params.base .. "iv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. final .. "tiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "isin"}
	data.forms["cond_2sg"] = {params.base .. "isit"}
	data.forms["cond_3sg"] = {params.base .. "isi"}
	data.forms["cond_1pl"] = {params.base .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. final .. "t" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. final .. "t" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. final}
	data.forms["impr_3sg"] = {params.base .. final .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. final .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. final .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. final .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. final .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. final .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. final .. "t" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. final .. "nen"}
	data.forms["potn_2sg"] = {params.base .. final .. "net"}
	data.forms["potn_3sg"] = {params.base .. final .. "nee"}
	data.forms["potn_1pl"] = {params.base .. final .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. final .. "nette"}
	data.forms["potn_3pl"] = {params.base .. final .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. final .. "t" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. final .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. final .. "t" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. final .. "d" .. params.a}
	data.forms["inf1_long"] = {params.base .. final .. "d" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. final .. "dess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. final .. "t" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. final .. "den"}
 
	data.forms["inf3_ine"] = {params.base .. final .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. final .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. final .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. final .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. final .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. final .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. final .. "t" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. final .. "minen"}
	data.forms["inf4_par"] = {params.base .. final .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. final .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. final .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. final .. "t" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. final .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. final .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. final .. "t" .. params.u}
	data.forms["agnt_part"] = {params.base .. final .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. final .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["juoda"] = function(args, data)
	data.title = "[[Kotus]] type 64/[[Appendix:Finnish conjugation/juoda|juoda]], no gradation"
	table.insert(data.categories, "Finnish juoda-type verbs")
 
	local params = get_params(args, 2)
	local past_cond_stem = mw.ustring.sub(params.base, 1, -3) .. mw.ustring.sub(params.base, -1)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. "n"}
	data.forms["pres_2sg"] = {params.base .. "t"}
	data.forms["pres_3sg"] = {params.base}
	data.forms["pres_1pl"] = {params.base .. "mme"}
	data.forms["pres_2pl"] = {params.base .. "tte"}
	data.forms["pres_3pl"] = {params.base .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. "d" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base}
	data.forms["pres_pasv_conn"] = {params.base .. "d" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {past_cond_stem .. "in"}
	data.forms["past_2sg"] = {past_cond_stem .. "it"}
	data.forms["past_3sg"] = {past_cond_stem .. "i"}
	data.forms["past_1pl"] = {past_cond_stem .. "imme"}
	data.forms["past_2pl"] = {past_cond_stem .. "itte"}
	data.forms["past_3pl"] = {past_cond_stem .. "iv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. "tiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {past_cond_stem .. "isin"}
	data.forms["cond_2sg"] = {past_cond_stem .. "isit"}
	data.forms["cond_3sg"] = {past_cond_stem .. "isi"}
	data.forms["cond_1pl"] = {past_cond_stem .. "isimme"}
	data.forms["cond_2pl"] = {past_cond_stem .. "isitte"}
	data.forms["cond_3pl"] = {past_cond_stem .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. "t" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {past_cond_stem .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. "t" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base}
	data.forms["impr_3sg"] = {params.base .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. "t" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "nen"}
	data.forms["potn_2sg"] = {params.base .. "net"}
	data.forms["potn_3sg"] = {params.base .. "nee"}
	data.forms["potn_1pl"] = {params.base .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. "nette"}
	data.forms["potn_3pl"] = {params.base .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. "t" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. "t" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "d" .. params.a}
	data.forms["inf1_long"] = {params.base .. "d" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "dess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. "t" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "den"}
 
	data.forms["inf3_ine"] = {params.base .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "minen"}
	data.forms["inf4_par"] = {params.base .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. "t" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. "t" .. params.u}
	data.forms["agnt_part"] = {params.base .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["käydä"] = function(args, data)
	data.title = "[[Kotus]] type 65/[[Appendix:Finnish conjugation/käydä|käydä]], no gradation"
	table.insert(data.categories, "Finnish käydä-type verbs")
 
	local params = get_params(args, 2)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.u .. "n"}
	data.forms["pres_2sg"] = {params.base .. params.u .. "t"}
	data.forms["pres_3sg"] = {params.base .. params.u}
	data.forms["pres_1pl"] = {params.base .. params.u .. "mme"}
	data.forms["pres_2pl"] = {params.base .. params.u .. "tte"}
	data.forms["pres_3pl"] = {params.base .. params.u .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.u .. "d" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.u}
	data.forms["pres_pasv_conn"] = {params.base .. params.u .. "d" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "vin"}
	data.forms["past_2sg"] = {params.base .. "vit"}
	data.forms["past_3sg"] = {params.base .. "vi"}
	data.forms["past_1pl"] = {params.base .. "vimme"}
	data.forms["past_2pl"] = {params.base .. "vitte"}
	data.forms["past_3pl"] = {params.base .. "viv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.u .. "tiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "visin"}
	data.forms["cond_2sg"] = {params.base .. "visit"}
	data.forms["cond_3sg"] = {params.base .. "visi"}
	data.forms["cond_1pl"] = {params.base .. "visimme"}
	data.forms["cond_2pl"] = {params.base .. "visitte"}
	data.forms["cond_3pl"] = {params.base .. "visiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.u .. "t" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "visi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.u .. "t" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.u}
	data.forms["impr_3sg"] = {params.base .. params.u .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.u .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.u .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.u .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.u .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.u .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.u .. "t" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.u .. "nen"}
	data.forms["potn_2sg"] = {params.base .. params.u .. "net"}
	data.forms["potn_3sg"] = {params.base .. params.u .. "nee"}
	data.forms["potn_1pl"] = {params.base .. params.u .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. params.u .. "nette"}
	data.forms["potn_3pl"] = {params.base .. params.u .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.u .. "t" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.u .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. params.u .. "t" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.u .. "d" .. params.a}
	data.forms["inf1_long"] = {params.base .. params.u .. "d" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.u .. "dess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.u .. "t" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.u .. "den"}
 
	data.forms["inf3_ine"] = {params.base .. params.u .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.u .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.u .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.u .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.u .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.u .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.u .. "t" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.u .. "minen"}
	data.forms["inf4_par"] = {params.base .. params.u .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.u .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.u .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.u .. "t" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.u .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.u .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. params.u .. "t" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.u .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. params.u .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["rohkaista"] = function(args, data)
	data.title = "[[Kotus]] type 66/[[Appendix:Finnish conjugation/rohkaista|rohkaista]]"
	table.insert(data.categories, "Finnish rohkaista-type verbs")
 
	local params = get_params(args, 5, "k", "kk", "i")
 
	make_weak(params.base, params.other_grade, params.final, params.inf_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.other_grade .. "-" .. params.inf_grade .. "'' gradation"
	end
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. params.final .. "sen"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. params.final .. "set"}
	data.forms["pres_3sg"] = {params.base .. params.other_grade .. params.final .. "see"}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. params.final .. "semme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. params.final .. "sette"}
	data.forms["pres_3pl"] = {params.base .. params.other_grade .. params.final .. "sev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. params.final .. "se"}
	data.forms["pres_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. params.final .. "sin"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. params.final .. "sit"}
	data.forms["past_3sg"] = {params.base .. params.other_grade .. params.final .. "si"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. params.final .. "simme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. params.final .. "sitte"}
	data.forms["past_3pl"] = {params.base .. params.other_grade .. params.final .. "siv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.inf_grade .. params.final .. "stiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.other_grade .. params.final .. "sisin"}
	data.forms["cond_2sg"] = {params.base .. params.other_grade .. params.final .. "sisit"}
	data.forms["cond_3sg"] = {params.base .. params.other_grade .. params.final .. "sisi"}
	data.forms["cond_1pl"] = {params.base .. params.other_grade .. params.final .. "sisimme"}
	data.forms["cond_2pl"] = {params.base .. params.other_grade .. params.final .. "sisitte"}
	data.forms["cond_3pl"] = {params.base .. params.other_grade .. params.final .. "sisiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.other_grade .. params.final .. "sisi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. params.final .. "se"}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. params.final .. "sk" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. params.final .. "sk" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. params.final .. "sk" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. params.final .. "sk" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.other_grade .. params.final .. "sk" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.other_grade .. params.final .. "st" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. params.final .. "ssen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. params.final .. "sset"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. params.final .. "ssee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. params.final .. "ssemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. params.final .. "ssette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. params.final .. "ssev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.other_grade .. params.final .. "sse"}
	data.forms["potn_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. params.final .. "stess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. params.final .. "sten"}
 
	data.forms["inf3_ine"] = {params.base .. params.other_grade .. params.final .. "sem" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.other_grade .. params.final .. "sem" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.other_grade .. params.final .. "sem" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.other_grade .. params.final .. "sem" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.other_grade .. params.final .. "sem" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.other_grade .. params.final .. "sem" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.other_grade .. params.final .. "seminen"}
	data.forms["inf4_par"] = {params.base .. params.other_grade .. params.final .. "semist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.other_grade .. params.final .. "sem" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.other_grade .. params.final .. "sev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. params.final .. "ss" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. params.final .. "sseet"}
	data.forms["past_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "st" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.other_grade .. params.final .. "sem" .. params.a}
	data.forms["nega_part"] = {params.base .. params.other_grade .. params.final .. "sem" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["tulla"] = function(args, data)
	data.title = "[[Kotus]] type 67/[[Appendix:Finnish conjugation/tulla|tulla]]"
	table.insert(data.categories, "Finnish tulla-type verbs")
 
	local params = get_params(args, 5, "t", "tt", "el")
	local cons = mw.ustring.sub(params.final, -1)
 
	make_weak(params.base, params.other_grade, params.final, params.inf_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.other_grade .. "-" .. params.inf_grade .. "'' gradation"
	end
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. params.final .. "en"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. params.final .. "et"}
	data.forms["pres_3sg"] = {params.base .. params.other_grade .. params.final .. "ee"}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. params.final .. "emme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. params.final .. "ette"}
	data.forms["pres_3pl"] = {params.base .. params.other_grade .. params.final .. "ev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.inf_grade .. params.final .. cons .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. params.final .. "e"}
	data.forms["pres_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. cons .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. params.final .. "in"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. params.final .. "it"}
	data.forms["past_3sg"] = {params.base .. params.other_grade .. params.final .. "i"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. params.final .. "imme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. params.final .. "itte"}
	data.forms["past_3pl"] = {params.base .. params.other_grade .. params.final .. "iv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.inf_grade .. params.final .. "tiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.other_grade .. params.final .. "isin"}
	data.forms["cond_2sg"] = {params.base .. params.other_grade .. params.final .. "isit"}
	data.forms["cond_3sg"] = {params.base .. params.other_grade .. params.final .. "isi"}
	data.forms["cond_1pl"] = {params.base .. params.other_grade .. params.final .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. params.other_grade .. params.final .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. params.other_grade .. params.final .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.other_grade .. params.final .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. params.final .. "e"}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. params.final .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. params.final .. cons .. "en"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. params.final .. cons .. "et"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. params.final .. cons .. "ee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. params.final .. cons .. "emme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. params.final .. cons .. "ette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. params.final .. cons .. "ev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. params.final .. cons .. "e"}
	data.forms["potn_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. params.final .. cons .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. params.final .. cons .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. params.final .. cons .. "ess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "ess" .. params.a}
 
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. params.final .. cons .. "en"}
	data.forms["inf3_ine"] = {params.base .. params.other_grade .. params.final .. "em" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.other_grade .. params.final .. "em" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.other_grade .. params.final .. "em" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.other_grade .. params.final .. "em" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.other_grade .. params.final .. "em" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.other_grade .. params.final .. "em" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.other_grade .. params.final .. "eminen"}
	data.forms["inf4_par"] = {params.base .. params.other_grade .. params.final .. "emist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.other_grade .. params.final .. "em" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.other_grade .. params.final .. "ev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. params.final .. cons .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. params.final .. cons .. "eet"}
	data.forms["past_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.other_grade .. params.final .. "em" .. params.a}
	data.forms["nega_part"] = {params.base .. params.other_grade .. params.final .. "em" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["tupakoida"] = function(args, data)
	data.title = "[[Kotus]] type 68/[[Appendix:Finnish conjugation/tupakoida|tupakoida]], no gradation"
	table.insert(data.categories, "Finnish tupakoida-type verbs")
 
	local params = get_params(args, 2)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. "n", params.base .. "tsen"}
	data.forms["pres_2sg"] = {params.base .. "t", params.base .. "tset"}
	data.forms["pres_3sg"] = {params.base, params.base .. "tsee"}
	data.forms["pres_1pl"] = {params.base .. "mme", params.base .. "tsemme"}
	data.forms["pres_2pl"] = {params.base .. "tte", params.base .. "tsette"}
	data.forms["pres_3pl"] = {params.base .. "v" .. params.a .. "t", params.base .. "tsev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. "d" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base, params.base .. "tse"}
	data.forms["pres_pasv_conn"] = {params.base .. "d" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "n", params.base .. "tsin"}
	data.forms["past_2sg"] = {params.base .. "t", params.base .. "tsit"}
	data.forms["past_3sg"] = {params.base, params.base .. "tsi"}
	data.forms["past_1pl"] = {params.base .. "mme", params.base .. "tsimme"}
	data.forms["past_2pl"] = {params.base .. "tte", params.base .. "tsitte"}
	data.forms["past_3pl"] = {params.base .. "v" .. params.a .. "t", params.base .. "tsiv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. "tiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "sin", params.base .. "tsisin"}
	data.forms["cond_2sg"] = {params.base .. "sit", params.base .. "tsisit"}
	data.forms["cond_3sg"] = {params.base .. "si", params.base .. "tsisi"}
	data.forms["cond_1pl"] = {params.base .. "simme", params.base .. "tsisimme"}
	data.forms["cond_2pl"] = {params.base .. "sitte", params.base .. "tsisitte"}
	data.forms["cond_3pl"] = {params.base .. "siv" .. params.a .. "t", params.base .. "tsisiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. "t" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "si", params.base .. "tsisi"}
	data.forms["cond_pasv_conn"] = {params.base .. "t" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base, params.base .. "tse"}
	data.forms["impr_3sg"] = {params.base .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. "t" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "nen"}
	data.forms["potn_2sg"] = {params.base .. "net"}
	data.forms["potn_3sg"] = {params.base .. "nee"}
	data.forms["potn_1pl"] = {params.base .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. "nette"}
	data.forms["potn_3pl"] = {params.base .. "nev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. "t" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. "t" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "d" .. params.a}
	data.forms["inf1_long"] = {params.base .. "d" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "dess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. "t" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "den"}
 
	data.forms["inf3_ine"] = {params.base .. "m" .. params.a .. "ss" .. params.a, params.base .. "tsem" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "m" .. params.a .. "st" .. params.a, params.base .. "tsem" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "m" .. params.a .. params.a .. "n", params.base .. "tsem" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "m" .. params.a .. "ll" .. params.a, params.base .. "tsem" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "m" .. params.a .. "tt" .. params.a, params.base .. "tsem" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "m" .. params.a .. "n", params.base .. "tsem" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "minen", params.base .. "tseminen"}
	data.forms["inf4_par"] = {params.base .. "mist" .. params.a, params.base .. "tsemist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n", params.base .. "tsem" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "v" .. params.a, params.base .. "tsev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. "t" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. "t" .. params.u}
	data.forms["agnt_part"] = {params.base .. "m" .. params.a, params.base .. "tsem" .. params.a}
	data.forms["nega_part"] = {params.base .. "m" .. params.a .. "t" .. params.o .. "n", params.base .. "tsem" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["valita"] = function(args, data)
	data.title = "[[Kotus]] type 69/[[Appendix:Finnish conjugation/valita|valita]], no gradation"
	table.insert(data.categories, "Finnish valita-type verbs")
 
	local params = get_params(args, 2)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. "tsen"}
	data.forms["pres_2sg"] = {params.base .. "tset"}
	data.forms["pres_3sg"] = {params.base .. "tsee"}
	data.forms["pres_1pl"] = {params.base .. "tsemme"}
	data.forms["pres_2pl"] = {params.base .. "tsette"}
	data.forms["pres_3pl"] = {params.base .. "tsev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. "t" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. "tse"}
	data.forms["pres_pasv_conn"] = {params.base .. "t" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "tsin"}
	data.forms["past_2sg"] = {params.base .. "tsit"}
	data.forms["past_3sg"] = {params.base .. "tsi"}
	data.forms["past_1pl"] = {params.base .. "tsimme"}
	data.forms["past_2pl"] = {params.base .. "tsitte"}
	data.forms["past_3pl"] = {params.base .. "tsiv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. "ttiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "tsisin"}
	data.forms["cond_2sg"] = {params.base .. "tsisit"}
	data.forms["cond_3sg"] = {params.base .. "tsisi"}
	data.forms["cond_1pl"] = {params.base .. "tsisimme"}
	data.forms["cond_2pl"] = {params.base .. "tsisitte"}
	data.forms["cond_3pl"] = {params.base .. "tsisiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. "tt" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "tsisi"}
	data.forms["cond_pasv_conn"] = {params.base .. "tt" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. "tse"}
	data.forms["impr_3sg"] = {params.base .. "tk" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "tk" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "tk" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "tk" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. "tt" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "tk" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. "tt" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "nnen"}
	data.forms["potn_2sg"] = {params.base .. "nnet"}
	data.forms["potn_3sg"] = {params.base .. "nnee"}
	data.forms["potn_1pl"] = {params.base .. "nnemme"}
	data.forms["potn_2pl"] = {params.base .. "nnette"}
	data.forms["potn_3pl"] = {params.base .. "nnev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. "tt" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "nne"}
	data.forms["potn_pasv_conn"] = {params.base .. "tt" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "t" .. params.a}
	data.forms["inf1_long"] = {params.base .. "t" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "tess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. "tt" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "ten"}
 
	data.forms["inf3_ine"] = {params.base .. "tsem" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "tsem" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "tsem" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "tsem" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "tsem" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "tsem" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. "tt" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "tseminen"}
	data.forms["inf4_par"] = {params.base .. "tsemist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "tsem" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "tsev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. "tt" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "nn" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "nneet"}
	data.forms["past_pasv_part"] = {params.base .. "tt" .. params.u}
	data.forms["agnt_part"] = {params.base .. "tsem" .. params.a}
	data.forms["nega_part"] = {params.base .. "tsem" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["juosta"] = function(args, data)
	data.title = "[[Kotus]] type 70/[[Appendix:Finnish conjugation/juosta|juosta]], no gradation"
	table.insert(data.categories, "Finnish juosta-type verbs")
 
	local params = get_params(args, 2)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. "ksen"}
	data.forms["pres_2sg"] = {params.base .. "kset"}
	data.forms["pres_3sg"] = {params.base .. "ksee"}
	data.forms["pres_1pl"] = {params.base .. "ksemme"}
	data.forms["pres_2pl"] = {params.base .. "ksette"}
	data.forms["pres_3pl"] = {params.base .. "ksev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. "st" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. "kse"}
	data.forms["pres_pasv_conn"] = {params.base .. "st" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "ksin"}
	data.forms["past_2sg"] = {params.base .. "ksit"}
	data.forms["past_3sg"] = {params.base .. "ksi"}
	data.forms["past_1pl"] = {params.base .. "ksimme"}
	data.forms["past_2pl"] = {params.base .. "ksitte"}
	data.forms["past_3pl"] = {params.base .. "ksiv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. "stiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "ksisin"}
	data.forms["cond_2sg"] = {params.base .. "ksisit"}
	data.forms["cond_3sg"] = {params.base .. "ksisi"}
	data.forms["cond_1pl"] = {params.base .. "ksisimme"}
	data.forms["cond_2pl"] = {params.base .. "ksisitte"}
	data.forms["cond_3pl"] = {params.base .. "ksisiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. "st" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "ksisi"}
	data.forms["cond_pasv_conn"] = {params.base .. "st" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. "kse"}
	data.forms["impr_3sg"] = {params.base .. "sk" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "sk" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "sk" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "sk" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. "st" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "sk" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. "st" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "ssen"}
	data.forms["potn_2sg"] = {params.base .. "sset"}
	data.forms["potn_3sg"] = {params.base .. "ssee"}
	data.forms["potn_1pl"] = {params.base .. "ssemme"}
	data.forms["potn_2pl"] = {params.base .. "ssette"}
	data.forms["potn_3pl"] = {params.base .. "ssev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. "st" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "sse"}
	data.forms["potn_pasv_conn"] = {params.base .. "st" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "st" .. params.a}
	data.forms["inf1_long"] = {params.base .. "st" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "stess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. "st" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "sten"}
 
	data.forms["inf3_ine"] = {params.base .. "ksem" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "ksem" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "ksem" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "ksem" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "ksem" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "ksem" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. "st" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "kseminen"}
	data.forms["inf4_par"] = {params.base .. "ksemist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "ksem" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "ksev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. "st" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "ss" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "sseet"}
	data.forms["past_pasv_part"] = {params.base .. "st" .. params.u}
	data.forms["agnt_part"] = {params.base .. "ksem" .. params.a}
	data.forms["nega_part"] = {params.base .. "ksem" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["nähdä"] = function(args, data)
	data.title = "[[Kotus]] type 71/[[Appendix:Finnish conjugation/nähdä|nähdä]], no gradation"
	table.insert(data.categories, "Finnish nähdä-type verbs")
 
	local params = get_params(args, 2)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. "en"}
	data.forms["pres_2sg"] = {params.base .. "et"}
	data.forms["pres_3sg"] = {params.base .. "kee"}
	data.forms["pres_1pl"] = {params.base .. "emme"}
	data.forms["pres_2pl"] = {params.base .. "ette"}
	data.forms["pres_3pl"] = {params.base .. "kev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. "hd" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. "e"}
	data.forms["pres_pasv_conn"] = {params.base .. "hd" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "in"}
	data.forms["past_2sg"] = {params.base .. "it"}
	data.forms["past_3sg"] = {params.base .. "ki"}
	data.forms["past_1pl"] = {params.base .. "imme"}
	data.forms["past_2pl"] = {params.base .. "itte"}
	data.forms["past_3pl"] = {params.base .. "kiv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. "htiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "kisin"}
	data.forms["cond_2sg"] = {params.base .. "kisit"}
	data.forms["cond_3sg"] = {params.base .. "kisi"}
	data.forms["cond_1pl"] = {params.base .. "kisimme"}
	data.forms["cond_2pl"] = {params.base .. "kisitte"}
	data.forms["cond_3pl"] = {params.base .. "kisiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. "ht" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "kisi"}
	data.forms["cond_pasv_conn"] = {params.base .. "ht" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. "e"}
	data.forms["impr_3sg"] = {params.base .. "hk" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "hk" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "hk" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "hk" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. "ht" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "hk" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. "ht" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "hnen"}
	data.forms["potn_2sg"] = {params.base .. "hnet"}
	data.forms["potn_3sg"] = {params.base .. "hnee"}
	data.forms["potn_1pl"] = {params.base .. "hnemme"}
	data.forms["potn_2pl"] = {params.base .. "hnette"}
	data.forms["potn_3pl"] = {params.base .. "hnev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. "ht" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "hne"}
	data.forms["potn_pasv_conn"] = {params.base .. "ht" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "hd" .. params.a}
	data.forms["inf1_long"] = {params.base .. "hd" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "hdess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. "ht" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "hden"}
 
	data.forms["inf3_ine"] = {params.base .. "kem" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "kem" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "kem" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "kem" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "kem" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "kem" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. "ht" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "keminen"}
	data.forms["inf4_par"] = {params.base .. "kemist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "kem" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "kev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. "ht" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "hn" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "hneet"}
	data.forms["past_pasv_part"] = {params.base .. "ht" .. params.u}
	data.forms["agnt_part"] = {params.base .. "kem" .. params.a}
	data.forms["nega_part"] = {params.base .. "kem" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["vanheta"] = function(args, data)
	data.title = "[[Kotus]] type 72/[[Appendix:Finnish conjugation/vanheta|vanheta]]"
	table.insert(data.categories, "Finnish vanheta-type verbs")
 
	local params = get_params(args, 5, "k", "kk", "e")
 
	make_weak(params.base, params.other_grade, params.final, params.inf_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.other_grade .. "-" .. params.inf_grade .. "'' gradation"
	end
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. params.final .. "nen"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. params.final .. "net"}
	data.forms["pres_3sg"] = {params.base .. params.other_grade .. params.final .. "nee"}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. params.final .. "nemme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. params.final .. "nette"}
	data.forms["pres_3pl"] = {params.base .. params.other_grade .. params.final .. "nev" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. params.final .. "ne"}
	data.forms["pres_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. params.final .. "nin"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. params.final .. "nit"}
	data.forms["past_3sg"] = {params.base .. params.other_grade .. params.final .. "ni"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. params.final .. "nimme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. params.final .. "nitte"}
	data.forms["past_3pl"] = {params.base .. params.other_grade .. params.final .. "niv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.inf_grade .. params.final .. "ttiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.other_grade .. params.final .. "nisin"}
	data.forms["cond_2sg"] = {params.base .. params.other_grade .. params.final .. "nisit"}
	data.forms["cond_3sg"] = {params.base .. params.other_grade .. params.final .. "nisi"}
	data.forms["cond_1pl"] = {params.base .. params.other_grade .. params.final .. "nisimme"}
	data.forms["cond_2pl"] = {params.base .. params.other_grade .. params.final .. "nisitte"}
	data.forms["cond_3pl"] = {params.base .. params.other_grade .. params.final .. "nisiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.other_grade .. params.final .. "nisi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. params.final .. "ne"}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. params.final .. "nnen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. params.final .. "nnet"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. params.final .. "nnee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. params.final .. "nnemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. params.final .. "nnette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. params.final .. "nnev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. params.final .. "nne"}
	data.forms["potn_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. params.final .. "tess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. params.final .. "ten"}
 
	data.forms["inf3_ine"] = {params.base .. params.other_grade .. params.final .. "nem" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.other_grade .. params.final .. "nem" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.other_grade .. params.final .. "nem" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.other_grade .. params.final .. "nem" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.other_grade .. params.final .. "nem" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.other_grade .. params.final .. "nem" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.other_grade .. params.final .. "neminen"}
	data.forms["inf4_par"] = {params.base .. params.other_grade .. params.final .. "nemist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.other_grade .. params.final .. "nem" .. params.a .. "isil" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.other_grade .. params.final .. "nev" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. params.final .. "nn" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. params.final .. "nneet"}
	data.forms["past_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.other_grade .. params.final .. "nem" .. params.a}
	data.forms["nega_part"] = {params.base .. params.other_grade .. params.final .. "nem" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["salata"] = function(args, data)
	data.title = "[[Kotus]] type 73/[[Appendix:Finnish conjugation/salata|salata]]"
	table.insert(data.categories, "Finnish salata-type verbs")
 
	local params = get_params(args, 4, "k", "kk")
 
	make_weak(params.base, params.other_grade, params.a, params.inf_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.other_grade .. "-" .. params.inf_grade .. "'' gradation"
	end
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. params.a .. params.a .. "n"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. params.a .. params.a .. "t"}
	data.forms["pres_3sg"] = {params.base .. params.other_grade .. params.a .. params.a}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. params.a .. params.a .. "mme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. params.a .. params.a .. "tte"}
	data.forms["pres_3pl"] = {params.base .. params.other_grade .. params.a .. params.a .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.inf_grade .. params.a .. "t" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. params.a .. params.a}
	data.forms["pres_pasv_conn"] = {params.base .. params.inf_grade .. params.a .. "t" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. params.a .. "sin"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. params.a .. "sit"}
	data.forms["past_3sg"] = {params.base .. params.other_grade .. params.a .. "si"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. params.a .. "simme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. params.a .. "sitte"}
	data.forms["past_3pl"] = {params.base .. params.other_grade .. params.a .. "siv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.inf_grade .. params.a .. "ttiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.other_grade .. params.a .. "isin"}
	data.forms["cond_2sg"] = {params.base .. params.other_grade .. params.a .. "isit"}
	data.forms["cond_3sg"] = {params.base .. params.other_grade .. params.a .. "isi"}
	data.forms["cond_1pl"] = {params.base .. params.other_grade .. params.a .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. params.other_grade .. params.a .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. params.other_grade .. params.a .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.other_grade .. params.a .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. params.a .. params.a}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. params.a .. "tk" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. params.a .. "tk" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. params.a .. "tk" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. params.a .. "tk" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. params.a .. "tk" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. params.a .. "nnen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. params.a .. "nnet"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. params.a .. "nnee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. params.a .. "nnemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. params.a .. "nnette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. params.a .. "nnev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. params.a .. "nne"}
	data.forms["potn_pasv_conn"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. params.a .. "t" .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. params.a .. "t" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. params.a .. "tess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. params.a .. "ten"}
 
	data.forms["inf3_ine"] = {params.base .. params.other_grade .. params.a .. params.a .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.other_grade .. params.a .. params.a .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.other_grade .. params.a .. params.a .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.other_grade .. params.a .. params.a .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.other_grade .. params.a .. params.a .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.other_grade .. params.a .. params.a .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.other_grade .. params.a .. params.a .. "minen"}
	data.forms["inf4_par"] = {params.base .. params.other_grade .. params.a .. params.a .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.other_grade .. params.a .. params.a .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.other_grade .. params.a .. params.a .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. params.a .. "nn" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. params.a .. "nneet"}
	data.forms["past_pasv_part"] = {params.base .. params.inf_grade .. params.a .. "tt" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.other_grade .. params.a .. params.a .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. params.other_grade .. params.a .. params.a .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["katketa"] = function(args, data)
	data.title = "[[Kotus]] type 74/[[Appendix:Finnish conjugation/katketa|katketa]]"
	table.insert(data.categories, "Finnish katketa-type verbs")
 
	local params = get_params(args, 5, "k", "kk", "e")
 
	make_weak(params.base, params.other_grade, params.final, params.inf_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.other_grade .. "-" .. params.inf_grade .. "'' gradation"
	end
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "n"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "t"}
	data.forms["pres_3sg"] = {params.base .. params.other_grade .. params.final .. params.a .. params.a}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "mme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "tte"}
	data.forms["pres_3pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. params.final .. params.a}
	data.forms["pres_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. params.final .. "sin"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. params.final .. "sit"}
	data.forms["past_3sg"] = {params.base .. params.other_grade .. params.final .. "si"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. params.final .. "simme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. params.final .. "sitte"}
	data.forms["past_3pl"] = {params.base .. params.other_grade .. params.final .. "siv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.inf_grade .. params.final .. "ttiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "isin", params.base .. params.other_grade .. params.final .. "isin"}
	data.forms["cond_2sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "isit", params.base .. params.other_grade .. params.final .. "isit"}
	data.forms["cond_3sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "isi", params.base .. params.other_grade .. params.final .. "isi"}
	data.forms["cond_1pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "isimme", params.base .. params.other_grade .. params.final .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "isitte", params.base .. params.other_grade .. params.final .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "isiv" .. params.a .. "t", params.base .. params.other_grade .. params.final .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.other_grade .. params.final .. params.a .. "isi", params.base .. params.other_grade .. params.final .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. params.final .. params.a}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. params.final .. "nnen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. params.final .. "nnet"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. params.final .. "nnee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. params.final .. "nnemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. params.final .. "nnette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. params.final .. "nnev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. params.final .. "nne"}
	data.forms["potn_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. params.final .. "tess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. params.final .. "ten"}
 
	data.forms["inf3_ine"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.other_grade .. params.final .. params.a .. "minen"}
	data.forms["inf4_par"] = {params.base .. params.other_grade .. params.final .. params.a .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. params.other_grade .. params.final .. params.a .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. params.final .. "nn" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. params.final .. "nneet"}
	data.forms["past_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
 
inflections["selvitä"] = function(args, data)
	data.title = "[[Kotus]] type 75/[[Appendix:Finnish conjugation/selvitä|selvitä]]"
	table.insert(data.categories, "Finnish selvitä-type verbs")
 
	local params = get_params(args, 5, "k", "kk", "i")
 
	make_weak(params.base, params.other_grade, params.final, params.inf_grade)
 
	if params.inf_grade == params.other_grade then
		data.title = data.title .. ", no gradation"
	else
		data.title = data.title .. ", ''" .. params.other_grade .. "-" .. params.inf_grade .. "'' gradation"
	end
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "n"}
	data.forms["pres_2sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "t"}
	data.forms["pres_3sg"] = {params.base .. params.other_grade .. params.final .. params.a .. params.a}
	data.forms["pres_1pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "mme"}
	data.forms["pres_2pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "tte"}
	data.forms["pres_3pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. params.other_grade .. params.final .. params.a}
	data.forms["pres_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. params.other_grade .. params.final .. "sin"}
	data.forms["past_2sg"] = {params.base .. params.other_grade .. params.final .. "sit"}
	data.forms["past_3sg"] = {params.base .. params.other_grade .. params.final .. "si"}
	data.forms["past_1pl"] = {params.base .. params.other_grade .. params.final .. "simme"}
	data.forms["past_2pl"] = {params.base .. params.other_grade .. params.final .. "sitte"}
	data.forms["past_3pl"] = {params.base .. params.other_grade .. params.final .. "siv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. params.inf_grade .. params.final .. "ttiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "isin"}
	data.forms["cond_2sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "isit"}
	data.forms["cond_3sg"] = {params.base .. params.other_grade .. params.final .. params.a .. "isi"}
	data.forms["cond_1pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. params.other_grade .. params.final .. params.a .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. params.other_grade .. params.final .. params.a .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. params.other_grade .. params.final .. params.a}
	data.forms["impr_3sg"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. params.inf_grade .. params.final .. "tk" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. params.inf_grade .. params.final .. "nnen"}
	data.forms["potn_2sg"] = {params.base .. params.inf_grade .. params.final .. "nnet"}
	data.forms["potn_3sg"] = {params.base .. params.inf_grade .. params.final .. "nnee"}
	data.forms["potn_1pl"] = {params.base .. params.inf_grade .. params.final .. "nnemme"}
	data.forms["potn_2pl"] = {params.base .. params.inf_grade .. params.final .. "nnette"}
	data.forms["potn_3pl"] = {params.base .. params.inf_grade .. params.final .. "nnev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. params.inf_grade .. params.final .. "nne"}
	data.forms["potn_pasv_conn"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a}
	data.forms["inf1_long"] = {params.base .. params.inf_grade .. params.final .. "t" .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. params.inf_grade .. params.final .. "tess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. params.inf_grade .. params.final .. "ten"}
 
	data.forms["inf3_ine"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. params.other_grade .. params.final .. params.a .. "minen"}
	data.forms["inf4_par"] = {params.base .. params.other_grade .. params.final .. params.a .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participle
	data.forms["pres_part"] = {params.base .. params.other_grade .. params.final .. params.a .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. params.inf_grade .. params.final .. "nn" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. params.inf_grade .. params.final .. "nneet"}
	data.forms["past_pasv_part"] = {params.base .. params.inf_grade .. params.final .. "tt" .. params.u}
	data.forms["agnt_part"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. params.other_grade .. params.final .. params.a .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
inflections["taitaa"] = function(args, data)
	data.title = "[[Kotus]] type 76/[[Appendix:Finnish conjugation/taitaa|taitaa]], ''t-d'' gradation"
	table.insert(data.categories, "Finnish taitaa-type verbs")
 
	local params = get_params(args, 2)
 
	-- Present
	data.forms["pres_1sg"] = {params.base .. "d" .. params.a .. "n"}
	data.forms["pres_2sg"] = {params.base .. "d" .. params.a .. "t"}
	data.forms["pres_3sg"] = {params.base .. "t" .. params.a .. params.a}
	data.forms["pres_1pl"] = {params.base .. "d" .. params.a .. "mme"}
	data.forms["pres_2pl"] = {params.base .. "d" .. params.a .. "tte"}
	data.forms["pres_3pl"] = {params.base .. "t" .. params.a .. "v" .. params.a .. "t"}
	data.forms["pres_pasv"] = {params.base .. "det" .. params.a .. params.a .. "n"}
 
	data.forms["pres_conn"] = {params.base .. "d" .. params.a}
	data.forms["pres_pasv_conn"] = {params.base .. "det" .. params.a}
 
	-- Past
	data.forms["past_1sg"] = {params.base .. "sin"}
	data.forms["past_2sg"] = {params.base .. "sit"}
	data.forms["past_3sg"] = {params.base .. "si"}
	data.forms["past_1pl"] = {params.base .. "simme"}
	data.forms["past_2pl"] = {params.base .. "sitte"}
	data.forms["past_3pl"] = {params.base .. "siv" .. params.a .. "t"}
	data.forms["past_pasv"] = {params.base .. "dettiin"}
 
	-- Conditional
	data.forms["cond_1sg"] = {params.base .. "t" .. params.a .. "isin"}
	data.forms["cond_2sg"] = {params.base .. "t" .. params.a .. "isit"}
	data.forms["cond_3sg"] = {params.base .. "t" .. params.a .. "isi"}
	data.forms["cond_1pl"] = {params.base .. "t" .. params.a .. "isimme"}
	data.forms["cond_2pl"] = {params.base .. "t" .. params.a .. "isitte"}
	data.forms["cond_3pl"] = {params.base .. "t" .. params.a .. "isiv" .. params.a .. "t"}
	data.forms["cond_pasv"] = {params.base .. "dett" .. params.a .. "isiin"}
 
	data.forms["cond_conn"] = {params.base .. "t" .. params.a .. "isi"}
	data.forms["cond_pasv_conn"] = {params.base .. "dett" .. params.a .. "isi"}
 
	-- Imperative
	data.forms["impr_2sg"] = {params.base .. "d" .. params.a}
	data.forms["impr_3sg"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "n"}
	data.forms["impr_1pl"] = {params.base .. "t" .. params.a .. "k" .. params.a .. params.a .. "mme"}
	data.forms["impr_2pl"] = {params.base .. "t" .. params.a .. "k" .. params.a .. params.a}
	data.forms["impr_3pl"] = {params.base .. "t" .. params.a .. "k" .. params.o .. params.o .. "t"}
	data.forms["impr_pasv"] = {params.base .. "dett" .. params.a .. "k" .. params.o .. params.o .. "n"}
 
	data.forms["impr_conn"] = {params.base .. "t" .. params.a .. "k" .. params.o}
	data.forms["impr_pasv_conn"] = {params.base .. "dett" .. params.a .. "k" .. params.o}
 
	-- Potential
	data.forms["potn_1sg"] = {params.base .. "t" .. params.a .. "nen"}
	data.forms["potn_2sg"] = {params.base .. "t" .. params.a .. "net"}
	data.forms["potn_3sg"] = {params.base .. "t" .. params.a .. "nee", params.base .. "nnee"}
	data.forms["potn_1pl"] = {params.base .. "t" .. params.a .. "nemme"}
	data.forms["potn_2pl"] = {params.base .. "t" .. params.a .. "nette"}
	data.forms["potn_3pl"] = {params.base .. "t" .. params.a .. "nev" .. params.a .. "t", params.base .. "nnev" .. params.a .. "t"}
	data.forms["potn_pasv"] = {params.base .. "dett" .. params.a .. "neen"}
 
	data.forms["potn_conn"] = {params.base .. "t" .. params.a .. "ne"}
	data.forms["potn_pasv_conn"] = {params.base .. "dett" .. params.a .. "ne"}
 
	-- Infinitives
	data.forms["inf1"] = {params.base .. "t" .. params.a .. params.a}
	data.forms["inf1_long"] = {params.base .. "t" .. params.a .. params.a .. "kseen"}
 
	data.forms["inf2_ine"] = {params.base .. "t" .. params.a .. "ess" .. params.a}
	data.forms["inf2_pasv_ine"] = {params.base .. "dett" .. params.a .. "ess" .. params.a}
	data.forms["inf2_ins"] = {params.base .. "t" .. params.a .. "en"}
 
	data.forms["inf3_ine"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "ss" .. params.a}
	data.forms["inf3_ela"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "st" .. params.a}
	data.forms["inf3_ill"] = {params.base .. "t" .. params.a .. "m" .. params.a .. params.a .. "n"}
	data.forms["inf3_ade"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "ll" .. params.a}
	data.forms["inf3_abe"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "tt" .. params.a}
	data.forms["inf3_ins"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "n"}
	data.forms["inf3_pasv_ins"] = {params.base .. "dett" .. params.a .. "m" .. params.a .. "n"}
 
	data.forms["inf4_nom"] = {params.base .. "t" .. params.a .. "minen"}
	data.forms["inf4_par"] = {params.base .. "t" .. params.a .. "mist" .. params.a}
 
	data.forms["inf5"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "isill" .. params.a .. params.a .. "n"}
 
	-- Participles
	data.forms["pres_part"] = {params.base .. "t" .. params.a .. "v" .. params.a}
	data.forms["pres_pasv_part"] = {params.base .. "dett" .. params.a .. "v" .. params.a}
	data.forms["past_part"] = {params.base .. "nn" .. params.u .. "t", params.base .. "t" .. params.a .. "n" .. params.u .. "t"}
	data.forms["past_part_pl"] = {params.base .. "nneet", params.base .. "t" .. params.a .. "neet"}
	data.forms["past_pasv_part"] = {params.base .. "dett" .. params.u}
	data.forms["agnt_part"] = {params.base .. "t" .. params.a .. "m" .. params.a}
	data.forms["nega_part"] = {params.base .. "t" .. params.a .. "m" .. params.a .. "t" .. params.o .. "n"}
end
 
 
-- Helper functions
 
function postprocess(args, data)
	local appendix = args["appendix"]; if appendix == "" then appendix = nil end
	local qual = args["qual"]; if qual == "" then qual = nil end
 
	-- Add qualifier
	for key, form in pairs(data.forms) do
		-- Add qual
		for i, subform in ipairs(form) do
			subform = subform .. (qual and " " .. qual or "")
			form[i] = subform
		end
 
		if form.rare then
			for i, subform in ipairs(form.rare) do
				subform = subform .. (qual and " " .. qual or "")
				form.rare[i] = subform
			end
		end
 
		data.forms[key] = form
	end
 
	-- Create the periphrastic forms (negative and perfect)
	local function make_forms(aux, forms)
		local ret = {}
 
		for _, form in ipairs(forms) do
			table.insert(ret, aux .. " [[" .. form .. "]]")
		end
 
		return ret
	end
 
	-- Present
	data.forms["pres_1sg_neg"] = make_forms("en", data.forms["pres_conn"])
	data.forms["pres_2sg_neg"] = make_forms("et", data.forms["pres_conn"])
	data.forms["pres_3sg_neg"] = make_forms("ei", data.forms["pres_conn"])
	data.forms["pres_1pl_neg"] = make_forms("emme", data.forms["pres_conn"])
	data.forms["pres_2pl_neg"] = make_forms("ette", data.forms["pres_conn"])
	data.forms["pres_3pl_neg"] = make_forms("eivät", data.forms["pres_conn"])
	data.forms["pres_pasv_neg"] = make_forms("ei", data.forms["pres_pasv_conn"])
 
	data.forms["pres_perf_1sg"] = make_forms("olen", data.forms["past_part"])
	data.forms["pres_perf_2sg"] = make_forms("olet", data.forms["past_part"])
	data.forms["pres_perf_3sg"] = make_forms("on", data.forms["past_part"])
	data.forms["pres_perf_1pl"] = make_forms("olemme", data.forms["past_part_pl"])
	data.forms["pres_perf_2pl"] = make_forms("olette", data.forms["past_part_pl"])
	data.forms["pres_perf_3pl"] = make_forms("ovat", data.forms["past_part_pl"])
	data.forms["pres_perf_pasv"] = make_forms("on", data.forms["past_pasv_part"])
 
	data.forms["pres_perf_1sg_neg"] = make_forms("en ole", data.forms["past_part"])
	data.forms["pres_perf_2sg_neg"] = make_forms("et ole", data.forms["past_part"])
	data.forms["pres_perf_3sg_neg"] = make_forms("ei ole", data.forms["past_part"])
	data.forms["pres_perf_1pl_neg"] = make_forms("emme ole", data.forms["past_part_pl"])
	data.forms["pres_perf_2pl_neg"] = make_forms("ette ole", data.forms["past_part_pl"])
	data.forms["pres_perf_3pl_neg"] = make_forms("eivät ole", data.forms["past_part_pl"])
	data.forms["pres_perf_pasv_neg"] = make_forms("ei ole", data.forms["past_pasv_part"])
 
	-- Past
	data.forms["past_1sg_neg"] = make_forms("en", data.forms["past_part"])
	data.forms["past_2sg_neg"] = make_forms("et", data.forms["past_part"])
	data.forms["past_3sg_neg"] = make_forms("ei", data.forms["past_part"])
	data.forms["past_1pl_neg"] = make_forms("emme", data.forms["past_part_pl"])
	data.forms["past_2pl_neg"] = make_forms("ette", data.forms["past_part_pl"])
	data.forms["past_3pl_neg"] = make_forms("eivät", data.forms["past_part_pl"])
	data.forms["past_pasv_neg"] = make_forms("ei", data.forms["past_pasv_part"])
 
	data.forms["past_perf_1sg"] = make_forms("olin", data.forms["past_part"])
	data.forms["past_perf_2sg"] = make_forms("olit", data.forms["past_part"])
	data.forms["past_perf_3sg"] = make_forms("oli", data.forms["past_part"])
	data.forms["past_perf_1pl"] = make_forms("olimme", data.forms["past_part_pl"])
	data.forms["past_perf_2pl"] = make_forms("olitte", data.forms["past_part_pl"])
	data.forms["past_perf_3pl"] = make_forms("olivat", data.forms["past_part_pl"])
	data.forms["past_perf_pasv"] = make_forms("oli", data.forms["past_pasv_part"])
 
	data.forms["past_perf_1sg_neg"] = make_forms("en ollut", data.forms["past_part"])
	data.forms["past_perf_2sg_neg"] = make_forms("et ollut", data.forms["past_part"])
	data.forms["past_perf_3sg_neg"] = make_forms("ei ollut", data.forms["past_part"])
	data.forms["past_perf_1pl_neg"] = make_forms("emme olleet", data.forms["past_part_pl"])
	data.forms["past_perf_2pl_neg"] = make_forms("ette olleet", data.forms["past_part_pl"])
	data.forms["past_perf_3pl_neg"] = make_forms("eivät olleet", data.forms["past_part_pl"])
	data.forms["past_perf_pasv_neg"] = make_forms("ei ollut", data.forms["past_pasv_part"])
 
	-- Conditional
	data.forms["cond_1sg_neg"] = make_forms("en", data.forms["cond_conn"])
	data.forms["cond_2sg_neg"] = make_forms("et", data.forms["cond_conn"])
	data.forms["cond_3sg_neg"] = make_forms("ei", data.forms["cond_conn"])
	data.forms["cond_1pl_neg"] = make_forms("emme", data.forms["cond_conn"])
	data.forms["cond_2pl_neg"] = make_forms("ette", data.forms["cond_conn"])
	data.forms["cond_3pl_neg"] = make_forms("eivät", data.forms["cond_conn"])
	data.forms["cond_pasv_neg"] = make_forms("ei", data.forms["cond_pasv_conn"])
 
	data.forms["cond_perf_1sg"] = make_forms("olisin", data.forms["past_part"])
	data.forms["cond_perf_2sg"] = make_forms("olisit", data.forms["past_part"])
	data.forms["cond_perf_3sg"] = make_forms("olisi", data.forms["past_part"])
	data.forms["cond_perf_1pl"] = make_forms("olisimme", data.forms["past_part_pl"])
	data.forms["cond_perf_2pl"] = make_forms("olisitte", data.forms["past_part_pl"])
	data.forms["cond_perf_3pl"] = make_forms("ovisivat", data.forms["past_part_pl"])
	data.forms["cond_perf_pasv"] = make_forms("olisi", data.forms["past_pasv_part"])
 
	data.forms["cond_perf_1sg_neg"] = make_forms("en olisi", data.forms["past_part"])
	data.forms["cond_perf_2sg_neg"] = make_forms("et olisi", data.forms["past_part"])
	data.forms["cond_perf_3sg_neg"] = make_forms("ei olisi", data.forms["past_part"])
	data.forms["cond_perf_1pl_neg"] = make_forms("emme olisi", data.forms["past_part_pl"])
	data.forms["cond_perf_2pl_neg"] = make_forms("ette olisi", data.forms["past_part_pl"])
	data.forms["cond_perf_3pl_neg"] = make_forms("eivät olisi", data.forms["past_part_pl"])
	data.forms["cond_perf_pasv_neg"] = make_forms("ei olisi", data.forms["past_pasv_part"])
 
	-- Imperative
	data.forms["impr_2sg_neg"] = make_forms("älä", data.forms["impr_2sg"])
	data.forms["impr_3sg_neg"] = make_forms("älköön", data.forms["impr_conn"])
	data.forms["impr_1pl_neg"] = make_forms("älkäämme", data.forms["impr_conn"])
	data.forms["impr_2pl_neg"] = make_forms("älkää", data.forms["impr_conn"])
	data.forms["impr_3pl_neg"] = make_forms("älkööt", data.forms["impr_conn"])
	data.forms["impr_pasv_neg"] = make_forms("älköön", data.forms["impr_pasv_conn"])
 
	data.forms["impr_perf_2sg"] = make_forms("ole", data.forms["past_part"])
	data.forms["impr_perf_3sg"] = make_forms("olkoon", data.forms["past_part"])
	data.forms["impr_perf_1pl"] = make_forms("olkaamme", data.forms["past_part_pl"])
	data.forms["impr_perf_2pl"] = make_forms("olkaa", data.forms["past_part_pl"])
	data.forms["impr_perf_3pl"] = make_forms("olkoot", data.forms["past_part_pl"])
	data.forms["impr_perf_pasv"] = make_forms("olkoon", data.forms["past_pasv_part"])
 
	data.forms["impr_perf_2sg_neg"] = make_forms("älä ole", data.forms["past_part"])
	data.forms["impr_perf_3sg_neg"] = make_forms("älköön olko", data.forms["past_part"])
	data.forms["impr_perf_1pl_neg"] = make_forms("älkäämme olko", data.forms["past_part_pl"])
	data.forms["impr_perf_2pl_neg"] = make_forms("älkää olko", data.forms["past_part_pl"])
	data.forms["impr_perf_3pl_neg"] = make_forms("älkööt olko", data.forms["past_part_pl"])
	data.forms["impr_perf_pasv_neg"] = make_forms("älköön olko", data.forms["past_pasv_part"])
 
	-- Potential
	data.forms["potn_1sg_neg"] = make_forms("en", data.forms["potn_conn"])
	data.forms["potn_2sg_neg"] = make_forms("et", data.forms["potn_conn"])
	data.forms["potn_3sg_neg"] = make_forms("ei", data.forms["potn_conn"])
	data.forms["potn_1pl_neg"] = make_forms("emme", data.forms["potn_conn"])
	data.forms["potn_2pl_neg"] = make_forms("ette", data.forms["potn_conn"])
	data.forms["potn_3pl_neg"] = make_forms("eivät", data.forms["potn_conn"])
	data.forms["potn_pasv_neg"] = make_forms("ei", data.forms["potn_pasv_conn"])
 
	data.forms["potn_perf_1sg"] = make_forms("lienen", data.forms["past_part"])
	data.forms["potn_perf_2sg"] = make_forms("lienet", data.forms["past_part"])
	data.forms["potn_perf_3sg"] = make_forms("lienee", data.forms["past_part"])
	data.forms["potn_perf_1pl"] = make_forms("lienemme", data.forms["past_part_pl"])
	data.forms["potn_perf_2pl"] = make_forms("lienette", data.forms["past_part_pl"])
	data.forms["potn_perf_3pl"] = make_forms("lienevät", data.forms["past_part_pl"])
	data.forms["potn_perf_pasv"] = make_forms("lienee", data.forms["past_pasv_part"])
 
	data.forms["potn_perf_1sg_neg"] = make_forms("en liene", data.forms["past_part"])
	data.forms["potn_perf_2sg_neg"] = make_forms("et liene", data.forms["past_part"])
	data.forms["potn_perf_3sg_neg"] = make_forms("ei liene", data.forms["past_part"])
	data.forms["potn_perf_1pl_neg"] = make_forms("emme liene", data.forms["past_part_pl"])
	data.forms["potn_perf_2pl_neg"] = make_forms("ette liene", data.forms["past_part_pl"])
	data.forms["potn_perf_3pl_neg"] = make_forms("eivät liene", data.forms["past_part_pl"])
	data.forms["potn_perf_pasv_neg"] = make_forms("ei liene", data.forms["past_pasv_part"])
 
	-- Check if the lemma form matches the page name
	if not appendix and not (args["q1sg"] or args["q2sg"] or args["q1pl"] or args["q2pl"] or args["q3p"] or args["qpass"]) and data.forms["inf1"][1] ~= mw.title.getCurrentTitle().text then
		table.insert(data.categories, "Finnish entries with inflection not matching pagename")
	end
end
 
 
-- Functions for generating the inflection table
 
function show_form(form)
	if not form then
		return "—"
	elseif type(form) ~= "table" then
		error("a non-table value was given in the list of inflected forms.")
	end
 
	local ret = {}
 
	for key, subform in ipairs(form) do
		table.insert(ret, m_links.full_link(subform, nil, lang, nil, nil, nil, {}, false))
	end
 
	return table.concat(ret, "<br/>")
end
 
-- Make the table
function make_table(data)
	local finite1 = [=[{| class="inflection-table" style="width:100%; color:rgb(0%,0%,30%); border: solid 1px rgb(80%,80%,100%); margin-bottom: 0.5em; text-align: left;" cellspacing="1" cellpadding="2" 
|-
! colspan="6" style="background:rgb(80%,80%,100%)" | [[indicative&nbsp;mood]]
|-
! colspan="3" style="background:rgb(80%,80%,100%)" | [[present&nbsp;tense]]
! colspan="3" style="background:rgb(80%,80%,100%)" | perfect
|- style="background:rgb(90%,90%,100%)"
! style="background:rgb(80%,80%,100%); width: 7%" | person
! style="width: 18%" | positive
! style="width: 21%" | negative
! style="background:rgb(80%,80%,100%); width: 7%" | person
! style="width: 21%" | positive
! style="width: 24%" | negative
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| ]=] .. show_form(data.forms["pres_1sg"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_1sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| ]=] .. show_form(data.forms["pres_perf_1sg"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_perf_1sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["pres_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_2sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["pres_perf_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_perf_2sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["pres_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_3sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["pres_perf_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_perf_3sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["pres_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_1pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["pres_perf_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_perf_1pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["pres_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_2pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["pres_perf_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_perf_2pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["pres_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_3pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["pres_perf_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_perf_3pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["pres_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_pasv_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["pres_perf_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_perf_pasv_neg"]) .. [=[
 
|-
! colspan="3" style="background:rgb(80%,80%,100%)" | [[past&nbsp;tense]]
! colspan="3" style="background:rgb(80%,80%,100%)" | pluperfect
|- style="background:rgb(90%,90%,100%)"
! style="background:rgb(80%,80%,100%)" | person
! positive
! negative
! style="background:rgb(80%,80%,100%)" | person
! positive
! negative
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| ]=] .. show_form(data.forms["past_1sg"]) .. [=[
 
| ]=] .. show_form(data.forms["past_1sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| ]=] .. show_form(data.forms["past_perf_1sg"]) .. [=[
 
| ]=] .. show_form(data.forms["past_perf_1sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["past_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["past_2sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["past_perf_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["past_perf_2sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["past_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["past_3sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["past_perf_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["past_perf_3sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["past_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["past_1pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["past_perf_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["past_perf_1pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["past_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["past_2pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["past_perf_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["past_perf_2pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["past_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["past_3pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["past_perf_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["past_perf_3pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["past_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["past_pasv_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["past_perf_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["past_perf_pasv_neg"]) .. [=[
 
|-
! colspan="6" style="background:rgb(80%,80%,100%)" | [[conditional&nbsp;mood]]
|-
! colspan="3" style="background:rgb(80%,80%,100%)" | present
! colspan="3" style="background:rgb(80%,80%,100%)" | perfect
|- style="background:rgb(90%,90%,100%)"
! style="background:rgb(80%,80%,100%)" | person
! positive
! negative
! style="background:rgb(80%,80%,100%)" | person
! positive
! negative
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| ]=] .. show_form(data.forms["cond_1sg"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_1sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| ]=] .. show_form(data.forms["cond_perf_1sg"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_perf_1sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["cond_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_2sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["cond_perf_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_perf_2sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["cond_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_3sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["cond_perf_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_perf_3sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["cond_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_1pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["cond_perf_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_perf_1pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["cond_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_2pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["cond_perf_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_perf_2pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["cond_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_3pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["cond_perf_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_perf_3pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["cond_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_pasv_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["cond_perf_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["cond_perf_pasv_neg"]) .. [=[
 
]=]
	local finite2 = [=[|-
! colspan="6" style="background:rgb(80%,80%,100%)" | [[imperative&nbsp;mood]]
|-
! colspan="3" style="background:rgb(80%,80%,100%)" | present
! colspan="3" style="background:rgb(80%,80%,100%)" | perfect
|- style="background:rgb(90%,90%,100%)"
! style="background:rgb(80%,80%,100%)" | person
! positive
! negative
! style="background:rgb(80%,80%,100%)" | person
! positive
! negative
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| &mdash;
| &mdash;
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| &mdash;
| &mdash;
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["impr_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_2sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["impr_perf_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_perf_2sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["impr_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_3sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["impr_perf_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_perf_3sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["impr_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_1pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["impr_perf_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_perf_1pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["impr_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_2pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["impr_perf_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_perf_2pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["impr_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_3pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["impr_perf_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_perf_3pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["impr_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_pasv_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["impr_perf_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["impr_perf_pasv_neg"]) .. [=[
 
|-
! colspan="6" style="background:rgb(80%,80%,100%)" | [[potential&nbsp;mood]]
|-
! colspan="3" style="background:rgb(80%,80%,100%)" | present
! colspan="3" style="background:rgb(80%,80%,100%)" | perfect
|- style="background:rgb(90%,90%,100%)"
! style="background:rgb(80%,80%,100%)" | person
! positive
! negative
! style="background:rgb(80%,80%,100%)" | person
! positive
! negative
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| ]=] .. show_form(data.forms["potn_1sg"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_1sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;sing.
| ]=] .. show_form(data.forms["potn_perf_1sg"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_perf_1sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["potn_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_2sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;sing.
| ]=] .. show_form(data.forms["potn_perf_2sg"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_perf_2sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["potn_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_3sg_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;sing.
| ]=] .. show_form(data.forms["potn_perf_3sg"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_perf_3sg_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["potn_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_1pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 1st&nbsp;plur.
| ]=] .. show_form(data.forms["potn_perf_1pl"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_perf_1pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["potn_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_2pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 2nd&nbsp;plur.
| ]=] .. show_form(data.forms["potn_perf_2pl"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_perf_2pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["potn_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_3pl_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | 3rd&nbsp;plur.
| ]=] .. show_form(data.forms["potn_perf_3pl"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_perf_3pl_neg"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["potn_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_pasv_neg"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | passive
| ]=] .. show_form(data.forms["potn_perf_pasv"]) .. [=[
 
| ]=] .. show_form(data.forms["potn_perf_pasv_neg"]) .. [=[
 
|-
|}
]=]
 
	local nonfinite = [=[{| class="inflection-table" style="width:50%; color:rgb(0%,0%,30%); border: solid 1px rgb(80%,80%,100%); text-align: left;" cellspacing="1" cellpadding="2"
|-
! style="background:rgb(80%,80%,100%)" colspan="10" | Nominal forms
|-
! style="background:rgb(80%,80%,100%)" colspan="4" width="50%" | [[infinitive]]s
! style="background:rgb(80%,80%,100%)" colspan="3" width="50%" | [[participle]]s
|- style="background:rgb(90%,90%,100%)"
| style="background:rgb(80%,80%,100%)" colspan="2" |
! width="25%" | active
! width="25%" | passive
| style="background:rgb(80%,80%,100%)" |
! width="25%" | active
! width="25%" | passive
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" colspan="2" | 1st
| colspan="2" | ]=] .. show_form(data.forms["inf1"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | present
| ]=] .. show_form(data.forms["pres_part"]) .. [=[
 
| ]=] .. show_form(data.forms["pres_pasv_part"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" colspan="2" | long 1st<sup>2</sup>
| colspan="2" | ]=] .. show_form(data.forms["inf1_long"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | past
| ]=] .. show_form(data.forms["past_part"]) .. [=[
 
| ]=] .. show_form(data.forms["past_pasv_part"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" rowspan="2" | 2nd
! style="background:rgb(90%,90%,100%)" | inessive<sup>1</sup>
| ]=] .. show_form(data.forms["inf2_ine"]) .. [=[
 
| ]=] .. show_form(data.forms["inf2_pasv_ine"]) .. [=[
 
! style="background:rgb(80%,80%,100%)" | agent<sup>1,&nbsp;3</sup>
| colspan="2" | ]=] .. show_form(data.forms["agnt_part"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(90%,90%,100%)" | instructive
| ]=] .. show_form(data.forms["inf2_ins"]) .. [=[
 
| &mdash;
! style="background:rgb(80%,80%,100%)" | negative
| colspan="2" | ]=] .. show_form(data.forms["nega_part"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" rowspan="6" | 3rd
! style="background:rgb(90%,90%,100%)" | inessive
| ]=] .. show_form(data.forms["inf3_ine"]) .. [=[
 
| &mdash;
| colspan="3" rowspan="9" style="text-align:left;vertical-align:top;font-size:smaller;" | <sup>1)</sup> Usually with a possessive suffix.<br/>
<sup>2)</sup> Used only with a possessive suffix; this is the form for the third-person singular and third-person plural.<br/>
<sup>3)</sup> Does not exist in the case of intransitive verbs. Do not confuse with nouns formed with the ''-ma'' suffix.
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(90%,90%,100%)" | elative
| ]=] .. show_form(data.forms["inf3_ela"]) .. [=[
 
| &mdash;
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(90%,90%,100%)" | illative
| ]=] .. show_form(data.forms["inf3_ill"]) .. [=[
 
| &mdash;
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(90%,90%,100%)" | adessive
| ]=] .. show_form(data.forms["inf3_ade"]) .. [=[
 
| &mdash;
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(90%,90%,100%)" | abessive
| ]=] .. show_form(data.forms["inf3_abe"]) .. [=[
 
| &mdash;
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(90%,90%,100%)" | instructive
| ]=] .. show_form(data.forms["inf3_ins"]) .. [=[
 
| ]=] .. show_form(data.forms["inf3_pasv_ins"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" rowspan="2" | 4th
! style="background:rgb(90%,90%,100%)" | nominative
| colspan="2" | ]=] .. show_form(data.forms["inf4_nom"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(90%,90%,100%)" | partitive
| colspan="2" | ]=] .. show_form(data.forms["inf4_par"]) .. [=[
 
|- style="background:rgb(95%,95%,100%)"
! style="background:rgb(80%,80%,100%)" colspan="2" | 5th<sup>2</sup>
| colspan="2" | ]=] .. show_form(data.forms["inf5"]) .. [=[
 
|}]=]
 
	return [=[<div class="NavFrame">
<div class="NavHead" style="background:rgb(80%,80%,100%)">Inflection of ]=] .. m_links.full_link(nil, mw.title.getCurrentTitle().text, lang, nil, "term", nil, {}, false) .. (data.title and " (" .. data.title .. ")" or "") .. [=[</div>
<div class="NavContent">
]=] .. finite1 .. finite2 .. nonfinite .. [=[
 
</div></div>]=]
 
end
 
return export