« Module:Type d'apparition » : différence entre les versions
Apparence
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 1 : | Ligne 1 : | ||
local p = {} |
local p = {} |
||
---------------------------------------------------------------------- |
|||
| ⚫ | |||
-- 1) Nettoyage UTF‑8 : supprime les séquences invalides AVANT tout |
|||
| ⚫ | |||
-- traitement Unicode (anti-crash mw.ustring.match / gsub / find) |
|||
| ⚫ | |||
---------------------------------------------------------------------- |
|||
| ⚫ | |||
local function safe_utf8(str) |
|||
| ⚫ | |||
| ⚫ | |||
end |
end |
||
-- Remplace toute séquence UTF‑8 invalide par un espace |
|||
| ⚫ | |||
| ⚫ | |||
end |
|||
---------------------------------------------------------------------- |
|||
| ⚫ | |||
---------------------------------------------------------------------- |
|||
| ⚫ | |||
str = safe_utf8(str or "") |
|||
-- Trim |
-- Trim |
||
| Ligne 13 : | Ligne 28 : | ||
str = mw.ustring.lower(str) |
str = mw.ustring.lower(str) |
||
-- |
-- Tirets / underscores → espace |
||
str = str:gsub("[%-%_]", " ") |
str = str:gsub("[%-%_]", " ") |
||
-- |
-- Décomposition Unicode |
||
str = mw.ustring.toNFD(str) |
str = mw.ustring.toNFD(str) |
||
| ⚫ | |||
-- enlève les diacritiques |
|||
if mw.ustring.match(c, "[\204-\208][\128-\191]") then |
|||
return "" |
|||
end |
|||
| ⚫ | |||
end) |
|||
-- |
-- Suppression des diacritiques |
||
str = str:gsub("[%pM]", "") |
|||
-- Espaces multiples |
|||
str = str:gsub("%s+", " ") |
str = str:gsub("%s+", " ") |
||
| Ligne 32 : | Ligne 43 : | ||
end |
end |
||
---------------------------------------------------------------------- |
|||
-- Table des types |
-- 3) Table des types |
||
---------------------------------------------------------------------- |
|||
local types = { |
local types = { |
||
-- Personnage principal |
-- Personnage principal |
||
| Ligne 127 : | Ligne 140 : | ||
} |
} |
||
---------------------------------------------------------------------- |
|||
-- Récupération sécurisée |
-- 4) Récupération sécurisée |
||
---------------------------------------------------------------------- |
|||
local function safe_get(param) |
local function safe_get(param) |
||
return types[param] or types["#default"] |
return types[param] or types["#default"] |
||
end |
end |
||
---------------------------------------------------------------------- |
|||
-- 5) Fonction publique |
|||
---------------------------------------------------------------------- |
|||
function p.render(frame) |
function p.render(frame) |
||
local raw = frame.args[1] or "yes" |
local raw = frame.args[1] or "yes" |
||
Dernière version du 16 juin 2026 à 19:14
| 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 AVANT tout
-- traitement Unicode (anti-crash mw.ustring.match / gsub / find)
----------------------------------------------------------------------
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 types
----------------------------------------------------------------------
local types = {
-- Personnage principal
["main"] = "Personnage principal de ",
["main character"] = "Personnage principal de ",
["m"] = "Personnage principal de ",
["ma"] = "Personnage principal de ",
["p"] = "Personnage principal de ",
["principal"] = "Personnage principal de ",
["personnage principal"] = "Personnage principal de ",
-- Personnage secondaire
["supporting"] = "Personnage secondaire de ",
["supporting character"] = "Personnage secondaire de ",
["s"] = "Personnage secondaire de ",
["su"] = "Personnage secondaire de ",
["se"] = "Personnage secondaire de ",
["secondaire"] = "Personnage secondaire de ",
["ps"] = "Personnage secondaire de ",
["personnage secondaire"] = "Personnage secondaire de ",
-- Récurrent
["recurring"] = "Personnage récurrent de ",
["recurring character"] = "Personnage récurrent de ",
["re"] = "Personnage récurrent de ",
["recurrent"] = "Personnage récurrent de ",
["recurent"] = "Personnage récurrent de ",
["personnage recurrent"] = "Personnage récurrent de ",
-- One shot
["one shot"] = "Personnage one shot de ",
["one shot character"] = "Personnage one shot de ",
["guest"] = "Personnage one shot de ",
["os"] = "Personnage one shot de ",
["g"] = "Personnage one shot de ",
["personnage one shot"] = "Personnage one shot de ",
-- Mineur
["minor"] = "Personnage mineur de ",
["minor character"] = "Personnage mineur de ",
["mi"] = "Personnage mineur de ",
["mineur"] = "Personnage mineur de ",
["personnage mineur"] = "Personnage mineur de ",
-- Présence générique
["yes"] = "Apparaît dans ",
["true"] = "Apparaît dans ",
["y"] = "Apparaît dans ",
["t"] = "Apparaît dans ",
["o"] = "Apparaît dans ",
["oui"] = "Apparaît dans ",
["v"] = "Apparaît dans ",
["vrai"] = "Apparaît dans ",
["#default"] = "Apparaît dans ",
-- Mention
["mention"] = "Mentionné dans ",
["mentioned"] = "Mentionné dans ",
["me"] = "Mentionné dans ",
["men"] = "Mentionné dans ",
["mentionne"] = "Mentionné dans ",
-- Photo seule
["picture"] = "Photo seule dans ",
["photo"] = "Photo seule dans ",
["photo seule"] = "Photo seule dans ",
-- Voix seule
["voice"] = "Voix seule dans ",
["voix"] = "Voix seule dans ",
-- Corps visible
["body"] = "Corps visible dans ",
["corpse"] = "Corps visible dans ",
["corps"] = "Corps visible dans ",
["cadavre"] = "Corps visible dans ",
-- Scènes supprimées
["deleted scenes"] = "Apparaît uniquement dans les scènes supprimées de ",
["del"] = "Apparaît uniquement dans les scènes supprimées de ",
["sup"] = "Apparaît uniquement dans les scènes supprimées de ",
["supp"] = "Apparaît uniquement dans les scènes supprimées de ",
["scene supprimee"] = "Apparaît uniquement dans les scènes supprimées de ",
["scenes supprimees"] = "Apparaît uniquement dans les scènes supprimées de ",
-- Flashbacks
["flash"] = "Apparaît uniquement dans des flashbacks de ",
["flashback"] = "Apparaît uniquement dans des flashbacks de ",
["flashbacks"] = "Apparaît uniquement dans des flashbacks de ",
-- Nom visible
["name"] = "Nom visible dans ",
["nom"] = "Nom visible dans ",
}
----------------------------------------------------------------------
-- 4) Récupération sécurisée
----------------------------------------------------------------------
local function safe_get(param)
return types[param] or types["#default"]
end
----------------------------------------------------------------------
-- 5) Fonction publique
----------------------------------------------------------------------
function p.render(frame)
local raw = frame.args[1] or "yes"
local key = normalize(raw)
return safe_get(key)
end
return p