Mòdul:es-lema

De Viccionari
Icona de documentació de mòdul Documentació del mòdul[mostra] [modifica] [refresca]

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Aquest mòdul presenta un lema en castellà amb les indicacions de flexió, la sil·labificació i les categories corresponents ordenades. Actualment dóna suport a les plantilles {{es-nom}}, {{es-adj}}, {{es-verb}}, {{es-nom-forma}} i {{es-adj-forma}}. Vegeu la documentació de les plantilles per a la seva utilització.

El mòdul es recolza en Mòdul:es-general per a les funcions generals d'ordenació. S'invoca amb una única funció flex amb l'argument apropiat. Exemple: {{#invoke:es-lema|flex|Substantius}}

Genera les formes en femení i en plural a partir d'unes regles vàlides en la majoria de casos. Genera també les etiquetes necessàries per a l'edició accelerada de formes flexionades.

local p = {}

local lang = {code = "es", name = "castellà", sc = "Latn"}
local missing_entry = "Termes en " .. lang.name .. " amb flexions a crear"
local pos_functions = {}

-- Forma femenina habitual en els adjectius
local function formaFemenina(base)
	local fem = base
	fem = mw.ustring.gsub(fem, "[oe]$", "a")
	fem = mw.ustring.gsub(fem, "és$", "esa")
	fem = mw.ustring.gsub(fem, "án$", "ana")
	fem = mw.ustring.gsub(fem, "én$", "ena")
	fem = mw.ustring.gsub(fem, "ín$", "ina")
	fem = mw.ustring.gsub(fem, "ón$", "ona")
	fem = mw.ustring.gsub(fem, "ún$", "una")
	if fem == base then
		fem = base .. "a"
	end
	return fem
end

-- Plurals segons http://lema.rae.es/dpd/?key=plural
local function formaPlural(head)
	local plural = head
	if mw.ustring.find(head, "[áéíóú][ns]$") then
		plural = mw.ustring.gsub(plural, "á([ns])$", "a%1es")
		plural = mw.ustring.gsub(plural, "é([ns])$", "e%1es")
		plural = mw.ustring.gsub(plural, "í([ns])$", "i%1es")
		plural = mw.ustring.gsub(plural, "ó([ns])$", "o%1es")
		plural = mw.ustring.gsub(plural, "ú([ns])$", "u%1es")
	elseif mw.ustring.find(head, "[aeiou]%l%l?en$") then
		plural = mw.ustring.gsub(plural, "a(%l%l?)en$", "á%1enes")
		plural = mw.ustring.gsub(plural, "e(%l%l?)en$", "é%1enes")
		plural = mw.ustring.gsub(plural, "i(%l%l?)en$", "í%1enes")
		plural = mw.ustring.gsub(plural, "o(%l%l?)en$", "ó%1enes")
		plural = mw.ustring.gsub(plural, "u(%l%l?)en$", "ú%1enes")
	elseif mw.ustring.find(head, "[aeiouáéó]$") then
		plural = head .. "s"
	elseif mw.ustring.find(head, "z$") then
		plural = mw.ustring.gsub(plural, "z$", "ces")
	elseif mw.ustring.find(head, "[^aáeéiíoóuú][^aáeéiíoóuúsh]$") then -- dues consonants
		plural = head .. "s"
	elseif mw.ustring.find(head, "[aeiou]y$") then -- excepte préstecs recents
		plural = head .. "es"
	elseif mw.ustring.find(head, "[^íúlrndzjsx]$") then -- TODO: [íú] pot tenir dues formes 
		plural = head .. "s"
	else
		plural = head .. "es"
	end
	return plural
end

-- Forma plural
local function formaPluralNominal(head)
	if head:find("[^ ]+ [^ ]+") then
		local preposicions = {" a ", " al ", " ante ", " bajo ", " con ", " contra ", " de ", " del ", " dentro ", " desde ", " en ",
			 " entre ", " fuera ", " hacia ", " para ",	" por ", " sin ", " sobre "}
		for i, prep in ipairs(preposicions) do
			offset = mw.ustring.find(head, prep, 1, true)
			if offset then
				local part1 = mw.ustring.sub(head, 1, offset-1)
				local part2 = mw.ustring.sub(head, offset)
				local plural = formaPluralNominal(part1)
				return plural .. part2
			end
		end
		local plurals = {}
		for part in mw.text.gsplit(head, " ", true) do
			local partplural = formaPlural(part)
			table.insert(plurals, partplural)
		end
		local plural = table.concat(plurals, " ")
		return plural
	else
		return formaPlural(head)
	end
