Module:Appearances: Difference between revisions
From Gensopedia
More actions
mNo edit summary |
m Text replacement - "Genso Suikoden STAR LEAP: Hoshi Boshi no Kiseki" to "Suikoden STAR LEAP: Trails of the Stars" |
||
| (2 intermediate revisions by one other user not shown) | |||
| Line 11: | Line 11: | ||
-- Master order + lookup: code → { page, category, optional display name } | -- Master order + lookup: code → { page, category, optional display name } | ||
local games = { | local games = { | ||
S1 = { "Suikoden", "Characters | S1 = { "Suikoden", "Characters (Suikoden)" }, | ||
S2 = { "Suikoden II", "Characters | S2 = { "Suikoden II", "Characters (Suikoden II)" }, | ||
G1 = { "Genso Suikogaiden Vol.1", "Characters | G1 = { "Genso Suikogaiden Vol.1", "Characters (Genso Suikogaiden Vol.1)" }, | ||
G2 = { "Genso Suikogaiden Vol.2", "Characters | G2 = { "Genso Suikogaiden Vol.2", "Characters (Genso Suikogaiden Vol.2)" }, | ||
CS = { "Genso Suikoden Card Stories", "Characters | CS = { "Genso Suikoden Card Stories", "Characters (Genso Suikoden Card Stories)" }, | ||
S3 = { "Suikoden III", "Characters | S3 = { "Suikoden III", "Characters (Suikoden III)" }, | ||
S4 = { "Suikoden IV", "Characters | S4 = { "Suikoden IV", "Characters (Suikoden IV)" }, | ||
ST = { "Suikoden Tactics", "Characters | ST = { "Suikoden Tactics", "Characters (Suikoden Tactics)" }, | ||
S5 = { "Suikoden V", "Characters | S5 = { "Suikoden V", "Characters (Suikoden V)" }, | ||
HS = { "Genso Suikoden Tierkreis Hoshikuzu no Shiro", "Characters | HS = { "Genso Suikoden Tierkreis Hoshikuzu no Shiro", "Characters (Genso Suikoden Tierkreis Hoshikuzu no Shiro)" }, | ||
TK = { "Suikoden Tierkreis", "Characters | TK = { "Suikoden Tierkreis", "Characters (Suikoden Tierkreis)" }, | ||
PS = { "Pachislot Genso Suikoden", "Characters | PS = { "Pachislot Genso Suikoden", "Characters (Pachislot Genso Suikoden)" }, | ||
HT = { "Genso Suikoden Tsumugareshi Hyakunen no Toki", "Characters | HT = { "Genso Suikoden Tsumugareshi Hyakunen no Toki", "Characters (Genso Suikoden Tsumugareshi Hyakunen no Toki)" }, | ||
SP = { "Suikoden STAR LEAP", "Characters | SP = { "Suikoden STAR LEAP", "Characters (Suikoden STAR LEAP)" }, | ||
SL = { "Suikoden STAR LEAP", "Characters | SL = { "Suikoden STAR LEAP", "Characters (Suikoden STAR LEAP)" }, | ||
kpc = { "Konami Parody Comic Series Genso Suikoden", "Characters | HB = { "Suikoden STAR LEAP: Trails of the Stars", "Characters (Suikoden STAR LEAP: Trails of the Stars)" }, | ||
SE = { "Genso Suikoden: Soul Eater 1", "Characters | kpc = { "Konami Parody Comic Series Genso Suikoden", "Characters (Konami Parody Comic Series Genso Suikoden)" }, | ||
SE3 = { "Genso Suikoden: Soul Eater 3", "Characters | SE = { "Genso Suikoden: Soul Eater 1", "Characters (Genso Suikoden Soul Eater)", "Soul Eater 1" }, | ||
S2n = { "Genso Suikoden II: 1 (novel)", "Characters | SE3 = { "Genso Suikoden: Soul Eater 3", "Characters (Genso Suikoden Soul Eater)", "Soul Eater 3" }, | ||
S2n4= { "Genso Suikoden II: 4 (novel)", "Characters | S2n = { "Genso Suikoden II: 1 (novel)", "Characters (Genso Suikoden II novel)" }, | ||
SS1 = { "Genso Suikoden Short Story Collection 1", "Characters | S2n4= { "Genso Suikoden II: 4 (novel)", "Characters (Genso Suikoden II novel)" }, | ||
SS2 = { "Genso Suikoden Short Story Collection 2", "Characters | SS1 = { "Genso Suikoden Short Story Collection 1", "Characters (Genso Suikoden Short Story Collection 1)" }, | ||
SS3 = { "Genso Suikoden Short Story Collection 3", "Characters | SS2 = { "Genso Suikoden Short Story Collection 2", "Characters (Genso Suikoden Short Story Collection 2)" }, | ||
SS4 = { "Genso Suikoden Short Story Collection 4", "Characters | SS3 = { "Genso Suikoden Short Story Collection 3", "Characters (Genso Suikoden Short Story Collection 3)" }, | ||
S4n = { "Genso Suikoden IV: 1 (novel)", "Characters | SS4 = { "Genso Suikoden Short Story Collection 4", "Characters (Genso Suikoden Short Story Collection 4)" }, | ||
S4n = { "Genso Suikoden IV: 1 (novel)", "Characters (Genso Suikoden IV novel)" }, | |||
SPm = { "Suikoden STAR LEAP: Trails of the Stars", "Characters (Suikoden STAR LEAP: Trails of the Stars)" }, | |||
} | } | ||
| Line 88: | Line 90: | ||
local orderedKeys = { | local orderedKeys = { | ||
"S1","S2","G1","G2","CS","S3","S4","ST","S5","HS","TK","PS","HT", | "S1","S2","G1","G2","CS","S3","S4","ST","S5","HS","TK","PS","HT", | ||
"SP","SL","kpc","SE","SE3","S2n","S2n4","SS1","SS2","SS3","SS4","S4n" | "SP","SL","HB","kpc","SE","SE3","S2n","S2n4","SS1","SS2","SS3","SS4","S4n","SPm" | ||
} | } | ||
Latest revision as of 09:51, 5 December 2025
Documentation for this module may be created at Module:Appearances/doc
-- Module:Appearances
-- Renders a character's appearances using short codes or full titles.
-- Keeps order as defined in this file, not alphabetically.
-- Supports:
-- |appears=S1, Suikoden II, G1|
-- |S1=yes|G1=yes| (legacy)
-- Mixed usage.
local p = {}
-- Master order + lookup: code → { page, category, optional display name }
local games = {
S1 = { "Suikoden", "Characters (Suikoden)" },
S2 = { "Suikoden II", "Characters (Suikoden II)" },
G1 = { "Genso Suikogaiden Vol.1", "Characters (Genso Suikogaiden Vol.1)" },
G2 = { "Genso Suikogaiden Vol.2", "Characters (Genso Suikogaiden Vol.2)" },
CS = { "Genso Suikoden Card Stories", "Characters (Genso Suikoden Card Stories)" },
S3 = { "Suikoden III", "Characters (Suikoden III)" },
S4 = { "Suikoden IV", "Characters (Suikoden IV)" },
ST = { "Suikoden Tactics", "Characters (Suikoden Tactics)" },
S5 = { "Suikoden V", "Characters (Suikoden V)" },
HS = { "Genso Suikoden Tierkreis Hoshikuzu no Shiro", "Characters (Genso Suikoden Tierkreis Hoshikuzu no Shiro)" },
TK = { "Suikoden Tierkreis", "Characters (Suikoden Tierkreis)" },
PS = { "Pachislot Genso Suikoden", "Characters (Pachislot Genso Suikoden)" },
HT = { "Genso Suikoden Tsumugareshi Hyakunen no Toki", "Characters (Genso Suikoden Tsumugareshi Hyakunen no Toki)" },
SP = { "Suikoden STAR LEAP", "Characters (Suikoden STAR LEAP)" },
SL = { "Suikoden STAR LEAP", "Characters (Suikoden STAR LEAP)" },
HB = { "Suikoden STAR LEAP: Trails of the Stars", "Characters (Suikoden STAR LEAP: Trails of the Stars)" },
kpc = { "Konami Parody Comic Series Genso Suikoden", "Characters (Konami Parody Comic Series Genso Suikoden)" },
SE = { "Genso Suikoden: Soul Eater 1", "Characters (Genso Suikoden Soul Eater)", "Soul Eater 1" },
SE3 = { "Genso Suikoden: Soul Eater 3", "Characters (Genso Suikoden Soul Eater)", "Soul Eater 3" },
S2n = { "Genso Suikoden II: 1 (novel)", "Characters (Genso Suikoden II novel)" },
S2n4= { "Genso Suikoden II: 4 (novel)", "Characters (Genso Suikoden II novel)" },
SS1 = { "Genso Suikoden Short Story Collection 1", "Characters (Genso Suikoden Short Story Collection 1)" },
SS2 = { "Genso Suikoden Short Story Collection 2", "Characters (Genso Suikoden Short Story Collection 2)" },
SS3 = { "Genso Suikoden Short Story Collection 3", "Characters (Genso Suikoden Short Story Collection 3)" },
SS4 = { "Genso Suikoden Short Story Collection 4", "Characters (Genso Suikoden Short Story Collection 4)" },
S4n = { "Genso Suikoden IV: 1 (novel)", "Characters (Genso Suikoden IV novel)" },
SPm = { "Suikoden STAR LEAP: Trails of the Stars", "Characters (Suikoden STAR LEAP: Trails of the Stars)" },
}
-- Reverse lookup: title → short code
local titleToCode = {}
for code, data in pairs(games) do
titleToCode[data[1]] = code
end
local function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
local function makeLine(entry)
local title, category, display = entry[1], entry[2], entry[3]
return string.format("* [[%s|%s]] [[Category:%s]]", title, display or title, category)
end
function p.render(frame)
local args = frame.args
local requested = {}
local seen = {}
-- 1️⃣ Collect from |appears=
if args.appears and args.appears ~= "" then
for _, token in ipairs(mw.text.split(args.appears, ",")) do
token = trim(token)
if token ~= "" then
local code = titleToCode[token] or token
if games[code] and not seen[code] then
seen[code] = true
requested[code] = true
end
end
end
end
-- 2️⃣ Add legacy |S1=yes| flags
for code, _ in pairs(games) do
if (args[code] or ""):lower() == "yes" then
requested[code] = true
end
end
-- 3️⃣ Output in canonical order (no alphabetical sort)
local output = {}
for code, entry in pairs(games) do
-- preserve insertion order: we’ll iterate over an ordered key list instead
end
-- To preserve order, we must iterate in sequence as defined:
local orderedKeys = {
"S1","S2","G1","G2","CS","S3","S4","ST","S5","HS","TK","PS","HT",
"SP","SL","HB","kpc","SE","SE3","S2n","S2n4","SS1","SS2","SS3","SS4","S4n","SPm"
}
for _, code in ipairs(orderedKeys) do
if requested[code] then
table.insert(output, makeLine(games[code]))
end
end
return table.concat(output, "<br />\n")
end
return p