Module:nl-headword

Ut Wiktionary
Jump to navigation Jump to search

Oernommen fan en:Module:nl-headword.

Oerset:

  • foutmeldingen
  • lebels/keppelings
  • kategorynammen

Oanpast:

  • wurdsoartkoades yn stee fan wurdsoartnammen
  • opsykjen wurdsoartnammen yn data (poscode/poscat)
  • parameters skowe 1 plak op
  • accel útskeakele

Taheakke:

  • parameters Berjocht:-nl-
  • alternative wurdsoartkoades
  • oanfoljende kategoryen

local export = {}
local pos_functions = {}

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

-- 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:-nl- - 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 Nederlânsk")
			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 Nederlânsk")
			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:nl-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
						table.insert(superlatives, "peri")
					end
					
					table.insert(superlatives, require("Module:nl-adjectives").make_superlative(PAGENAME))
				end
			end
			
			-- Replace "peri" with phrase
			for key, val in ipairs(comparatives) do
				if val == "peri" then comparatives[key] = "[[meer]] " .. PAGENAME end
			end
			
			for key, val in ipairs(superlatives) do
				if val == "peri" then superlatives[key] = "[[meest]] " .. 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 Nederlânsk")
		elseif g == "p" then
			table.insert(data.categories, "Pluralia tantum yn it Nederlânsk")
		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 Nederlânsk")
	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 Nederlânsk")
	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 Nederlânsk")
		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 Nederlânsk")
					elseif p:sub(-1) == "s" then
						table.insert(data.categories, "Haadwurden mei meartal op -s yn it Nederlânsk")
					elseif p:sub(-4) == "eren" then
						table.insert(data.categories, "Haadwurden mei meartal op -eren yn it Nederlânsk")
					else
						table.insert(data.categories, "Haadwurden mei meartal op -en yn it Nederlânsk")
					end
					
					if p:sub(2,2) == ":" then
						table.insert(data.categories, "Haadwurden mei rutsen fokaal yn it meartal yn it Nederlânsk")
					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 nl-headword gelyk oan generearre foarm")
					elseif not PAGENAME:find("[ -]") then
						if p == PAGENAME then
							table.insert(data.categories, "Net-bûchbere haadwurden yn it Nederlânsk")
						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 Nederlânsk")
						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 Nederlânsk")
						elseif p == PAGENAME:gsub("y$", "ies") then
							table.insert(data.categories, "Haadwurden mei Ingelske meartallen yn it Nederlânsk")
						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 Nederlânsk")
						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 Nederlânsk")
						else
							table.insert(data.categories, "Unregelmjittige haadwurden yn it Nederlânsk")
						end
						
						if plural and not mw.title.new(plural).exists then
							table.insert(data.categories, "Haadwurden mei ûntbrekkende meartallen yn it Nederlânsk")
						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 Nederlânsk")
		
		pos_functions["subst"].func(args, data)
	end
}

function generate_plurals(PAGENAME)
	local m_common = require("Module:nl-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 Nederlânsk")
		
		if args[2] == "-" then
			table.insert(data.inflections, {label = "net eigenskiplik brûkt"})
			table.insert(data.categories, "Net-eigenskiplik brûkte mulwurden yn it Nederlânsk")
		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 Nederlânsk")
		end
	end
}

return export