Module:fy-headword

Ut Wikiwurdboek
De neikommende dokumintaasje stiet op Module:fy-headword/dokumintaasje. [bewurkje]

Wurdt noch oanpast.


local export = {}
local pos_functions = {}

local lang = require("Module:languages").getByCode("fy")

-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
	PAGENAME = mw.title.getCurrentTitle().text
	
	-- The part of speech. This is also the name of the category that
	-- entries go in. However, the two are separate (the "cat" parameter)
	-- because you sometimes want something to behave as an adjective without
	-- putting it in the adjectives category.
	local poscode = frame.args[1] or error("Wurdsoarte is net opjûn. Jou a.j.w. parameter 1 by it oanroppen fan 'e module.")
	
	local params = {
		["head"] = {list = true, default = ""},
		-- Parameters fan Berjocht:-fy- - PiefPafPier
		["tref"] = {alias_of = "head"},
		["leb"] = {list = true},
		["-"] = {},
	}
	
	if pos_functions[poscode] then
		for key, val in pairs(pos_functions[poscode].params) do
			params[key] = val
		end
	end
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local lemmas = mw.loadData("Module:headword/data").lemmas
	local nonlemmas = mw.loadData("Module:headword/data").nonlemmas
	local poscat = lemmas[poscode] or nonlemmas[poscode] or error("De wurdsoartkoade \"" .. poscode .. "\" is net jildich.")
	
	local data = {lang = lang, pos_category = poscat, categories = {}, heads = args["head"], genders = {}, inflections = {}, tracking_categories = {}}
	
	if pos_functions[poscode] then
		pos_functions[poscode].func(args, data)
	end
	
	return require("Module:headword").full_headword(data) ..
		require("Module:utilities").format_categories(data.tracking_categories, lang, nil)
end

-- Display additional inflection information for an adjective
pos_functions["adjek"] = {
	params = {
		[1] = {},
		[2] = {list = "comp"},
		[3] = {list = "sup"},
		[4] = {},
		},
	func = function(args, data)
		local mode = args[2][1]
		
		if mode == "inv" then
			table.insert(data.inflections, {label = "[[Wikiwurdboek:Glossarium#net bûchber|net bûchber]]"})
			table.insert(data.categories, "Net-bûchbere eigenskipswurden yn it Frysk")
			args[2][1] = args[3][1]
			args[3][1] = args[4]
		elseif mode == "pred" then
			table.insert(data.inflections, {label = "allinne [[predikatyf]] brûkt"})
			table.insert(data.categories, "Allinne-predikative eigenskipswurden yn it Frysk")
			args[2][1] = args[3][1]
			args[3][1] = args[4]
		end
		
		local comp_mode = args[2][1]
		
		if comp_mode == "-" then
			table.insert(data.inflections, {label = "gjin [[Wikiwurdboek:Glossarium#graadbûging|graadbûging]]"})
		else
			-- Gather parameters
			local comparatives = args[2]
			comparatives.label = "[[Wikiwurdboek:Glossarium#meartrime|meartrime]]"
			
			local superlatives = args[3]
			superlatives.label = "[[Wikiwurdboek:Glossarium#measttrime|measttrime]]"
			
			-- Generate forms if none were given
			if #comparatives == 0 then
				if mode == "inv" or mode == "pred" then
					table.insert(comparatives, "peri")
				else
					table.insert(comparatives, require("Module:fy-adjectives").make_comparative(PAGENAME))
				end
			end
			
			if #superlatives == 0 then
				if mode == "inv" or mode == "pred" then
					table.insert(superlatives, "peri")
				else
					-- Add preferred periphrastic superlative, if necessary
					if
						-- PAGENAME:find("[iï]de$") or PAGENAME:find("[^eio]e$") or
						-- PAGENAME:find("s$") or PAGENAME:find("sch$") or PAGENAME:find("x$") or
						-- PAGENAME:find("sd$") or PAGENAME:find("st$") or PAGENAME:find("sk$") then
						-- ? - PiefPafPier
						PAGENAME:find("[iï]de$") or PAGENAME:find("[^eio]e$") or PAGENAME:find("s[dtk]?$") then
						table.insert(superlatives, "peri")
					end
					
					table.insert(superlatives, require("Module:fy-adjectives").make_superlative(PAGENAME))
				end
			end
			
			-- Replace "peri" with phrase
			for key, val in ipairs(comparatives) do
				if val == "peri" then comparatives[key] = "[[mear]] " .. PAGENAME end
			end
			
			for key, val in ipairs(superlatives) do
				if val == "peri" then superlatives[key] = "[[meast]] " .. PAGENAME end
			end
			
			table.insert(data.inflections, comparatives)
			table.insert(data.inflections, superlatives)
		end
	end
}
pos_functions["adjec"] = pos_functions["adjek"]

