Aller au contenu

Module:sv-flexion

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.

 Documentation[voir] [modifier] [historique] [purger]

Ce module regroupe les fonctions pour afficher les infoboites de flexion en suédois.

Fonctions activées sur les modèles

--========================================================================================
-- Module:sv-flexion : génération des tableaux de flexions des mots en suédois
------------------------------------------------------------------------------------------
-- auteurs principaux : Surkål
-- licence : CC-BY-SA 3.0
--========================================================================================
local p={}
local bases = require('Module:bases')

------------------------------------------------------
-- retourne le mot moins la dernière lettre
function remove_last_letter(TitrePage)
	return mw.ustring.sub(TitrePage, 0, -2)
end

------------------------------------------------------
-- fonction qui retourne la dernière lettre d'une chaîne de caractères
function last_letter(chaine)
	return mw.ustring.sub(chaine, -1, -1)
end

------------------------------------------------------
function make_inflection(args, param, radic, term)
	if args[param] then
		return args[param]
	else
		return radic..term
	end
end

------------------------------------------------------
-- retourne la racine, amputée de la lettre "e" à la dernière
-- ou avant-dernière position
function form_e_root(racine)
	if last_letter(racine) == "e" then
		return remove_last_letter(racine)
	end
	return mw.ustring.sub(racine, 0, -3)..last_letter(racine)
end

------------------------------------------------------
-- vérifie les racines en fonction des paramètres
function make_roots(args, Radic, TitrePage)
	local RadicPl = ""
	if (args["2"] or args["rac"] or args["racine"]) then
		Radic = args["2"] or args["rac"] or args["racine"]
	end
	if (args["3"] or args["rac-pl"] or args["racine-pl"]) then
		RadicPl = args["3"] or args["rac-pl"] or args["racine-pl"]
	else
		if args["2"] then
			RadicPl = TitrePage
		else
			RadicPl = Radic
		end
	end
	return Radic, RadicPl
end

-- détermine le genre du mot en fonction du paramètre "g" (ou "genre")
function get_gender(args)
	local g = args["g"] or args["genre"]
	if not g then return "Genre inconnu" end  -- peut éviter quelques boucles inutiles
	
	local genre = {["c"] = "Commun", ["n"] = "Neutre", ["m"] = "Masculin", ["f"] = "Féminin"}
	if genre[g] then return genre[g] else return "Genre inconnu" end
end

------------------------------------------------------
-- tableau de flexions générique à 2 formes (habituellement les noms indénombrables)
function tableau_generique_2(prm)
	-- génération tableau
	local txt = '{| class="flextable flextable-sv"\n'..
            	'! class="invisible" |\n'..
            	'|-\n'..
            	'! '..prm.genre..'\n'..
            	'! Indéfini\n'..
            	'! Défini\n'..
            	'|-\n'..
            	'! Indénombrable\n'..
            	'| class="sing-indef" |' .. bases.lien_modele(prm.SI, 'sv') .. '\n'..
            	'| class="sing-def" |' .. bases.lien_modele(prm.SD, 'sv') .. '\n'..
            	'|}'

	if bases.page_principale() then
	    if not bases.page_existe(prm.SI) then
    		txt = txt .. '[[Catégorie:Singuliers indéfinis manquants en suédois]]'
    	end

    	if not bases.page_existe(prm.SD) then
    		txt = txt .. '[[Catégorie:Singuliers définis manquants en suédois]]'
    	end
    end

    return txt
end

