Module:siwa-headword: Difference between revisions

From Linguifex
Jump to navigation Jump to search
No edit summary
No edit summary
 
(71 intermediate revisions by the same user not shown)
Line 15: Line 15:
local SUBPAGENAME = mw.title.getCurrentTitle().subpageText
local SUBPAGENAME = mw.title.getCurrentTitle().subpageText


local legal_gender = {
local gender_key = {
["in"] = true,
["i"] = "in",
["an"] = true,
["a"] = "an",
}
}


local gender_names = {
local verb_key = {
["in"] = "inanimate",
["aditr"] = "agentive ditransitive",
["an"] = "animate",
["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 lang = require("Module:languages").getByCode("siwa")
local m_n = require("Module:siwa-noun")


local function glossary_link(entry, text)
local function glossary_link(entry, text)
Line 44: Line 54:
lang = lang,
lang = lang,
heads = {},
heads = {},
inflections = {{}},
inflections = {},
genders = {},
genders = {},
pos_category = poscat,
pos_category = poscat,
Line 63: Line 73:
["m"] = {list = true},
["m"] = {list = true},
["head"] = {default = PAGENAME},
["head"] = {default = PAGENAME},
["decl"] = {},
["cat2"] = {},
["cat3"] = {},
["sort"] = {},
["affix"] = {list = true},
}
}
local args = require("Module:parameters").process(args, params)
local args = require("Module:parameters").process(args, params)
data.heads = {args["head"]}
data.heads = {args["head"]}
data.affix = args["affix"]
table.insert(data.genders, args[1] .. "n")
table.insert(data.genders, gender_key[args[1]] or args[1])
if args[2] then table.insert(data.genders, args[2] .. "n") end
if args[2] then table.insert(data.genders, gender_key[args[2]] or args[2]) end
for _, infl in ipairs(m_n.headinfl) do
data.inflections[1] = args.m
table.insert(data.inflections[1], infl)
end
data.inflections[1].label = "marked"
data.inflections[1].label = "marked"
end
pos_functions.adjectives = function(class, args, data)
local params = {
[1] = {list = "eq"},
[2] = {list = "comp"},
[3] = {list = "sup"},
["unc"] = {type = "boolean"},
["indecl"] = {type = "boolean"},
["head"] = {},
}
local args = require("Module:parameters").process(args, params)
if args.decl then table.insert(data.categories, "Siwa " .. args.decl .. "-declension " .. data.pos_category) end
local isdet = data.pos_category == "determiners"
if args.cat2 then table.insert(data.categories, "Siwa " .. args["cat2"]) end
data.heads = {args["head"]}
if args.cat3 then table.insert(data.categories, "Siwa " .. args["cat3"]) end
table.insert(data.categories, "High Valyrian " .. data.pos_category)
data.sort_key = args["sort"] or nil
if args["unc"] or isdet then
table.insert(data.inflections, {label = "not " .. glossary_link("comparable")})
if not isdet then table.insert(data.categories, "High Valyrian uncomparable adjectives") end
elseif args["indecl"] then
table.insert(data.inflections, {label = glossary_link("indeclinable")})
table.insert(data.categories, "High Valyrian indeclinable " .. data.pos_category)
else
args[1] = require("Module:qhv-adj/head").fetch("eq")
args[2] = require("Module:qhv-adj/head").fetch("comp")
args[3] = require("Module:qhv-adj/head").fetch("sup")
args[1].label = glossary_link("equative")
args[2].label = glossary_link("comparative")
args[3].label = glossary_link("superlative")
table.insert(data.inflections, args[1])
table.insert(data.inflections, args[2])
table.insert(data.inflections, args[3])
end
end
end


pos_functions["proper nouns"] = pos_functions.nouns
pos_functions["proper nouns"] = pos_functions.nouns
pos_functions["determiners"] = pos_functions.adjectives
 
pos_functions["proper nouns"] = pos_functions.nouns


pos_functions.verbs = function(class, args, data)
pos_functions.verbs = function(class, args, data)
local params = {
local params = {
[1] = {list = "pres"},
[1] = {required = true},
[2] = {list = "subj"},
[2] = {list = "inf", required = true},
[3] = {list = "pp"},
[3] = {list = "p", required = true},
[4] = {type = "boolean"},
["head"] = {},
["head"] = {},
["cat2"] = {},
["sort"] = {},
["affix"] = {list = true},
}
}
Line 128: Line 116:
data.heads = {args["head"]}
data.heads = {args["head"]}
table.insert(data.categories, "High Valyrian " .. data.pos_category)
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[1] = require("Module:qhv-verb/head").fetch("act_ind_prs_1sg")
args[2].label = "infinitive"
args[2] = require("Module:qhv-verb/head").fetch("act_sub_prs_1sg")
args[3] = require("Module:qhv-verb/head").fetch("act_part_prf")
args[1].label = "first-person singular present indicative"
args[2].label = "first-person singular present subjunctive"
args[3].label = "perfect participle"
table.insert(data.inflections, args[1])
table.insert(data.inflections, args[2])
table.insert(data.inflections, args[2])
args[3].label = "past"
table.insert(data.inflections, args[3])
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
end


return export
return export

Latest revision as of 22:49, 4 July 2023



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