Module:it-flexion

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.
Sauter à la navigation Sauter à la recherche
Ce module regroupe les fonctions pour afficher les infoboites de flexion en italien.

info Documentation du Module:it-flexion : v · d · m · h.

Voir la liste des infoboites dans la documentation du modèle associé : Modèle:it-flexion.

Voir aussi : Aide:Gadget-CreerFlexionIt.


--========================================================================================
-- Module:it-flexion : génération des tableaux de flexions des mots en italien
------------------------------------------------------------------------------------------
-- basé sur le module fr-flexion écrit par ArséniureDeGallium
-- licence : CC-BY-SA 3.0
--========================================================================================
local lib_pron = require('Module:prononciation')
local bases = require("Module:bases")
local exports={}

------------------------------------------------------
-- raccourci pour prononciation en français
-- NB : nil est géré par lua_pron()
function pron(api,pref)
    return '<br>'..(pref or '')..lib_pron.lua_pron(api,'it')
end

------------------------------------------------------
-- raccourci pour prononciation additionnelle en français
-- si nil répond '', sinon préfixe par saut de ligne et le mot "ou" en small
function ou_pron(api,pref)
    if api then
        return '<br><small>ou</small> '..(pref or '')..lib_pron.lua_pron(api,'it')
    end
    return ''
end

-- lien vers une page en italien
function lien_it(page)
	--return '[['..page..'#it|'..page..']]'
	return bases.lien_modele(page, 'it')
end

-- catégorie pluriel manquant
function pluriel_manquant(mot)
	if mot == nil then
		return ''
	end
	
	if mot and (not bases.page_existe(mot)) then
		return '[[Catégorie:Pluriels manquants en italien]]'
	end

	return ''
end

------------------------------------------------------
-- tableau de flexions générique à 2 formes (habituellement singulier/pluriel)
function tableau_generique_2(prm)
    -- génération tableau
    local txt = '{| class="flextable flextable-it-mfsp"\n'
    
    if prm.titre then
    	txt = txt..'|+'..prm.titre..'\n'
    end

    txt = txt..
        '|-\n'..
        '!scope="col"| Singulier\n'..
        '!scope="col"| Pluriel\n'..
        '|-\n'..
        '|'..lien_it(prm.s)..pron(prm.pron_s,prm.S1pref1)..ou_pron(prm.S1pron2,prm.S1pref2)..ou_pron(prm.S1pron3,prm.S1pref3)..'\n'..
        '|'..lien_it(prm.p)..pron(prm.pron_p,prm.P1pref1)..ou_pron(prm.P1pron2,prm.P1pref2)..ou_pron(prm.P1pron3,prm.P1pref3)..'\n'..
        '|-\n'..
        '|}'

	-- catégorie pluriels manquants
	txt = txt .. pluriel_manquant(prm.p)

    return txt
end

------------------------------------------------------
-- tableau de flexions générique à 3 formes (1 singulier et 2 pluriels)
function tableau_generique_3(prm)
    -- génération tableau
    local txt = '{| class="flextable flextable-it-mfsp"\n'
    
    if prm.titre then
    	txt = txt..'|+'..prm.titre..'\n'
    end

    txt = txt..
        '|-\n'..
        '| class="invisible" |\n'..
        '!scope="col"| Singulier\n'..
        '!scope="col"| Pluriel\n'..
        '|-\n'..
        '! Masculin\n'..
        '|rowspan="2"|'..lien_it(prm.s)..pron(prm.pron_s,prm.S1pref1)..ou_pron(prm.S1pron2,prm.S1pref2)..ou_pron(prm.S1pron3,prm.S1pref3)..'\n'..
        '|'..lien_it(prm.p)..pron(prm.pron_p,prm.P1pref1)..ou_pron(prm.P1pron2,prm.P1pref2)..ou_pron(prm.P1pron3,prm.P1pref3)..'\n'..
        '|-\n'..
        '! Féminin\n'..
        '|'..lien_it(prm.p2)..pron(prm.pron_p2,prm.P1pref1)..ou_pron(prm.P1pron2,prm.P1pref2)..ou_pron(prm.P1pron3,prm.P1pref3)..'\n'..
        '|}'

	-- catégorie pluriels manquants
	txt = txt .. pluriel_manquant(prm.p)
	txt = txt .. pluriel_manquant(prm.p2)

    return txt
