Module:User:Type56op9/english

Hello, you have come here looking for the meaning of the word Module:User:Type56op9/english. In DICTIOUS you will not only get to know all the dictionary meanings for the word Module:User:Type56op9/english, but we will also tell you about its etymology, its characteristics and you will know how to say Module:User:Type56op9/english in singular and plural. Everything you need to know about the word Module:User:Type56op9/english you have here. The definition of the word Module:User:Type56op9/english will help you to be more precise and correct when speaking or writing your texts. Knowing the definition ofModule:User:Type56op9/english, as well as those of other words, enriches your vocabulary and provides you with more and better linguistic resources.


local export = {}
local pos_functions = {}

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

-- 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
	local args = frame:getParent().args
	local poscat = frame.args or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
	
	local head = args; if head == "" then head = nil end
	local inflections = {}
	local categories = {"English " .. poscat}
	
	if pos_functions then
		pos_functions(args, inflections, categories)
	end
	
	return require("Module:headword").full_headword(lang, nil, head, nil, nil, inflections, categories, nil)
end

-- This function does the common work between adjectives and adverbs
function make_comparatives(params, inflections, categories)
	local comp_parts = {label = "]", accel = "comparative-form-of"}
	local sup_parts = {label = "]", accel = "superlative-form-of"}
	
	if #params == 0 then
		table.insert(params, {"more"})
	end
	
	-- To form the stem, replace -(e)y with -i and remove a final -e.
	local stem = PAGENAME:gsub("()e?y$", "%1i"):gsub("e$", "")
	
	-- Go over each parameter given and create a comparative and superlative form
	for i, val in ipairs(params) do
		local comp = val
		local sup = val
		
		if comp == "more" and PAGENAME ~= "many" and PAGENAME ~= "much" then
			table.insert(comp_parts, "] " .. PAGENAME)
			table.insert(sup_parts, "] " .. PAGENAME)
		elseif comp == "further" and PAGENAME ~= "far" then
			table.insert(comp_parts, "] " .. PAGENAME)
			table.insert(sup_parts, "] " .. PAGENAME)
		elseif comp == "er" then
			table.insert(comp_parts, stem .. "er")
			table.insert(sup_parts, stem .. "est")
		else
			-- If the full comparative was given, but no superlative, then
			-- create it by replacing the ending -er with -est.
			if not sup then
				if comp:find("er$") then
					sup = comp:gsub("er$", "est")
				else
					error("The superlative of \"" .. comp .. "\" cannot be generated automatically. Please provide it with the \"sup" .. (i == 1 and "" or i) .. "=\" parameter.")
				end
			end
			
			table.insert(comp_parts, comp)
			table.insert(sup_parts, sup)
		end
	end
	
	table.insert(inflections, comp_parts)
	table.insert(inflections, sup_parts)
end

pos_functions = function(args, inflections, categories)
	local shift = 0
	
	-- If the first parameter is ?, then don't show anything, just return.
	if args == "?" then
		return
	-- If the first parameter is -, then move all parameters up one position.
	elseif args == "-" then
		shift = 1
	end
	
	-- Gather all the comparative and superlative parameters.
	local params = {}
	local i = 1
	
	while true do
		local comp = args; if comp == "" then comp = nil end
		local sup = args; if sup == "" then sup = nil end
		
		if not comp then
			break
		end
		
		table.insert(params, {comp, sup})
		i = i + 1
	end
	
	if shift == 1 then
		-- If the first parameter is "-" but there are no parameters,
		-- then show "not comparable" only and return. If there are parameters,
		-- then show "not generally comparable" before the forms.
		if #params == 0 then
			table.insert(inflections, {label = "not ]"})
			table.insert(categories, "English uncomparable adjectives")
			return
		else
			table.insert(inflections, {label = "not generally ]"})
		end
	end
	
	-- Process the parameters
	make_comparatives(params, inflections, categories)
end