end

-- Funció d'entrada per mostrar el lema flexionat, l'única que s'invoca des d'una plantilla
function p.flex(frame)
	local args = frame:getParent().args
	pagename = args.pagename
	if not pagename or pagename == "" then
		pagename = mw.title.getCurrentTitle().subpageText
	end
	
	local data = {lang = lang, heads = {}, genders = {}, inflections = {}, categories = {}}
	local head = args.lema; if head == "" then head = nil end
	table.insert(data.heads, head)
	local isLemma = frame.args['forma'] == nil and true or nil

	local poscat = frame.args[1] or error("Falta especificar la categoria lèxica com a primer paràmetre.")
	if pos_functions[poscat] then
		pos_functions[poscat].func(args, data, isLemma)
	else
		table.insert(data.categories, poscat .. " en " .. lang.name)
	end
	if args.cat and args.cat ~= "" then
		table.insert(data.categories, args.cat)
	end
	
	if args.bot then
		return require("Mòdul:lema").make_bot_list(data.inflections)
	else
		return require("Mòdul:lema").full_headword(data)
	end
end

-- Informació de flexió per a substantius
pos_functions["Substantius"] = {func = function(args, data, isLemma)
	
	-- Codis gènere-nombre:
	--	"m", "f", "mf", "mof", "fom"
	--	"m-p", "f-p", "mf-p" pluralia tantum
	--	"m-s", "f-s", "mf-s" només o normalment en singular
	--	"m-i", "f-i", "mf-i" invariable en nombre
	--	"m-?", "f-?", "mf-?" sense plural conegut
	--	"mp", "fp", "mfp"    flexionats en plural

	local genere = args[1] or ""
	local plural = args[2] or args.p
	local plural2 = args.p2 -- si està buit, l'anul·la
	local fem = args["f"]
	
	if genere == "p" then genere = "?p" end -- possible error en generar plurals
	local tipus = nil
	local gn = mw.text.split(genere, "-")
	if #gn > 1 then
		genere = gn[1]
		tipus = gn[2]
	end
	if genere == "" then
		table.insert(data.genders, "?")
	else -- conversió a "m", "f", "m-f", "m-p", "f-p", "m-f-p"
		local generes = mw.text.split(genere, "")
		local str_gender, sep = '', ''
		for _, g in ipairs(generes) do
			if g ~= "-" and g ~= "o" then
				str_gender = str_gender .. sep
				sep = '-'
			else
				sep = ''
			end
			str_gender = str_gender .. g
		end
		table.insert(data.genders, str_gender)
	end
	
	-- Categoria gramatical
	if mw.ustring.find(pagename, "[^ ]+ [^ ]+") then
		if isLemma then
			table.insert(data.categories, "Locucions nominals en " .. lang.name)
		else
			table.insert(data.categories, "Formes de locucions nominals en " .. lang.name)
		end
	elseif genere == "mf" or genere == "fm" or genere == "mof" or genere == "fom" then
		table.insert(data.categories, "Substantius femenins i masculins en " .. lang.name)
	elseif genere == "mfp" then
		table.insert(data.categories, "Formes de substantius en plural en " .. lang.name)
	elseif genere == "m" then
		table.insert(data.categories, "Substantius masculins en " .. lang.name)
	elseif genere == "mp" then
		table.insert(data.categories, "Formes de substantius en plural en " .. lang.name)
	elseif genere == "f" then
		if isLemma then
			table.insert(data.categories, "Substantius femenins en " .. lang.name)
		else
			table.insert(data.categories, "Formes de substantius en femení en " .. lang.name)
		end
	elseif genere == "fp" then
		table.insert(data.categories, "Formes de substantius en plural en " .. lang.name)
	elseif genere == "?p" then
		table.insert(data.categories, "Plurals en " .. lang.name)
	else
		if isLemma then
			table.insert(data.categories, "Substantius en " .. lang.name)
		else
			table.insert(data.categories, "Formes de substantius en " .. lang.name)
		end
	end
	
	-- Plural
	if not (tipus == "?" or genere == "mp" or genere == "fp" or genere == "mfp" or genere == "?p") then
		if tipus == "i" then
			table.insert(data.inflections, {label = "plural invariable"})
			table.insert(data.categories, "Substantius amb plural invariable en " .. lang.name)
		elseif tipus == "p" then
			table.insert(data.inflections, {label = "plurale tantum"})
		elseif tipus == "s" then
			if plural then
				table.insert(data.inflections, {label = "normalment en singular"})
			else
				table.insert(data.inflections, {label = "només en singular"})
			end
		end
		if plural ~= nil or tipus == nil then
			if plural == "" or plural == nil then
				plural = formaPluralNominal(pagename)
			end
			local infl_parts = {label = "plural", accel = "plural-form-of gender-" .. genere}
			table.insert(infl_parts, plural)
			if plural2 ~= "" then
				table.insert(infl_parts, plural2)
			end
			table.insert(data.inflections, infl_parts)
			if not mw.title.new(plural).exists or (plural2 and plural2 ~= "" and not mw.title.new(plural2).exists) then
				table.insert(data.categories, missing_entry)
			end
		end
	end
	
	-- Femení
	if fem == "" then
		fem = formaFemenina(pagename)
	end
	if fem then
		table.insert(data.inflections, {label = "femení", fem, accel = "femenina-form-of gender-f"})
		if not mw.title.new(fem).exists then
			table.insert(data.categories, missing_entry)
		end
	end
end
}

-- Informació de flexió per a adjectius
pos_functions["Adjectius"] = {func = function(args, data, isLemma)
	-- Gènere: m (masculí), i (invariable)
	-- Gènere flexionats: f, mp, fp, ip
	local genere = args[1]; if genere == "" then genere = nil end
	local locucio = string.find(pagename, "[^ ]+ [^ ]+")
	if not genere then
		if locucio then
			genere = "loc"
		elseif string.find(pagename, "a$") then
			genere = "i"
		else
			genere = "m"
		end
	end
	genere = string.gsub(genere, "mf", "i")
	genere = string.gsub(genere, "([^%-])p$", "%1%-p") -- conversió a "m-p", "f-p", "i-p"
	table.insert(data.genders, genere)

	-- Plurals:
	--	p= plural masculí o plural de gènere invariable
	--	p2= segon plural masculí o invariable
	--	pf = plural femení

	local p = formaPlural(pagename)
	local plural = args.p or p
	local plural2 = args.p2; if plural2 == "" then plural2 = nil end
	local plural_fem = args.pf; if plural_fem == "" then plural_fem = nil end
	
	-- Gènere invariable
	if genere == "i" or genere == "i-i" then
		if locucio then
			table.insert(data.categories, "Locucions adjectivals en " .. lang.name)
		else
			table.insert(data.categories, "Adjectius en " .. lang.name)
			table.insert(data.categories, "Adjectius invariables en " .. lang.name)
		end
		if genere ~= "i-i" then
			local infl_parts = {label = "plural", accel = "plural-form-of gender-i"}
			table.insert(infl_parts, plural)
			if plural2 ~= "" then
				table.insert(infl_parts, plural2)
			end
			table.insert(data.inflections, infl_parts)
			if not mw.title.new(plural).exists then
				table.insert(data.categories, missing_entry)
			end
		end
	-- Doble gènere
	elseif genere == "m" then
		table.insert(data.categories, "Adjectius en castellà")
		local fem = args.f or formaFemenina(pagename)
		plural_fem = args.pf or formaPlural(fem)
		table.insert(data.inflections, {label = "femení", accel = "femenina-form-of gender-f", fem})
		table.insert(data.inflections, {label = "plural masculí", accel = "plural-form-of gender-m", plural})
		table.insert(data.inflections, {label = "plural femení", accel = "plural-form-of gender-f origin-" .. fem, plural_fem})
		if not mw.title.new(fem).exists or not mw.title.new(plural).exists or not mw.title.new(plural_fem).exists then
			table.insert(data.categories, missing_entry)
		end
	-- Formes flexionades
	elseif genere == "f" then
		table.insert(data.categories, "Formes d'adjectius en femení en " .. lang.name)
		plural_fem = plural_fem or formaPlural(pagename)
		table.insert(data.inflections, {label = "plural", accel = "plural-form-of gender-f", plural_fem})
		if not mw.title.new(plural_fem).exists then
			table.insert(data.categories, missing_entry)
		end
	elseif genere == "m-p" then
		table.insert(data.categories, "Formes d'adjectius en plural en " .. lang.name)
	elseif genere == "f-p" then
		table.insert(data.categories, "Formes d'adjectius en plural en " .. lang.name)
	elseif genere == "i-p" then
		table.insert(data.categories, "Formes d'adjectius en plural en " .. lang.name)
	elseif genere == "loc" then
		table.insert(data.categories, "Locucions adjectivals en " .. lang.name)
	end
	
end
}

