Module:User:Santi2222/eu-verb-form

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


local export = {}
local m_links = require("Module:links")
local m_utilities = require("Module:utilities")
local m_alloc = require("Module:eu-allocutives")
local m_com = require("Module:eu-common")
local m_string_utilities = require("Module:string utilities")
local m_table = require("Module:table")

local rsub = m_string_utilities.gsub
local lang = require("Module:languages").getByCode("eu")

function export.verb_form(frame)
	local params = {
		 = {required = true},
		 = {required = true},
		 = {},
		 = {},
		
		 = {},
		 = {alias_of = "gloss"},
		 = {type = "boolean"},
		
		 = {}
	}	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	local text = ""
	local nocat = true
	local cats = {}
	local dot = (args.nodot == true) and "" or "."

	local pagename = args.pagename or mw.title.getCurrentTitle().text

	--throw an error if the arguments 3/4 are being used with non-finite forms
	if (args == "impfpar" or args == "fpar" or args == "vn" or args == "short" or args == "mall" or args == "fall") and (args or args) then
		error("The parameters 3 and 4 are not used with non-finite or allocutive forms")
	end
	
	--automatically generate the allocutive alternative form, if it exists
	local altalloc
	
	local function check_allocutive(pseudolemma, gender)
		local m_alloc_forms, f_alloc_forms, use_allocs
		local duplicates = {
			negian = {"mall", "negien"}, negiean = {"mall", "negien"}, neginan = {"fall", "negien"}, negienan = {"fall", "negien"},
			zegian = {"mall", "zegien"}, zegiean = {"mall", "zegien"}, zeginan = {"fall", "zegien"}, zegienan = {"fall", "zegien"}, 
			genegian = {"mall", "genegien"}, genegiean = {"mall", "genegien"}, geneginan = {"fall", "genegien"}, genegienan = {"fall", "genegien"}, 
			zekizkian = {"mall", "zekizkien"}, zekizkiean = {"mall", "zekizkien"}, zekizkinan = {"fall", "zekizkien"}, zekizkienan = {"fall", "zekizkien"}, 
			zekian = {"mall", "zekien"}, zekiean = {"mall", "zekien"}, zekinan = {"fall", "zekien"}, zekienan = {"fall", "zekien"}, 
			ziok = {"mall", "dio"}, ziona = {"fall", "dio"}, zion = {"fall", "dio"}}
		if duplicates then
			local correct_values = duplicates
			if correct_values ~= gender or correct_values ~= pseudolemma then
				error("The allocutive form '" .. pagename .. "' doesn't correspond to the non-allocutive '" .. pseudolemma .. "'.")
			else
				return nil
			end
		end
		
		--Get the allocutive forms
		m_alloc_forms, f_alloc_forms = m_alloc.generate_allocutive(pseudolemma, nil)
		use_allocs = (gender == "mall") and m_alloc_forms or f_alloc_forms
		
		--Check whether the provided pseudolemma is correct
		if not use_allocs then
			error("The form '" .. pagename .. "' is not an allocutive.")
		elseif not m_table.listToSet(use_allocs) then
			error("The allocutive form '" .. pagename .. "' doesn't correspond to the non-allocutive '" .. pseudolemma .. "'.")
		elseif #use_allocs == 1 then
			return nil
		elseif #use_allocs == 2 then
			altalloc = (pagename == use_allocs) and use_allocs or use_allocs
		else
			error("The length of the allocutive form tables should be 1 or 2.")
		end
	end
	
	--process the person parameters
	local nor = ""
	local nori = ""
	local nork = ""
	local nor_l = ""
	local nori_l = ""
	local nork_l = ""
	if args == "nor" or args == "nor-nori" or args == "nor-nork" or args == "nor-nori-nork" then
		if args then
			person_arguments = mw.text.split(args, " ")
		else
			error("Please provide a person paramter.")
		end
	end
	if (args == "nor" and #person_arguments ~= 1) or (args == "nor-nori" and #person_arguments ~= 2) or (args == "nor-nori-nork" and #person_arguments ~= 3) then
			error("Invalid person parameter.")
	end
	--process the "nor" parameter in nor and nor-nori verbs
	if args == "nor" or args == "nor-nori" then 
		nor = person_arguments
		local valid_nor = {ni = "First-person singular", hi = "Informal second-person singular", hura = "Third-person singular",
			gu = "First-person plural", zu = "Second-person singular", zuek = "Second-person plural", haiek = "Third-person plural"}
		if valid_nor then
			local nor_text = valid_nor
			nor_l = nor_text .. " (" .. m_links.full_link({term = nor, lang = lang}, "term") .. ")"
		else
			error("Invalid nor argument.")
		end
	end
	--process the "nori" parameter
	if args == "nor-nori" or args == "nor-nori-nork" then 
		nori = person_arguments
		local valid_nori = {niri = "first-person singular", hiri = "informal second-person singular", hirim = "informal second-person singular masculine",
			hirif = "informal second-person singular feminine", hari = "third-person singular",
			guri = "first-person plural", zuri = "second-person singular", zuei = "second-person plural", haiei = "third-person plural"}
		if valid_nori then
			local nori_text = valid_nori
			local nori_pronoun = rsub(nori, "^hiri$", "hiri")
			nori_l = nori_text .. " (" .. m_links.full_link({term = nori_pronoun, lang = lang}, "term") .. ")"
		else
			error("Invalid nori argument.")
		end
	end
	--process the "nork" and "nor" parameters in nor-nork and nor-nori-nork verbs
	if args == "nor-nork" or args == "nor-nori-nork" then 
		nork = person_arguments
		nor = (args == "nor-nork") and person_arguments or person_arguments
		local valid_nork = {nik = "First-person singular", hik = "Informal second-person singular", 
			hikm = "Informal second-person singular masculine", hikf = "Informal second-person singular feminine", hark = "Third-person singular",
			guk = "First-person plural", zuk = "Second-person singular", zuek = "Second-person plural", haiek = "Third-person plural"}
		if valid_nork then
			local nork_text = valid_nork
			local nork_pronoun = rsub(nork, "^hik$", "hik")
			nork_l = nork_text .. " (" .. m_links.full_link({term = nork_pronoun, lang = lang}, "term") .. ")"
		else
			error("Invalid nork argument.")
		end
		local valid_nor = {ni = "first-person singular", hi = "informal second-person singular", hura = "third-person singular",
			gu = "first-person plural", zu = "second-person singular", zuek = "second-person plural", haiek = "third-person plural"}
		if valid_nor then
			local nor_text = valid_nor
			nor_l = nor_text .. " (" .. m_links.full_link({term = nor, lang = lang}, "term") .. ")"
		else
			error("Invalid nor argument.")
		end
	end
	
	local nonfinites = {
		impfpar = {"Imperfect participle of", "Basque imperfect participles"},
		fpar = {"Future participle of", "Basque future participles"},
		short = {"Short form of", "Basque short verb forms"},
		vn = {"Verbal noun of", "Basque verbal nouns"}
	}
	
	local personal_paradigms = m_table.listToSet{"nor", "nor-nori", "nor-nork", "nor-nori-nork"}
	
	local tenses = {presi = "present indicative", pasti = "past indicative", cond = "conditional indicative", hcons = "hypothetic consequential indicative",
		pcons = "past consequential indicative", futi = "future indicative", presp = "present potential", pastp = "past potential",
		hypp = "hypothetic potential", ccond = "close conditional potential", dcond = "distal conditional potential", press = "present subjunctive",
		hyps = "hypothetic subjunctive", pasts = "past subjunctive", imp = "imperative" }
	
	--generate the text
	--nonfinite forms
	if nonfinites] then
		local nonfinite_data = nonfinites]
		text = nonfinite_data
		nocat = false
		cats = {nonfinite_data}
	--allocutive forms
	elseif m_table.listToSet{"mall", "fall"}] then
		local gender = (args == "mall") and "masculine" or "feminine"
		check_allocutive(args, args)
		text = m_com.rsub_multiple(gender, {"^m", "^f"}, {"M", "F"}) .. " allocutive form of"
		nocat = false
		cats = {"Basque " .. gender .. " allocutive verb forms"}
	--nor forms
	elseif args == "nor" then
		text = nor_l
	--nor-nori forms
	elseif args == "nor-nori" then
		text = nor_l .. ", taking " .. nori_l .. " as indirect object,"
	--nor-nork forms
	elseif args == "nor-nork" then
		text = nork_l .. ", taking " .. nor_l .. " as direct object,"
	--nor-nori-nork forms
	elseif args == "nor-nori-nork" then
		text = nork_l .. ", taking " .. nori_l .. " as indirect object and " .. nor_l .. " as direct object,"
	else
		error("Invalid verb form type.")
	end
	
	--add tenses
	if personal_paradigms] then
		if tenses] then
			text = text .. " " .. tenses] .. " form of"
		else
			error("Please provide a valid tense/mood.")
		end			
	end
	
	local lemma_obj = {lang = lang, term = args, gloss = args}
	if not altalloc then
		return require("Module:form of").format_form_of{text = text, lemmas = {lemma_obj}, lemma_face = "term", posttext = dot} .. (nocat and "" or m_utilities.format_categories(cats, lang))
	else
		local altform = mw.getCurrentFrame():preprocess('\n#: {{alti|eu|' .. altalloc .. '}}')
		return require("Module:form of").format_form_of{text = text, lemmas = {lemma_obj}, lemma_face = "term", posttext = dot} .. (nocat and "" or m_utilities.format_categories(cats, lang)) .. altform
	end
end

return export