------------------------------------------------------
-- tableau de flexions générique à 4 formes
function tableau_generique_4(prm)
	-- génération tableau
	local txt = '{| class="flextable flextable-sv"\n'..
            	'! class="invisible" |\n'..
            	'|-\n'..
            	'! '..prm.genre..'\n'..
            	'! Indéfini\n'..
            	'! Défini\n'..
            	'|-\n'..
            	'! Singulier\n'..
            	'| class="sing-indef" |' .. bases.lien_modele(prm.SI, 'sv') .. '\n'..
            	'| class="sing-def" |' .. bases.lien_modele(prm.SD, 'sv') .. '\n'..
            	'|-\n'..
            	'! Pluriel\n'..
            	'| class="plur-indef" |' .. bases.lien_modele(prm.PI, 'sv') .. '\n'..
            	'| class="plur-def" |' .. bases.lien_modele(prm.PD, 'sv') .. '\n'..
            	'|}'

	if bases.page_principale() then
	    if not bases.page_existe(prm.SI) then
    		txt = txt .. '[[Catégorie:Singuliers indéfinis manquants en suédois]]'
    	end

    	if not bases.page_existe(prm.SD) then
    		txt = txt .. '[[Catégorie:Singuliers définis manquants en suédois]]'
	    end

    	if not bases.page_existe(prm.PI) then
	    	txt = txt .. '[[Catégorie:Pluriels indéfinis manquants en suédois]]'
    	end

    	if not bases.page_existe(prm.PD) then
	    	txt = txt .. '[[Catégorie:Pluriels définis manquants en suédois]]'
	    end
	end

	return txt
end

--=======================================================================================
function p.boite_an_or_orna(frame)  -- pour Modèle:sv-nom-c-or
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
  
	-- détection du radical
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["1"] or mw.title.getCurrentTitle().text
	local Radic = ""
	local RadicPl = ""
	local term = "n"
	if last_letter(TitrePage) == "a" then
		Radic = remove_last_letter(TitrePage)
		term = "an"
	else
		Radic = TitrePage
	end
	if args["en"] then
		term = "en"
	end
	
	-- vérifie la présence d'indications sur les racines
	Radic, RadicPl = make_roots(args, Radic, TitrePage)
  
	-- construction de la structure de paramètres pour tableau_generique_4
	local params = {}
	params.genre = "Commun"
	params.SI = TitrePage
	params.SD = make_inflection(args, "2", Radic, term)
	params.PI = make_inflection(args, "3", RadicPl, "or")
	params.PD = make_inflection(args, "4", RadicPl, "orna")
  
	-- génération du tableau
	if args["nopl"] then return tableau_generique_2(params) end
	return tableau_generique_4(params)
end

--=======================================================================================
function p.boite_en_er_erna(frame)  -- pour Modèle:sv-nom-c-er
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
	
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["1"] or mw.title.getCurrentTitle().text
	local Radic = TitrePage
	
	-- s'il existe un paramètre "e", enlève la lettre "e" en dernière ou avant-dernière position
	if args["e"] then Radic = form_e_root(TitrePage) end
	
	-- s'il existe un paramètre "dern", ajoute à la racine la dernière lettre du mot
	if args["dern"] then
		Radic = TitrePage..last_letter(TitrePage)
	end
	
	-- vérifie la présence d'indications sur les racines
	Radic, RadicPl = make_roots(args, Radic, TitrePage)
	
	-- construction de la structure de paramètres pour tableau_generique_4
	local params = {}
	params.genre = "Commun"
	params.SI = TitrePage
	if args["r"] then
		params.SD = make_inflection(args, "2", Radic, "n")
		params.PI = make_inflection(args, "3", RadicPl, "")
		params.PD = make_inflection(args, "4", RadicPl, "na")
	else
		if args["n"] then
			params.SD = make_inflection(args, "2", Radic, "n")
		else
			params.SD = make_inflection(args, "2", Radic, "en")
		end
		params.PI = make_inflection(args, "3", RadicPl, "er")
		params.PD = make_inflection(args, "4", RadicPl, "erna")
	end
	
	-- génération du tableau
	return tableau_generique_4(params)
end

