local export = {}
local pos_functions = {}
local sub = mw.ustring.sub
local find = mw.ustring.find
local match = mw.ustring.match
local gmatch = mw.ustring.gmatch
local gsub = mw.ustring.gsub
local u = mw.ustring.char
local split = mw.text.split
local gsplit = mw.text.gsplit
local PAGENAME = mw.title.getCurrentTitle().text
local NAMESPACE = mw.title.getCurrentTitle().nsText
local SUBPAGENAME = mw.title.getCurrentTitle().subpageText
local gender_key = {
["i"] = "in",
["a"] = "an",
}
local verb_key = {
["aditr"] = "agentive ditransitive",
["adit"] = "agentive ditransitive",
["ai"] = "agentive intransitive",
["asubj"] = "agentive subjective",
["at"] = "agentive transitive",
["imp"] = "impersonal",
["pass"] = "passive",
["udit"] = "unagentive ditransitive",
["ui"] = "unagentive intransitive",
["usubj"] = "unagentive subjective",
["ut"] = "unagentive transitive",
["utrans"] = "translative",
["?"] = "?",
}
local lang = require("Module:languages").getByCode("siwa")
local function glossary_link(entry, text)
return "[[wikt:Appendix:Glossary#" .. entry .. "|" .. (text or entry) .. "]]"
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
if NAMESPACE == "Template" and SUBPAGENAME ~= "doc" then return end
local parent_args = frame:getParent().args
local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
local class = frame.args[2]; if class == "" then class = nil end
local data = {
lang = lang,
heads = {},
inflections = {},
genders = {},
pos_category = poscat,
categories = {"Siwa " .. poscat}
}
if pos_functions[poscat] then
pos_functions[poscat](class, parent_args, data)
end
return require("Module:headword").full_headword(data)
end
pos_functions.nouns = function(class, args, data)
local params = {
[1] = {required = true},
[2] = {},
["m"] = {list = true},
["head"] = {default = PAGENAME},
["decl"] = {},
["cat2"] = {},
["cat3"] = {},
["sort"] = {},
["affix"] = {list = true},
}
local args = require("Module:parameters").process(args, params)
data.heads = {args["head"]}
data.affix = args["affix"]
table.insert(data.genders, gender_key[args[1]] or args[1])
if args[2] then table.insert(data.genders, gender_key[args[2]] or args[2]) end
data.inflections[1] = args.m
data.inflections[1].label = "marked"
if args.decl then table.insert(data.categories, "Siwa " .. args.decl .. "-declension " .. data.pos_category) end
if args.cat2 then table.insert(data.categories, "Siwa " .. args["cat2"]) end
if args.cat3 then table.insert(data.categories, "Siwa " .. args["cat3"]) end
data.sort_key = args["sort"] or nil
end
pos_functions["proper nouns"] = pos_functions.nouns
pos_functions["proper nouns"] = pos_functions.nouns
pos_functions.verbs = function(class, args, data)
local params = {
[1] = {required = true},
[2] = {list = "inf", required = true},
[3] = {list = "p", required = true},
[4] = {type = "boolean"},
["head"] = {},
["cat2"] = {},
["sort"] = {},
["affix"] = {list = true},
}
local args = require("Module:parameters").process(args, params)
data.heads = {args["head"]}
for n, kind in ipairs(mw.text.split(args[1], "/")) do
if kind ~= "?" then
data.inflections[n] = {nil}
data.inflections[n].label = verb_key[kind]
table.insert(data.categories, "Siwa " .. verb_key[kind] .. " verbs")
end
end
args[2].label = "infinitive"
table.insert(data.inflections, args[2])
args[3].label = "past"
table.insert(data.inflections, args[3])
if args[4] then table.insert(data.categories, "Siwa irregular verbs") end
if args.cat2 then table.insert(data.categories, "Siwa " .. args["cat2"]) end
if args[1] == "?" or args[2] == "?" or args[3] == "?" then table.insert(data.categories, "Contionary stubs") end
data.sort_key = args["sort"] or nil
data.affix = args["affix"]
end
return export