Aller au contenu

Module:Type d'apparition

De Stargate Wiki Sémantique
Version datée du 16 juin 2026 à 19:14 par LIMAFOX76 (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)
Documentation icon Documentation module[créer]
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