Module:vls-headword

local export = {} local pos_functions = {}

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

-- 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 poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.") local params = { ["head"] = {list = true}, }	if pos_functions[poscat] then for key, val in pairs(pos_functions[poscat].params) do			params[key] = val end end local args = require("Module:parameters").process(frame:getParent.args, params) local data = {lang = lang, pos_category = poscat, categories = {}, heads = args["head"], genders = {}, inflections = {}, tracking_categories = {}} if pos_functions[poscat] then pos_functions[poscat].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["adjectives"] = { params = { [1] = {list = "comp"}, [2] = {list = "sup"}, [3] = {},		},	func = function(args, data) local mode = args[1][1] if mode == "inv" then table.insert(data.inflections, {label = "invariable"}) table.insert(data.categories, "West Flemish invariable adjectives") args[1][1] = args[2][1] args[2][1] = args[3] elseif mode == "pred" then table.insert(data.inflections, {label = "used only predicatively"}) table.insert(data.categories, "West Flemish predicative-only adjectives") args[1][1] = args[2][1] args[2][1] = args[3] end local comp_mode = args[1][1] if comp_mode == "-" then table.insert(data.inflections, {label = "not comparable"}) else -- Gather parameters local comparatives = args[1] comparatives.label = "comparative" local superlatives = args[2] superlatives.label = "superlative" -- 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:vls-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:vls-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 }

-- Display additional inflection information for an adverb pos_functions["adverbs"] = { params = { [1] = {},		[2] = {},		},	func = function(args, data) local comp = args[1] local sup = args[2] if comp then if not sup then sup = PAGENAME .. "st" end table.insert(data.inflections, {label = "comparative", comp}) table.insert(data.inflections, {label = "superlative", 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[1]) do		if g == "c" then table.insert(data.categories, "West Flemish nouns with common gender") elseif g == "p" then table.insert(data.categories, "West Flemish pluralia tantum") 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, "West Flemish nouns with f+m gender") end end

pos_functions["proper nouns"] = { params = { [1] = {list = "g"}, },	func = function(args, data) noun_gender(args, data) end }

-- Display additional inflection information for a noun pos_functions["nouns"] = { params = { [1] = {list = "g"}, [2] = {list = "pl"}, [3] = {list = "dim"}, ["f"] = {list = true}, ["m"] = {list = true}, },	func = function(args, data) noun_gender(args, data) local plurals = args[2] local diminutives = args[3] local feminines = args["f"] local masculines = args["m"] -- Plural if data.genders[1] == "p" then table.insert(data.inflections, {label = "plural only"}) elseif plurals[1] == "-" then table.insert(data.inflections, {label = "uncountable"}) table.insert(data.categories, "West Flemish uncountable nouns") 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("The shortcut plural " .. p .. " could not be generated.") end if p:sub(-2) == "es" then table.insert(data.categories, "West Flemish nouns with plural in -es") elseif p:sub(-1) == "s" then table.insert(data.categories, "West Flemish nouns with plural in -s") elseif p:sub(-4) == "eren" then table.insert(data.categories, "West Flemish nouns with plural in -eren") else table.insert(data.categories, "West Flemish nouns with plural in -en") end if p:sub(2,2) == ":" then table.insert(data.categories, "West Flemish nouns with lengthened vowel in the plural") 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, "vls-noun plural matches generated form") elseif not PAGENAME:find("[ -]") then if p == PAGENAME then table.insert(data.categories, "West Flemish invariable nouns") 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, "West Flemish nouns with plural in -den") elseif p == PAGENAME:gsub("([ao])$", "%1%1ien") or p == PAGENAME:gsub("oe$", "oeien") then table.insert(data.categories, "West Flemish nouns with glide vowel in plural") elseif p == PAGENAME:gsub("y$", "ies") then table.insert(data.categories, "West Flemish nouns with English plurals") 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, "West Flemish nouns with Latin plurals") elseif p == PAGENAME:gsub("os$", "oi") or							p == PAGENAME:gsub("on$", "a") or							p == PAGENAME:gsub("a$", "ata") then table.insert(data.categories, "West Flemish nouns with Greek plurals") else table.insert(data.categories, "West Flemish irregular nouns") end if plural and not mw.title.new(plural).exists then table.insert(data.categories, "West Flemish nouns with missing plurals") end end end plurals[i] = p			end -- Add the plural forms plurals.label = "plural" 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 = "diminutive" diminutives.request = true table.insert(data.inflections, diminutives) end -- Add the feminine forms if #feminines > 0 then feminines.label = "feminine" table.insert(data.inflections, feminines) end -- Add the masculine forms if #masculines > 0 then masculines.label = "masculine" table.insert(data.inflections, masculines) end end }

-- Display additional inflection information for a diminutive noun pos_functions["diminutive nouns"] = { params = { [1] = {},		[2] = {list = "pl"}, },	func = function(args, data) if not (args[1] == "n" or args[1] == "p") then args[1] = {"n"} else args[1] = {args[1]} end if #args[2] == 0 then args[2] = {"-s"} end args[3] = {"-"} args["f"] = {} args["m"] = {} pos_functions["nouns"].func(args, data) end }

function generate_plurals(PAGENAME) local m_common = require("Module:vls-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["past participles"] = { params = { [1] = {},	},	func = function(args, data) if args[1] == "-" then table.insert(data.inflections, {label = "not used adjectivally"}) table.insert(data.categories, "West Flemish non-adjectival past participles") end end }

pos_functions["verbs"] = { params = { [1] = {},		},	func = function(args, data) if args[1] == "-" then table.insert(data.inflections, {label = "not inflected"}) table.insert(data.categories, "West Flemish uninflected verbs") end end }

return export