pos_functions = function(args, inflections, categories)
	local shift = 0
	
	-- If the first parameter is ?, then don't show anything, just return.
	if args == "?" then
		return
	-- If the first parameter is -, then move all parameters up one position.
	elseif args == "-" then
		shift = 1
	end
	
	-- Gather all the comparative and superlative parameters.
	local params = {}
	local i = 1
	
	while true do
		local comp = args; if comp == "" then comp = nil end
		local sup = args; if sup == "" then sup = nil end
		
		if not comp then
			break
		end
		
		table.insert(params, {comp, sup})
		i = i + 1
	end
	
	if shift == 1 then
		-- If the first parameter is "-" but there are no parameters,
		-- then show "not comparable" only and return. If there are parameters,
		-- then show "not generally comparable" before the forms.
		if #params == 0 then
			table.insert(inflections, {label = "not ]"})
			return
		else
			table.insert(inflections, {label = "not generally ]"})
		end
	end
	
	-- Process the parameters
	make_comparatives(params, inflections, categories)
end

pos_functions = function(args, inflections, categories)
	-- Gather all the plural parameters from the numbered parameters.
	local plurals = {}
	local i = 1
	
	while true do
		local pl = args; if pl == "" then pl = nil end
		
		if not pl then
			break
		end
		
		local qual = args; if qual == "" then qual = nil end
		
		if qual then
			table.insert(plurals, {term = pl, qualifiers = {qual}})
		else
			table.insert(plurals, pl)
		end
		
		i = i + 1
	end
	
	-- Decide what to do next...
	local mode = nil
	
	if plurals == "?" or plurals == "!" or plurals == "-" or plurals == "~" then
		mode = plurals
		table.remove(plurals, 1)  -- Remove the mode parameter
	end
	
	-- Plural is unknown
	if mode == "?" then
		table.insert(categories, "English nouns with unknown or uncertain plurals")
		return
	-- Plural is not attested
	elseif mode == "!" then
		table.insert(inflections, {label = "plural not attested"})
		table.insert(categories, "English nouns with unattested plurals")
		return
	-- Uncountable noun; may occasionally have a plural
	elseif mode == "-" then
		table.insert(categories, "English uncountable nouns")
		
		-- If plural forms were given explicitly, then show "usually"
		if #plurals > 0 then
			table.insert(inflections, {label = "usually ]"})
			table.insert(categories, "English countable nouns")
		else
			table.insert(inflections, {label = "]"})
		end
	-- Mixed countable/uncountable noun, always has a plural
	elseif mode == "~" then
		table.insert(inflections, {label = "] and ]"})
		table.insert(categories, "English uncountable nouns")
		table.insert(categories, "English countable nouns")
		
		-- If no plural was given, add a default one now
		if #plurals == 0 then
			plurals = {"s"}
		end
	-- The default, always has a plural
	else
		table.insert(categories, "English countable nouns")
		
		-- If no plural was given, add a default one now
		if #plurals == 0 then
			plurals = {"s"}
		end
	end
	
	-- If there are no plurals to show, return now
	if #plurals == 0 then
		return
	end
	
	-- There are plural forms to show, so show them
	local pl_parts = {label = "plural", accel = "plural-form-of"}
	
	local stem = PAGENAME
	
	for i, pl in ipairs(plurals) do
		if pl == "s" then
			table.insert(pl_parts, stem .. "s")
		elseif pl == "es" then
			table.insert(pl_parts, stem .. "es")
		else
			table.insert(pl_parts, pl)
		end
	end
	
	table.insert(inflections, pl_parts)
end

pos_functions = function(args, inflections, categories)
	-- Gather all the plural parameters from the numbered parameters.
	local plurals = {}
	local i = 1
	
	while true do
		local pl = args; if pl == "" then pl = nil end
		
		if not pl then
			break
		end
		
		table.insert(plurals, pl)
		i = i + 1
	end
	
	-- Decide what to do next...
	local mode = nil
	
	if plurals == "?" or plurals == "!" or plurals == "-" or plurals == "~" then
		mode = plurals
		table.remove(plurals, 1)  -- Remove the mode parameter
	end
	
	-- Plural is unknown
	if mode == "?" then
		table.insert(categories, "English nouns with unknown or uncertain plurals")
		return
	-- Plural is not attested
	elseif mode == "!" then
		table.insert(inflections, {label = "plural not attested"})
		table.insert(categories, "English nouns with unattested plurals")
		return
	-- Uncountable noun; may occasionally have a plural
	elseif mode == "-" then
		-- If plural forms were given explicitly, then show "usually"
		if #plurals > 0 then
			table.insert(inflections, {label = "usually ]"})
			table.insert(categories, "English countable proper nouns")
		else
			table.insert(inflections, {label = "]"})
		end
	-- Mixed countable/uncountable noun, always has a plural
	elseif mode == "~" then
		table.insert(inflections, {label = "] and ]"})
		table.insert(categories, "English countable proper nouns")
		
		-- If no plural was given, add a default one now
		if #plurals == 0 then
			plurals = {"s"}
		end
	elseif #plurals > 0 then
		table.insert(categories, "English countable proper nouns")
	end
	
	-- If there are no plurals to show, return now
	if #plurals == 0 then
		return
	end
	
	-- There are plural forms to show, so show them
	local pl_parts = {label = "plural", accel = "plural-form-of"}
	
	local stem = PAGENAME
	
	for i, pl in ipairs(plurals) do
		if pl == "s" then
			table.insert(pl_parts, stem .. "s")
		elseif pl == "es" then
			table.insert(pl_parts, stem .. "es")
		else
			table.insert(pl_parts, pl)
		end
	end
	
	table.insert(inflections, pl_parts)
