Module:siwa-headword: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
(98 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local export = {} | local export = {} | ||
local pos_functions = {} | |||
local | 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 | local lang = require("Module:languages").getByCode("siwa") | ||
local function glossary_link(entry, text) | |||
return "[[wikt:Appendix:Glossary#" .. entry .. "|" .. (text or entry) .. "]]" | |||
end | end | ||
Line 34: | Line 45: | ||
-- This is the only function that can be invoked from a template. | -- This is the only function that can be invoked from a template. | ||
function export.show(frame) | function export.show(frame) | ||
local | 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 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 = { | local data = { | ||
lang = lang, | |||
heads = {}, | |||
inflections = {}, | |||
genders = {}, | |||
pos_category = poscat, | |||
categories = {"Siwa " .. poscat} | |||
} | |||
if poscat | if pos_functions[poscat] then | ||
pos_functions[poscat](class, parent_args, data) | |||
end | end | ||
return full_headword(data) | return require("Module:headword").full_headword(data) | ||
end | end | ||
pos_functions.nouns = function(class, args, data) | |||
local params = { | |||
function | [1] = {required = true}, | ||
local | [2] = {}, | ||
[" | ["m"] = {list = true}, | ||
[" | ["head"] = {default = PAGENAME}, | ||
[" | ["decl"] = {}, | ||
[" | ["cat2"] = {}, | ||
["cat3"] = {}, | |||
["sort"] = {}, | |||
["affix"] = {list = true}, | |||
} | } | ||
local args = require("Module:parameters").process(args, params) | |||
local | data.heads = {args["head"]} | ||
data.affix = args["affix"] | |||
if | 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 | 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 | |||
if | |||
data.sort_key = args["sort"] or nil | |||
end | 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 | local args = require("Module:parameters").process(args, params) | ||
data.heads = {args["head"]} | |||
for n, kind in ipairs(mw.text.split(args[1], "/")) do | |||
for | if kind ~= "?" then | ||
if | data.inflections[n] = {nil} | ||
data.inflections[n].label = verb_key[kind] | |||
table.insert(data.categories, "Siwa " .. verb_key[kind] .. " verbs") | |||
end | end | ||
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 | if args.cat2 then table.insert(data.categories, "Siwa " .. args["cat2"]) end | ||
if | 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 | end | ||
return export | return export |
Latest revision as of 22:49, 4 July 2023
- The following documentation is located at Module:siwa-headword/doc.[edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
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