local lang = require("Module:languages").getByCode("eu")
local export = {}
-- Table-generating functions
local function make_table(data)
-- copied from ]
local function repl(param)
local forms = data.forms
if not forms then
return "—"
end
local ret = {}
for key, subform in ipairs(forms) do
table.insert(ret, require("Module:links").full_link({lang = lang, term = subform}))
end
return table.concat(ret, ", ")
end
local wikicode = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = data.info,
tall = 'yes',
palette = 'blue'
}
} .. [=[
! absolutive
| style="max-width: 20em" | {{{absv}}}
|-
! ergative
| style="max-width: 20em" | {{{erg}}}
|-
! dative
| style="max-width: 20em" | {{{dat}}}
|-
! genitive
| style="max-width: 20em" | {{{gen}}}
|-
! comitative
| style="max-width: 20em" | {{{com}}}
|-
! causative
| style="max-width: 20em" | {{{caus}}}
|-
! benefactive
| style="max-width: 20em" | {{{ben}}}
|-
! instrumental
| style="max-width: 20em" | {{{ins}}}
|-
! inessive
| style="max-width: 20em" | {{{ine}}}
|-
! locative
| style="max-width: 20em" | {{{loc}}}
|-
! allative
| style="max-width: 20em" | {{{all}}}
|-
! terminative
| style="max-width: 20em" | {{{ter}}}
|-
! directive
| style="max-width: 20em" | {{{directive}}}
|-
! destinative
| style="max-width: 20em" | {{{destinative}}}
|-
! ablative
| style="max-width: 20em" | {{{abl}}}
]=] .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
res, n = mw.ustring.gsub(wikicode, "{{{(+)}}}", repl)
return res
end
local function generate_forms_a(data, base)
data.forms = {base}
data.forms = {base .. "k"}
data.forms = {base .. "ri"}
data.forms = {base .. "re"}
data.forms = {base .. "rekin"}
data.forms = {base .. "gatik", base .. "regatik"}
data.forms = {base .. "retzat", base .. "retako"}
data.forms = {base .. "taz"}
-- inessive
if is_emphatic then
if base == 'neu' then
data.forms = {base .. "gan"}
elseif base == 'heu' then
data.forms = {base .. "regan", base .. "re baitan"}
else
data.forms = {base .. "gan", base .. "regan"}
end
else
data.forms = {base .. "gan", base .. "regan", base .. "re baitan", base .. "tan"}
end
-- locative
data.forms = {base .. "re baitako"}
if base == 'zu' or base == 'gu' then
table.insert(data.forms, 1, base .. " baitako")
end
-- allative
if is_emphatic then
if base == 'neu' then
data.forms = {base .. "regana"}
elseif base == 'heu' then
data.forms = {base .. "gana", base .. "regana",
base .. "re baitat", base .. "re baitarat"}
else
data.forms = {base .. "gana", base .. "regana"}
end
else
if base == 'zu' or base == 'gu' then
data.forms = {base .. "gana", base .. "regana",
base .. "ganat", base .. "reganat",
base .. " baitara", base .. "re baitara",
base .. " baitarat", base .. "re baitarat"}
else
data.forms = {base .. "regana", base .. "reganat",
base .. "re baitara", base .. "re baitarat"}
end
end
-- terminative
if is_emphatic then
if base == 'neu' then
data.forms = {base .. "regaino"}
elseif base == 'heu' then
data.forms = {base .. "ganaino", base .. "reganaino",
base .. "re baitaraino"}
else
data.forms = {base .. "ganaino", base .. "reganaino"}
end
else
if base == 'ni' then
data.forms = {base .. "reganaino", base .. "re baitaraino"}
elseif base == 'hi' then
data.forms = {base .. "ganaino", base .. "reganaino",
base .. "re baitaraino"}
else
data.forms = {base .. "ganaino", base .. "reganaino",
base .. " baitaraino", base .. "re baitaraino"}
end
end
-- directive and destinative
if base == 'neu' then
data.forms = {base .. "ganantz"}
data.forms = {base .. "reganako"}
else
data.forms = {base .. "ganantz", base .. "reganantz"}
data.forms = {base .. "ganako", base .. "reganako"}
end
-- ablative
if is_emphatic then
if base == 'neu' then
data.forms = {base .. "ganik", base .. "gandik"}
elseif base == 'heu' then
data.forms = {base .. "ganik", base .. "reganik",
base .. "gandik", base .. "regandik",
base .. "re baitatik", base .. "re baitarik"}
else
data.forms = {base .. "ganik", base .. "reganik",
base .. "gandik", base .. "regandik"}
end
else
if base == 'ni' then
data.forms = {base .. "reganik", base .. "regandik",
base .. "re baitatik", base .. "re baitarik"}
elseif base == 'hi' then
data.forms = {base .. "ganik", base .. "reganik",
base .. "gandik", base .. "regandik",
base .. "re baitatik", base .. "re baitarik"}
else
data.forms = {base .. "ganik", base .. "reganik",
base .. "gandik", base .. "regandik",
base .. " baitatik", base .. " baitarik",
base .. "re baitatik", base .. "re baitarik"}
end
end
end
local function generate_forms_b(data, base)
data.forms = {base .. "ek"}
data.forms = {base .. "ek"}
data.forms = {base .. "ei"}
data.forms = {base .. "en"}
data.forms = {base .. "ekin"}
data.forms = {base .. "engatik"}
data.forms = {base .. "entzat", base .. "endako"}
data.forms = {base .. "etaz"}
data.forms = {base .. "en baitako"}
if is_emphatic then
data.forms = {base .. "engan"}
else
data.forms = {base .. "engan", base .. "en baitan", base .. "etan"}
end
if is_emphatic then
data.forms = {base .. "engana"}
else
data.forms = {base .. "engana", base .. "enganat",
base .. "en baitara", base .. "en baitarat"}
end
if is_emphatic then
data.forms = {base .. "enganaino"}
else
data.forms = {base .. "enganaino", base .. "en baitaraino"}
end
data.forms = {base .. "enganantz"}
data.forms = {base .. "enganako"}
if is_emphatic then
data.forms = {base .. "enganik", base .. "engandik"}
else
data.forms = {base .. "enganik", base .. "engandik",
base .. "en baitatik", base .. "en baitarik"}
end
end
local function append_ene_forms(data)
table.insert(data.forms, "ene")
table.insert(data.forms, "enekin")
table.insert(data.forms, "enegatik")
table.insert(data.forms, "enetzat")
table.insert(data.forms, "enetako")
table.insert(data.forms, "enegan")
table.insert(data.forms, "ene baitan")
table.insert(data.forms, "ene baitako")
table.insert(data.forms, "enegana")
table.insert(data.forms, "eneganat")
table.insert(data.forms, "ene baitara")
table.insert(data.forms, "ene baitarat")
table.insert(data.forms, "eneganaino")
table.insert(data.forms, "ene baitaraino")
table.insert(data.forms, "eneganantz")
table.insert(data.forms, "eneganako")
table.insert(data.forms, "eneganik")
table.insert(data.forms, "enegandik")
table.insert(data.forms, "ene baitatik")
table.insert(data.forms, "ene baitarik")
end
function export.decl(frame)
local args = frame:getParent().args
local title = mw.title.getCurrentTitle().text
local base = nil
if title == "eu-decl-pron" then
base = "ni" -- for demonstration purposes on the template page
else
base = title
end
local data = {
forms = {},
info = "Declension of " .. require("Module:links").full_link({lang = lang, alt = base}, "term"),
}
if base == "ni" or base == "hi" or base == "zu" or base == "gu" then
generate_forms_a(data, base)
if base == "ni" then
append_ene_forms(data)
end
elseif base == "zuek" then
generate_forms_b(data, "zu")
elseif base == "neu" or base == "heu" or base == "zeu" or base == "geu" then
generate_forms_a(data, base:sub(1, 1) .. "eu")
elseif base == "zeuek" then
generate_forms_b(data, "zeu")
else
error("Template is used on invalid page")
end
return make_table(data)
end
return export