end

pos_functions = function(args, inflections, categories)
	-- Get parameters
	local par1 = args; if par1 == "" then par1 = nil end
	local par2 = args; if par2 == "" then par2 = nil end
	local par3 = args; if par3 == "" then par3 = nil end
	local par4 = args; if par4 == "" then par4 = nil end
	
	local pres_3sg_forms = {label = "third-person singular simple present", accel = "third-person-singular-form-of"}
	local pres_ptc_forms = {label = "present participle", accel = "present-participle-form-of"}
	local past_forms = {label = "simple past", accel = "simple-past-form-of"}
	local pres_3sg_form = par1 or PAGENAME .. "s"
	local pres_ptc_form = par2 or PAGENAME .. "ing"
	local past_form = par3 or PAGENAME .. "ed"
	local pres_3sg_qual = args; if pres_3sg_qual == "" then pres_3sg_qual = nil end
	local pres_ptc_qual = args; if pres_ptc_qual == "" then pres_ptc_qual = nil end
	local past_qual = args; if past_qual == "" then past_qual = nil end
	
	if par1 and not par2 and not par3 then
		-- This is the "new" format, which uses only the first parameter.
		if par1 == "es" then
			pres_3sg_form = PAGENAME .. "es"
			pres_ptc_form = PAGENAME .. "ing"
			past_form = PAGENAME .. "ed"
		elseif par1 == "ies" then
			if not mw.ustring.find(PAGENAME, "y$") then
				error("The first parameter is \"ies\" but the verb does not end in -y.")
			end
			
			local stem = mw.ustring.gsub(PAGENAME, "y$", "")
			pres_3sg_form = stem .. "ies"
			pres_ptc_form = stem .. "ying"
			past_form = stem .. "ied"
		elseif par1 == "d" then
			pres_3sg_form = PAGENAME .. "s"
			pres_ptc_form = PAGENAME .. "ing"
			past_form = PAGENAME .. "d"
		else
			pres_3sg_form = PAGENAME .. "s"
			pres_ptc_form = par1 .. "ing"
			past_form = par1 .. "ed"
		end
	else
		-- This is the "legacy" format, using the second and third parameters as well.
		-- It is included here for backwards compatibility and to ease the transition.
		if par3 then
			if par3 == "es" then
				require("Module:debug").track("en-headword/es3")
				pres_3sg_form = par1 .. par2 .. "es"
				pres_ptc_form = par1 .. par2 .. "ing"
				past_form = par1 .. par2 .. "ed"
			elseif par3 == "ing" then
				require("Module:debug").track("en-headword/ing3")
				pres_3sg_form = PAGENAME .. "s"
				pres_ptc_form = par1 .. par2 .. "ing"
				
				if par2 == "y" then
					past_form = PAGENAME .. "d"
				else
					past_form = par1 .. par2 .. "ed"
				end
			elseif par3 == "ed" then
				require("Module:debug").track("en-headword/ed3")
				
				if par2 == "i" then
					pres_3sg_form = par1 .. par2 .. "es"
					pres_ptc_form = PAGENAME .. "ing"
				else
					pres_3sg_form = PAGENAME .. "s"
					pres_ptc_form = par1 .. par2 .. "ing"
				end
				
				past_form = par1 .. par2 .. "ed"
			elseif par3 == "d" then
				require("Module:debug").track("en-headword/d3")
				pres_3sg_form = PAGENAME .. "s"
				pres_ptc_form = par1 .. par2 .. "ing"
				past_form = par1 .. par2 .. "d"
			end
		else
			if par2 == "es" then
				require("Module:debug").track("en-headword/es2")
				pres_3sg_form = par1 .. "es"
				pres_ptc_form = par1 .. "ing"
				past_form = par1 .. "ed"
			elseif par2 == "ies" then
				require("Module:debug").track("en-headword/ies2")
				
				if par1 .. "y" ~= PAGENAME then
					require("Module:debug").track("en-headword/ies2/par1 not pagename")
				end
				
				pres_3sg_form = par1 .. "ies"
				pres_ptc_form = par1 .. "ying"
				past_form = par1 .. "ied"
			elseif par2 == "ing" then
				require("Module:debug").track("en-headword/ing2")
				pres_3sg_form = PAGENAME .. "s"
				pres_ptc_form = par1 .. "ing"
				past_form = par1 .. "ed"
			elseif par2 == "ed" then
				require("Module:debug").track("en-headword/ed2")
				pres_3sg_form = PAGENAME .. "s"
				pres_ptc_form = par1 .. "ing"
				past_form = par1 .. "ed"
			elseif par2 == "d" then
				require("Module:debug").track("en-headword/d2")
				
				if par1 ~= PAGENAME then
					require("Module:debug").track("en-headword/d2/par1 not pagename")
				end
				
				pres_3sg_form = PAGENAME .. "s"
				pres_ptc_form = par1 .. "ing"
				past_form = par1 .. "d"
			end
		end
	end
	
	table.insert(pres_ptc_forms, {term = pres_ptc_form, qualifiers = {pres_ptc_qual}})
	table.insert(pres_3sg_forms, {term = pres_3sg_form, qualifiers = {pres_3sg_qual}})
	table.insert(past_forms, {term = past_form, qualifiers = {past_qual}})
	
	-- Present 3rd singular
	local i = 2
	
	while args do
		local form = args; if form == "" then form = nil end
		local qual = args; if qual == "" then qual = nil end
		
		if form then
			table.insert(pres_3sg_forms, {term = form, qualifiers = {qual}})
		end
		
		i = i + 1
	end
	
	-- Present participle
	local i = 2
	
	while args do
		local form = args; if form == "" then form = nil end
		local qual = args; if qual == "" then qual = nil end
		
		if form then
			table.insert(pres_ptc_forms, {term = form, qualifiers = {qual}})
		end
		
		i = i + 1
	end
	
	-- Past
	local i = 2
	
	while args do
		local form = args; if form == "" then form = nil end
		local qual = args; if qual == "" then qual = nil end
		
		if form then
			table.insert(past_forms, {term = form, qualifiers = {qual}})
		end
		
		i = i + 1
	end
	
	-- Past participle
	local past_ptc_forms = {label = "past participle", accel = "past-participle-form-of"}
	
	if par4 then
		local qual = args; if qual == "" then qual = nil end
		table.insert(past_ptc_forms, {term = par4, qualifiers = {qual}})
		local i = 2
		
		while args do
			local form = args; if form == "" then form = nil end
			local qual = args; if qual == "" then qual = nil end
			
			if form then
				table.insert(past_ptc_forms, {term = form, qualifiers = {qual}})
			end
			
			i = i + 1
		end
	end
	
	-- Are the past forms identical to the past participle forms?
	local identical = true
	
	if #past_forms ~= #past_ptc_forms then
		identical = false
	else
		for key, val in ipairs(past_forms) do
			if past_ptc_forms.term ~= val.term or past_ptc_forms.qual ~= val.qual then
				identical = false
				break
			end
		end
	end
	
	-- Insert the forms
	table.insert(inflections, pres_3sg_forms)
	table.insert(inflections, pres_ptc_forms)
	
	if #past_ptc_forms == 0 or identical then
		past_forms.label = "simple past and past participle"
		past_forms.accel = "simple-past-and-participle-form-of"
		table.insert(inflections, past_forms)
	else
		table.insert(inflections, past_forms)
		table.insert(inflections, past_ptc_forms)
	end
end

return export