local lang = require("Module:languages").getByCode("se")
local export = {}
local possessives = {
= {even = "n", odd = "an"},
= {even = "t", odd = "at"},
= {even = "s", odd = "is"},
= {even = "me", odd = "eamẹ"},
= {even = "de", odd = "eattẹ"},
= {even = "ska", odd = "easkkạ"},
= {even = "met", odd = "eamẹt"},
= {even = "det", odd = "eattẹt"},
= {even = "set", odd = "easẹt"},
}
-- Inflection functions
function export.even(frame)
local fparams = {
= {required = true},
= {type = "boolean"},
}
local fargs = require("Module:parameters").process(frame.args, fparams)
local params = {
= {required = true, default = "{{{1}}}"},
= fargs == "adjectives" and {list = true} or nil,
= fargs == "adjectives" and {type = "boolean"} or nil,
= fargs == "nouns" and {} or nil,
= {type = "boolean"},
= fargs == "nouns" and {} or nil,
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local stem = require("Module:se-common").Stem(args, not fargs)
local data = {
has_attr = fargs == "adjectives",
has_poss = fargs == "nouns" and not args,
forms = {},
info = "even " .. require("Module:links").full_link({lang = lang, alt = stem.uvowel}, "term") .. "-stem",
categories = {},
}
if stem.gradation then
data.info = data.info .. ", " ..
require("Module:links").full_link({lang = lang, alt = stem.gradation.strong.scons}, "term") .. "-" ..
require("Module:links").full_link({lang = lang, alt = stem.gradation.weak.scons}, "term") .. " gradation"
else
data.info = data.info .. ", no gradation"
end
if args and not stem.uvowel == "i" then
error("The parameter \"e=1\" must be used with stems ending in -i.")
elseif not mw.ustring.find(stem.uvowel, "^$") and mw.title.getCurrentTitle().nsText ~= "Template" then
error("The final vowel(s) of the stem must be one of a, á, e, i, o, u.")
end
if fargs == "nouns" and args and args ~= "-" then
local poss = possessives:gsub("_", "|")]
data.forms = {stem:make_form{grade = "strong", ending = poss.even, variant = mw.ustring.find(args, "3") and "normal" or "e"}}
data.forms = {stem:make_form{grade = mw.ustring.find(args, "1") and "strong" or "weak", ending = poss.even, variant = mw.ustring.find(args, "3") and "normal" or "e"}}
data.forms = {stem:make_form{grade = mw.ustring.find(args, "1") and "strong" or "weak", ending = poss.even, variant = mw.ustring.find(args, "3") and "normal" or "e"}}
data.forms = {stem:make_form{grade = "strong", ending = "s" .. poss.odd, variant = "e"}}
data.forms = {stem:make_form{grade = "weak", ending = "st" .. poss.odd}}
data.forms = {stem:make_form{grade = "weak", ending = "in" .. poss.odd, variant = "j"}}
data.forms = nil
data.forms = {stem:make_form{grade = "weak", ending = "id" .. poss.odd, variant = "j"}}
data.forms = {stem:make_form{grade = "weak", ending = "id" .. poss.odd, variant = "j"}}
data.forms = {stem:make_form{grade = "weak", ending = "idasa" .. poss.even, variant = "j"}}
data.forms = {stem:make_form{grade = "weak", ending = "in" .. poss.odd, variant = "j"}}
data.forms = {stem:make_form{grade = "weak", ending = "id" .. poss.odd .. "guin", variant = "j"}}
data.forms = {stem:make_form{grade = "strong", ending = "n" .. poss.odd}}
else
table.insert(data.categories, lang:getCanonicalName() .. " even " .. fargs)
table.insert(data.categories, lang:getCanonicalName() .. " even " .. (stem.uvowel or "") .. "-stem " .. fargs)
if not stem.gradation then
table.insert(data.categories, lang:getCanonicalName() .. " non-gradating even " .. fargs)
end
data.forms = {stem:make_form{grade = "strong", variant = args and "none" or args and "short" or nil}}
data.forms = {stem:make_form{grade = "weak"}}
data.forms = {stem:make_form{grade = "weak"}, fargs == "nouns" and stem:make_form{grade = "weak", variant = "short"} or nil}
data.forms = {stem:make_form{grade = "strong", ending = "i", variant = "e_contr_j"}}
data.forms = {stem:make_form{grade = "weak", ending = "s"}}
data.forms = {stem:make_form{grade = "weak", ending = "in", variant = "j"}}
data.forms = {stem:make_form{grade = "weak", ending = "t"}}
data.forms = {stem:make_form{grade = "weak", ending = "id", variant = "j"}}
data.forms = {stem:make_form{grade = "weak", ending = "id", variant = "j"}}
data.forms = {stem:make_form{grade = "weak", ending = "ide", variant = "j"}}
data.forms = {stem:make_form{grade = "weak", ending = "in", variant = "j"}}
data.forms = {stem:make_form{grade = "weak", ending = "iguin", variant = "j"}}
data.forms = {stem:make_form{grade = "strong", ending = "n"}}
if fargs == "nouns" then
data.forms = {stem:make_form{grade = "strong", ending = "n", variant = "e"}}
data.forms = {stem:make_form{grade = "strong", ending = "t", variant = "e"}}
data.forms = {stem:make_form{grade = "strong", ending = "s"}}
data.forms = {stem:make_form{grade = "strong", ending = "me", variant = "e"}}
data.forms = {stem:make_form{grade = "strong", ending = "de", variant = "e"}}
data.forms = {stem:make_form{grade = "strong", ending = "ska"}}
data.forms = {stem:make_form{grade = "strong", ending = "met", variant = "e"}}
data.forms = {stem:make_form{grade = "strong", ending = "det", variant = "e"}}
data.forms = {stem:make_form{grade = "strong", ending = "set"}}
end
if data.forms == data.forms then
data.forms = nil
end
end
postprocess(args, data)
return make_table(data)
end
function export.odd(frame)
local fparams = {
= {required = true},
= {type = "boolean"},
}
local fargs = require("Module:parameters").process(frame.args, fparams)
local params = {
= {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}" or ""},
= fargs == "adjectives" and {list = true} or nil,
= {},
= fargs == "nouns" and {} or nil,
= not fargs and {type = "boolean"} or nil,
= not fargs and {type = "boolean"} or nil,
= fargs == "nouns" and {} or nil,
= not fargs and {type = "boolean"} or nil,
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local strong = require("Module:se-common").Stem(args, args and "Q31" or not fargs, args)
local weak = require("Module:se-common").Stem(args, args and "Q31" or not fargs, args)
local variant = nil
if args and args ~= "-" then
if args then
require("Module:debug").track("se-nominals/attr")
else
require("Module:debug").track("se-nominals/no attr")
end
end
local data = {
has_attr = fargs == "adjectives",
has_poss = fargs == "nouns" and not args,
forms = {},
info = "odd",
categories = {},
}
if strong.gradation then
if not args then
variant = "e"
end
if not args and mw.ustring.find(weak.ucons, "^$") then
weak.ucons = ""
end
data.info = data.info .. ", " ..
require("Module:links").full_link({lang = lang, alt = strong.gradation.strong.scons}, "term") .. "-" ..
require("Module:links").full_link({lang = lang, alt = strong.gradation.weak.scons}, "term") .. " gradation"
else
data.info = data.info .. ", no gradation"
end
if strong.ucons == "" and mw.title.getCurrentTitle().nsText ~= "Template" then
error("The strong-grade stem must end in a consonant.")
end
if fargs == "nouns" and args and args ~= "-" then
local poss = possessives:gsub("_", "|")]
data.forms = {strong:make_form{grade = "strong", ending = poss.odd, variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = poss.odd, variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = poss.odd, variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "asa" .. poss.even, variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "istt" .. (mw.ustring.find(args, "3") and "i" or "á") .. poss.even, variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iinn" .. (mw.ustring.find(args, "3") and "i" or "á") .. poss.even, variant = variant}}
data.forms = nil
data.forms = {strong:make_form{grade = "strong", ending = "iidd" .. (mw.ustring.find(args, "3") and "i" or "á") .. poss.even, variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iidd" .. (mw.ustring.find(args, "3") and "i" or "á") .. poss.even, variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iiddás" .. poss.odd, variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iinn" .. (mw.ustring.find(args, "3") and "i" or "á") .. poss.even, variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iidd" .. (mw.ustring.find(args, "3") and "i" or "á") .. poss.even .. "guin", variant = variant}}
data.forms = {weak:make_form{grade = "weak", ending = (weak.ucons == "" and "" or "i") .. "n" .. (weak.ucons == "" and poss.odd or "i" .. poss.even)}}
else
table.insert(data.categories, lang:getCanonicalName() .. " odd " .. fargs)
if strong.gradation then
table.insert(data.categories, lang:getCanonicalName() .. " gradating odd " .. fargs)
else
table.insert(data.categories, lang:getCanonicalName() .. " non-gradating odd " .. fargs)
end
data.forms = {weak:make_form{grade = "weak"}}
data.forms = {strong:make_form{grade = "strong", ending = "a", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "a", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "ii", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "is", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iin", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "at", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iid", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iid", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iidda", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iin", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "iiguin", variant = variant}}
data.forms = {weak:make_form{grade = "weak", ending = (weak.ucons == "" and "" or "i") .. "n"}}
if fargs == "nouns" then
data.forms = {strong:make_form{grade = "strong", ending = "an", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "at", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "is", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "eamẹ", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "eattẹ", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "easkkạ", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "eamẹt", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "eattẹt", variant = variant}}
data.forms = {strong:make_form{grade = "strong", ending = "easẹt", variant = variant}}
end
end
postprocess(args, data)
return make_table(data)
end
function export.contr(frame)
local fparams = {
= {required = true},
= {type = "boolean"},
}
local fargs = require("Module:parameters").process(frame.args, fparams)
local params = {
= {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}" or ""},
= fargs == "adjectives" and {list = true} or nil,
= fargs == "nouns" and {} or nil,
= fargs == "nouns" and {} or nil,
= not fargs and {type = "boolean"} or nil,
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local strong = require("Module:se-common").Stem(args, args and "Q31" or not fargs, args)
local weak = require("Module:se-common").Stem(args, args and "Q31" or not fargs, args)
strong.ucons = "" -- final consonant is lost in the strong grade
local data = {
has_attr = fargs == "adjectives",
has_poss = fargs == "nouns" and not args,
forms = {},
info = "contracted " .. require("Module:links").full_link({lang = lang, alt = strong.uvowel}, "term") .. "-stem",
categories = {},
}
if strong.gradation then
data.info = data.info .. ", " ..
require("Module:links").full_link({lang = lang, alt = strong.gradation.strong.scons}, "term") .. "-" ..
require("Module:links").full_link({lang = lang, alt = strong.gradation.weak.scons}, "term") .. " gradation"
else
data.info = data.info .. ", no gradation"
end
if not mw.ustring.find(strong.uvowel, "^$") and mw.title.getCurrentTitle().nsText ~= "Template" then
error("The final vowel(s) of the stem must be one of a, á, i, o, u.")
end
if fargs == "nouns" and args and args ~= "-" then
local poss = possessives:gsub("_", "|")]
data.forms = {strong:make_form{grade = "strong", ending = poss.even, variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = poss.even, variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = poss.even, variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "s" .. poss.odd, variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "st" .. poss.odd, variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "in" .. poss.odd, variant = "contr_noun_j"}}
data.forms = nil
data.forms = {strong:make_form{grade = "strong", ending = "id" .. poss.odd, variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "id" .. poss.odd, variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "idasa" .. poss.even, variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "in" .. poss.odd, variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "id" .. poss.odd .. "guin", variant = "contr_noun_j"}}
data.forms = {weak:make_form{grade = "weak", ending = (weak.ucons == "" and "" or "i") .. "n" .. (weak.ucons == "" and poss.odd or "i" .. poss.even)}}
else
table.insert(data.categories, lang:getCanonicalName() .. " contracted " .. fargs)
table.insert(data.categories, lang:getCanonicalName() .. " contracted " .. (strong.uvowel or "") .. "-stem " .. fargs)
data.forms = {weak:make_form{grade = "weak"}}
data.forms = {strong:make_form{grade = "strong", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "i", variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "s", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "in", variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "t", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "id", variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "id", variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "ide", variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "in", variant = "contr_noun_j"}}
data.forms = {strong:make_form{grade = "strong", ending = "iguin", variant = "contr_noun_j"}}
data.forms = {weak:make_form{grade = "weak", ending = (weak.ucons == "" and "" or "i") .. "n"}}
if fargs == "nouns" then
data.forms = {strong:make_form{grade = "strong", ending = "n", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "t", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "s", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "me", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "de", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "ska", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "met", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "det", variant = "contr_noun"}}
data.forms = {strong:make_form{grade = "strong", ending = "set", variant = "contr_noun"}}
end
end
postprocess(args, data)
return make_table(data)
end
function export.even_comp(frame)
local params = {
= {required = true, default = "{{{1}}}"},
= {list = true},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {
has_attr = true,
forms = {},
info = "",
categories = {},
}
data.info = "even " .. require("Module:links").full_link({lang = lang, alt = "o"}, "term") .. "-stem"
data.info = data.info .. require("Module:links").full_link({lang = lang, alt = "bb"}, "term") .. "-" .. require("Module:links").full_link({lang = lang, alt = "pp"}, "term") .. " gradation"
table.insert(data.categories, lang:getCanonicalName() .. " even adjectives")
table.insert(data.categories, lang:getCanonicalName() .. " even o-stem adjectives")
data.forms = {args .. "it", args .. "et"}
data.forms = {args .. "eappọ"}
data.forms = {args .. "eappọ"}
data.forms = {args .. "ēbbui"}
data.forms = {args .. "eappọs"}
data.forms = {args .. "eappuin"}
data.forms = {args .. "eappọt"}
data.forms = {args .. "eappuid"}
data.forms = {args .. "eappuid"}
data.forms = {args .. "eappuide"}
data.forms = {args .. "eappuin"}
data.forms = {args .. "eappuiguin"}
data.forms = {args .. "eabbọn"}
postprocess(args, data)
return make_table(data)
end
function export.odd_comp(frame)
local params = {
= {required = true, default = "{{{1}}}"},
= {list = true},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {
has_attr = true,
forms = {},
info = "",
categories = {},
}
data.info = "odd " .. require("Module:links").full_link({lang = lang, alt = "u"}, "term") .. "-stem, no gradation"
table.insert(data.categories, lang:getCanonicalName() .. " odd adjectives")
table.insert(data.categories, lang:getCanonicalName() .. " non-gradating odd adjectives")
data.forms = {args .. "t"}
data.forms = {args .. "bu"}
data.forms = {args .. "bu"}
data.forms = {args .. "bui"}
data.forms = {args .. "bus"}
data.forms = {args .. "buin"}
data.forms = {args .. "but"}
data.forms = {args .. "buid"}
data.forms = {args .. "buid"}
data.forms = {args .. "buidda"}
data.forms = {args .. "buin"}
data.forms = {args .. "buiguin"}
data.forms = {args .. "bun"}
postprocess(args, data)
return make_table(data)
end
function export.dem(frame)
local params = {
= {required = true, default = "dat"},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {
forms = {},
info = "",
categories = {},
}
data.info = "pronominal inflection"
local stem
if args == "gii" then
stem = "gea"
elseif args == "mii" then
stem = "ma"
elseif mw.ustring.sub(args, -1) == "t" then
stem = mw.ustring.sub(args, 1, -2)
else
error("Invalid pronoun.")
end
data.forms = {args}
data.forms = {stem .. "n"}
data.forms = {stem .. "n"}
data.forms = {stem .. "sa"}
data.forms = {stem .. "s"}
data.forms = {stem .. "inna"}
data.forms = {stem .. "t"}
data.forms = {stem .. "id"}
data.forms = {stem .. "id"}
data.forms = {stem .. "idda"}
data.forms = {stem .. "in"}
data.forms = {stem .. "iguin"}
data.forms = {stem .. "nin"}
if args == "mii" then
table.insert(data.forms, "máid")
end
postprocess(args, data)
return make_table(data)
end
export = function(frame)
local params = {
= {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {
has_poss = true,
forms = {},
info = "irregular, suppletive",
categories = {},
}
if args then
local poss = possessives:gsub("_", "|")]
data.forms = {"ieža" .. poss.even, mw.ustring.find(args, "1") and "iehča" .. poss.even or nil}
data.forms = {"ieža" .. poss.even, mw.ustring.find(args, "1") and "iehča" .. poss.even or nil}
data.forms = {"alcces" .. poss.odd, "alcce" .. poss.even}
data.forms = {"aldd" .. (mw.ustring.find(args, "3") and "i" or "á") .. poss.even, not mw.ustring.find(args, "sg") and "alddiin" .. poss.odd or nil}
data.forms = {"iežain" .. poss.odd}
data.forms = {"iehčan" .. poss.odd}
else
data.forms = {"ieš"}
data.forms = {"ieža"}
data.forms = {"iežan"}
data.forms = {"iežat"}
data.forms = {"iežas"}
data.forms = {"iežame"}
data.forms = {"iežade"}
data.forms = {"iežaska"}
data.forms = {"iežamet"}
data.forms = {"iežadet"}
data.forms = {"iežaset"}
end
postprocess(args, data)
return make_table(data)
end
function postprocess(args, data)
if args then
data.has_poss = false
end
data.n = args
if args == "p" then
table.insert(data.categories, lang:getCanonicalName() .. " pluralia tantum")
elseif args == "s" then
table.insert(data.categories, lang:getCanonicalName() .. " uncountable nouns")
elseif args then
error("args= must be \"s\" or \"p\".")
end
for key, form in pairs(data.forms) do
-- Do not show singular or plural forms for nominals that don't have them
if (args == "p" and key:find("|s$")) or (args == "s" and key:find("|p$")) then
form = nil
end
data.forms = form
end
if data.has_attr then
if not args then
data.forms = mw.clone(data.forms)
elseif args ~= "-" then
data.forms = args
end
end
data.lemma = (data.forms or data.forms)
-- Check if the lemma form matches the page name
if (lang:makeEntryName(data.lemma)) ~= mw.title.getCurrentTitle().text then
table.insert(data.categories, lang:getCanonicalName() .. " entries with inflection not matching pagename")
end
end
-- Make the table
function make_table(data)
local function repl(param)
local accel = true
local no_store = false
if param == "info" then
return mw.getContentLanguage():ucfirst(data.info or "")
elseif string.sub(param, 1, 1) == "!" then
no_store = true
param = string.sub(param, 2)
elseif string.sub(param, 1, 1) == "#" then
accel = false
param = string.sub(param, 2)
end
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, accel = accel and {form = param, no_store = no_store} or nil}))
end
return table.concat(ret, "<br/>")
end
local wikicode = {}
table.insert(wikicode, [=[
{| class="inflection-table vsSwitcher" data-toggle-category="inflection" style="border:solid 1px #CCCCFF; text-align: left;" cellspacing="1" cellpadding="2"
|- style="background: #E2F6E2; text-align: left;"
! class="vsToggleElement" colspan="3" | {{{info}}}]=])
if data.has_attr then
table.insert(wikicode, [=[
|- class="vsShow" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Attributive
| colspan="2" | {{{!attr}}}]=])
end
table.insert(wikicode, [=[
|- class="vsShow" style="background: #F2F2FF;"
! style="width: 8em; background: #E2F6E2;" | Nominative
| style="width: 15em;" colspan="2" | {{{!nom|]=] .. (data.n or "s") .. [=[}}}
|- class="vsShow" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Genitive
| colspan="2" | {{{!gen|]=] .. (data.n or "s") .. =])
if data.has_attr then
table.insert(wikicode, [=[
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Attributive
| colspan="2" | {{{attr}}}
]=])
end
table.insert(wikicode, [=[
|- class="vsHide"
! style="width: 8em; background: #C0E4C0;" |
! style="width: 12em; background: #C0E4C0;" | Singular
! style="width: 12em; background: #C0E4C0;" | Plural
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Nominative
| data-accel-col="1" | {{{nom|s}}}
| data-accel-col="2" | {{{nom|p}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Accusative
| data-accel-col="1" | {{{acc|s}}}
| data-accel-col="2" | {{{acc|p}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Genitive
| data-accel-col="1" | {{{gen|s}}}
| data-accel-col="2" | {{{gen|p}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Illative
| data-accel-col="1" | {{{ill|s}}}
| data-accel-col="2" | {{{ill|p}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Locative
| data-accel-col="1" | {{{loc|s}}}
| data-accel-col="2" | {{{loc|p}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Comitative
| data-accel-col="1" | {{{com|s}}}
| data-accel-col="2" | {{{com|p}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Essive
| colspan="2" | {{{ess}}}]=])
-- Possessive forms
if data.has_poss then
table.insert(wikicode, [=[
|- class="vsHide"
| colspan="3" style="padding: 0;" |
{| class="inflection-table vsSwitcher" style="text-align: left; width: 100%;" cellspacing="1" cellpadding="2"
|- style="background: #E2F6E2; text-align: left;"
! class="vsToggleElement" colspan="4" | Possessive forms
|- class="vsHide"
! style="width: 8em; background: #C0E4C0;" |
! style="width: 12em; background: #C0E4C0;" | Singular
! style="width: 12em; background: #C0E4C0;" | Dual
! style="width: 12em; background: #C0E4C0;" | Plural
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | 1st person
| {{{1|s|poss}}}
| {{{1|d|poss}}}
| {{{1|p|poss}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | 2nd person
| {{{2|s|poss}}}
| {{{2|d|poss}}}
| {{{2|p|poss}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | 3rd person
| {{{3|s|poss}}}
| {{{3|d|poss}}}
| {{{3|p|poss}}}
|}]=])
end
table.insert(wikicode, "\n|}")
return mw.ustring.gsub(table.concat(wikicode), "{{{(?+)}}}", repl) .. require("Module:utilities").format_categories(data.categories, lang)
end
return export