Module:cas

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

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

Ce module crée les modèles de n’importe quel cas grammatical.

Importation dans un module : c = require("Module:cas")

Usage du modèle {{cas}} :

cas(nom_du_cas)
créer le modèle correspondant au cas renseigné, selon la liste définie dans Module:cas/data.

Les catégories de maintenance sont réunies dans Catégorie:Maintenance des modèles de cas.


b = require('Module:bases')
lang = require('Module:langues')

local p = {}

-- Regroupe les catégories ensemble
categories = {}

-- Activer pour voir les catégories générées (seulement pour déboguer avec l’aperçu : désactiver en sauvegardant)
-------------------------------
local isdebug = false
-------------------------------

-- Cherche et renvoie le cas depuis notre liste locale [[Module:cas/data]].
-- Fonction utilisable dans d’autres modules
function get_cas(nom)
    -- Pas de cas ? Renvoie nil.
    if (nom == nil) then return nil end
    
    -- Espaces avant et après enlevés
     nom = mw.text.trim(nom)
    
    -- Récupère la table des cas entière (en cache)
    local cas = mw.loadData('Module:cas/data')
    
    -- A-t-on le cas correspondant au nom donné ?
    if (cas[nom] and cas[nom]['nom']) then
        -- Trouvé ! Renvoie le cas
        return cas[nom]['nom']
    else
        -- Pas trouvé : on renvoie nil
        return nil
    end
end

-- Renvoie simplement le nom du cas donné en entrée.
function _page_cas(cas, nom_cas, minuscule)
	local nom_affiche = ''
	if minuscule == nil or mw.text.trim(minuscule) == '' then
		nom_affiche = b.ucfirst(cas)
	else
		nom_affiche = cas
	end
	
    local texte_nom = '[[Annexe:Cas grammatical#' .. nom_cas .. '|\'\'' .. nom_affiche .. '\'\']]'
 
    return texte_nom
end

-- Récupération du nom du cas et création du texte affiché (avec lien)
function _fait_titre_cas(nom_cas, code_langue, minuscule, nocat)
 
    -- Pas de nom de cas donné ? À corriger !
    if (nom_cas == nil or mw.text.trim(nom_cas) == '') then
        local textet = {"[[Projet:Informations_grammaticales#Cas|Cas inconnu]]"}
        table.insert(textet, b.fait_categorie_contenu("Wiktionnaire:Modèles de cas sans nom précisé"))
        return table.concat(textet)
    end
 
    nom_cas = mw.text.trim(nom_cas)
 
    -- Récupération du nom du cas
    local cas = get_cas(nom_cas)
 
    -- Création du titre à partir du nom de la langue
    local textet_titre = {}
    if cas ~= nil then
        texte_cas = _page_cas(cas, nom_cas, minuscule)
        table.insert(textet_titre, texte_cas)
 
        -- Catégorie
        if (nocat == nil or mw.text.trim(nocat) == '') then
        	_fait_categorie(code_langue, cas)
        end
 
    -- Si le code langue ne correspond à aucune langue définie
    else
        table.insert(textet_titre, b.ucfirst(nom_cas))
       	table.insert(textet_titre, "[[Wiktionnaire:Liste des cas|<span title=\"nom de cas inconnu\">*</span>]]")
        table.insert(textet_titre, b.fait_categorie_contenu('Wiktionnaire:Modèles de cas avec cas inconnu'))
    end
    
    local texte_categories = table.concat(categories)
	local texte_final = '<span>' .. table.concat(textet_titre) .. '</span>'
    return texte_final .. texte_categories
end

function _ajoute_categorie(nom_cat, clef, ecrit)
	local texte_categorie = ''
	-- Debug : affiche tout
    if isdebug then
    	if clef then
        	texte_categorie = b.fait_categorie(nom_cat, nil, true) .. '(' .. clef .. ')'
        else
        	texte_categorie = b.fait_categorie(nom_cat, nil, true)
        end
    -- Utilisation réelle : crée une vraie catégorie
    else
    	texte_categorie = b.fait_categorie_contenu(nom_cat, clef, ecrit)
    end
    table.insert(categories, texte_categorie)
end

function _termine_par_s(nom_cas)
	if(string.sub(nom_cas,-1) == 's') then
		return true
	end
	return false
end

-- Crée la catégorie correspondant au cas grammatical donné
function _fait_categorie(code_lang, cas)
    -- Pas de catégorie si pas espace principal
    if not b.page_de_contenu then return '' end
    
    -- Nom de la langue
    local langue = lang.get_nom(code_lang)
    
    local nom_cas = ''
    if _termine_par_s(cas) then
    	nom_cas = cas
	else
		nom_cas = cas .. 's'
	end
    
    -- Catégorie Cas "nom du cas" en "langue"
    if cas and langue then
    	local nom_categorie = ''
		nom_categorie = 'Cas ' .. nom_cas .. ' en ' .. langue

        _ajoute_categorie(nom_categorie)
    else
    	-- Langue incorrecte : pas de catégorie
        if cas then
        	if code_lang ~= nil and code_lang ~= '' then
        		-- Code donné : n’est pas défini dans la liste
        		_ajoute_categorie('Wiktionnaire:Cas avec langue inconnue', cas)
        	else
        		-- Pas de code langue donné du tout
        		_ajoute_categorie('Wiktionnaire:Cas sans langue précisée', cas)
        	end
        end
    end
end

function p.modele_cas(frame)
    -- Récupération des variables nécessaires à la création du modèle
    local args = frame:getParent().args
    
    return p.modele_cas_args(args)
end
    
function p.modele_cas_args(args)
    local argsnum = b.trim_parametres(args)
    local nom_cas   = argsnum[1]        -- Le type de mot (nom standard ou alias)
    local code_lang = argsnum[2]        -- Code langue
    local minuscule = args['minuscule'] -- Minuscule (pour afficher le cas tout en minuscule)
    local nocat = args['nocat']     -- Aucune catégorisation
	
    return _fait_titre_cas(nom_cas, code_lang, minuscule, nocat)
end

-- Fonction pouvant remplacer les appels de type {{ {{{cas}}} }} dans les modèles
-- Cette fonction marche pour un modèle
function p.nom_cas(frame)
    local args
    if frame.args ~= nil and frame.args[1] ~= nil then
        args = frame.args
    else
        args = frame:getParent().args
    end
    local nom_cas = args[1]
    
    local cas = p.get_cas(nom_cas)
    
    if (cas == nil or cas == '') then
        return ''
    else
        return cas
    end
end

return p