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}} :
Les catégories de maintenance sont réunies dans Catégorie:Maintenance des modèles de cas.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis la page Module:cas/Documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
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 ].
-- 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 and cas) then
-- Trouvé ! Renvoie le cas
return cas
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 = ']'
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 = {"]"}
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, "]")
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 -- Le type de mot (nom standard ou alias)
local code_lang = argsnum -- Code langue
local minuscule = args -- Minuscule (pour afficher le cas tout en minuscule)
local nocat = args -- 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 ~= nil then
args = frame.args
else
args = frame:getParent().args
end
local nom_cas = args
local cas = p.get_cas(nom_cas)
if (cas == nil or cas == '') then
return ''
else
return cas
end
end
return p