Module:Marquage type d'apparition
Apparence
| Il sera peut-être nécessaire de créer une page documentation pour ce module Scribunto programmé dans la page créer Les éditeurs peuvent faire des tests sur les pages bac à sable (créer | miroir) et études de cas (créer) du module. Veuillez ajouter les catégories dans la sous-page /documentation. Sous-pages de ce module. |
local p = {}
----------------------------------------------------------------------
-- 1) Nettoyage UTF‑8 : supprime les séquences invalides (anti-crash)
----------------------------------------------------------------------
local function safe_utf8(str)
if type(str) ~= "string" then
return ""
end
-- Remplace toute séquence UTF‑8 invalide par un espace
str = mw.ustring.gsub(str, "[^\0-\x7F\xC2-\xF4][\x80-\xBF]*", " ")
return str
end
----------------------------------------------------------------------
-- 2) Normalisation avancée : trim, minuscules, accents, tirets, espaces
----------------------------------------------------------------------
local function normalize(str)
str = safe_utf8(str or "")
-- Trim
str = mw.text.trim(str)
-- Minuscules Unicode
str = mw.ustring.lower(str)
-- Tirets / underscores → espace
str = str:gsub("[%-%_]", " ")
-- Décomposition Unicode
str = mw.ustring.toNFD(str)
-- Suppression des diacritiques
str = str:gsub("[%pM]", "")
-- Espaces multiples
str = str:gsub("%s+", " ")
return str
end
----------------------------------------------------------------------
-- 3) Table des alias → catégories normalisées
----------------------------------------------------------------------
local alias = {
-- Principal
["m"] = "principal",
["main"] = "principal",
["main character"] = "principal",
["p"] = "principal",
["principal"] = "principal",
["personnage principal"] = "principal",
-- Secondaire
["s"] = "secondaire",
["su"] = "secondaire",
["supporting"] = "secondaire",
["supporting character"] = "secondaire",
["se"] = "secondaire",
["secondaire"] = "secondaire",
["ps"] = "secondaire",
["personage secondaire"] = "secondaire",
-- Récurrent
["re"] = "recurrent",
["recurring"] = "recurrent",
["recurring character"] = "recurrent",
["recurrent"] = "recurrent",
["recurent"] = "recurrent",
["personnage recurrent"] = "recurrent",
-- One-shot
["os"] = "oneshot",
["one shot"] = "oneshot",
["one shot character"] = "oneshot",
["one-shot"] = "oneshot",
["personnage one shot"] = "oneshot",
-- Mineur
["mi"] = "mineur",
["minor"] = "mineur",
["minor character"] = "mineur",
["mineur"] = "mineur",
["personnage mineur"] = "mineur",
-- Booléens (yes/true)
["y"] = "true",
["yes"] = "true",
["t"] = "true",
["true"] = "true",
["o"] = "true",
["oui"] = "true",
["v"] = "true",
["vrai"] = "true",
-- Mentionné
["me"] = "mention",
["men"] = "mention",
["mention"] = "mention",
["mentioned"] = "mention",
["mentionne"] = "mention",
-- Photo seule
["picture"] = "photo",
["photo"] = "photo",
-- Voix seule
["voice"] = "voix",
["voix"] = "voix",
["voix seule"] = "voix",
-- Corps visible
["body"] = "corps",
["corpse"] = "corps",
["corps"] = "corps",
["cadavre"] = "corps",
-- Scènes supprimées
["del"] = "deleted",
["deleted scenes"] = "deleted",
["sup"] = "deleted",
["supp"] = "deleted",
["scene supprimee"] = "deleted",
["scenes supprimees"] = "deleted",
-- Flashbacks
["flash"] = "flashback",
["flashback"] = "flashback",
-- Nom uniquement
["name"] = "nom",
["nom"] = "nom",
}
----------------------------------------------------------------------
-- 4) Messages finaux
----------------------------------------------------------------------
local messages = {
principal = "",
secondaire = "",
recurrent = "",
oneshot = "",
mineur = "",
["true"] = "",
mention = " (mention%s)",
photo = " (photo seule%s)",
voix = " (voix seule%s)",
deleted = " (scenes supprimees%s)",
flashback = " (flashbacks%s)",
nom = " (nom uniquement%s)",
corps = " (corps%s)",
}
----------------------------------------------------------------------
-- 5) Fonction principale
----------------------------------------------------------------------
function p.main(frame)
local arg1 = normalize(frame.args[1])
local arg2 = safe_utf8(frame.args[2] or "")
local arg3 = safe_utf8(frame.args[3] or "")
local key = alias[arg1]
-- Cas par défaut : renvoyer "(décédé)" si arg2 == arg3
if not key then
if arg2 == arg3 and arg2 ~= "" then
return " (décédé)"
end
return ""
end
local base = messages[key] or ""
-- Ajout ", décédé" si arg2 == arg3
local deceased = ""
if arg2 == arg3 and arg2 ~= "" then
deceased = ", décédé"
end
return base:format(deceased)
end
return p