end

------------------------------------------------------
-- tableau de flexions générique à 4 formes (1 singulier et 2 pluriels)
function tableau_generique_4(prm)
    -- génération tableau
    local txt = '{| class="flextable flextable-it-mfsp"\n'
    
    if prm.titre then
    	txt = txt..'|+'..prm.titre..'\n'
    end

    txt = txt..
        '|-\n'..
        '| class="invisible" |\n'..
        '!scope="col"| Singulier\n'..
        '!scope="col"| Pluriel\n'..
        '|-\n'..
        '! Masculin\n'..
        '|'..lien_it(prm.s)..pron(prm.pron_s,prm.S1pref1)..ou_pron(prm.S1pron2,prm.S1pref2)..ou_pron(prm.S1pron3,prm.S1pref3)..'\n'..
        '|'..lien_it(prm.p)..pron(prm.pron_p,prm.P1pref1)..ou_pron(prm.P1pron2,prm.P1pref2)..ou_pron(prm.P1pron3,prm.P1pref3)..'\n'..
        '|-\n'..
        '! Féminin\n'..
        '|'..lien_it(prm.s2)..pron(prm.pron_s2,prm.P1pref1)..ou_pron(prm.P1pron2,prm.P1pref2)..ou_pron(prm.P1pron3,prm.P1pref3)..'\n'..
        '|'..lien_it(prm.p2)..pron(prm.pron_p2,prm.P1pref1)..ou_pron(prm.P1pron2,prm.P1pref2)..ou_pron(prm.P1pron3,prm.P1pref3)..'\n'..
        '|}'

	-- catégorie pluriels manquants
	txt = txt .. pluriel_manquant(prm.p)
	txt = txt .. pluriel_manquant(prm.p2)

    return txt
end

function racine(mot, liste_terminaisons)
	-- enlève la terminaison trouvée dans la liste
	local len_mot = mw.ustring.len(mot)
	local racine_mot = ''

	for k, t in pairs(liste_terminaisons) do
		local len_t = mw.ustring.len(t)
		local mot_t = mw.ustring.sub(mot, len_mot - len_t + 1, len_mot)
		if mot_t == t then
			-- le mot se termine en t
			racine_mot = mw.ustring.sub(mot, 1, len_mot - len_t)
		end
	end

	return racine_mot
end

function tableau_2(params, mot, mot_p, terminaisons, racine_pron_s, racine_pron_p, pron_terminaisons)
    params.s = racine(mot, terminaisons)..terminaisons[1]
    params.p = racine(mot_p, terminaisons)..terminaisons[2]
    if racine_pron_s then
    	params.pron_s = racine_pron_s..pron_terminaisons[1]
    end
    if racine_pron_p then
    	params.pron_p = racine_pron_p..pron_terminaisons[2]
    end
    
    return tableau_generique_2(params)
end

function tableau_3(params, mot, mot_p, mot_p2, terminaisons, racine_pron_s, racine_pron_p, pron_terminaisons)
    params.s = racine(mot, terminaisons)..terminaisons[1]
    params.p = racine(mot_p, terminaisons)..terminaisons[2]
    params.p2 = racine(mot_p2, terminaisons)..terminaisons[3]
    if racine_pron_s then
    	params.pron_s = racine_pron_s..pron_terminaisons[1]
    end
    if racine_pron_p then
    	params.pron_p = racine_pron_p..pron_terminaisons[2]
    	params.pron_p2 = racine_pron_p..pron_terminaisons[3]
    end
    
    return tableau_generique_3(params)
end

