Module:rad-stem/templates

Underlies:


local export = {}
local getArgs = require('Module:Arguments').getArgs

local m_stem = require("Module:rad-stem")
local m_parameters = require("Module:parameters")
local m_links = require("Module:links")
local m_languages = require("Module:languages")
local m_ipa = require("Module:rad-IPA")

local C = "bcdðfghħjĵkķlmnņpqrsștvwxzþ°"

local format_table = {}

function add(code)
	table.insert(format_table, code)
end

function tr()
	table.insert(format_table, "<tr>")	
end

function tr_()
	table.insert(format_table, "</tr>")	
end

function _tr()
	table.insert(format_table, "</tr>")	
	table.insert(format_table, "<tr>")	
end
	
function th(data, rowspan, colspan)
	data = data or ""
	local to_add = "<th"
	if rowspan and rowspan~=1 then to_add = to_add .. " rowspan=" .. rowspan end
	if colspan and colspan~=1 then to_add = to_add .. " colspan=" .. colspan end
	to_add = to_add .. ">" .. data .. "</th>"
	add(to_add)
end

function td(data, rowspan, colspan)
	data = data or ""
	local to_add = "<td"
	if rowspan and rowspan~=1 then to_add = to_add .. " rowspan=" .. rowspan end
	if colspan and colspan~=1 then to_add = to_add .. " colspan=" .. colspan end
	to_add = to_add .. ">" .. data .. "</td>"
	add(to_add)
end

function get_stems(args)
	local shifted = {"noun", "_"}
	
	local i = 1
	while args[i] do
		shifted[i+2] = args[i]
		i = i + 1
	end
	
	return m_stem.getNounStem(shifted)
end

function break_adj(adj)
	local temp = adj

	temp = mw.ustring.gsub(temp, "([" .. C .. "])([" .. C .. "])íș$", "%1%2ieș")
	temp = mw.ustring.gsub(temp, "([jșxķ])íș$", "%1ieș")
	temp = mw.ustring.gsub(temp, "(°)", "")
	temp = mw.ustring.gsub(temp, "(íș)$", "jeș")
	temp = mw.ustring.gsub(temp, "(úș)$", "uoș")
	temp = mw.ustring.gsub(temp, "(ýș)$", "yeș")
	temp = mw.ustring.gsub(temp, "(oș)$", "uș")

	return temp
end

function rad_link(word)
	return m_links.full_link{
    term = word,
    language = m_languages.get_by_code("rad")
}
end

function rad_IPA(word)
	local IPA = m_ipa.generate{
		word,
		"format",
		"nolarge"
	}
	return "<span style=\"color:dimgrey\">" .. IPA .. "</span>" 
end

function rad_link_IPA(word, post, noipa)
	if noipa == nil then noipa = false end
	local post_space = " "
	if post then
		if mw.ustring.sub(post, 1, 1) == "-" then
			post_space = ""
		end
	else
		post_space = ""
	end
	
	if type(word) == "string" then
		if noipa then
			if post then
				return rad_link(word) .. post_space .. rad_link(post)
			else
				return rad_link(word)
			end
		else
			if post then
				return rad_link(word) .. post_space .. rad_link(post) .. "<br>" .. rad_IPA(word .. post_space .. post)
			else
				return rad_link(word) .. "<br>" .. rad_IPA(word)
			end
		end
	elseif type(word) == "table" then
		local links = {}
		local IPAs = {}
		for _, i in ipairs(word) do
			local new_link = rad_link(i['word'])
			if post then new_link = new_link .. post_space .. rad_link(post) end
			if i['note'] then new_link = new_link .. " <small>(" .. i['note'] .. ")</small>" end
			table.insert(links, new_link)
			if not noipa then
				if post then
					table.insert(IPAs, rad_IPA(i['word'] .. post_space .. post))
				else
					table.insert(IPAs, rad_IPA(i['word']))
				end
			end
		end
		if noipa then
			return table.concat(links, ", ")
		else
			return table.concat(links, ", ") .. "<br>" .. table.concat(IPAs, " ")
		end
	else error("Incompatible input type for rad_link_IPA")
	end
end

function export.decline(frame)
	local args = getArgs(frame)
	local stem_gen = get_stems(args)
	local stems = {
		nom = args['nom'] or stem_gen.nom,
		voc = args['voc'] or stem_gen.voc,
		acc = args['acc'] or stem_gen.acc,
		dat = args['dat'] or stem_gen.dat,
		gen = args['gen'] or stem_gen.gen,
		ins = args['ins'] or stem_gen.ins,
		nompl = args['nompl'] or stem_gen.nompl,
		genpl = args['genpl'] or stem_gen.genpl,
		genpl_short = args['genpl_short'] or stem_gen.genpl_short,
		['type'] = stem_gen['type'],
		}
	local adj = args['adj']
	local adj_broken = ""
	local adj_broken_e = ""
	if adj then
		if not mw.ustring.match(adj, "(ș)$") then error("All adjectives must end in -ș") end
		adj_broken = args['adjbreak'] or break_adj(adj) 
		adj_broken_e = mw.ustring.gsub(adj_broken, "(uș)$", "ûș")
		adj_broken_e = mw.ustring.gsub(adj_broken_e, "(aûș)$", "auș")
		adj_broken_e = mw.ustring.gsub(adj_broken_e, "(aùș)$", "aûș")
		adj_broken_e = adj_broken_e .. "e"
		adj = mw.ustring.gsub(adj, "(°)", "")
		adj = " " .. adj
		adj_broken = " " .. adj_broken
		adj_broken_e = " " .. adj_broken_e
	else
		adj_broken = nil
		adj_broken_e = nil
	end
	local post = args['post']
	
	format_table = {}
	
	local decl_type = {
		["C"] = "heavy",
		["CH"] = "spirant",
		["VH"] = "spirant",
		["V"] = "light",
		["G"] = "semi-light"
	}
	
	local type_name = decl_type[stems['type']]
	
	local table_type = args['type'] or args['t'] or "sgpl"
	
	-- generate forms --
	
	local function get_forms(case, base, adj_base, adj_ending, nolink)
		if adj_base then
			--adjust definite article --
			local oblique_pl = {['genpl'] = true, ['datpl'] = true, ['accpl'] = true, ['inspl'] = true, ['gendu'] = true, ['datdu'] = true, ['accdu'] = true, ['insdu'] = true,}
			-- detect inanimate --
			if mw.ustring.match(mw.ustring.lower(adj_base), "^( ?a [" .. C .. "])") or mw.ustring.match(adj_base, "^( ag )") then
				if oblique_pl[case] then
					adj_base = mw.ustring.gsub(adj_base, "^( ?)ag ([iíỉIÍỈ])", "%1a’ %2")
					adj_base = mw.ustring.gsub(adj_base, "^( ?)ag? ", "%1ai ")
				elseif case == "genpl_short" or case == "gendu_short" then
					adj_base = mw.ustring.gsub(adj_base, "^( ?)ag? ", "%1ais ")
				end
			end
			
			-- append --
			base = base .. adj_base
			if adj_ending then base = base .. adj_ending end
		end
		if post then base = base .. post end
		if args['alt' .. case] then
			local list = {
				[1] = {['word'] = base},
				[2] = {['word'] = args['alt' .. case], ['note'] = args['alt' .. case .. '_note']}
			}
			if adj_base then
				list[2]['word'] = list[2]['word'] .. adj_base
				if adj_ending then list[2]['word'] = list[2]['word'] .. adj_ending end
			end
			if post then list[2]['word'] = list[2]['word'] .. post end
			local counter = 2
			while args['alt' .. case .. counter] do
				local temp = args['alt' .. case .. counter]
				if adj_base then
					temp = temp .. adj_base
					if adj_ending then temp = temp .. adj_ending end
				end
				if post then temp = temp .. post end
				list[counter + 1] = {['word'] = temp, ['note'] = args['alt' .. case .. counter .. "_note"]}
				counter = counter + 1	
			end
			if nolink then
				return list[1].word
			else
				return rad_link_IPA(list)
			end
		else
			if nolink then
				return base
			else
				return rad_link_IPA(base)
			end
		end
	end
	
	local nom = ""
	local nom_cite = ""
	if table_type == "adj" then	
		nom = get_forms("nom", stems.nompl, adj_broken_e)
		nom_cite = get_forms("nom", stems.nompl, adj_broken_e, "", true)
	else
		nom = get_forms("nom", stems.nom, adj_broken_e)
		nom_cite = get_forms("nom", stems.nom, adj_broken_e, "", true)
	end
	local voc = get_forms("voc", stems.voc, adj_broken_e)
	local gen = get_forms("gen", stems.gen, adj_broken, "k")
	local dat = get_forms("dat", stems.dat, adj, "a")
	local acc = get_forms("acc", stems.acc, adj_broken, "t")
	local ins = get_forms("ins", stems.ins, adj, "úr")
	
	local nompl = get_forms("nompl", stems.nompl, adj_broken_e)
	local nompl_cite = get_forms("nompl", stems.nompl, adj_broken_e, "", true)
	local genpl = get_forms("genpl", stems.genpl .. "ris", adj, "eris")
	local genpl_short = get_forms("genpl_short", stems.genpl_short, adj, "es")
	local datpl = get_forms("genpl", stems.genpl .. "rín", adj, "erín")
	local accpl = get_forms("accpl", stems.genpl .. "rid", adj, "erid")
	local inspl = get_forms("inspl", stems.genpl .. "ríe", adj, "eríe")
	
	local nomdu = get_forms("nomdu", stems.dat .. "te", adj_broken_e)
	local nomdu_cite = get_forms("nomdu", stems.dat .. "te", adj_broken_e, "", true)
	local gendu = get_forms("gendu", stems.dat .. "tis", adj, "eris")
	local gendu_short = get_forms("gendu_short", stems.dat .. "ts", adj, "es")
	local datdu = get_forms("datdu", stems.dat .. "tín", adj, "erín")
	local accdu = get_forms("accdu", stems.dat .. "tid", adj, "erid")
	local insdu = get_forms("insdu", stems.dat .. "tíe", adj, "eríe")

	add("<table class=\"mw-collapsible mw-collapsed wikitable inflection table\" style=\"text-align: center\">")
		if table_type == "sgpl" or table_type == "adj" then
			if table_type == "adj" then
				th("Substantive declension of <i>" .. nom_cite .. "</i> &nbsp;", 1, 4)
			else
				th("Declension of <i>" .. nom_cite .. "</i> (" .. type_name .. ") &nbsp;", 1, 4)
			end
			
			tr()
				th("", 1, 2)
				th("singular")
				th("plural")
			_tr()
				th("nominative", 1, 2)
				if nom == nompl then
					td(nompl, 2, 2)
				elseif nom == voc then
					td(nom, 2)
					td(nompl, 2)
				else
					td(nom)
					td(nompl, 2)
				end
			_tr()
				th("vocative", 1, 2)
				if nom ~= nompl and nom ~= voc then td(voc) end
			_tr()
				th("genitive", 2, 1)
				th("long")
				td(gen, 2, 1)
				td(genpl)
			_tr()
				th("short")
				td(genpl_short)
			_tr()
				th("dative", 1, 2)
				td(dat)
				td(datpl)
			_tr()
				th("accusative", 1, 2)
				td(acc)
				td(accpl)
			_tr()
				th("instrumental", 1, 2)
				td(ins)
				td(inspl)
			tr_()
		elseif table_type == "sg" then
			th("Declension of <i>" .. nom_cite .. "</i> (" .. type_name .. ") &nbsp;", 1, 2)
			tr()
				th("")
				th("singular")
			_tr()
				th("nominative")
				if nom == voc then td(nom, 2) else td(nom) end
			_tr()
				th("vocative")
				if nom ~= voc then td(voc) end
			_tr()
				th("genitive")
				td(gen)
			_tr()
				th("dative")
				td(dat)
			_tr()
				th("accusative")
				td(acc)
			_tr()
				th("instrumental")
				td(ins)
			tr_()
		elseif table_type == "pl" then
			th("Declension of <i>" .. nompl_cite .. "</i> (" .. type_name .. ") &nbsp;", 1, 3)
			tr()
				th("", 1, 2)
				th("plural")
			_tr()
				th("nominative", 1, 2)
				td(nompl, 2)
			_tr()
				th("vocative", 1, 2)
			_tr()
				th("genitive", 2, 1)
				th("long")
				td(genpl)
			_tr()
				th("short")
				td(genpl_short)
			_tr()
				th("dative", 1, 2)
				td(datpl)
			_tr()
				th("accusative", 1, 2)
				td(accpl)
			_tr()
				th("instrumental", 1, 2)
				td(inspl)
			tr_()
		elseif table_type == "du" then
			th("Declension of <i>" .. nom_cite .. "</i> (" .. type_name .. ") &nbsp;", 1, 5)
			tr()
				th("", 2, 2)
				th("singular", 2, 1)
				th("plural", 1, 2)
			_tr()
				th("binary")
				th("true")
			_tr()
				th("nominative", 1, 2)
				if nom == voc then td(nom, 2) else td(nom) end
				td(nomdu, 2)
				td(nompl, 2)
			_tr()
				th("vocative", 1, 2)
				if nom ~= voc then td(voc) end
			_tr()
				th("genitive", 2, 1)
				th("long")
				td(gen, 2, 1)
				td(gendu)
				td(genpl)
			_tr()
				th("short")
				td(gendu_short)
				td(genpl_short)
			_tr()
				th("dative", 1, 2)
				td(dat)
				td(datdu)
				td(datpl)
			_tr()
				th("accusative", 1, 2)
				td(acc)
				td(accdu)
				td(accpl)
			_tr()
				th("instrumental", 1, 2)
				td(ins)
				td(insdu)
				td(inspl)
			tr_()
		elseif table_type == "dupl" then
			th("Declension of <i>" .. nomdu_cite .. "</i> (" .. type_name .. ") &nbsp;", 1, 3)
			tr()
				th("", 1, 2)
				th("binary plural")
			_tr()
				th("nominative", 1, 2)
				td(nomdu, 2)
			_tr()
				th("vocative", 1, 2)
			_tr()
				th("genitive", 2, 1)
				th("long")
				td(gendu)
			_tr()
				th("short")
				td(gendu_short)
			_tr()
				th("dative", 1, 2)
				td(datdu)
			_tr()
				th("accusative", 1, 2)
				td(accdu)
			_tr()
				th("instrumental", 1, 2)
				td(insdu)
			tr_()
		end
	add("</table>")
	
	if args['notags'] ~= "true" or args['notags'] == nil then
		if table_type ~= "adj" then
			add("[[Category:" .. m_languages.get_by_code("rad").name .. " " .. type_name .. " stems]]")
		end
		if table_type == "sg" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " singularia tantum]]")
		elseif table_type == "pl" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia tantum]]")
		elseif table_type == "du" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia binaria]]")
		elseif table_type == "dupl" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia binaria]]" .. "[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia binaria tantum]]")
		end
	end
	
	return table.concat(format_table, string.char(10))
end

