local export = {}
local common = require("Module:akk-common")
local links = require("Module:links")
local lang = require("Module:languages").getByCode("akk")
local NOTE = "This table gives Old Babylonian inflection. For conjugation in other dialects, see ]."
local function column(cun, trans, i)
local number_gender
if cun.number and cun.number == "m" then
number_gender = '\n! style="background-color:#cdcdcd" rowspan="2" |' .. cun.number .. '\n! style="background-color:#cdcdcd; width: 1em" rowspan="1" |' .. cun.number
elseif cun.number then
number_gender = '\n! style="background-color:#cdcdcd; width: 1em" rowspan="1" |' .. cun.number
else
number_gender = '\n! style="background-color:#cdcdcd" rowspan="1" colspan="2" |' .. cun.number
end
return '\n|- class="vsHide"' .. number_gender ..
'\n| style="background-color:#fdfdfd;" |' .. trans.dur ..
'\n| style="background-color:#fdfdfd;" |' .. trans.perf ..
'\n| style="background-color:#fdfdfd;" |' .. trans.pret ..
'\n| style="background-color:#fdfdfd;" |' .. trans.imp
end
local function top(stem, cun, trans, title)
return
'{| class="inflection-table vsSwitcher autocollapsed" data-toggle-category="conjugation" style="background:#fdfdfd; text-align:center; border: 0.5px solid #cdcdcd;"' ..
'\n|- style="background: #dedede"' ..
'\n! class="vsToggleElement" style="text-align: center; width:20em" colspan="7" | ' .. title .. '\n|-' .. stem .. '\n|- class="vsHide"' ..
'\n! style="background-color:#cdcdcd; min-width: 5em" rowspan="1" colspan="2" | Infinitive' ..
'\n| style="background-color:#fdfdfd; font-size: 100%;" |' .. trans.inf .. '\n|- class="vsHide"' .. '\n' ..
'\n! style="background-color:#cdcdcd; min-width: 5em" rowspan="1" colspan="2" | Participle' ..
'\n| style="background-color:#fdfdfd; font-size: 100%;" |' .. trans.part .. '\n|- class="vsHide"' ..
'\n! style="background-color:#cdcdcd; min-width: 5em" rowspan="1" colspan="2" | Adjective' ..
'\n| style="background-color:#fdfdfd; font-size: 100%;" |' .. trans.adj ..
'\n|- class="vsHide"' ..
'\n! style="background-color:#cdcdcd; min-width: 3em" colspan="2" |Active' ..
'\n! style="background-color:#cdcdcd; min-width: 4.5em" |Durative' ..
'\n! style="background-color:#cdcdcd; min-width: 4.5em" |Perfect' ..
'\n! style="background-color:#cdcdcd; min-width: 4.5em" |Preterite' ..
'\n! style="background-color:#cdcdcd; min-width: 4.5em" |Imperative'
end
local function bottom()
return '\n|- class="vsHide"' .. '\n| style="font-size:85%; text-align:left" colspan="7" |' .. NOTE .. '\n|}'
end
function export.render_cuneiform(stem, cun, trans, title)
local template = top(stem, cun, trans, title or "Cuneiform")
for i, _ in ipairs(cun.number) do
template = template .. column(cun, trans, i)
end
template = template .. bottom()
return template
end
local function map_column(column, func)
local output = {}
for i, word in ipairs(column) do output = func(word) end
return output
end
local function map_table(table, func)
local output = {
number = table.number,
dur = map_column(table.dur, func),
pret = map_column(table.pret, func),
perf = map_column(table.perf, func),
imp = map_column(table.imp, func),
inf = func(table.inf),
part = func(table.part),
adj = func(table.adj)
}
return output
end
export.map_table = map_table
function export.render_transcription(stem, trans)
local dummy = {}
local empty = {"", "", "", "", "", "", "", ""}
dummy.inf = ""
dummy.part = ""
dummy.adj = ""
dummy.dur = empty
dummy.pret = empty
dummy.perf = empty
dummy.imp = empty
return export.render_cuneiform(stem, trans, dummy, "Normalization")
end
function export.render(stem, trans, debug)
local italicize = function(word) return word end
local normalisations = map_table(trans, italicize)
local cun = trans
cun = map_table(cun, function(term)
if cun == "-" then return "" end
return links.full_link({lang = lang, term = term})
end)
if debug then
return export.render_transcription(stem, normalisations)
else
return export.render_cuneiform(stem, cun, normalisations, "Conjugation")
end
end
return export