Aller au contenu

Module:Type d'apparition

De Stargate Wiki Sémantique
Documentation icon Documentation module[créer]
local p = {}

-- Normalisation Unicode + accents + espaces
local function normalize(str)
    if not str or str == "" then
        return "#default"
    end

    -- Trim
    str = mw.text.trim(str)

    -- Minuscules Unicode
    str = mw.ustring.lower(str)

    -- Remplacement tirets/underscores par espace
    str = str:gsub("[%-%_]", " ")

    -- Suppression accents
    str = mw.ustring.toNFD(str)
    str = str:gsub("[%z\1-\127\194-\244][\128-\191]*", function(c)
        -- enlève les diacritiques
        if mw.ustring.match(c, "[\204-\208][\128-\191]") then
            return ""
        end
        return c
    end)

    -- Collapse espaces multiples
    str = str:gsub("%s+", " ")

    return str
end

-- 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 ",
}

-- Récupération sécurisée
local function safe_get(param)
    return types[param] or types["#default"]
end

function p.render(frame)
    local raw = frame.args[1] or "yes"
    local key = normalize(raw)
    return safe_get(key)
end

return p