-- -- Display additional inflection information for an adverb
-- pos_functions["adverb"] = {
-- 	params = {
-- 		[1] = {},
-- 		[2] = {},
-- 		[3] = {},
-- 		},
-- 	func = function(args, data)
-- 		local comp = args[2]
-- 		local sup = args[3]
-- 		
-- 		if comp then
-- 			if not sup then
-- 				sup = PAGENAME .. "st"
-- 			end
-- 			
-- 			table.insert(data.inflections, {label = "[[Wikiwurdboek:Glossarium#meartrime|meartrime]]", comp})
-- 			table.insert(data.inflections, {label = "[[Wikiwurdboek:Glossarium#measttrime|measttrime]]", sup})
-- 		end
-- 	end
-- }
-- 
-- -- Display information for a noun's gender
-- -- This is separate so that it can also be used for proper nouns
-- function noun_gender(args, data)
-- 	for _, g in ipairs(args[2]) do
-- 		if g == "c" then
-- 			table.insert(data.categories, "Haadwurden mei mienskiplik geslacht yn it Frysk")
-- 		elseif g == "p" then
-- 			table.insert(data.categories, "Pluralia tantum yn it Frysk")
-- 		elseif g ~= "m" and g ~= "f" and g ~= "n" then
-- 			g = nil
-- 		end
-- 		
-- 		table.insert(data.genders, g)
-- 	end
-- 	
-- 	if #data.genders == 0 then
-- 		table.insert(data.genders, "?")
-- 	end
-- 	
-- 	-- Most nouns that are listed as f+m should really have only f
-- 	if data.genders[1] == "f" and data.genders[2] == "m" then
-- 		table.insert(data.categories, "Haadwurden mei f+m geslacht yn it Frysk")
-- 	end
-- end
-- 
-- pos_functions["namme"] = {
-- 	params = {
-- 		[1] = {},
-- 		[2] = {list = "g"},
-- 		},
-- 	func = function(args, data)
-- 		noun_gender(args, data)
-- 		
-- 		-- Rubryk derby - PiefPafPier
-- 		table.insert(data.categories, "Haadwurden yn it Frysk")
-- 	end
-- }
-- pos_functions["nomen"] = pos_functions["namme"]
-- 
-- -- Display additional inflection information for a noun
-- pos_functions["subst"] = {
-- 	params = {
-- 		[1] = {},
-- 		[2] = {list = "g"},
-- 		[3] = {list = "pl"},
-- 		[4] = {list = "dim"},
-- 		
-- 		["f"] = {list = true},
-- 		["m"] = {list = true},
-- 		},
-- 	func = function(args, data)
-- 		noun_gender(args, data)
-- 		
-- 		local plurals = args[3]
-- 		local diminutives = args[4]
-- 		local feminines = args["f"]
-- 		local masculines = args["m"]
-- 		
-- 		-- Plural
-- 		if data.genders[1] == "p" then
-- 			table.insert(data.inflections, {label = "[[Wikiwurdboek:Glossarium#allinne meartal|allinne meartal]]"})
-- 		elseif plurals[1] == "-" then
-- 			table.insert(data.inflections, {label = "[[Wikiwurdboek:Glossarium#net telber|net telber]]"})
-- 			table.insert(data.categories, "Net-telbere haadwurden yn it Frysk")
-- 		else
-- 			local generated = generate_plurals(PAGENAME)
-- 			
-- 			-- Process the plural forms
-- 			for i, p in ipairs(plurals) do
-- 				-- Is this a shortcut form?
-- 				if p:sub(1,1) == "-" then
-- 					if not generated[p] then
-- 						error("It bekoarte meartal " .. p .. " koe net oanmakke wurde.")
-- 					end
-- 					
-- 					if p:sub(-2) == "es" then
-- 						table.insert(data.categories, "Haadwurden mei meartal op -es yn it Frysk")
-- 					elseif p:sub(-1) == "s" then
-- 						table.insert(data.categories, "Haadwurden mei meartal op -s yn it Frysk")
-- 					elseif p:sub(-4) == "eren" then
-- 						table.insert(data.categories, "Haadwurden mei meartal op -eren yn it Frysk")
-- 					else
-- 						table.insert(data.categories, "Haadwurden mei meartal op -en yn it Frysk")
-- 					end
-- 					
-- 					if p:sub(2,2) == ":" then
-- 						table.insert(data.categories, "Haadwurden mei rutsen fokaal yn it meartal yn it Frysk")
-- 					end
-- 					
-- 					p = generated[p]
-- 				-- Not a shortcut form, but the plural form specified directly.
-- 				else
-- 					local matches = {}
-- 					
-- 					for pi, g in pairs(generated) do
-- 						if g == p then
-- 							table.insert(matches, pi)
-- 						end
-- 					end
-- 					
-- 					if #matches > 0 then
-- 						table.insert(data.tracking_categories, "meartal fy-headword gelyk oan generearre foarm")
-- 					elseif not PAGENAME:find("[ -]") then
-- 						if p == PAGENAME then
-- 							table.insert(data.categories, "Net-bûchbere haadwurden yn it Frysk")
-- 						elseif
-- 							p == PAGENAME .. "den" or p == PAGENAME:gsub("ee$", "eden") or
-- 							p == PAGENAME .. "des" or p == PAGENAME:gsub("ee$", "edes") then
-- 							table.insert(data.categories, "Haadwurden mei meartal op -den yn it Frysk")
-- 						elseif p == PAGENAME:gsub("([ao])$", "%1%1ien") or p == PAGENAME:gsub("oe$", "oeien") then
-- 							table.insert(data.categories, "Haadwurden mei twalûd yn it meartal yn it Frysk")
-- 						elseif p == PAGENAME:gsub("y$", "ies") then
-- 							table.insert(data.categories, "Haadwurden mei Ingelske meartallen yn it Frysk")
-- 						elseif
-- 							p == PAGENAME:gsub("a$", "ae") or
-- 							p == PAGENAME:gsub("[ei]x$", "ices") or
-- 							p == PAGENAME:gsub("is$", "es") or
-- 							p == PAGENAME:gsub("men$", "mina") or
-- 							p == PAGENAME:gsub("ns$", "ntia") or
-- 							p == PAGENAME:gsub("o$", "ones") or
-- 							p == PAGENAME:gsub("o$", "onen") or
-- 							p == PAGENAME:gsub("s$", "tes") or
-- 							p == PAGENAME:gsub("us$", "era") or
-- 							p == mw.ustring.gsub(PAGENAME, "[uü]s$", "i") or
-- 							p == mw.ustring.gsub(PAGENAME, "[uü]m$", "a") or
-- 							p == PAGENAME:gsub("x$", "ges") then
-- 							table.insert(data.categories, "Haadwurden mei Latynske meartallen yn it Frysk")
-- 						elseif
-- 							p == PAGENAME:gsub("os$", "oi") or
-- 							p == PAGENAME:gsub("on$", "a") or
-- 							p == PAGENAME:gsub("a$", "ata") then
-- 							table.insert(data.categories, "Haadwurden mei Grykske meartallen yn it Frysk")
-- 						else
-- 							table.insert(data.categories, "Unregelmjittige haadwurden yn it Frysk")
-- 						end
-- 						
-- 						if plural and not mw.title.new(plural).exists then
-- 							table.insert(data.categories, "Haadwurden mei ûntbrekkende meartallen yn it Frysk")
-- 						end
-- 					end
-- 				end
-- 				
-- 				plurals[i] = p
-- 			end
-- 			
-- 			-- Add the plural forms
-- 			plurals.label = "meartal"
-- 			-- N.f.t. (sjoch https://en.wiktionary.org/w/index.php?title=Wiktionary:ACCEL) - PiefPafPier
-- 			-- plurals.accel = {form = "p"}
-- 			plurals.request = true
-- 			table.insert(data.inflections, plurals)
-- 		end
-- 		
-- 		-- Add the diminutive forms
-- 		if diminutives[1] == "-" then
-- 			-- do nothing
-- 		else
-- 			-- Process the diminutive forms
-- 			for i, p in ipairs(diminutives) do
-- 				diminutives[i] = {term = p, genders = {"n"}}
-- 			end
-- 			
-- 			diminutives.label = "[[Wikiwurdboek:Glossarium#ferlytsingswurd|ferlytsingswurd]]"
-- 			-- Ek n.f.t. - PiefPafPier
-- 			-- diminutives.accel = {form = "diminutive"}
-- 			diminutives.request = true
-- 			table.insert(data.inflections, diminutives)
-- 		end
-- 		
-- 		-- Add the feminine forms
-- 		if #feminines > 0 then
-- 			feminines.label = "froulik"
-- 			table.insert(data.inflections, feminines)
-- 		end
-- 		
-- 		-- Add the masculine forms
-- 		if #masculines > 0 then
-- 			masculines.label = "manlik"
-- 			table.insert(data.inflections, masculines)
-- 		end
-- 	end
-- }
-- 
-- -- Display additional inflection information for a diminutive noun
-- pos_functions["substdim"] = {
-- 	params = {
-- 		[1] = {},
-- 		[2] = {},
-- 		[3] = {list = "pl"},
-- 		},
-- 	func = function(args, data)
-- 		if not (args[2] == "n" or args[2] == "p") then
-- 			args[2] = {"n"}
-- 		else
-- 			args[2] = {args[2]}
-- 		end
-- 		
-- 		if #args[3] == 0 then
-- 			args[3] = {"-s"}
-- 		end
-- 		
-- 		args[4] = {"-"}
-- 		args["f"] = {}
-- 		args["m"] = {}
-- 		
-- 		-- Rubryk derby - PiefPafPier
-- 		table.insert(data.categories, "Haadwurdfoarmen yn it Frysk")
-- 		
-- 		pos_functions["subst"].func(args, data)
-- 	end
-- }
-- 
-- function generate_plurals(PAGENAME)
-- 	local m_common = require("Module:fy-common")
-- 	local generated = {}
-- 	
-- 	generated["-s"] = PAGENAME .. "s"
-- 	generated["-'s"] = PAGENAME .. "'s"
-- 	
-- 	local stem_FF = m_common.add_e(PAGENAME, false, false)
-- 	local stem_TF = m_common.add_e(PAGENAME, true, false)
-- 	local stem_FT = m_common.add_e(PAGENAME, false, true)
-- 	
-- 	generated["-es"] = stem_FF .. "s"
-- 	generated["-@es"] = stem_TF .. "s"
-- 	generated["-:es"] = stem_FT .. "s"
-- 	
-- 	generated["-en"] = stem_FF .. "n"
-- 	generated["-@en"] = stem_TF .. "n"
-- 	generated["-:en"] = stem_FT .. "n"
-- 	
-- 	generated["-eren"] = m_common.add_e(PAGENAME .. (PAGENAME:find("n$") and "d" or ""), false, false) .. "ren"
-- 	generated["-:eren"] = stem_FT .. "ren"
-- 	
-- 	if PAGENAME:find("f$") then
-- 		local stem = PAGENAME:gsub("f$", "v")
-- 		local stem_FF = m_common.add_e(stem, false, false)
-- 		local stem_TF = m_common.add_e(stem, true, false)
-- 		local stem_FT = m_common.add_e(stem, false, true)
-- 		
-- 		generated["-ves"] = stem_FF .. "s"
-- 		generated["-@ves"] = stem_TF .. "s"
-- 		generated["-:ves"] = stem_FT .. "s"
-- 		
-- 		generated["-ven"] = stem_FF .. "n"
-- 		generated["-@ven"] = stem_TF .. "n"
-- 		generated["-:ven"] = stem_FT .. "n"
-- 		
-- 		generated["-veren"] = stem_FF .. "ren"
-- 		generated["-:veren"] = stem_FT .. "ren"
-- 	elseif PAGENAME:find("s$") then
-- 		local stem = PAGENAME:gsub("s$", "z")
-- 		local stem_FF = m_common.add_e(stem, false, false)
-- 		local stem_TF = m_common.add_e(stem, true, false)
-- 		local stem_FT = m_common.add_e(stem, false, true)
-- 		
-- 		generated["-zes"] = stem_FF .. "s"
-- 		generated["-@zes"] = stem_TF .. "s"
-- 		generated["-:zes"] = stem_FT .. "s"
-- 		
-- 		generated["-zen"] = stem_FF .. "n"
-- 		generated["-@zen"] = stem_TF .. "n"
-- 		generated["-:zen"] = stem_FT .. "n"
-- 		
-- 		generated["-zeren"] = stem_FF .. "ren"
-- 		generated["-:zeren"] = stem_FT .. "ren"
-- 	elseif PAGENAME:find("heid$") then
-- 		generated["-heden"] = PAGENAME:gsub("heid$", "heden")
-- 	end
-- 	
-- 	return generated
-- end
-- 
-- pos_functions["mulwd"] = {
-- 	params = {
-- 		[1] = {},
-- 		[2] = {},
-- 	},
-- 	func = function(args, data)
-- 		-- Rubryk derby - PiefPafPier
-- 		table.insert(data.categories, "Tiidwurdfoarmen yn it Frysk")
-- 		
-- 		if args[2] == "-" then
-- 			table.insert(data.inflections, {label = "net eigenskiplik brûkt"})
-- 			table.insert(data.categories, "Net-eigenskiplik brûkte mulwurden yn it Frysk")
-- 		end
-- 	end
-- }
-- pos_functions["partp"] = pos_functions["mulwd"]
-- 
-- pos_functions["verbum"] = {
-- 	params = {
-- 		[1] = {},
-- 		[2] = {},
-- 		},
-- 	func = function(args, data)
-- 		if args[2] == "-" then
-- 			table.insert(data.inflections, {label = "gjin bûging"})
-- 			table.insert(data.categories, "Tiidwurden sûnder bûging yn it Frysk")
-- 		end
-- 	end
-- }

return export