--=======================================================================================
function p.boite_en_ar_arna(frame)  -- pour Modèle:sv-nom-c-ar
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
	
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["1"] or mw.title.getCurrentTitle().text
	local Radic = TitrePage
	
	-- s'il existe un paramètre "e", former le radical en enlevant la dernière lettre
	if args["e"] then
		Radic = remove_last_letter(TitrePage)
	end
	
	-- vérifie la présence d'indications sur les racines
	Radic, RadicPl = make_roots(args, Radic, TitrePage)
	
	-- construction de la structure de paramètres pour tableau_generique_4
	local params = {}
	params.genre = "Commun"
	params.SI = TitrePage
	if (args["n"] or args["rajoute"] or args["raj"]) then
		params.SD = make_inflection(args, "2", Radic, "n")
		if args["n"] then
			RadicPl = mw.ustring.sub(TitrePage, 0, -3)..last_letter(TitrePage)
		end
		params.PI = make_inflection(args, "3", RadicPl, "ar")
		params.PD = make_inflection(args, "4", RadicPl, "arna")
	elseif args["are"] then
		params.SD = make_inflection(args, "2", Radic, "n")
		params.PI = make_inflection(args, "3", RadicPl, "")
		params.PD = make_inflection(args, "4", remove_last_letter(RadicPl), "na")
	else
		params.SD = make_inflection(args, "2", Radic, "en")
		params.PI = make_inflection(args, "3", RadicPl, "ar")
		params.PD = make_inflection(args, "4", RadicPl, "arna")
	end
	
	-- génération du tableau
	return tableau_generique_4(params)
end

--=======================================================================================
function p.boite_en(frame)  -- pour Modèle:sv-nom-c-ind
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
	
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["1"] or mw.title.getCurrentTitle().text
	local Radic = (args["rac"] or TitrePage)
	
	-- construction de la structure de paramètres pour tableau_generique_2
	local params = {}
	params.genre = "Commun"
	params.SI = TitrePage
	if (args["n"] or args["rajoute"] or args["raj"]) then
		params.SD = make_inflection(args, "2", Radic, "n")
	else
		params.SD = args["2"] or make_inflection(args, "2", Radic, "en")
	end
	
	-- génération du tableau
	return tableau_generique_2(params)
end

--=======================================================================================
function p.boite_et(frame)  -- pour Modèle:sv-nom-n-ind
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
	
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["1"] or mw.title.getCurrentTitle().text
	local Radic = (args["rac"] or TitrePage)
	
	-- s'il existe un paramètre "m", ajoute la lettre "m" au radical
	if args["m"] then Radic = Radic.."m" end
	
	-- s'il existe un paramètre "e", enlève la lettre "e" en dernière ou avant-dernière position
	if args["e"] then Radic = form_e_root(TitrePage) end
	
	-- s'il existe un paramètre "um", on retire les 2 dernières lettre du radical"
	if args["um"] then Radic = mw.ustring.sub(Radic, 0, -3) end
	
	-- construction de la structure de paramètres pour tableau_generique_2
	local params = {}
	params.genre = "Neutre"
	params.SI = TitrePage
	params.SD = args["2"] or make_inflection(args, "2", Radic, "et")
	
	-- génération du tableau
	return tableau_generique_2(params)
end

--=======================================================================================
function p.boite_et_er_erna(frame)  -- pour Modèle:sv-nom-n-er
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
	
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["1"] or mw.title.getCurrentTitle().text
	local Radic = TitrePage
	
	-- s'il existe un paramètre "um", on retire les 2 dernières lettre du radical"
	if args["um"] then Radic = mw.ustring.sub(Radic, 0, -3) end
	
	-- vérifie la présence d'indications sur les racines
	Radic, RadicPl = make_roots(args, Radic, TitrePage)
	
	-- construction de la structure de paramètres pour tableau_generique_4
	local params = {}
	params.genre = "Neutre"
	params.SI = TitrePage
	params.SD = make_inflection(args, "2", Radic, "et")
	params.PI = make_inflection(args, "3", RadicPl, "er")
	params.PD = make_inflection(args, "4", RadicPl, "erna")
	
	-- génération du tableau
	return tableau_generique_4(params)
end

--=======================================================================================
function p.boite_et_en(frame)  -- pour Modèle:sv-nom-n-0
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
	
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["1"] or mw.title.getCurrentTitle().text
	local Radic = TitrePage
	
	-- paramètre "raj" ou "rajoute" pour ajouter une ou plusieurs lettres au radical
	if (args["raj"] or args["rajoute"]) then
		Radic = Radic..(args["raj"] or args["rajoute"])
	end
	
	-- s'il existe un paramètre "e", enlève la lettre "e" en dernière ou avant-dernière position
	if args["e"] then Radic = form_e_root(TitrePage) end
	
	-- vérifie la présence d'indications sur les racines
	Radic, RadicPl = make_roots(args, Radic, TitrePage)
	
	-- construction de la structure de paramètres pour tableau_generique_4
	local params = {}
	params.genre = "Neutre"
	params.SI = TitrePage
	params.SD = make_inflection(args, "2", Radic, "et")
	params.PI = args["3"] or TitrePage
	params.PD = make_inflection(args, "4", RadicPl, "en")
	
	-- génération du tableau
	return tableau_generique_4(params)
end

--=======================================================================================
function p.boite_et_en_ena(frame)  -- pour Modèle:sv-nom-n-n
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
	
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["1"] or mw.title.getCurrentTitle().text
	local Radic = TitrePage
	
	-- vérifie la présence d'indications sur les racines
	Radic, RadicPl = make_roots(args, Radic, TitrePage)
	
	-- construction de la structure de paramètres pour tableau_generique_4
	local params = {}
	params.genre = "Neutre"
	params.SI = TitrePage
	-- en présence du paramètre "raj" on ajoute la lettre "e" au radical
	local term = ""
	if (args["e"] or args["raj"] or args["rajoute"]) then term = "e" end
	params.SD = make_inflection(args, "2", Radic..term, "t")
	params.PI = make_inflection(args, "3", RadicPl..term, "n")
	params.PD = make_inflection(args, "4", RadicPl..term, "na")
	
	-- génération du tableau
	return tableau_generique_4(params)
end

--=======================================================================================
function p.boite_n_r_rna(frame)  -- pour Modèle:sv-nom-c-r
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
	
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["1"] or mw.title.getCurrentTitle().text
	local Radic = TitrePage
	
	-- vérifie la présence d'indications sur les racines
	Radic, RadicPl = make_roots(args, Radic, TitrePage)
	
	-- construction de la structure de paramètres pour tableau_generique_4
	local params = {}
	params.genre = "Commun"
	params.SI = TitrePage
	params.SD = make_inflection(args, "2", Radic, "n")
	params.PI = make_inflection(args, "3", RadicPl, "r")
	params.PD = make_inflection(args, "4", RadicPl, "rna")
	
	-- génération du tableau
	return tableau_generique_4(params)
end

--=======================================================================================
function p.boite_nom(frame) -- pour Modèle:sv-nom
--=======================================================================================
-- pour les paramètres, voir la documentation du modèle
-- utilise les paramètres frame:getParent() et donc ne peut être appelé que depuis un modèle
	-- récupération des paramètres passés au modèle
	local args = frame:getParent().args
	
	-- s'il existe un paramètre "mot", le prendre en priorité (utile pour les pages doc)
	local TitrePage = args["mot"] or args["0"] or mw.title.getCurrentTitle().text
	
	-- construction de la structure de paramètres pour tableau_generique_4
	local params = {}
	params.genre = get_gender(args)
	params.SI = TitrePage
	params.SD = make_inflection(args, "1", TitrePage, "")
	params.PI = make_inflection(args, "2", TitrePage, "")
	params.PD = make_inflection(args, "3", TitrePage, "")
	
	-- génération du tableau
	return tableau_generique_4(params)
end

return p