Module:La-adj/table
Revision as of 19:09, 5 May 2022 by wiktionary>Theknightwho
Documentation for this module may be created at Module:La-adj/table/doc
local export = {}
local ut = require("Module:utils")
local function convert(data, conv)
local col = {}
local row = {}
local colors = {}
local marked = {}
local slots = {}
local function add(i,j)
local col = col[i][j]
local row = row[i][j]
local color = colors[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|style="background:#' .. color .. ';" align=center | ' .. entry
else
return '\n|style="background:#' .. color .. ';" align=center rowspan=' .. row .. ' | ' .. entry
end
else
if row==1 then
return '\n|style="background:#' .. color .. ';" align=center colspan=' .. col .. ' | ' .. entry
else
return '\n|style="background:#' .. color .. ';" align=center colspan=' .. col .. ' rowspan=' .. row .. ' | ' .. entry
end
end
end
for i=1,#conv do
col[i] = {}
row[i] = {}
colors[i] = {}
marked[i] = {}
slots[i] = {}
for j=1,#conv[i] do
col[i][j] = 1
row[i][j] = 1
colors[i][j] = "F8F8FF"
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 ut.equals(data.forms[slot1], data.forms[slot2]) and
ut.equals(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 rows
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
--merge columns
for i=1,#conv do
for j=1,#conv[i] do
if row[i][j] ~= 0 then
for k=i+1,#conv do
local slotij = conv[i][j]
local slotkj = conv[k][j]
if not slots_equal(slotij, slotkj) or col[i][j] ~= col[k][j] then
break
end
row[i][j] = row[i][j] + 1
row[k][j] = 0
for _, slot in ipairs(slots[k][j]) do
table.insert(slots[i][j], slot)
end
slots[k][j] = 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, noneut)
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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| ' .. (noneut and 'Masc./Fem.' or 'Masc./Fem./Neut.')
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
return output
end
local function make_table_mfn_sg(data, noneut)
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
output = output .. '\n{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Singular'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| ' .. (noneut and 'Masc./Fem.' or 'Masc./Fem./Neut.')
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| ' .. 'Neuter'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Singular'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| ' .. 'Neuter'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="2" | Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| Masc./Fem.'
output = output .. '\n!style="background:#40E0D0;"| Neuter'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="2" | Singular'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| Masc./Fem.'
output = output .. '\n!style="background:#40E0D0;"| Neuter'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="2" | Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| Masculine'
output = output .. '\n!style="background:#40E0D0;"| Feminine'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="2" | Singular'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| Masculine'
output = output .. '\n!style="background:#40E0D0;"| Feminine'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="3" | Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| Masculine'
output = output .. '\n!style="background:#40E0D0;"| Feminine'
output = output .. '\n!style="background:#40E0D0;"| Neuter'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="3" | Singular'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| Masculine'
output = output .. '\n!style="background:#40E0D0;"| Feminine'
output = output .. '\n!style="background:#40E0D0;"| Neuter'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
end
output = output .. '\n|}'
return output
end
local function make_table_mfn(data, noneut)
local conv = {
{"nom_sg_m"},
{"gen_sg_m"},
{"dat_sg_m"},
{"acc_sg_m"},
{"abl_sg_m"},
{"voc_sg_m"},
{"loc_sg_m"},
{"----"}, -- prevents merge rows from merging cells at the bottom of sg with cells at the top of pl
{"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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Singular'
output = output .. '\n|rowspan="2"|'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| ' .. (noneut and 'Masc./Fem.' or 'Masc./Fem./Neut.')
output = output .. '\n!style="background:#40E0D0;"| ' .. (noneut and 'Masc./Fem.' or 'Masc./Fem./Neut.')
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
if data.voc and data.loc then
output = output .. '\n|rowspan="7"|'
elseif data.voc or data.loc then
output = output .. '\n|rowspan="6"|'
else
output = output .. '\n|rowspan="5"|'
end
output = output .. conv[9]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. conv[10]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. conv[11]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. conv[12]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
output = output .. conv[13]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
output = output .. conv[14]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
output = output .. conv[15]
end
output = output .. '\n|}'
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"},
{"----"}, -- prevents merge rows from merging cells at the bottom of sg with cells at the top of pl
{"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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Singular'
output = output .. '\n|rowspan="2"|'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| ' .. 'Neuter'
output = output .. '\n!style="background:#40E0D0;"| ' .. 'Neuter'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
if data.voc and data.loc then
output = output .. '\n|rowspan="7"|'
elseif data.voc or data.loc then
output = output .. '\n|rowspan="6"|'
else
output = output .. '\n|rowspan="5"|'
end
output = output .. conv[9]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. conv[10]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. conv[11]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. conv[12]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
output = output .. conv[13]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
output = output .. conv[14]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
output = output .. conv[15]
end
output = output .. '\n|}'
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"},
{"----", "----"}, -- prevents merge rows from merging cells at the bottom of sg with cells at the top of pl
{"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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="2" | Singular'
output = output .. '\n|rowspan="2"|'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="2" | Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| Masc./Fem.'
output = output .. '\n!style="background:#40E0D0;"| Neuter'
output = output .. '\n!style="background:#40E0D0;"| Masc./Fem.'
output = output .. '\n!style="background:#40E0D0;"| Neuter'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
if data.voc and data.loc then
output = output .. '\n|rowspan="7"|'
elseif data.voc or data.loc then
output = output .. '\n|rowspan="6"|'
else
output = output .. '\n|rowspan="5"|'
end
output = output .. conv[9]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. conv[10]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. conv[11]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. conv[12]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
output = output .. conv[13]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
output = output .. conv[14]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
output = output .. conv[15]
end
output = output .. '\n|}'
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"},
{"----", "----"}, -- prevents merge rows from merging cells at the bottom of sg with cells at the top of pl
{"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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="2" | Singular'
output = output .. '\n|rowspan="2"|'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="2" | Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| Masculine'
output = output .. '\n!style="background:#40E0D0;"| Feminine'
output = output .. '\n!style="background:#40E0D0;"| Masculine'
output = output .. '\n!style="background:#40E0D0;"| Feminine'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
if data.voc and data.loc then
output = output .. '\n|rowspan="7"|'
elseif data.voc or data.loc then
output = output .. '\n|rowspan="6"|'
else
output = output .. '\n|rowspan="5"|'
end
output = output .. conv[9]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. conv[10]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. conv[11]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. conv[12]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
output = output .. conv[13]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
output = output .. conv[14]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
output = output .. conv[15]
end
output = output .. '\n|}'
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"},
{"----", "----", "----"}, -- prevents merge rows from merging cells at the bottom of sg with cells at the top of pl
{"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{| class="prettytable inflection-table inflection-table-la"'
output = output .. '\n!style="background:#549EA0; font-style:italic;"| Number'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="3" | Singular'
output = output .. '\n|rowspan="2"|'
output = output .. '\n!style="background:#549EA0; font-style:italic;" colspan="3" | Plural'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| Case / Gender'
output = output .. '\n!style="background:#40E0D0;"| Masculine'
output = output .. '\n!style="background:#40E0D0;"| Feminine'
output = output .. '\n!style="background:#40E0D0;"| Neuter'
output = output .. '\n!style="background:#40E0D0;"| Masculine'
output = output .. '\n!style="background:#40E0D0;"| Feminine'
output = output .. '\n!style="background:#40E0D0;"| Neuter'
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[nominative case|Nominative]]'
output = output .. conv[1]
if data.voc and data.loc then
output = output .. '\n|rowspan="7"|'
elseif data.voc or data.loc then
output = output .. '\n|rowspan="6"|'
else
output = output .. '\n|rowspan="5"|'
end
output = output .. conv[9]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[genitive case|Genitive]]'
output = output .. conv[2]
output = output .. conv[10]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[dative case|Dative]]'
output = output .. conv[3]
output = output .. conv[11]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[accusative case|Accusative]]'
output = output .. conv[4]
output = output .. conv[12]
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[ablative case|Ablative]]'
output = output .. conv[5]
output = output .. conv[13]
if data.voc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[vocative case|Vocative]]'
output = output .. conv[6]
output = output .. conv[14]
end
if data.loc then
output = output .. '\n|-'
output = output .. '\n!style="background:#40E0D0; font-style:italic;"| [[locative case|Locative]]'
output = output .. conv[7]
output = output .. conv[15]
end
output = output .. '\n|}'
return output
end
function export.make_table(data, noneut, nomf)
local output
if not data.forms.nom_sg_n and not data.forms.nom_pl_n then
if data.forms.nom_sg_f or data.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
if data.num == "pl" then output = make_table_mfn_pl(data, noneut)
elseif data.num == "sg" then output = make_table_mfn_sg(data, noneut)
else output = make_table_mfn(data, noneut) end
end
elseif 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, noneut) end
elseif not data.forms.nom_sg_f and not data.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
if data.footnotes and data.footnotes ~= "" then
output = output .. '\n' .. data.footnotes
end
return output
end
return export
-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet: