Aller au contenu

Module:Marquage type d'apparition

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

-- Normalisation en minuscules + trim
local function normalize(val)
    if not val then
        return ""
    end
    val = mw.ustring.lower(val)
    val = mw.text.trim(val)
    return val
end

-- Table des alias → catégories
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",
    ["récurrent"] = "recurrent",
    ["personnage récurrent"] = "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",
    ["mentionné"] = "mention",

    -- Photo seule
    picture = "photo",
    photo = "photo",

    -- Voix seule
    voice = "voix",
    voix = "voix",
    ["voix seule"] = "voix",

    body = "corps",
    corpse = "corps",
    corps = "corps",
    cadavre = "corps",

    -- Scènes supprimées
    del = "deleted",
    ["deleted scenes"] = "deleted",
    sup = "deleted",
    supp = "deleted",
    ["scène supprimée"] = "deleted",
    ["scènes supprimées"] = "deleted",

    -- Flashbacks
    flash = "flashback",
    flashback = "flashback",

    -- Nom uniquement
    name = "nom",
    nom = "nom",
}

-- Messages finaux
local messages = {
    principal = "",
    secondaire = "",
    recurrent = "",
    oneshot = "",
    mineur = "",
    ["true"] = "",
    mention = " (mention%s)",
    photo = " (photo seule%s)",
    voix = " (voix seule%s)",
    deleted = " (scènes supprimées%s)",
    flashback = " (flashbacks%s)",
    nom = " (nom uniquement%s)",
    corps = " (corps%s)",
}

-- Fonction principale
function p.main(frame)
    local arg1 = normalize(frame.args[1])
    local arg2 = frame.args[2] or ""
    local arg3 = 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 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 then
        deceased = ", décédé"
    end

    return base:format(deceased)
end

return p