Bước tới nội dung

Mô đun:la-adj/table

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

local m_table = require("Module:table")

local function convert(data, conv)
	local col = {}
	local row = {}
	local marked = {}
	local slots = {}
	local function add(i,j)
		local col = col[i][j]
		local row = row[i][j]
		if col==0 or row==0 then
			return ""
		end
		local entry = data.finish_show_form(data, slots[i][j])
		if col==1 then
			if row==1 then
				return '\n| ' .. entry
			else
				return '\n| rowspan=' .. row .. ' | ' .. entry
			end
		else
			if row==1 then
				return '\n| colspan=' .. col .. ' | ' .. entry
			else
				return '\n| colspan=' .. col .. ' rowspan=' .. row .. ' | ' .. entry
			end
		end
	end
	
	for i=1,#conv do
		col[i] = {}
		row[i] = {}
		marked[i] = {}
		slots[i] = {}
		for j=1,#conv[i] do
			col[i][j] = 1
			row[i][j] = 1
			marked[i][j] = false
			slots[i][j] = {conv[i][j]}
		end
	end

	-- Return true if the contents of the two slots are equal in every
	-- way. This means the forms are the same, the footnote text is the
	-- same, and the accelerator lemmas are the same. We need to compare
	-- the accelerator lemmas because in some cases different slots have
	-- different lemmas (e.g. when noneut=1 is set, the masculine slots
	-- will have the masculine lemma but the feminine slots will have the
	-- feminine lemma).
	local function slots_equal(slot1, slot2)
		return m_table.deepEquals(data.forms[slot1], data.forms[slot2]) and
			m_table.deepEquals(data.notetext[slot1], data.notetext[slot2]) and
			(data.accel[slot1] and data.accel[slot1].lemma or nil) ==
			(data.accel[slot2] and data.accel[slot2].lemma or nil)
	end

	--merge identical cells within a row
	for i=1,#conv do for j=1,#conv[i] do
		if col[i][j] ~= 0 then
			for k=j+1,#conv[i] do
				local slotij = conv[i][j]
				local slotik = conv[i][k]
				if not slots_equal(slotij, slotik) then
					break
				end
				col[i][j] = col[i][j] + 1
				col[i][k] = 0
				row[i][k] = 0
				for _, slot in ipairs(slots[i][k]) do
					table.insert(slots[i][j], slot)
				end
				slots[i][k] = nil
			end
		end
	end end
	
	--final
	for i=1,#conv do
		for j=1,#conv[i] do
			conv[i][j] = add(i,j)
		end
		conv[i] = table.concat(conv[i])
	end
	return conv
end