-- Flexió de numerals: cardinals invariables, altres com adjectius
pos_functions["Numerals"] = {func = function(args, data, isLemma)
	local genere = args[1] or "i"
	local fem = args.f
	local plural = args.p
	local plural2 = args.p2
	local plural_fem = args.pf
	
	table.insert(data.categories, "Numerals en " .. lang.name)
	
	-- femení
	fem = fem or formaFemenina(pagename)
	if genere == "m" or (genere == "i" and args.f) then
		table.insert(data.genders, "m")
		table.insert(data.inflections, {label = "femení", fem})
	elseif genere ~= 'i' then
		table.insert(data.genders, genere)
	end
	
	-- plurals
	if genere == "m" then
		plural = plural or formaPlural(pagename)
		plural_fem = plural_fem or formaPlural(fem)
		if plural_fem == plural then
			table.insert(data.inflections, {label = "plural", plural})
		else
			table.insert(data.inflections, {label = "plural masculí", plural, plural2})
			table.insert(data.inflections, {label = "plural femení", plural_fem})
		end
	end
	
end
}

-- Informació de verbs
pos_functions["Verbs"] = {func = function(args, data, isLemma)
	local tipus = args[1] or ""
	local titol = pagename
	formaPron = titol:find("rse$")
	locucio = titol:find(" ")
	
	if locucio then
		table.insert(data.categories, "Locucions verbals en " .. lang.name)
	elseif formaPron then
		table.insert(data.categories, "Verbs pronominals en " .. lang.name)
	else
		table.insert(data.categories, "Verbs en " .. lang.name)
	end

	if formaPron and not tipus:find("p") then
		tipus = tipus .. "p"
	end

	if tipus ~= "" then
		local totsTipus = mw.text.split(tipus, "-")
		for i, tipusx in ipairs(totsTipus) do
			local tipusPart = mw.text.split(tipusx, "")
			local gendersPart = {}
			for ii, tipusPartx in ipairs(tipusPart) do
				if tipusPartx ~= "?" then tipusPartx = "v" .. tipusPartx end
				table.insert(gendersPart, tipusPartx)
			end
			table.insert(data.genders, table.concat(gendersPart, "-"))
		end
	end
	
	local flexPron = args["p"]; if flexPron == "" then flexpron = nil end
	if not flexPron and tipus:find("p") and titol:find("r$") then
		flexPron = titol .. "se"
	end
	if flexPron then
		table.insert(data.inflections, {label = "pronominal", flexPron})
	end
	
	-- conjugació
	local defectiu = args.defectiu; if defectiu ~= nil then defectiu = true end
	local present = args.present; if present == "" then present = nil end
	local presentAlt = args.present2; if presentAlt == "" then presentAlt = nil end
	local passat = args.passat; if passat == "" then passat = nil end
	local futur = args.futur; if futur == "" then futur = nil end
	local verb = titol
	if formaPron then
		verb = titol:gsub("se$", "")
	end
	
	if defectiu then
		table.insert(data.inflections, {label = "defectiu"})
	end
	-- present
	local present2
	if not defectiu and not locucio and not present then
		present = mw.ustring.gsub(verb, "[aeií]r$", "o") -- regular
		-- 1a conjugació irregular
		if verb:find("ar$") then
			if verb:find("iar$") then
				present2 = mw.ustring.gsub(verb, "iar$", "ío") -- envío... però anuncio...
			elseif verb:find("uar$") then
				present2 = mw.ustring.gsub(verb, "uar$", "úo") -- actúo... però averiguo...
			elseif verb:find("[ae]i[^aeiou]+ar$") then
				present2 = mw.ustring.gsub(verb, "i([^aeiou]+)ar$", "í%1o") -- aíslo... però bailo, peino...
			elseif verb:find("[ae]u[^aeiou]+ar$") then
				present2 = mw.ustring.gsub(verb, "u([^aeiou]+)ar$", "ú%1o") -- aúno... però causo...
			elseif verb:find("e[^aeiou]+ar$") then
				present2 = verb:gsub("(e[^aeiou]+)ar$", "i%1o") -- acierto...
			elseif verb:find("o[^aeiou]+ar$") then
				present2 = verb:gsub("o([^aeiou]+)ar$", "ue%1o") -- cuento...
			elseif verb:find("[aeo]hi[^aeiou]+ar$") then
				present = mw.ustring.gsub(verb, "([aeo])hi([^aeiou]+)ar$", "%1hí%2o") -- accent ahílo, rehílo, prohíjo...
			elseif verb:find("[ae]hu[^aeiou]+$") then
				present = mw.ustring.gsub(verb, "([ae])hu([^aeiou]+)ar$", "%1hú%2o") -- accent ahúmo, rehúso...
			elseif verb == "dar" or verb == "desdar" or verb == "jugar" or verb == "errar" then -- provisional, a passar com a paràmetre
				present2 = "irregular"
			end
		-- 2a conjugació irregular
		elseif verb:find("er$") then
			if verb == "caber" or verb == "haber" or verb == "oler" or verb == "saber" then -- provisional, a passar com a paràmetre
				present2 = "irregular"
			elseif verb:find("aer$") then
				present = verb:gsub("er$", "igo")
			elseif verb:find("[hf]acer$") then
				present = verb:gsub("cer$", "go")
			elseif verb:find("poner$") or verb:find("tener$") or verb:find("valer$") then
				present = verb:gsub("er$", "go")
			elseif verb:find("[aeiou]cer$") then
				present = verb:gsub("cer$", "zco") -- amb unes poques excepcions rares
			elseif verb:find("ger$") then
				present = verb:gsub("ger$", "jo")
			elseif verb:find("ver$") then
				present2 = verb:gsub("er$", "eo")
			elseif verb:find("e[^aeiou]+er$") then
				present2 = verb:gsub("(e[^aeiou]+)er$", "i%1o")
			elseif verb:find("o[^aeiou]+er$") then
				present2 = verb:gsub("o([^aeiou]+)er$", "ue%1o")
			end
		-- 3a conjugació irregular
		elseif mw.ustring.find(verb, "[ií]r$") then
			if verb == "erguir" then -- paràmetre!
				present = "yergo"
			elseif verb == "contraír" then -- paràmetre!
				present = mw.ustring.gsub(verb, "ír$", "voy")
			elseif verb:find("quirir$") then -- 6 casos
				present = verb:gsub("rir$", "ero")
			elseif verb:find("venir$") or verb:find("a[ls]ir$") then
				present = verb:gsub("ir$", "go")
			elseif verb:find("decir$") then
				present = verb:gsub("ecir$", "igo")
			elseif verb:find("egir$") then
				present = verb:gsub("egir$", "ijo")
			elseif verb:find("gir$") then
				present = verb:gsub("gir$", "jo")
			elseif verb:find("erir$") or verb:find("entir$") or verb:find("er[nv]ir$") or verb:find("[pv]ertir$") or verb:find("hendir$") then
				present = verb:gsub("e([^aeiou]+)ir$", "ie%1o")
			elseif verb:find("e[^aeiou]+ir") then
				present2 = verb:gsub("e([^aeiou]+)ir$", "i%1o")
			elseif verb:find("cir$") then
				present = verb:gsub("cir$", "zco")
			elseif verb:find("uir$") then
				present = verb:gsub("ir$", "yo")
			elseif verb:find("dormir$") or verb:find("morir$") then
				present = verb:gsub("o(rm?)ir$", "ue%1o")
			elseif mw.ustring.find(verb, "oír$") then
				present = mw.ustring.gsub(verb, "ír$", "igo")
			elseif mw.ustring.find(verb, "eír$") then
				present = mw.ustring.gsub(verb, "eír$", "ío")
			end
		end
	end
	if present2 then
		table.insert(data.inflections, {label = "present [" .. present .. "? o " .. present2 .. "?]"})
		table.insert(data.categories, "Manteniment plantilla es-verb")
	elseif present then
		if formaPron then
			if presentAlt then
				table.insert(data.inflections, {label = "present", "me [[" .. present .. "]]", "me [[" .. presentAlt .. "]]"})
			else
				table.insert(data.inflections, {label = "present", "me [[" .. present .. "]]"})
			end
		elseif presentAlt then
			table.insert(data.inflections, {label = "present", present, presentAlt})
		else
			table.insert(data.inflections, {label = "present", present})
		end
		if not mw.title.new(present).exists then
			table.insert(data.categories, missing_entry)
		end
	end
	-- passat
	if not defectiu and not locucio and not passat then
		-- 1a conjugació
		if verb:find("ar$") then
			if verb:find("guar$") then
				passat = mw.ustring.gsub(verb, "guar$", "güé")
			elseif verb:find("gar$") then
				passat = mw.ustring.gsub(verb, "gar$", "gué")
			elseif verb:find("car$") then
				passat = mw.ustring.gsub(verb, "car$", "qué")
			elseif verb:find("^[cflmp]iar$")
			or verb:find("^c[hr]iar$") or verb == "guiar"
			then
				passat = mw.ustring.gsub(verb, "ar$", "e")
			elseif verb:find("zar$") then
				passat = mw.ustring.gsub(verb, "zar$", "cé")
			elseif verb == "andar" then -- provisional, a passar com a paràmetre
				passat = verb:gsub("ar$", "uve")
			elseif verb == "dar" then -- provisional, a passar com a paràmetre
				passat = "di"
			elseif verb == "desdar" then -- provisional, a passar com a paràmetre
				passat = "desdí"
			else
				passat = mw.ustring.gsub(verb, "ar$", "é")
			end
		-- 2a conjugació
		elseif verb:find("er$") then
			if verb == "ver" then -- provisional, a passar com a paràmetre
				passat = "vi"
			elseif verb == "haber" or verb == "poder" then -- provisional, a passar com a paràmetre
				passat = verb:gsub("[ao]([bd])er$", "u%1e")
			elseif verb:find("[hf]acer$") then -- 15 casos
				passat = verb:gsub("acer$", "ice")
			elseif verb:find("poner$") then -- 27 casos
				passat = verb:gsub("oner$", "use")
			elseif verb:find("[cs]aber$") then -- 3 casos: caber, saber, resaber > passar com a paràmetre
				passat = verb:gsub("aber$", "upe")
			elseif verb:find("querer$") then -- 4 casos
				passat = verb:gsub("erer$", "ise")
			elseif verb:find("tener$") then -- 12 casos
				passat = verb:gsub("ener$", "uve")
			elseif verb:find("traer$") then -- 16 casos
				passat = verb:gsub("er$", "je")
			else
				passat = mw.ustring.gsub(verb, "er$", "í")
			end
		-- 3a conjugació
		elseif mw.ustring.find(verb, "[ií]r$") then
			if verb == "contraír" then -- paràmetres!
				passat = "contrafuí"
			elseif verb:find("ducir$") then
				passat = verb:gsub("cir$", "je")
			elseif verb:find("decir$") then
				passat = verb:gsub("ecir$", "ije")
			elseif verb:find("venir$") then
				passat = verb:gsub("enir$", "ine")
			else
				passat = mw.ustring.gsub(verb, "[ií]r$", "í")
			end
		end
	end
	if passat then
		if formaPron then
			table.insert(data.inflections, {label = "passat", "me [[" .. passat .. "]]"})
		else
			table.insert(data.inflections, {label = "passat", passat})
		end
		if not mw.title.new(passat).exists then
			table.insert(data.categories, missing_entry)
		end
	end
	-- futur
	if not defectiu and not locucio and not futur then
		futur = verb .. "é" -- regular
		-- 2a conjugació irregular
		if verb == "caber" or verb == "haber" or verb == "poder" or verb == "saber" or verb == "resaber" then -- paràmetre!
			futur = mw.ustring.gsub(verb, "er$", "ré")
		elseif verb:find("querer$") then -- 4 casos
			futur = mw.ustring.gsub(verb, "er$", "ré")
		elseif verb:find("[hf]acer$") then -- 15 casos
			futur = mw.ustring.gsub(verb, "cer$", "ré")
		elseif verb:find("tener$") or verb:find("poner$") or verb:find("valer$") then
			futur = mw.ustring.gsub(verb, "er$", "dré")
		-- 3a conjugació irregular
		elseif verb:find("decir$") then
			futur = mw.ustring.gsub(verb, "ecir$", "iré")
		elseif verb:find("ír$") then
			futur = mw.ustring.gsub(verb, "ír$", "iré")
		elseif verb:find("salir$") or verb:find("venir$") then
			futur = mw.ustring.gsub(verb, "ir$", "dré")
		end
	end
	if futur then
		if formaPron then
			table.insert(data.inflections, {label = "futur", "me [[" .. futur .. "]]"})
		else
			table.insert(data.inflections, {label = "futur", futur})
		end
		if not mw.title.new(futur).exists then
			table.insert(data.categories, missing_entry)
		end
	end
	
end
}

-- Funcions de demo
function p.fem(frame)
	return formaFemenina(frame.args[1])
end
		
function p.plural(frame)
	return formaPluralNominal(frame.args[1])
end

return p