function export.conjugate(frame)
	local args = getArgs(frame)
	local pp = m_stem.getVerbStem(args)
		mw.logObject(pp)
	format_table = {}
	local table_type = args["t"] or "tr"
	
	if (table_type == "tr" or table_type == "pass") and args[6] == nil and args[7] == nil then error("Passive conjugation tables require arguments 6 (infinitive) and 7 (present participle stem).") end

	-- generate alt forms
	for p, base in pairs(pp) do
		if args["alt" .. p] then
			local list = {
				[1] = {['word'] = base},
				[2] = {['word'] = args['alt' .. p], ['note'] = args['alt' .. p .. '_note']}
			}
			local counter = 2
			while args["alt" .. p .. counter] do
				list[counter + 1] = {['word'] = args['alt' .. p .. counter], ['note'] = args['alt' .. p .. counter .. '_note']}
				counter = counter + 1
			end
			pp[p] = list
		end
	end
	
	local function get_forms(stem, ending, regex1, regex2)
		local temp = {}
		local post = ""
		local noipa = false
		if type(regex2) == "boolean" then
			if regex1 == nil then
				post = nil
			else
				post = regex1
			end
			noipa = regex2
			regex1 = nil
			regex2 = nil
		else
			post = nil
		end
		ending = ending or ""
		regex1 = regex1 or ""
		regex2 = regex2 or ""
		regex3 = regex3 or ""
		regex4 = regex4 or ""
		if type(stem) == "table" then
			for i, form in ipairs(stem) do
				temp[i] = {['word'] = mw.ustring.gsub(form['word'] .. ending, regex1, regex2), ['note'] = form['note']}
			end
		elseif type(stem) == "string" then
			temp = mw.ustring.gsub(stem .. ending, regex1, regex2)
		end
		return rad_link_IPA(temp, post, noipa)
	end
	
	add("<small>")
	if table_type == "intr" or table_type == "tr" then -- active table
		local cite = ""
		if (type(pp.inf) == "table") then cite = pp['inf'][1]['word'] else cite = pp.inf end
		add("<table class=\"mw-collapsible mw-collapsed wikitable inflection table\" width=100% style=\"text-align: center\">")
			tr()
				th("Conjugation of ''" .. cite .. "'' (active voice) &nbsp;", 1, 14)
			_tr()
				th("nonfinite forms", 1, 14)
			_tr()
				th("infinitive", 1, 3)
				td(get_forms(pp.inf), 1, 11)
			_tr()
				th("connegative", 1, 3)
				if cite == "vat" or cite == "hjeat" then
					th("", 1, 11)
				else
					td(get_forms(pp.inf,"a","uta$","ûta"), 1, 11)
				end
			_tr()
				th("supine", 1, 3)
				td(get_forms(pp.inf,"úr", "utúr$","ûtúr"), 1, 11)
			_tr()
				th("participle", 4, 1)
				th("present", 2, 1)
				th("adjectival")
				td(get_forms(pp.prespart,"ș"), 1, 11)
			_tr()
				th("adverbial")
				td(get_forms(pp.prespart,"vú"), 1, 11)
			_tr()
				th("past", 2, 1)
				th("adjectival")
				td(get_forms(pp.pspart,"ș"), 1, 11)
			_tr()
				th("adverbial")
				td(get_forms(pp.pspart,"l"), 1, 11)
			_tr()
				th("verbal noun", 1, 3)
				td(get_forms(pp.vnoun), 1, 11)
			_tr()
				th("finite forms", 4, 3)
				th("singular", 1, 5)
				th("plural", 1, 5)
				th("humble")
			_tr()
				th("first", 2, 1)
				th("second", 1, 2)
				th("third", 2, 1)
				th("depersonal", 2, 1)
				th("first", 1, 2)
				th("second", 2, 1)
				th("third", 2, 1)
				th("depersonal", 2, 1)
				th("second", 2, 1)
			_tr()
				th("informal")
				th("formal")
				th("inclusive")
				th("exclusive")
			_tr()
				th("''" .. rad_link("ú") .. "''")
				th("''" .. rad_link("re") .. "''")
				th("''" .. rad_link("lește") .. "''")
				th("''" .. rad_link("vâs") .. ", " .. rad_link("vara") .. "''")
				th("''" .. rad_link("gjei") .. ", " .. rad_link("gjen") .. ", " .. rad_link("gjeș") .. "''")
				th("''" .. rad_link("dzun") .. ", " .. rad_link("sted") .. "''")
				th("''" .. rad_link("dzate") .. "''")
				th("''" .. rad_link("sjáște") .. "''")
				th("''" .. rad_link("vír") .. ", " .. rad_link("vara") .. "''")
				th("''" .. rad_link("gjes") .. ", " .. rad_link("gjete") .. ", " .. rad_link("gje") .. ", " .. rad_link("gjen") .. "''")
				th("''" .. rad_link("sja") .. ", " .. rad_link("lai") .. "''")
			_tr()
				th("simple", 7, 1)
				th("imperative", 1, 2)
				th()
				if pp.imp and pp.a ~= pp.imp then
					td(get_forms(pp.imp))
				elseif pp.vstem then
					td(get_forms(pp.a, "", "va$", "ja"))
				else
					td(get_forms(pp.a), 2, 1)
				end
				td(get_forms(pp['2s'],"úș"))
				th("", 1, 2)
				td(get_forms(pp.pl or pp['2s'],"uoș"))
				th()
				td(get_forms(pp['2s'],"ovú", "([au])ovú$", "%1òvú"))
				th("", 1, 2)
				td(get_forms(pp.pl or pp['2s'],"úr"))
			_tr()
				th("indicative", 2, 1)
				th("non-past")
				td(get_forms(pp['1s']))
				if (pp.imp and pp.a ~= pp.imp) or pp.vstem then td(get_forms(pp.a)) end
				if pp['3s'] == (pp.depers or pp['2s']) then
					td(get_forms(pp['3s']), 1, 3)
				else
					td(get_forms(pp['3s']), 1, 2)
					td(get_forms(pp.depers or pp['2s']))
				end
				local temp_height = 1
				if get_forms(pp.pl or pp['2s'],"ú") == get_forms(pp.pst,"ú","[uú]ú$","ủ") then temp_height = 2 end
				td(get_forms(pp.pl or pp['2s'],"uos"), temp_height)
				td(get_forms(pp.pl or pp['2s'],"uote"), temp_height)
				td(get_forms(pp.pl or pp['2s'],"ú"), temp_height, 3)
				td(get_forms(pp.pl or pp['2s'],"ún"), temp_height)
			_tr()
				th("past")
				if pp.epst then
					td(get_forms(pp.epst,"e"))
					td(get_forms(pp.epst,"n"))
					td(get_forms(pp.epst,"ș"),1,2)
					td(get_forms(pp.epst))
				else
					td(get_forms(pp.pst,"ei"))
					td(get_forms(pp.pst,"en"))
					td(get_forms(pp.pst,"eș"),1,2)
					td(get_forms(pp.pst,"e"))
				end
				if get_forms(pp.pl or pp['2s'],"ú") ~= get_forms(pp.pst,"ú","[uú]ú$","ủ") then
					td(get_forms(pp.pst,"uos","[uú]uos$","ủos"))
					td(get_forms(pp.pst,"uote","[uú]uote$","ủote"))
					td(get_forms(pp.pst,"ú","[uú]ú$","ủ"),1,3)
					td(get_forms(pp.pst,"ún","[uú]ún$","ủn"))
				end
			_tr()
				th("subjunctive",2,1)
				th("non-past")
				local aidentical = false
				if pp.vstem then
					if get_forms(pp['2s'],"ai","avai$","áe") == get_forms(pp.pst,"ai") then
						td(get_forms(pp['2s'],"ai","avai$","áe"),2)
						aidentical = true
					else
						td(get_forms(pp['2s'],"ai","avai$","áe"))
					end
					td(get_forms(pp['2s'],"á","avá$","áva"))
				else
					if get_forms(pp['2s'],"ai") == get_forms(pp.pst,"ai") then
						td(get_forms(pp['2s'],"ai"),2)
						aidentical = true
					else
						td(get_forms(pp['2s'],"ai"))
					end
					td(get_forms(pp['2s'],"á"))
				end
				td(get_forms(pp.a,"ș"),1,2)
				td(get_forms(pp.a))
				temp_height = 1
				if pp.a == pp.apst then temp_height = 2 end
				td(get_forms(pp.a,"vuos"), temp_height)
				td(get_forms(pp.a,"vuote"), temp_height)
				td(get_forms(pp.a,"vú"), temp_height, 3)
				td(get_forms(pp.a,"vún"), temp_height)
			_tr()
				th("past")
				if not aidentical then td(get_forms(pp.pst,"ai")) end
				td(get_forms(pp.pst,"ain"))
				td(get_forms(pp.pst,"aiș"),1,2)
				td(get_forms(pp.pst,"ai"))
				if pp.a ~= pp.apst then
					td(get_forms(pp.apst,"vuos"))
					td(get_forms(pp.apst,"vuote"))
					td(get_forms(pp.apst,"vú"),1,3)
					td(get_forms(pp.apst,"vún"))
				end
			_tr()
				th("optative",2,1)
				th("non-past")
				td(get_forms(pp['2s'],"úe"))
				td(get_forms(pp['2s'],"ova", "([au])ova$", "%1òva"))
				td(get_forms(pp['2s'],"úș"),1,2)
				td(get_forms(pp['2s'],"ú"))
				td(get_forms(pp['2s'],"ovuos", "([au])ovuos$", "%1òvuos"))
				td(get_forms(pp['2s'],"ovuote", "([au])ovuote$", "%1òvuote"))
				td(get_forms(pp['2s'],"ovú", "([au])ovú$", "%1òvú"),1,3)
				td(get_forms(pp['2s'],"ovún", "([au])ovún$", "%1òvún"))
			_tr()
				th("past")
				if pp.epst then
					td(get_forms(pp.epst,"vei"))
					td(get_forms(pp.epst,"ven"))
					td(get_forms(pp.epst,"veș"),1,2)
					td(get_forms(pp.epst,"ve"))
					td(get_forms(pp.epst,"vuos"))
					td(get_forms(pp.epst,"vuote"))
					td(get_forms(pp.epst,"vú"),1,3)
					td(get_forms(pp.epst,"vún"))
				else
					td(get_forms(pp.pst,"evei"))
					td(get_forms(pp.pst,"even"))
					td(get_forms(pp.pst,"eveș"),1,2)
					td(get_forms(pp.pst,"eve"))
					td(get_forms(pp.pst,"evuos"))
					td(get_forms(pp.pst,"evuote"))
					td(get_forms(pp.pst,"evú"),1,3)
					td(get_forms(pp.pst,"evún"))
				end
			_tr()
				th("habitual",6,1)
				th("indicative",2,1)
				th("non-past")
				td(get_forms(pp.r,"iè"))
				td(get_forms(pp.r,"in"))
				td(get_forms(pp.r,"iș"),1,2)
				td(get_forms(pp.r,"i"))
				temp_height = 1
				if get_forms(pp.pl or pp['2s'],"ú") == get_forms(pp.pst,"ú","[uú]ú$","ủ") then temp_height = 2 end
				td(get_forms(pp.pl or pp['2s'],"úris"), temp_height)
				td(get_forms(pp.pl or pp['2s'],"úrite"), temp_height)
				td(get_forms(pp.pl or pp['2s'],"úri"), temp_height, 3)
				td(get_forms(pp.pl or pp['2s'],"úrin"), temp_height)
			_tr()
				th("past")
				if pp.epst then
					td(get_forms(pp.epst,"riè"))
					td(get_forms(pp.epst,"rin"))
					td(get_forms(pp.epst,"riș"),1,2)
					td(get_forms(pp.epst,"ri"))
				else
					td(get_forms(pp.pst,"eriè"))
					td(get_forms(pp.pst,"erin"))
					td(get_forms(pp.pst,"eriș"),1,2)
					td(get_forms(pp.pst,"eri"))
				end
				if get_forms(pp.pl or pp['2s'],"ú") ~= get_forms(pp.pst,"ú","[uú]ú$","ủ") then
					td(get_forms(pp.pst,"úris","[uú]úris$","ủris"))
					td(get_forms(pp.pst,"úrite","[uú]úrite$","ủrite"))
					td(get_forms(pp.pst,"úri","[uú]úri$","ủri"),1,3)
					td(get_forms(pp.pst,"úrin","[uú]úrin$","ủrin"))
				end
			_tr()
				th("subjunctive",2,1)
				th("non-past")
				td(get_forms(pp.a,"riè"))
				td(get_forms(pp.a,"rin"))
				td(get_forms(pp.a,"riș"),1,2)
				td(get_forms(pp.a,"ri"))
				temp_height = 1
				if pp.a == pp.apst then temp_height = 2 end
				td(get_forms(pp.a,"vúris"), temp_height)
				td(get_forms(pp.a,"vúrite"), temp_height)
				td(get_forms(pp.a,"vúri"), temp_height, 3)
				td(get_forms(pp.a,"vúrin"), temp_height)
			_tr()
				th("past")
				td(get_forms(pp.pst,"airiè"))
				td(get_forms(pp.pst,"airin"))
				td(get_forms(pp.pst,"airiș"),1,2)
				td(get_forms(pp.pst,"airi"))
				if pp.a ~= pp.apst then
					td(get_forms(pp.apst,"vúris"))
					td(get_forms(pp.apst,"vúrite"))
					td(get_forms(pp.apst,"vúri"),1,3)
					td(get_forms(pp.apst,"vúri"))
				end
			_tr()
				th("optative",2,1)
				th("non-past")
				td(get_forms(pp['2s'],"úriè"))
				td(get_forms(pp['2s'],"úrin"))
				td(get_forms(pp['2s'],"úriș"),1,2)
				td(get_forms(pp['2s'],"úri"))
				td(get_forms(pp['2s'],"ovúris", "([au])ovúris$", "%1òvúris"))
				td(get_forms(pp['2s'],"ovúrite", "([au])ovúrite$", "%1òvúrite"))
				td(get_forms(pp['2s'],"ovúri", "([au])ovúri$", "%1òvúri"),1,3)
				td(get_forms(pp['2s'],"ovúrin", "([au])ovúrin$", "%1òvúrin"))
			_tr()
				th("past")
				if pp.epst then
					td(get_forms(pp.epst,"veriè"))
					td(get_forms(pp.epst,"verin"))
					td(get_forms(pp.epst,"veriș"),1,2)
					td(get_forms(pp.epst,"veri"))
					td(get_forms(pp.epst,"vúris"))
					td(get_forms(pp.epst,"vúrite"))
					td(get_forms(pp.epst,"vúri"),1,3)
					td(get_forms(pp.epst,"vúrin"))
				else
					td(get_forms(pp.pst,"everiè"))
					td(get_forms(pp.pst,"everin"))
					td(get_forms(pp.pst,"everiș"),1,2)
					td(get_forms(pp.pst,"everi"))
					td(get_forms(pp.pst,"evúris"))
					td(get_forms(pp.pst,"evúrite"))
					td(get_forms(pp.pst,"evúri"),1,3)
					td(get_forms(pp.pst,"evúrin"))
				end
			tr_()
		add("<table class=\"mw-collapsible mw-collapsed wikitable inflection table\" width=100% style=\"text-align: center\">")
			tr()
				th("Compound forms of ''" .. cite .. "'' (active voice) &nbsp;", 1, 14)
			_tr()
				th("", 4, 3)
				th("singular", 1, 5)
				th("plural", 1, 5)
				th("humble")
			_tr()
				th("first", 2, 1)
				th("second", 1, 2)
				th("third", 2, 1)
				th("depersonal", 2, 1)
				th("first", 1, 2)
				th("second", 2, 1)
				th("third", 2, 1)
				th("depersonal", 2, 1)
				th("second", 2, 1)
			_tr()
				th("informal")
				th("formal")
				th("inclusive")
				th("exclusive")
			_tr()
				th("''" .. rad_link("ú") .. "''")
				th("''" .. rad_link("re") .. "''")
				th("''" .. rad_link("lește") .. "''")
				th("''" .. rad_link("vâs") .. ", " .. rad_link("vara") .. "''")
				th("''" .. rad_link("gjei") .. ", " .. rad_link("gjen") .. ", " .. rad_link("gjeș") .. "''")
				th("''" .. rad_link("dzun") .. ", " .. rad_link("sted") .. "''")
				th("''" .. rad_link("dzate") .. "''")
				th("''" .. rad_link("sjáște") .. "''")
				th("''" .. rad_link("vír") .. ", " .. rad_link("vara") .. "''")
				th("''" .. rad_link("gjes") .. ", " .. rad_link("gjete") .. ", " .. rad_link("gje") .. ", " .. rad_link("gjen") .. "''")
				th("''" .. rad_link("sja") .. ", " .. rad_link("lai") .. "''")
			_tr()
				th("continuous",7,1)
				th("infinitive",1,2)
				td(get_forms(pp.prespart,"vú","vat",true),1,12)
			_tr()
				th("indicative",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","vage",true))
				td(get_forms(pp.prespart,"vú","vaga",true))
				td(get_forms(pp.prespart,"vú","vaș",true),1,2)
				td(get_forms(pp.prespart,"vú",_,true))
				td(get_forms(pp.prespart,"vú","vaguos",true))
				td(get_forms(pp.prespart,"vú","vaguote",true))
				td(get_forms(pp.prespart,"vú","vagú",true),1,2)
				td(get_forms(pp.prespart,"vú",_,true))
				td(get_forms(pp.prespart,"vú","vagún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","hâlei",true))
				td(get_forms(pp.prespart,"vú","hâlen",true))
				td(get_forms(pp.prespart,"vú","hâleș",true),1,2)
				td(get_forms(pp.prespart,"vú","hâle",true))
				td(get_forms(pp.prespart,"vú","hâluos",true))
				td(get_forms(pp.prespart,"vú","hâluote",true))
				td(get_forms(pp.prespart,"vú","hâlú",true),1,3)
				td(get_forms(pp.prespart,"vú","hâlún",true))
			_tr()
				th("subjunctive",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","vagai",true))
				td(get_forms(pp.prespart,"vú","vagá",true))
				td(get_forms(pp.prespart,"vú","vagaș",true),1,2)
				td(get_forms(pp.prespart,"vú","vaga",true))
				td(get_forms(pp.prespart,"vú","vagavuos",true))
				td(get_forms(pp.prespart,"vú","vagavuote",true))
				td(get_forms(pp.prespart,"vú","vagavú",true),1,3)
				td(get_forms(pp.prespart,"vú","vagavún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","hâlai",true))
				td(get_forms(pp.prespart,"vú","hâlain",true))
				td(get_forms(pp.prespart,"vú","hâlaiș",true),1,2)
				td(get_forms(pp.prespart,"vú","hâlai",true))
				td(get_forms(pp.prespart,"vú","hâlavuos",true))
				td(get_forms(pp.prespart,"vú","hâlavuote",true))
				td(get_forms(pp.prespart,"vú","hâlavú",true),1,3)
				td(get_forms(pp.prespart,"vú","hâlavún",true))
			_tr()
				th("optative",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","vagúe",true))
				td(get_forms(pp.prespart,"vú","vagova",true))
				td(get_forms(pp.prespart,"vú","vagúș",true),1,2)
				td(get_forms(pp.prespart,"vú","vagú",true))
				td(get_forms(pp.prespart,"vú","vagovuos",true))
				td(get_forms(pp.prespart,"vú","vagovuote",true))
				td(get_forms(pp.prespart,"vú","vagovú",true),1,3)
				td(get_forms(pp.prespart,"vú","vagovún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","hâlevei",true))
				td(get_forms(pp.prespart,"vú","hâleven",true))
				td(get_forms(pp.prespart,"vú","hâleveș",true),1,2)
				td(get_forms(pp.prespart,"vú","hâleve",true))
				td(get_forms(pp.prespart,"vú","hâlevuos",true))
				td(get_forms(pp.prespart,"vú","hâlevuote",true))
				td(get_forms(pp.prespart,"vú","hâlevú",true),1,3)
				td(get_forms(pp.prespart,"vú","hâlevún",true))
			_tr()
				th("perfective",7,1)
				th("infinitive",1,2)
				td(get_forms(pp.pspart,"l","-at",true),1,12)
			_tr()
				th("indicative",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","-age",true))
				td(get_forms(pp.pspart,"l","-aga",true))
				td(get_forms(pp.pspart,"l","-aș",true),1,2)
				td(get_forms(pp.pspart,"l", _,true))
				td(get_forms(pp.pspart,"l","-aguos",true))
				td(get_forms(pp.pspart,"l","-aguote",true))
				td(get_forms(pp.pspart,"l","-agú",true),1,2)
				td(get_forms(pp.pspart,"l", _,true))
				td(get_forms(pp.pspart,"l","-agún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-âlei",true))
				td(get_forms(pp.pspart,"l","-âlen",true))
				td(get_forms(pp.pspart,"l","-âleș",true),1,2)
				td(get_forms(pp.pspart,"l","-âle",true))
				td(get_forms(pp.pspart,"l","-âluos",true))
				td(get_forms(pp.pspart,"l","-âluote",true))
				td(get_forms(pp.pspart,"l","-âlú",true),1,3)
				td(get_forms(pp.pspart,"l","-âlún",true))
			_tr()
				th("subjunctive",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","-agai",true))
				td(get_forms(pp.pspart,"l","-agá",true))
				td(get_forms(pp.pspart,"l","-agaș",true),1,2)
				td(get_forms(pp.pspart,"l","-aga",true))
				td(get_forms(pp.pspart,"l","-agavuos",true))
				td(get_forms(pp.pspart,"l","-agavuote",true))
				td(get_forms(pp.pspart,"l","-agavú",true),1,3)
				td(get_forms(pp.pspart,"l","-agavún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-âlai",true))
				td(get_forms(pp.pspart,"l","-âlain",true))
				td(get_forms(pp.pspart,"l","-âlaiș",true),1,2)
				td(get_forms(pp.pspart,"l","-âlai",true))
				td(get_forms(pp.pspart,"l","-âlavuos",true))
				td(get_forms(pp.pspart,"l","-âlavuote",true))
				td(get_forms(pp.pspart,"l","-âlavú",true),1,3)
				td(get_forms(pp.pspart,"l","-âlavún",true))
			_tr()
				th("optative",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","-agúe",true))
				td(get_forms(pp.pspart,"l","-agova",true))
				td(get_forms(pp.pspart,"l","-agúș",true),1,2)
				td(get_forms(pp.pspart,"l","-agú",true))
				td(get_forms(pp.pspart,"l","-agovuos",true))
				td(get_forms(pp.pspart,"l","-agovuote",true))
				td(get_forms(pp.pspart,"l","-agovú",true),1,3)
				td(get_forms(pp.pspart,"l","-agovún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-âlevei",true))
				td(get_forms(pp.pspart,"l","-âleven",true))
				td(get_forms(pp.pspart,"l","-âleveș",true),1,2)
				td(get_forms(pp.pspart,"l","-âleve",true))
				td(get_forms(pp.pspart,"l","-âlevuos",true))
				td(get_forms(pp.pspart,"l","-âlevuote",true))
				td(get_forms(pp.pspart,"l","-âlevú",true),1,3)
				td(get_forms(pp.pspart,"l","-âlevún",true))
			_tr()
				th("Negative compound forms of ''" .. cite .. "'' (active voice)",1,14)
			_tr()
				th("continuous",7,1)
				th("infinitive",1,2)
				td(get_forms(pp.prespart,"vú","hjeat",true),1,12)
			_tr()
				th("indicative",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","hjei",true))
				td(get_forms(pp.prespart,"vú","hjeà",true))
				td(get_forms(pp.prespart,"vú","hjeaș",true),1,2)
				td(get_forms(pp.prespart,"vú","hje",true))
				td(get_forms(pp.prespart,"vú","hjeuos",true))
				td(get_forms(pp.prespart,"vú","hjeuote",true))
				td(get_forms(pp.prespart,"vú","hjeú",true),1,3)
				td(get_forms(pp.prespart,"vú","hjeún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","húei",true))
				td(get_forms(pp.prespart,"vú","húen",true))
				td(get_forms(pp.prespart,"vú","húeș",true),1,2)
				td(get_forms(pp.prespart,"vú","húe",true))
				td(get_forms(pp.prespart,"vú","hủos",true))
				td(get_forms(pp.prespart,"vú","hủote",true))
				td(get_forms(pp.prespart,"vú","hủ",true),1,3)
				td(get_forms(pp.prespart,"vú","hủn",true))
			_tr()
				th("subjunctive",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","hjeai",true))
				td(get_forms(pp.prespart,"vú","hjeá",true))
				td(get_forms(pp.prespart,"vú","hjeàș",true),1,2)
				td(get_forms(pp.prespart,"vú","hjeà",true))
				td(get_forms(pp.prespart,"vú","hjeàvuos",true))
				td(get_forms(pp.prespart,"vú","hjeàvuote",true))
				td(get_forms(pp.prespart,"vú","hjeàvú",true),1,3)
				td(get_forms(pp.prespart,"vú","hjeàvún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","húai",true))
				td(get_forms(pp.prespart,"vú","húain",true))
				td(get_forms(pp.prespart,"vú","húaiș",true),1,2)
				td(get_forms(pp.prespart,"vú","húai",true))
				td(get_forms(pp.prespart,"vú","húavuos",true))
				td(get_forms(pp.prespart,"vú","húavuote",true))
				td(get_forms(pp.prespart,"vú","húavú",true),1,3)
				td(get_forms(pp.prespart,"vú","húavún",true))
			_tr()
				th("optative",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","hjeúe",true))
				td(get_forms(pp.prespart,"vú","hjeova",true))
				td(get_forms(pp.prespart,"vú","hjeúș",true),1,2)
				td(get_forms(pp.prespart,"vú","hjeú",true))
				td(get_forms(pp.prespart,"vú","hjeovuos",true))
				td(get_forms(pp.prespart,"vú","hjeovuote",true))
				td(get_forms(pp.prespart,"vú","hjeovú",true),1,3)
				td(get_forms(pp.prespart,"vú","hjeovún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","húevei",true))
				td(get_forms(pp.prespart,"vú","húeven",true))
				td(get_forms(pp.prespart,"vú","húeveș",true),1,2)
				td(get_forms(pp.prespart,"vú","húeve",true))
				td(get_forms(pp.prespart,"vú","húevuos",true))
				td(get_forms(pp.prespart,"vú","húevuote",true))
				td(get_forms(pp.prespart,"vú","húevú",true),1,3)
				td(get_forms(pp.prespart,"vú","húevún",true))
			_tr()
				th("perfective",7,1)
				th("infinitive",1,2)
				td(get_forms(pp.pspart,"l","hjeat",true),1,12)
			_tr()
				th("indicative",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","hjei",true))
				td(get_forms(pp.pspart,"l","hjeà",true))
				td(get_forms(pp.pspart,"l","hjeaș",true),1,2)
				td(get_forms(pp.pspart,"l", "hje",true))
				td(get_forms(pp.pspart,"l","hjeuos",true))
				td(get_forms(pp.pspart,"l","hjeuote",true))
				td(get_forms(pp.pspart,"l","hjeú",true),1,3)
				td(get_forms(pp.pspart,"l","hjeún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-úei",true))
				td(get_forms(pp.pspart,"l","-úen",true))
				td(get_forms(pp.pspart,"l","-úeș",true),1,2)
				td(get_forms(pp.pspart,"l","-úe",true))
				td(get_forms(pp.pspart,"l","-ủos",true))
				td(get_forms(pp.pspart,"l","-ủote",true))
				td(get_forms(pp.pspart,"l","-ủ",true),1,3)
				td(get_forms(pp.pspart,"l","-ủn",true))
			_tr()
				th("subjunctive",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","hjeai",true))
				td(get_forms(pp.pspart,"l","hjeá",true))
				td(get_forms(pp.pspart,"l","hjeàș",true),1,2)
				td(get_forms(pp.pspart,"l","hjeà",true))
				td(get_forms(pp.pspart,"l","hjeàvuos",true))
				td(get_forms(pp.pspart,"l","hjeàvuote",true))
				td(get_forms(pp.pspart,"l","hjeàvú",true),1,3)
				td(get_forms(pp.pspart,"l","hjeàvún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-úai",true))
				td(get_forms(pp.pspart,"l","-úain",true))
				td(get_forms(pp.pspart,"l","-úaiș",true),1,2)
				td(get_forms(pp.pspart,"l","-úai",true))
				td(get_forms(pp.pspart,"l","-úavuos",true))
				td(get_forms(pp.pspart,"l","-úavuote",true))
				td(get_forms(pp.pspart,"l","-úavú",true),1,3)
				td(get_forms(pp.pspart,"l","-úavún",true))
			_tr()
				th("optative",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","hjeúe",true))
				td(get_forms(pp.pspart,"l","hjeova",true))
				td(get_forms(pp.pspart,"l","hjeúș",true),1,2)
				td(get_forms(pp.pspart,"l","hjeú",true))
				td(get_forms(pp.pspart,"l","hjeovuos",true))
				td(get_forms(pp.pspart,"l","hjeovuote",true))
				td(get_forms(pp.pspart,"l","hjeovú",true),1,3)
				td(get_forms(pp.pspart,"l","hjeovún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-úevei",true))
				td(get_forms(pp.pspart,"l","-úeven",true))
				td(get_forms(pp.pspart,"l","-úeveș",true),1,2)
				td(get_forms(pp.pspart,"l","-úeve",true))
				td(get_forms(pp.pspart,"l","-úevuos",true))
				td(get_forms(pp.pspart,"l","-úevuote",true))
				td(get_forms(pp.pspart,"l","-úevú",true),1,3)
				td(get_forms(pp.pspart,"l","-úevún",true))
			tr_()
		add("</table>")
	end

	if table_type == "tr" or table_type == "pass" then
		local cite = ""
		if (type(pp.passinf) == "table") then cite = pp['passinf'][1]['word'] else cite = pp.passinf end
		add("<table class=\"mw-collapsible mw-collapsed wikitable inflection table\" width=100% style=\"text-align: center\">")
			tr()
				th("Conjugation of ''" .. cite .. "ruot'' (passive voice) &nbsp;", 1, 14)
			_tr()
				th("nonfinite forms", 1, 14)
			_tr()
				th("infinitive", 1, 3)
				td(get_forms(pp.passinf,"ruot"), 1, 11)
			_tr()
				th("connegative", 1, 3)
				td(get_forms(pp.passinf,"ruota"), 1, 11)
			_tr()
				th("supine", 1, 3)
				td(get_forms(pp.passinf,"ruotúr"), 1, 11)
			_tr()
				th("participle", 4, 1)
				th("present", 2, 1)
				th("adjectival")
				td(get_forms(pp.passprespart,"ruviș"), 1, 11)
			_tr()
				th("adverbial")
				td(get_forms(pp.passprespart,"ruvivú"), 1, 11)
			_tr()
				th("past", 2, 1)
				th("adjectival")
				local pspart_broken = {}
				if type(pp.pspart) == "table" then
					local i_counter = 1
					while pp.pspart[i_counter] do
						pspart_broken[i_counter] = {}
						pspart_broken[i_counter]['word'] = pp.pspart[i_counter]['word']
						pspart_broken[i_counter]['note'] = pp.pspart[i_counter]['note']
						i_counter = i_counter + 1
					end
					for i,form in ipairs(pspart_broken) do
						pspart_broken[i]['word'] = mw.ustring.gsub(form['word'], "ú$", "uo")
						pspart_broken[i]['word'] = mw.ustring.gsub(form['word'], "ủ$", "ủo")
					end
				elseif type(pp.pspart) == "string" then
					pspart_broken = pp.pspart
					pspart_broken = mw.ustring.gsub(pspart_broken, "ú$", "uo")
					pspart_broken = mw.ustring.gsub(pspart_broken, "ủ$", "ủo")
				else
					error()
				end
				td(get_forms(pspart_broken,"kș"), 1, 11)
			_tr()
				th("adverbial")
				td(get_forms(pp.pspart,"k"), 1, 11)
			_tr()
				th("verbal noun", 1, 3)
				td(get_forms(passvnoun,"ruvaș"), 1, 11)
			_tr()
				th("finite forms", 4, 3)
				th("singular", 1, 5)
				th("plural", 1, 5)
				th("humble")
			_tr()
				th("first", 2, 1)
				th("second", 1, 2)
				th("third", 2, 1)
				th("depersonal", 2, 1)
				th("first", 1, 2)
				th("second", 2, 1)
				th("third", 2, 1)
				th("depersonal", 2, 1)
				th("second", 2, 1)
			_tr()
				th("informal")
				th("formal")
				th("inclusive")
				th("exclusive")
			_tr()
				th("''" .. rad_link("ú") .. "''")
				th("''" .. rad_link("re") .. "''")
				th("''" .. rad_link("lește") .. "''")
				th("''" .. rad_link("vâs") .. ", " .. rad_link("vara") .. "''")
				th("''" .. rad_link("gjei") .. ", " .. rad_link("gjen") .. ", " .. rad_link("gjeș") .. "''")
				th("''" .. rad_link("dzun") .. ", " .. rad_link("sted") .. "''")
				th("''" .. rad_link("dzate") .. "''")
				th("''" .. rad_link("sjáște") .. "''")
				th("''" .. rad_link("vír") .. ", " .. rad_link("vara") .. "''")
				th("''" .. rad_link("gjes") .. ", " .. rad_link("gjete") .. ", " .. rad_link("gje") .. ", " .. rad_link("gjen") .. "''")
				th("''" .. rad_link("sja") .. ", " .. rad_link("lai") .. "''")
			_tr()
				th("simple", 7, 1)
				th("imperative", 1, 2)
				th()
				td(get_forms(pp.r,"úa"))
				td(get_forms(pp.r,"uvúș"))
				th("", 1, 2)
				td(get_forms(pp.r,"uvuoș"))
				th()
				td(get_forms(pp.r,"uvovú"))
				th("", 1, 2)
				td(get_forms(pp.r,"uvúr"))
			_tr()
				th("indicative", 2, 1)
				th("non-past")
				td(get_forms(pp.r,"úe"))
				td(get_forms(pp.r,"uva"))
				td(get_forms(pp.r,"úș"), 1, 2)
				td(get_forms(pp.r,"ú"))
				local temp_height = 1
				if pp.r == pp.rpst then temp_height = 2 end
				td(get_forms(pp.r,"uvuos"), temp_height)
				td(get_forms(pp.r,"uvuote"), temp_height)
				td(get_forms(pp.r,"uvú"), temp_height, 3)
				td(get_forms(pp.r,"uvún"), temp_height)
			_tr()
				th("past")
				td(get_forms(pp.rpst,"uvei"))
				td(get_forms(pp.rpst,"uven"))
				td(get_forms(pp.rpst,"uveș"),1,2)
				td(get_forms(pp.rpst,"uve"))
				if pp.r ~= pp.rpst then
					td(get_forms(pp.rpst,"uvuos"))
					td(get_forms(pp.rpst,"uvuote"))
					td(get_forms(pp.rpst,"uvú"),1,3)
					td(get_forms(pp.rpst,"uvún"))
				end
			_tr()
				th("subjunctive",2,1)
				th("non-past")
				local aidentical = false
				if pp.vstem then
					if get_forms(pp['2s'],"ai","avai$","áe") == get_forms(pp.pst,"ai") then
						td(get_forms(pp['2s'],"ai","avai$","áe"),2)
						aidentical = true
					else
						td(get_forms(pp['2s'],"ai","avai$","áe"))
					end
					td(get_forms(pp['2s'],"á","avá$","áva"))
				else
					if get_forms(pp['2s'],"ai") == get_forms(pp.pst,"ai") then
						td(get_forms(pp['2s'],"ai"),2)
						aidentical = true
					else
						td(get_forms(pp['2s'],"ai"))
					end
					td(get_forms(pp['2s'],"á"))
				end
				td(get_forms(pp.a,"ș"),1,2)
				td(get_forms(pp.a))
				temp_height = 1
				if pp.a == pp.apst then temp_height = 2 end
				td(get_forms(pp.a,"vuos"), temp_height)
				td(get_forms(pp.a,"vuote"), temp_height)
				td(get_forms(pp.a,"vú"), temp_height, 3)
				td(get_forms(pp.a,"vún"), temp_height)
			_tr()
				th("past")
				if not aidentical then td(get_forms(pp.pst,"ai")) end
				td(get_forms(pp.pst,"ain"))
				td(get_forms(pp.pst,"aiș"),1,2)
				td(get_forms(pp.pst,"ai"))
				if pp.a ~= pp.apst then
					td(get_forms(pp.apst,"vuos"))
					td(get_forms(pp.apst,"vuote"))
					td(get_forms(pp.apst,"vú"),1,3)
					td(get_forms(pp.apst,"vún"))
				end
			_tr()
				th("optative",2,1)
				th("non-past")
				td(get_forms(pp['2s'],"úe"))
				td(get_forms(pp['2s'],"ova", "([au])ova$", "%1òva"))
				td(get_forms(pp['2s'],"úș"),1,2)
				td(get_forms(pp['2s'],"ú"))
				td(get_forms(pp['2s'],"ovuos", "([au])ovuos$", "%1òvuos"))
				td(get_forms(pp['2s'],"ovuote", "([au])ovuote$", "%1òvuote"))
				td(get_forms(pp['2s'],"ovú", "([au])ovú$", "%1òvú"),1,3)
				td(get_forms(pp['2s'],"ovún", "([au])ovún$", "%1òvún"))
			_tr()
				th("past")
				if pp.epst then
					td(get_forms(pp.epst,"vei"))
					td(get_forms(pp.epst,"ven"))
					td(get_forms(pp.epst,"veș"),1,2)
					td(get_forms(pp.epst,"ve"))
					td(get_forms(pp.epst,"vuos"))
					td(get_forms(pp.epst,"vuote"))
					td(get_forms(pp.epst,"vú"),1,3)
					td(get_forms(pp.epst,"vún"))
				else
					td(get_forms(pp.pst,"evei"))
					td(get_forms(pp.pst,"even"))
					td(get_forms(pp.pst,"eveș"),1,2)
					td(get_forms(pp.pst,"eve"))
					td(get_forms(pp.pst,"evuos"))
					td(get_forms(pp.pst,"evuote"))
					td(get_forms(pp.pst,"evú"),1,3)
					td(get_forms(pp.pst,"evún"))
				end
			_tr()
				th("habitual",6,1)
				th("indicative",2,1)
				th("non-past")
				td(get_forms(pp.r,"iè"))
				td(get_forms(pp.r,"in"))
				td(get_forms(pp.r,"iș"),1,2)
				td(get_forms(pp.r,"i"))
				temp_height = 1
				if get_forms(pp.pl or pp['2s'],"ú") == get_forms(pp.pst,"ú","[uú]ú$","ủ") then temp_height = 2 end
				td(get_forms(pp.pl or pp['2s'],"úris"), temp_height)
				td(get_forms(pp.pl or pp['2s'],"úrite"), temp_height)
				td(get_forms(pp.pl or pp['2s'],"úri"), temp_height, 3)
				td(get_forms(pp.pl or pp['2s'],"úrin"), temp_height)
			_tr()
				th("past")
				if pp.epst then
					td(get_forms(pp.epst,"riè"))
					td(get_forms(pp.epst,"rin"))
					td(get_forms(pp.epst,"riș"),1,2)
					td(get_forms(pp.epst,"ri"))
				else
					td(get_forms(pp.pst,"eriè"))
					td(get_forms(pp.pst,"erin"))
					td(get_forms(pp.pst,"eriș"),1,2)
					td(get_forms(pp.pst,"eri"))
				end
				if get_forms(pp.pl or pp['2s'],"ú") ~= get_forms(pp.pst,"ú","[uú]ú$","ủ") then
					td(get_forms(pp.pst,"úris","[uú]úris$","ủris"))
					td(get_forms(pp.pst,"úrite","[uú]úrite$","ủrite"))
					td(get_forms(pp.pst,"úri","[uú]úri$","ủri"),1,3)
					td(get_forms(pp.pst,"úrin","[uú]úrin$","ủrin"))
				end
			_tr()
				th("subjunctive",2,1)
				th("non-past")
				td(get_forms(pp.a,"riè"))
				td(get_forms(pp.a,"rin"))
				td(get_forms(pp.a,"riș"),1,2)
				td(get_forms(pp.a,"ri"))
				temp_height = 1
				if pp.a == pp.apst then temp_height = 2 end
				td(get_forms(pp.a,"vúris"), temp_height)
				td(get_forms(pp.a,"vúrite"), temp_height)
				td(get_forms(pp.a,"vúri"), temp_height, 3)
				td(get_forms(pp.a,"vúrin"), temp_height)
			_tr()
				th("past")
				td(get_forms(pp.pst,"airiè"))
				td(get_forms(pp.pst,"airin"))
				td(get_forms(pp.pst,"airiș"),1,2)
				td(get_forms(pp.pst,"airi"))
				if pp.a ~= pp.apst then
					td(get_forms(pp.apst,"vúris"))
					td(get_forms(pp.apst,"vúrite"))
					td(get_forms(pp.apst,"vúri"),1,3)
					td(get_forms(pp.apst,"vúri"))
				end
			_tr()
				th("optative",2,1)
				th("non-past")
				td(get_forms(pp['2s'],"úriè"))
				td(get_forms(pp['2s'],"úrin"))
				td(get_forms(pp['2s'],"úriș"),1,2)
				td(get_forms(pp['2s'],"úri"))
				td(get_forms(pp['2s'],"ovúris", "([au])ovúris$", "%1òvúris"))
				td(get_forms(pp['2s'],"ovúrite", "([au])ovúrite$", "%1òvúrite"))
				td(get_forms(pp['2s'],"ovúri", "([au])ovúri$", "%1òvúri"),1,3)
				td(get_forms(pp['2s'],"ovúrin", "([au])ovúrin$", "%1òvúrin"))
			_tr()
				th("past")
				if pp.epst then
					td(get_forms(pp.epst,"veriè"))
					td(get_forms(pp.epst,"verin"))
					td(get_forms(pp.epst,"veriș"),1,2)
					td(get_forms(pp.epst,"veri"))
					td(get_forms(pp.epst,"vúris"))
					td(get_forms(pp.epst,"vúrite"))
					td(get_forms(pp.epst,"vúri"),1,3)
					td(get_forms(pp.epst,"vúrin"))
				else
					td(get_forms(pp.pst,"everiè"))
					td(get_forms(pp.pst,"everin"))
					td(get_forms(pp.pst,"everiș"),1,2)
					td(get_forms(pp.pst,"everi"))
					td(get_forms(pp.pst,"evúris"))
					td(get_forms(pp.pst,"evúrite"))
					td(get_forms(pp.pst,"evúri"),1,3)
					td(get_forms(pp.pst,"evúrin"))
				end
			tr_()
		add("<table class=\"mw-collapsible mw-collapsed wikitable inflection table\" width=100% style=\"text-align: center\">")
			tr()
				th("Compound forms of ''" .. cite .. "ruot'' (passive voice) &nbsp;", 1, 14)
			_tr()
				th("", 4, 3)
				th("singular", 1, 5)
				th("plural", 1, 5)
				th("humble")
			_tr()
				th("first", 2, 1)
				th("second", 1, 2)
				th("third", 2, 1)
				th("depersonal", 2, 1)
				th("first", 1, 2)
				th("second", 2, 1)
				th("third", 2, 1)
				th("depersonal", 2, 1)
				th("second", 2, 1)
			_tr()
				th("informal")
				th("formal")
				th("inclusive")
				th("exclusive")
			_tr()
				th("''" .. rad_link("ú") .. "''")
				th("''" .. rad_link("re") .. "''")
				th("''" .. rad_link("lește") .. "''")
				th("''" .. rad_link("vâs") .. ", " .. rad_link("vara") .. "''")
				th("''" .. rad_link("gjei") .. ", " .. rad_link("gjen") .. ", " .. rad_link("gjeș") .. "''")
				th("''" .. rad_link("dzun") .. ", " .. rad_link("sted") .. "''")
				th("''" .. rad_link("dzate") .. "''")
				th("''" .. rad_link("sjáște") .. "''")
				th("''" .. rad_link("vír") .. ", " .. rad_link("vara") .. "''")
				th("''" .. rad_link("gjes") .. ", " .. rad_link("gjete") .. ", " .. rad_link("gje") .. ", " .. rad_link("gjen") .. "''")
				th("''" .. rad_link("sja") .. ", " .. rad_link("lai") .. "''")
			_tr()
				th("continuous",7,1)
				th("infinitive",1,2)
				td(get_forms(pp.prespart,"vú","vat",true),1,12)
			_tr()
				th("indicative",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","vage",true))
				td(get_forms(pp.prespart,"vú","vaga",true))
				td(get_forms(pp.prespart,"vú","vaș",true),1,2)
				td(get_forms(pp.prespart,"vú",_,true))
				td(get_forms(pp.prespart,"vú","vaguos",true))
				td(get_forms(pp.prespart,"vú","vaguote",true))
				td(get_forms(pp.prespart,"vú","vagú",true),1,2)
				td(get_forms(pp.prespart,"vú",_,true))
				td(get_forms(pp.prespart,"vú","vagún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","hâlei",true))
				td(get_forms(pp.prespart,"vú","hâlen",true))
				td(get_forms(pp.prespart,"vú","hâleș",true),1,2)
				td(get_forms(pp.prespart,"vú","hâle",true))
				td(get_forms(pp.prespart,"vú","hâluos",true))
				td(get_forms(pp.prespart,"vú","hâluote",true))
				td(get_forms(pp.prespart,"vú","hâlú",true),1,3)
				td(get_forms(pp.prespart,"vú","hâlún",true))
			_tr()
				th("subjunctive",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","vagai",true))
				td(get_forms(pp.prespart,"vú","vagá",true))
				td(get_forms(pp.prespart,"vú","vagaș",true),1,2)
				td(get_forms(pp.prespart,"vú","vaga",true))
				td(get_forms(pp.prespart,"vú","vagavuos",true))
				td(get_forms(pp.prespart,"vú","vagavuote",true))
				td(get_forms(pp.prespart,"vú","vagavú",true),1,3)
				td(get_forms(pp.prespart,"vú","vagavún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","hâlai",true))
				td(get_forms(pp.prespart,"vú","hâlain",true))
				td(get_forms(pp.prespart,"vú","hâlaiș",true),1,2)
				td(get_forms(pp.prespart,"vú","hâlai",true))
				td(get_forms(pp.prespart,"vú","hâlavuos",true))
				td(get_forms(pp.prespart,"vú","hâlavuote",true))
				td(get_forms(pp.prespart,"vú","hâlavú",true),1,3)
				td(get_forms(pp.prespart,"vú","hâlavún",true))
			_tr()
				th("optative",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","vagúe",true))
				td(get_forms(pp.prespart,"vú","vagova",true))
				td(get_forms(pp.prespart,"vú","vagúș",true),1,2)
				td(get_forms(pp.prespart,"vú","vagú",true))
				td(get_forms(pp.prespart,"vú","vagovuos",true))
				td(get_forms(pp.prespart,"vú","vagovuote",true))
				td(get_forms(pp.prespart,"vú","vagovú",true),1,3)
				td(get_forms(pp.prespart,"vú","vagovún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","hâlevei",true))
				td(get_forms(pp.prespart,"vú","hâleven",true))
				td(get_forms(pp.prespart,"vú","hâleveș",true),1,2)
				td(get_forms(pp.prespart,"vú","hâleve",true))
				td(get_forms(pp.prespart,"vú","hâlevuos",true))
				td(get_forms(pp.prespart,"vú","hâlevuote",true))
				td(get_forms(pp.prespart,"vú","hâlevú",true),1,3)
				td(get_forms(pp.prespart,"vú","hâlevún",true))
			_tr()
				th("perfective",7,1)
				th("infinitive",1,2)
				td(get_forms(pp.pspart,"l","-at",true),1,12)
			_tr()
				th("indicative",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","-age",true))
				td(get_forms(pp.pspart,"l","-aga",true))
				td(get_forms(pp.pspart,"l","-aș",true),1,2)
				td(get_forms(pp.pspart,"l", _,true))
				td(get_forms(pp.pspart,"l","-aguos",true))
				td(get_forms(pp.pspart,"l","-aguote",true))
				td(get_forms(pp.pspart,"l","-agú",true),1,2)
				td(get_forms(pp.pspart,"l", _,true))
				td(get_forms(pp.pspart,"l","-agún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-âlei",true))
				td(get_forms(pp.pspart,"l","-âlen",true))
				td(get_forms(pp.pspart,"l","-âleș",true),1,2)
				td(get_forms(pp.pspart,"l","-âle",true))
				td(get_forms(pp.pspart,"l","-âluos",true))
				td(get_forms(pp.pspart,"l","-âluote",true))
				td(get_forms(pp.pspart,"l","-âlú",true),1,3)
				td(get_forms(pp.pspart,"l","-âlún",true))
			_tr()
				th("subjunctive",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","-agai",true))
				td(get_forms(pp.pspart,"l","-agá",true))
				td(get_forms(pp.pspart,"l","-agaș",true),1,2)
				td(get_forms(pp.pspart,"l","-aga",true))
				td(get_forms(pp.pspart,"l","-agavuos",true))
				td(get_forms(pp.pspart,"l","-agavuote",true))
				td(get_forms(pp.pspart,"l","-agavú",true),1,3)
				td(get_forms(pp.pspart,"l","-agavún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-âlai",true))
				td(get_forms(pp.pspart,"l","-âlain",true))
				td(get_forms(pp.pspart,"l","-âlaiș",true),1,2)
				td(get_forms(pp.pspart,"l","-âlai",true))
				td(get_forms(pp.pspart,"l","-âlavuos",true))
				td(get_forms(pp.pspart,"l","-âlavuote",true))
				td(get_forms(pp.pspart,"l","-âlavú",true),1,3)
				td(get_forms(pp.pspart,"l","-âlavún",true))
			_tr()
				th("optative",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","-agúe",true))
				td(get_forms(pp.pspart,"l","-agova",true))
				td(get_forms(pp.pspart,"l","-agúș",true),1,2)
				td(get_forms(pp.pspart,"l","-agú",true))
				td(get_forms(pp.pspart,"l","-agovuos",true))
				td(get_forms(pp.pspart,"l","-agovuote",true))
				td(get_forms(pp.pspart,"l","-agovú",true),1,3)
				td(get_forms(pp.pspart,"l","-agovún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-âlevei",true))
				td(get_forms(pp.pspart,"l","-âleven",true))
				td(get_forms(pp.pspart,"l","-âleveș",true),1,2)
				td(get_forms(pp.pspart,"l","-âleve",true))
				td(get_forms(pp.pspart,"l","-âlevuos",true))
				td(get_forms(pp.pspart,"l","-âlevuote",true))
				td(get_forms(pp.pspart,"l","-âlevú",true),1,3)
				td(get_forms(pp.pspart,"l","-âlevún",true))
			_tr()
				th("Negative compound forms of ''" .. cite .. "ruot'' (passive voice)",1,14)
			_tr()
				th("continuous",7,1)
				th("infinitive",1,2)
				td(get_forms(pp.prespart,"vú","hjeat",true),1,12)
			_tr()
				th("indicative",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","hjei",true))
				td(get_forms(pp.prespart,"vú","hjeà",true))
				td(get_forms(pp.prespart,"vú","hjeaș",true),1,2)
				td(get_forms(pp.prespart,"vú","hje",true))
				td(get_forms(pp.prespart,"vú","hjeuos",true))
				td(get_forms(pp.prespart,"vú","hjeuote",true))
				td(get_forms(pp.prespart,"vú","hjeú",true),1,3)
				td(get_forms(pp.prespart,"vú","hjeún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","húei",true))
				td(get_forms(pp.prespart,"vú","húen",true))
				td(get_forms(pp.prespart,"vú","húeș",true),1,2)
				td(get_forms(pp.prespart,"vú","húe",true))
				td(get_forms(pp.prespart,"vú","hủos",true))
				td(get_forms(pp.prespart,"vú","hủote",true))
				td(get_forms(pp.prespart,"vú","hủ",true),1,3)
				td(get_forms(pp.prespart,"vú","hủn",true))
			_tr()
				th("subjunctive",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","hjeai",true))
				td(get_forms(pp.prespart,"vú","hjeá",true))
				td(get_forms(pp.prespart,"vú","hjeàș",true),1,2)
				td(get_forms(pp.prespart,"vú","hjeà",true))
				td(get_forms(pp.prespart,"vú","hjeàvuos",true))
				td(get_forms(pp.prespart,"vú","hjeàvuote",true))
				td(get_forms(pp.prespart,"vú","hjeàvú",true),1,3)
				td(get_forms(pp.prespart,"vú","hjeàvún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","húai",true))
				td(get_forms(pp.prespart,"vú","húain",true))
				td(get_forms(pp.prespart,"vú","húaiș",true),1,2)
				td(get_forms(pp.prespart,"vú","húai",true))
				td(get_forms(pp.prespart,"vú","húavuos",true))
				td(get_forms(pp.prespart,"vú","húavuote",true))
				td(get_forms(pp.prespart,"vú","húavú",true),1,3)
				td(get_forms(pp.prespart,"vú","húavún",true))
			_tr()
				th("optative",2,1)
				th("non-past")
				td(get_forms(pp.prespart,"vú","hjeúe",true))
				td(get_forms(pp.prespart,"vú","hjeova",true))
				td(get_forms(pp.prespart,"vú","hjeúș",true),1,2)
				td(get_forms(pp.prespart,"vú","hjeú",true))
				td(get_forms(pp.prespart,"vú","hjeovuos",true))
				td(get_forms(pp.prespart,"vú","hjeovuote",true))
				td(get_forms(pp.prespart,"vú","hjeovú",true),1,3)
				td(get_forms(pp.prespart,"vú","hjeovún",true))
			_tr()
				th("past")
				td(get_forms(pp.prespart,"vú","húevei",true))
				td(get_forms(pp.prespart,"vú","húeven",true))
				td(get_forms(pp.prespart,"vú","húeveș",true),1,2)
				td(get_forms(pp.prespart,"vú","húeve",true))
				td(get_forms(pp.prespart,"vú","húevuos",true))
				td(get_forms(pp.prespart,"vú","húevuote",true))
				td(get_forms(pp.prespart,"vú","húevú",true),1,3)
				td(get_forms(pp.prespart,"vú","húevún",true))
			_tr()
				th("perfective",7,1)
				th("infinitive",1,2)
				td(get_forms(pp.pspart,"l","hjeat",true),1,12)
			_tr()
				th("indicative",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","hjei",true))
				td(get_forms(pp.pspart,"l","hjeà",true))
				td(get_forms(pp.pspart,"l","hjeaș",true),1,2)
				td(get_forms(pp.pspart,"l", "hje",true))
				td(get_forms(pp.pspart,"l","hjeuos",true))
				td(get_forms(pp.pspart,"l","hjeuote",true))
				td(get_forms(pp.pspart,"l","hjeú",true),1,3)
				td(get_forms(pp.pspart,"l","hjeún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-úei",true))
				td(get_forms(pp.pspart,"l","-úen",true))
				td(get_forms(pp.pspart,"l","-úeș",true),1,2)
				td(get_forms(pp.pspart,"l","-úe",true))
				td(get_forms(pp.pspart,"l","-ủos",true))
				td(get_forms(pp.pspart,"l","-ủote",true))
				td(get_forms(pp.pspart,"l","-ủ",true),1,3)
				td(get_forms(pp.pspart,"l","-ủn",true))
			_tr()
				th("subjunctive",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","hjeai",true))
				td(get_forms(pp.pspart,"l","hjeá",true))
				td(get_forms(pp.pspart,"l","hjeàș",true),1,2)
				td(get_forms(pp.pspart,"l","hjeà",true))
				td(get_forms(pp.pspart,"l","hjeàvuos",true))
				td(get_forms(pp.pspart,"l","hjeàvuote",true))
				td(get_forms(pp.pspart,"l","hjeàvú",true),1,3)
				td(get_forms(pp.pspart,"l","hjeàvún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-úai",true))
				td(get_forms(pp.pspart,"l","-úain",true))
				td(get_forms(pp.pspart,"l","-úaiș",true),1,2)
				td(get_forms(pp.pspart,"l","-úai",true))
				td(get_forms(pp.pspart,"l","-úavuos",true))
				td(get_forms(pp.pspart,"l","-úavuote",true))
				td(get_forms(pp.pspart,"l","-úavú",true),1,3)
				td(get_forms(pp.pspart,"l","-úavún",true))
			_tr()
				th("optative",2,1)
				th("perfect")
				td(get_forms(pp.pspart,"l","hjeúe",true))
				td(get_forms(pp.pspart,"l","hjeova",true))
				td(get_forms(pp.pspart,"l","hjeúș",true),1,2)
				td(get_forms(pp.pspart,"l","hjeú",true))
				td(get_forms(pp.pspart,"l","hjeovuos",true))
				td(get_forms(pp.pspart,"l","hjeovuote",true))
				td(get_forms(pp.pspart,"l","hjeovú",true),1,3)
				td(get_forms(pp.pspart,"l","hjeovún",true))
			_tr()
				th("pluperfect")
				td(get_forms(pp.pspart,"l","-úevei",true))
				td(get_forms(pp.pspart,"l","-úeven",true))
				td(get_forms(pp.pspart,"l","-úeveș",true),1,2)
				td(get_forms(pp.pspart,"l","-úeve",true))
				td(get_forms(pp.pspart,"l","-úevuos",true))
				td(get_forms(pp.pspart,"l","-úevuote",true))
				td(get_forms(pp.pspart,"l","-úevú",true),1,3)
				td(get_forms(pp.pspart,"l","-úevún",true))
			tr_()
		add("</table>")
	end
	add("</small>")
	
	return table.concat(format_table, string.char(10))
end

return export

--[[
Debug console test string:
=p.show(mw.getCurrentFrame():newChild{title="whatever",args={"hv", "o~u^u", "þ"}})
=p.conjugate(mw.getCurrentFrame():newChild{title="whatever",args={"deat","de",["pl"]="di","diș","deti","dev",["t"]="tr",["altnonfin"]="hellu",["altnonfin_note"]="uwu",["altnonfin2"]="hella",["altnonfin2_note"]="owo",["pre"]="fjø", "de", "det"}})
]]--