local function make_table_mfn_pl(data, mfonly)
	local conv = {
		{"nom_pl_m"},
		{"gen_pl_m"},
		{"dat_pl_m"},
		{"acc_pl_m"},
		{"abl_pl_m"},
		{"voc_pl_m"},
		{"loc_pl_m"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.')
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_mfn_sg(data, mfonly)
	local conv = {
		{"nom_sg_m"},
		{"gen_sg_m"},
		{"dat_sg_m"},
		{"acc_sg_m"},
		{"abl_sg_m"},
		{"voc_sg_m"},
		{"loc_sg_m"},
	}
	conv = convert(data, conv)
	
	local output = data.title .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" | số ít'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.')
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_n_pl(data)
	local conv = {
		{"nom_pl_n"},
		{"gen_pl_n"},
		{"dat_pl_n"},
		{"acc_pl_n"},
		{"abl_pl_n"},
		{"voc_pl_n"},
		{"loc_pl_n"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! ' .. 'giống trung'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_n_sg(data)
	local conv = {
		{"nom_sg_n"},
		{"gen_sg_n"},
		{"dat_sg_n"},
		{"acc_sg_n"},
		{"abl_sg_n"},
		{"voc_sg_n"},
		{"loc_sg_n"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" | số ít'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! ' .. 'giống trung'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_mf_and_n_pl(data)
	local conv = {
		{"nom_pl_m", "nom_pl_n"},
		{"gen_pl_m", "gen_pl_n"},
		{"dat_pl_m", "dat_pl_n"},
		{"acc_pl_m", "acc_pl_n"},
		{"abl_pl_m", "abl_pl_n"},
		{"voc_pl_m", "voc_pl_n"},
		{"loc_pl_m", "loc_pl_n"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" colspan="2" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! masc./fem.'
	output = output .. '\n! giống trung'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_mf_and_n_sg(data)
	local conv = {
		{"nom_sg_m", "nom_sg_n"},
		{"gen_sg_m", "gen_sg_n"},
		{"dat_sg_m", "dat_sg_n"},
		{"acc_sg_m", "acc_sg_n"},
		{"abl_sg_m", "abl_sg_n"},
		{"voc_sg_m", "voc_sg_n"},
		{"loc_sg_m", "loc_sg_n"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" colspan="2" | số ít'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! masc./fem.'
	output = output .. '\n! giống trung'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_m_and_f_pl(data)
	local conv = {
		{"nom_pl_m", "nom_pl_f"},
		{"gen_pl_m", "gen_pl_f"},
		{"dat_pl_m", "dat_pl_f"},
		{"acc_pl_m", "acc_pl_f"},
		{"abl_pl_m", "abl_pl_f"},
		{"voc_pl_m", "voc_pl_f"},
		{"loc_pl_m", "loc_pl_f"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" colspan="2" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! giống đực'
	output = output .. '\n! giống cái'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_m_and_f_sg(data)
	local conv = {
		{"nom_sg_m", "nom_sg_f"},
		{"gen_sg_m", "gen_sg_f"},
		{"dat_sg_m", "dat_sg_f"},
		{"acc_sg_m", "acc_sg_f"},
		{"abl_sg_m", "abl_sg_f"},
		{"voc_sg_m", "voc_sg_f"},
		{"loc_sg_m", "loc_sg_f"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" colspan="2" | số ít'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! giống đực'
	output = output .. '\n! giống cái'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_m_and_f_and_n_pl(data)
	local conv = {
		{"nom_pl_m", "nom_pl_f", "nom_pl_n"},
		{"gen_pl_m", "gen_pl_f", "gen_pl_n"},
		{"dat_pl_m", "dat_pl_f", "dat_pl_n"},
		{"acc_pl_m", "acc_pl_f", "acc_pl_n"},
		{"abl_pl_m", "abl_pl_f", "abl_pl_n"},
		{"voc_pl_m", "voc_pl_f", "voc_pl_n"},
		{"loc_pl_m", "loc_pl_f", "loc_pl_n"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" colspan="3" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! giống đực'
	output = output .. '\n! giống cái'
	output = output .. '\n! giống trung'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_m_and_f_and_n_sg(data)
	local conv = {
		{"nom_sg_m", "nom_sg_f", "nom_sg_n"},
		{"gen_sg_m", "gen_sg_f", "gen_sg_n"},
		{"dat_sg_m", "dat_sg_f", "dat_sg_n"},
		{"acc_sg_m", "acc_sg_f", "acc_sg_n"},
		{"abl_sg_m", "abl_sg_f", "abl_sg_n"},
		{"voc_sg_m", "voc_sg_f", "voc_sg_n"},
		{"loc_sg_m", "loc_sg_f", "loc_sg_n"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" colspan="3" | số ít'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! giống đực'
	output = output .. '\n! giống cái'
	output = output .. '\n! giống trung'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_mfn(data, mfonly)
	local conv = {
		{"nom_sg_m"},
		{"gen_sg_m"},
		{"dat_sg_m"},
		{"acc_sg_m"},
		{"abl_sg_m"},
		{"voc_sg_m"},
		{"loc_sg_m"},
		{"nom_pl_m"},
		{"gen_pl_m"},
		{"dat_pl_m"},
		{"acc_pl_m"},
		{"abl_pl_m"},
		{"voc_pl_m"},
		{"loc_pl_m"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" | số ít'
	output = output .. '\n|class="separator" rowspan="999"|'
	output = output .. '\n!class="outer" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.')
	output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.')
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. conv[8]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. conv[9]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. conv[10]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. conv[11]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. conv[12]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	output = output .. conv[13]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
		output = output .. conv[14]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_n(data)
	local conv = {
		{"nom_sg_n"},
		{"gen_sg_n"},
		{"dat_sg_n"},
		{"acc_sg_n"},
		{"abl_sg_n"},
		{"voc_sg_n"},
		{"loc_sg_n"},
		{"nom_pl_n"},
		{"gen_pl_n"},
		{"dat_pl_n"},
		{"acc_pl_n"},
		{"abl_pl_n"},
		{"voc_pl_n"},
		{"loc_pl_n"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" | số ít'
	output = output .. '\n|class="separator" rowspan="999"|'
	output = output .. '\n!class="outer" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! ' .. 'giống trung'
	output = output .. '\n! ' .. 'giống trung'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. conv[8]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. conv[9]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. conv[10]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. conv[11]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. conv[12]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	output = output .. conv[13]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
		output = output .. conv[14]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_mf_and_n(data)
	local conv = {
		{"nom_sg_m", "nom_sg_n"},
		{"gen_sg_m", "gen_sg_n"},
		{"dat_sg_m", "dat_sg_n"},
		{"acc_sg_m", "acc_sg_n"},
		{"abl_sg_m", "abl_sg_n"},
		{"voc_sg_m", "voc_sg_n"},
		{"loc_sg_m", "loc_sg_n"},
		{"nom_pl_m", "nom_pl_n"},
		{"gen_pl_m", "gen_pl_n"},
		{"dat_pl_m", "dat_pl_n"},
		{"acc_pl_m", "acc_pl_n"},
		{"abl_pl_m", "abl_pl_n"},
		{"voc_pl_m", "voc_pl_n"},
		{"loc_pl_m", "loc_pl_n"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" colspan="2" | số ít'
	output = output .. '\n|class="separator" rowspan="999"|'
	output = output .. '\n!class="outer" colspan="2" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! masc./fem.'
	output = output .. '\n! giống trung'
	output = output .. '\n! masc./fem.'
	output = output .. '\n! giống trung'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. conv[8]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. conv[9]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. conv[10]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. conv[11]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. conv[12]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	output = output .. conv[13]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
		output = output .. conv[14]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_m_and_f(data)
	local conv = {
		{"nom_sg_m", "nom_sg_f"},
		{"gen_sg_m", "gen_sg_f"},
		{"dat_sg_m", "dat_sg_f"},
		{"acc_sg_m", "acc_sg_f"},
		{"abl_sg_m", "abl_sg_f"},
		{"voc_sg_m", "voc_sg_f"},
		{"loc_sg_m", "loc_sg_f"},
		{"nom_pl_m", "nom_pl_f"},
		{"gen_pl_m", "gen_pl_f"},
		{"dat_pl_m", "dat_pl_f"},
		{"acc_pl_m", "acc_pl_f"},
		{"abl_pl_m", "abl_pl_f"},
		{"voc_pl_m", "voc_pl_f"},
		{"loc_pl_m", "loc_pl_f"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" colspan="2" | số ít'
	output = output .. '\n|class="separator" rowspan="999"|'
	output = output .. '\n!class="outer" colspan="2" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! giống đực'
	output = output .. '\n! giống cái'
	output = output .. '\n! giống đực'
	output = output .. '\n! giống cái'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. conv[8]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. conv[9]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. conv[10]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. conv[11]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. conv[12]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	output = output .. conv[13]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
		output = output .. conv[14]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end

	return output
end

local function make_table_m_and_f_and_n(data)	
	local conv = {
		{"nom_sg_m", "nom_sg_f", "nom_sg_n"},
		{"gen_sg_m", "gen_sg_f", "gen_sg_n"},
		{"dat_sg_m", "dat_sg_f", "dat_sg_n"},
		{"acc_sg_m", "acc_sg_f", "acc_sg_n"},
		{"abl_sg_m", "abl_sg_f", "abl_sg_n"},
		{"voc_sg_m", "voc_sg_f", "voc_sg_n"},
		{"loc_sg_m", "loc_sg_f", "loc_sg_n"},
		{"nom_pl_m", "nom_pl_f", "nom_pl_n"},
		{"gen_pl_m", "gen_pl_f", "gen_pl_n"},
		{"dat_pl_m", "dat_pl_f", "dat_pl_n"},
		{"acc_pl_m", "acc_pl_f", "acc_pl_n"},
		{"abl_pl_m", "abl_pl_f", "abl_pl_n"},
		{"voc_pl_m", "voc_pl_f", "voc_pl_n"},
		{"loc_pl_m", "loc_pl_f", "loc_pl_n"},
	}
	conv = convert(data, conv)
	
	local output = data.title
	output = output .. '\n\n'
	output = output .. mw.getCurrentFrame():expandTemplate{
		title = 'inflection-table-top',
		args = {
			title = '-',
			palette = 'purple',
			class = 'sticky-left-column',
			lang = "la",
		}
	}
	output = output .. '\n!class="outer" | '
	output = output .. '\n!class="outer" colspan="3" | số ít'
	output = output .. '\n|class="separator" rowspan="999"|'
	output = output .. '\n!class="outer" colspan="3" | số nhiều'
	output = output .. '\n|-'
	output = output .. '\n! '
	output = output .. '\n! giống đực'
	output = output .. '\n! giống cái'
	output = output .. '\n! giống trung'
	output = output .. '\n! giống đực'
	output = output .. '\n! giống cái'
	output = output .. '\n! giống trung'
	output = output .. '\n|-'
	output = output .. '\n! [[nominative|danh cách]]'
	output = output .. conv[1]
	output = output .. conv[8]
	output = output .. '\n|-'
	output = output .. '\n! [[genitive|sinh cách]]'
	output = output .. conv[2]
	output = output .. conv[9]
	output = output .. '\n|-'
	output = output .. '\n! [[dative|dữ cách]]'
	output = output .. conv[3]
	output = output .. conv[10]
	output = output .. '\n|-'
	output = output .. '\n! [[accusative|đối cách]]'
	output = output .. conv[4]
	output = output .. conv[11]
	output = output .. '\n|-'
	output = output .. '\n! [[ablative|ly cách]]'
	output = output .. conv[5]
	output = output .. conv[12]
	output = output .. '\n|-'
	output = output .. '\n! [[vocative|hô cách]]'
	output = output .. conv[6]
	output = output .. conv[13]
	if data.loc then
		output = output .. '\n|-'
		output = output .. '\n! [[locative|định vị cách]]'
		output = output .. conv[7]
		output = output .. conv[14]
	end
	output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
	if data.footnotes and data.footnotes ~= '' then
		output = output .. '\n' .. data.footnotes
	end
	
	return output
end

function export.make_table(data)
	local forms, output = data.forms
	if not forms.nom_sg_n and not forms.nom_pl_n then
		if forms.nom_sg_f or forms.nom_pl_f then
			if data.num == "pl" then
				output = make_table_m_and_f_pl(data)
			elseif data.num == "sg"
				then output = make_table_m_and_f_sg(data)
			else
				output = make_table_m_and_f(data)
			end
		else
			local mfonly = data.noneut and not data.nomf
			if data.num == "pl" then
				output = make_table_mfn_pl(data, mfonly)
			elseif data.num == "sg" then
				output = make_table_mfn_sg(data, mfonly)
			else
				output = make_table_mfn(data, mfonly)
			end
		end
	elseif data.nomf then
		if data.num == "pl" then output = make_table_n_pl(data)
		elseif data.num == "sg" then output = make_table_n_sg(data)
		else output = make_table_n(data) end
	elseif not forms.nom_sg_f and not forms.nom_pl_f then
		if data.num == "pl" then output = make_table_mf_and_n_pl(data)
		elseif data.num == "sg" then output = make_table_mf_and_n_sg(data)
		else output = make_table_mf_and_n(data) end
	else
		if data.num == "pl" then output = make_table_m_and_f_and_n_pl(data)
		elseif data.num == "sg" then output = make_table_m_and_f_and_n_sg(data)
		else output = make_table_m_and_f_and_n(data) end
	end
	return output
end

return export

-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet: