Module:sv-flexion

Bonjour, vous êtes venu ici pour chercher la signification du mot Module:sv-flexion. Dans DICTIOUS, vous trouverez non seulement toutes les significations du dictionnaire pour le mot Module:sv-flexion, mais vous apprendrez également son étymologie, ses caractéristiques et comment dire Module:sv-flexion au singulier et au pluriel. Tout ce que vous devez savoir sur le mot Module:sv-flexion est ici. La définition du mot Module:sv-flexion vous aidera à être plus précis et correct lorsque vous parlerez ou écrirez vos textes. Connaître la définition deModule:sv-flexion, ainsi que celles d'autres mots, enrichit votre vocabulaire et vous fournit des ressources linguistiques plus nombreuses et de meilleure qualité.

 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 then
		return args
	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 or args or args) then
		Radic = args or args or args
	end
	if (args or args or args) then
		RadicPl = args or args or args
	else
		if args 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 or args
	if not g then return "Genre inconnu" end  -- peut éviter quelques boucles inutiles
	
	local genre = { = "Commun",  = "Neutre",  = "Masculin",  = "Féminin"}
	if genre then return genre 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 .. ']'
    	end

    	if not bases.page_existe(prm.SD) then
    		txt = txt .. ']'
    	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 .. ']'
    	end

    	if not bases.page_existe(prm.SD) then
    		txt = txt .. ']'
	    end

    	if not bases.page_existe(prm.PI) then
	    	txt = txt .. ']'
    	end

    	if not bases.page_existe(prm.PD) then
	    	txt = txt .. ']'
	    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 or args 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 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 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 or args 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 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 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 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 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 or args 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 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 or args or args) then
		params.SD = make_inflection(args, "2", Radic, "n")
		if args 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 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 or args or mw.title.getCurrentTitle().text
	local Radic = (args or TitrePage)
	
	-- construction de la structure de paramètres pour tableau_generique_2
	local params = {}
	params.genre = "Commun"
	params.SI = TitrePage
	if (args or args or args) then
		params.SD = make_inflection(args, "2", Radic, "n")
	else
		params.SD = args 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 or args or mw.title.getCurrentTitle().text
	local Radic = (args or TitrePage)
	
	-- s'il existe un paramètre "m", ajoute la lettre "m" au radical
	if args 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 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 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 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 or args 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 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 or args or mw.title.getCurrentTitle().text
	local Radic = TitrePage
	
	-- paramètre "raj" ou "rajoute" pour ajouter une ou plusieurs lettres au radical
	if (args or args) then
		Radic = Radic..(args or args)
	end
	
	-- s'il existe un paramètre "e", enlève la lettre "e" en dernière ou avant-dernière position
	if args 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 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 or args 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 or args or args) 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 or args 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 or args 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