function tableau_4(params, mot_s, mot_s2, mot_p, mot_p2, terminaisons, racine_pron_s, racine_pron_p, pron_terminaisons)
    params.s = racine(mot_s, terminaisons)..terminaisons[1]
    params.p = racine(mot_p, terminaisons)..terminaisons[2]
    params.s2 = racine(mot_s2, terminaisons)..terminaisons[3]
    params.p2 = racine(mot_p2, terminaisons)..terminaisons[4]
    if racine_pron_s then
    	params.pron_s = racine_pron_s..pron_terminaisons[1]
    	params.pron_s2 = racine_pron_s..pron_terminaisons[3]
    end
    if racine_pron_p then
    	params.pron_p = racine_pron_p..pron_terminaisons[2]
    	params.pron_p2 = racine_pron_p..pron_terminaisons[4]
    end
    
    return tableau_generique_4(params)
end


------------------------------------------------------------------------
function exports.boite_sp(frame) -- pour Modèle:it-flexion
------------------------------------------------------------------------
    -- récupération des paramètres passés au modèle
    local args = frame:getParent().args
	local flexion = args['fl']
    local singulier = args['s']
    local pluriel = args['p']

    -- construction de la structure de paramètres pour les tableaux
    local params = {}
    params.titre = args['titre']

    -- récupération du nom de la page
    local mot = mw.title.getCurrentTitle().text
    local mot_s2 = mot
    -- prise en du singulier ou du pluriel non régulier
    local mot_p = mot
    local mot_p2 = mot
    if singulier then
    	mot = singulier
    	mot_s2 = singulier
    end
    if args['p'] then
    	mot_p = pluriel
    	mot_p2 = pluriel
    end
    -- premier paramètre : prononciation
    local racine_pron = args[1]
    local racine_pron_p = args[2]
    if (racine_pron_p == nil) or (not racine_pron_p) then
    	-- si un seul paramètre, les deux racines sont identiques
    	racine_pron_p = racine_pron
    end


	-- cas simple où singulier et pluriel sont spécifiés sans flexion
	if (singulier or pluriel) and (flexion == nil or not flexion) then
		params.s = mot
		params.p = mot_p
		params.pron_s = args[1]
		params.pron_p = args[2]
		return tableau_generique_2(params)
	end


	-- flexion par défaut selon la dernière lettre du mot (singulier uniquement)
    local len_mot = mw.ustring.len(mot)
    local derniere_lettre_mot = mw.ustring.sub(mot, len_mot, len_mot)
	if not flexion then
		if derniere_lettre_mot == 'a' then
			flexion = 'ae'
		elseif derniere_lettre_mot == 'e' then
			flexion = 'ei'
		elseif derniere_lettre_mot == 'o' then
			flexion = 'oi'
		end
	end

	-- construction du tableau
    if flexion == 'ae' then
    	-- singulier en a, pluriel en e
    	return tableau_2(params, mot, mot_p, {'a', 'e'}, racine_pron, racine_pron_p, {'a', 'e'})
    elseif flexion == 'ahe' then
    	-- singulier en a, pluriel en he
    	return tableau_2(params, mot, mot_p, {'a', 'he'}, racine_pron, racine_pron_p, {'a', 'e'})
    elseif flexion == 'ahi' then
    	-- singulier en a, pluriel en hi
    	return tableau_2(params, mot, mot_p, {'a', 'hi'}, racine_pron, racine_pron_p, {'a', 'i'})
    elseif flexion == 'ai' then
    	-- singulier en a, pluriel en i
    	return tableau_2(params, mot, mot_p, {'a', 'i'}, racine_pron, racine_pron_p, {'a', 'i'})
    elseif flexion == 'ei' then
    	-- singulier en e, pluriel en i
    	return tableau_2(params, mot, mot_p, {'e', 'i'}, racine_pron, racine_pron_p, {'e', 'i'})
    elseif flexion == 'iae' then
    	-- singulier en cia, pluriel en ce
    	return tableau_2(params, mot, mot_p, {'ia', 'e'}, racine_pron, racine_pron_p, {'a', 'e'})
    elseif flexion == 'ioi' then
    	-- singulier en io, pluriel en i
    	return tableau_2(params, mot, mot_p, {'io', 'i'}, racine_pron, racine_pron_p, {'jo', 'i'})
    elseif flexion == 'coci' then
    	-- singulier en co, pluriel en ci
    	return tableau_2(params, mot, mot_p, {'co', 'ci'}, racine_pron, racine_pron_p, {'ko', 't͡ʃi'})
    elseif flexion == 'gogi' then
    	-- singulier en go, pluriel en gi
    	return tableau_2(params, mot, mot_p, {'go', 'gi'}, racine_pron, racine_pron_p, {'go', 'd͡ʒi'})
    elseif flexion == 'oi' then
    	-- singulier en o, pluriel en i
    	return tableau_2(params, mot, mot_p, {'o', 'i'}, racine_pron, racine_pron_p, {'o', 'i'})
    elseif flexion == 'ohi' then
    	-- singulier en o, pluriel en hi
    	return tableau_2(params, mot, mot_p, {'o', 'hi'}, racine_pron, racine_pron_p, {'o', 'i'})
    elseif flexion == 'oa' then
    	-- singulier en o, pluriel en a
    	return tableau_2(params, mot, mot_p, {'o', 'a'}, racine_pron, racine_pron_p, {'o', 'a'})
    elseif flexion == 'o' then
    	-- singulier en io, pluriel en i (ii)
    	return tableau_2(params, mot, mot_p, {'io', 'i'}, racine_pron, racine_pron_p, {'o', 'i'})
    elseif flexion == 'e' then
    	-- singulier en ie, pluriel en i (ii)
    	return tableau_2(params, mot, mot_p, {'ie', 'i'}, racine_pron, racine_pron_p, {'e', 'i'})

    elseif flexion == 'aie' then
    	-- singulier en a, pluriels en i ou e
    	return tableau_3(params, mot, mot_p, mot_p2, {'a', 'i', 'e'},
    						racine_pron, racine_pron_p, {'a', 'i', 'e'})
    elseif flexion == 'oia' then
    	-- singulier en o, pluriels en i ou a
    	return tableau_3(params, mot, mot_p, mot_p2, {'o', 'i', 'a'},
    						racine_pron, racine_pron_p, {'o', 'i', 'a'})

    elseif flexion == 'eaie' then
    	-- masculin en e et i, féminin en a et e
    	return tableau_4(params, mot, mot_s2, mot_p, mot_p2, {'e', 'i', 'a', 'e'},
    						racine_pron, racine_pron_p, {'e', 'i', 'a', 'e'})
    elseif flexion == 'oaie' then
    	-- masculin en o et i, féminin en a et e
    	return tableau_4(params, mot, mot_s2, mot_p, mot_p2, {'o', 'i', 'a', 'e'},
    						racine_pron, racine_pron_p, {'o', 'i', 'a', 'e'})
    elseif flexion == 'oahihe' then
    	-- masculin en o et hi, féminin en a et he
    	return tableau_4(params, mot, mot_s2, mot_p, mot_p2, {'o', 'hi', 'a', 'he'},
    						racine_pron, racine_pron_p, {'o', 'i', 'a', 'e'})
    elseif flexion == 'cocaciche' then
    	-- masculin en co et ci, féminin en ca et che
    	return tableau_4(params, mot, mot_s2, mot_p, mot_p2, {'co', 'ci', 'ca', 'che'},
    						racine_pron, racine_pron_p, {'ko', 't͡ʃi', 'ka', 'ke'})
    elseif flexion == 'gogagighe' then
    	-- masculin en go et gi, féminin en ga et ghe
    	return tableau_4(params, mot, mot_s2, mot_p, mot_p2, {'go', 'gi', 'ga', 'ghe'},
    						racine_pron, racine_pron_p, {'ɡo', 'd͡ʒi', 'ɡa', 'ɡe'})
    elseif flexion == 'ioiaiie' then
    	-- masculin en io et i, féminin en ia et ie
    	return tableau_4(params, mot, mot_s2, mot_p, mot_p2, {'io', 'i', 'ia', 'ie'},
    						racine_pron, racine_pron_p, {'jo', 'i', 'ja', 'je'})

    elseif flexion == 'oaihe' then
    	return '<strong class="error">Pour l\'accord oaihe, utiliser soit cocaciche soit gogagighe</strong>'
    end

	-- erreur
	return '<strong class="error">Flexion '..flexion..' non reconnue</strong>'
end

-- publication des fonctions publiques
return exports