Module:se-pronouns
Appearance
- The following documentation is located at Module:se-pronouns/documentation. [edit] Categories were auto-generated by Module:module categorization. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
local m_utilities = require("Module:utilities")
local m_links = require("Module:links")
local lang = require("Module:languages").getByCode("se")
local export = {}
-- Functions that do the actual inflecting by creating the forms of a basic term.
local inflections = {}
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local infl_type = frame.args[1] or error("Inflection type has not been specified. Please pass parameter 1 to the module invocation.")
local args = frame:getParent().args
if not inflections[infl_type] then
error("Unknown inflection type '" .. infl_type .. "'.")
end
local data = {forms = {}, title = nil, categories = {}}
-- Generate the forms
inflections[infl_type](args, data)
-- Postprocess
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
-- Inflection functions
inflections["ppron"] = function(args, data)
data.title = "irregular"
data.single = true
local nom = args[1]; if nom == "" then nom = nil end
if not nom and mw.title.getCurrentTitle().nsText == "Template" then
nom = "mun"
end
local first = mw.ustring.sub(nom, 1, 1)
if nom == "mun" or nom == "don" or nom == "son" then
data.forms["nom"] = {first .. "on"}
data.forms["acc"] = {first .. "ū"}
data.forms["gen"] = {first .. "ū"}
data.forms["ill"] = {first .. "u" .. (first == "m" and "n" or "t") .. "nje"}
data.forms["loc"] = {first .. "ūs"}
data.forms["com"] = {first .. "uinna"}
data.forms["ess"] = {first .. "ūnin"}
if nom == "mun" then
table.insert(data.forms["nom"], 1, "mun")
end
elseif nom == "moai" or nom == "doai" or nom == "soai" then
data.forms["nom"] = {first .. "oai"}
data.forms["acc"] = {first .. "u" .. (first == "m" and "nˈ" or "d") .. "no"}
data.forms["gen"] = {first .. "u" .. (first == "m" and "nˈ" or "d") .. "no"}
data.forms["ill"] = {first .. "u" .. (first == "m" and "nˈ" or "d") .. "nuide"}
data.forms["loc"] = {first .. "u" .. (first == "m" and "nˈ" or "d") .. "nos"}
data.forms["com"] = {first .. "u" .. (first == "m" and "nˈ" or "d") .. "nuin"}
data.forms["ess"] = {first .. "u" .. (first == "m" and "nˈ" or "d") .. "non"}
elseif nom == "mii" or nom == "dii" or nom == "sii" then
data.forms["nom"] = {first .. "ii"}
data.forms["acc"] = {first .. "īn"}
data.forms["gen"] = {first .. "īn"}
data.forms["ill"] = {first .. "idjiide"}
data.forms["loc"] = {first .. "īs"}
data.forms["com"] = {first .. "īnguin"}
data.forms["ess"] = {first .. "īnin"}
else
error("Invalid pronoun.")
end
end
function postprocess(args, data)
-- Check if the lemma form matches the page name
if (data.forms["nom_sg"] and (lang:makeEntryName(data.forms["nom_sg"][1])) ~= mw.title.getCurrentTitle().text) or (data.forms["nom"] and (lang:makeEntryName(data.forms["nom"][1])) ~= 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 show_form(form)
if not form then
return "—"
elseif type(form) ~= "table" then
error("a non-table value was given in the list of inflected forms.")
end
local ret = {}
for key, subform in ipairs(form) do
table.insert(ret, m_links.full_link({lang = lang, term = subform}))
end
return table.concat(ret, ", ")
end
local function repl(param)
if param == "lemma" then
return m_links.full_link({lang = lang, alt = mw.title.getCurrentTitle().text}, "term")
elseif param == "info" then
return data.title and " (" .. data.title .. ")" or ""
else
return show_form(data.forms[param])
end
end
local wikicode
if data.single then
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="2" | Inflection of {{{lemma}}}{{{info}}}
|- class="vsShow" style="background: #F2F2FF;"
! style="width: 10em; background: #E2F6E2;" | Nominative
| style="width: 15em;" | {{{nom}}}
|- class="vsShow" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Genitive
| {{{gen}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="width: 10em; background: #E2F6E2;" | Nominative
| style="width: 15em;" | {{{nom}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Genitive
| {{{gen}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Accusative
| {{{acc}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Illative
| {{{ill}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Locative
| {{{loc}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Comitative
| {{{com}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Essive
| {{{ess}}}
|}]=]
else
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" | Inflection of {{{lemma}}}{{{info}}}
|- class="vsShow" style="background: #F2F2FF;"
! style="width: 10em; background: #E2F6E2;" | Nominative
| style="width: 15em;" colspan="2" | {{{nom_sg}}}
|- class="vsShow" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Genitive
| colspan="2" | {{{gen_sg}}}
|- class="vsHide"
! style="width: 10em; background:#c0e4c0" |
! style="width: 15em; background:#c0e4c0" | singular
! style="width: 15em; background:#c0e4c0" | plural
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Nominative
| {{{nom_sg}}}
| {{{nom_pl}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Genitive
| {{{gen_sg}}}
| {{{gen_pl}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Accusative
| {{{acc_sg}}}
| {{{acc_pl}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Illative
| {{{ill_sg}}}
| {{{ill_pl}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Locative
| {{{loc_sg}}}
| {{{loc_pl}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Comitative
| {{{com_sg}}}
| {{{com_pl}}}
|- class="vsHide" style="background: #F2F2FF;"
! style="background: #E2F6E2;" | Essive
| colspan="2" | {{{ess}}}
|}]=]
end
return mw.ustring.gsub(wikicode, "{{{([a-z_]+)}}}", repl)
end
return export