« Module:Episode/index » : différence entre les versions
Apparence
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 45 : | Ligne 45 : | ||
end |
end |
||
-- Génère |
-- Génère une version sans tirets |
||
local function alias_no_dash(a) |
local function alias_no_dash(a) |
||
return mw.ustring.gsub(a, "[-–—]", "") |
return mw.ustring.gsub(a, "[-–—]", "") |
||
end |
|||
-- Génère une version où les tirets deviennent des espaces |
|||
local function alias_dash_to_space(a) |
|||
return mw.ustring.gsub(a, "[-–—]", " ") |
|||
end |
end |
||
| Ligne 57 : | Ligne 62 : | ||
for _, key in ipairs(ep.alias or {}) do |
for _, key in ipairs(ep.alias or {}) do |
||
-- |
-- Variantes d’alias |
||
local variants = { key } |
local variants = { key } |
||
-- |
-- 1) Sans tirets |
||
local nd = alias_no_dash(key) |
local nd = alias_no_dash(key) |
||
if nd ~= key then |
if nd ~= key then |
||
table.insert(variants, nd) |
table.insert(variants, nd) |
||
end |
|||
-- 2) Tirets → espaces |
|||
local sp = alias_dash_to_space(key) |
|||
if sp ~= key then |
|||
table.insert(variants, sp) |
|||
end |
end |
||
Version du 28 mai 2026 à 12:55
| 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 = {}
local sources = {
"Module:Episode/SG1Season1",
"Module:Episode/SG1Season2",
"Module:Episode/SG1Season3",
"Module:Episode/SG1Season4",
"Module:Episode/SG1Season5",
"Module:Episode/SG1Season6",
"Module:Episode/SG1Season7",
"Module:Episode/SG1Season8",
"Module:Episode/SG1Season9",
"Module:Episode/SG1Season10",
"Module:Episode/SGASeason1",
"Module:Episode/SGASeason2",
"Module:Episode/SGASeason3",
"Module:Episode/SGASeason4",
"Module:Episode/SGASeason5",
"Module:Episode/SGUSeason1",
"Module:Episode/SGUSeason2",
"Module:Episode/SGISeason1",
"Module:Episode/SGOSeason1",
"Module:Episode/SGUMovies",
}
p.index = {}
local function normalize(s)
s = s or ""
s = mw.text.trim(s)
s = mw.ustring.toNFD(s)
local combining_start = mw.ustring.char(0x0300)
local combining_end = mw.ustring.char(0x036F)
s = mw.ustring.gsub(s, "[" .. combining_start .. "-" .. combining_end .. "]", "")
s = mw.ustring.gsub(s, "[’‘´`]", "'")
s = mw.ustring.gsub(s, "[“”]", "\"")
s = mw.ustring.gsub(s, "[–—−]", "-")
s = mw.ustring.gsub(s, "%s+", " ")
s = mw.ustring.lower(s)
s = mw.text.trim(s)
return s
end
-- Génère une version sans tirets
local function alias_no_dash(a)
return mw.ustring.gsub(a, "[-–—]", "")
end
-- Génère une version où les tirets deviennent des espaces
local function alias_dash_to_space(a)
return mw.ustring.gsub(a, "[-–—]", " ")
end
-- Construction de l’index multi‑clé
for _, modname in ipairs(sources) do
local ok, mod = pcall(require, modname)
if ok and mod.episodes then
for _, ep in ipairs(mod.episodes) do
for _, key in ipairs(ep.alias or {}) do
-- Variantes d’alias
local variants = { key }
-- 1) Sans tirets
local nd = alias_no_dash(key)
if nd ~= key then
table.insert(variants, nd)
end
-- 2) Tirets → espaces
local sp = alias_dash_to_space(key)
if sp ~= key then
table.insert(variants, sp)
end
-- Indexation de toutes les variantes
for _, raw in ipairs(variants) do
local nkey = normalize(raw)
if p.index[nkey] then
mw.log(string.format(
"[EpisodeIndex] Collision d'alias détectée : '%s' → %s et %s",
nkey,
p.index[nkey].id or "(sans id)",
ep.id or "(sans id)"
))
else
p.index[nkey] = ep
end
end
end
end
end
end
-- Fonction d'accès
function p.get(key)
local ep = p.index[normalize(key)]
if not ep then return nil end
return {
id = ep.id,
namespace = ep.namespace or "",
page_title = ep.page_title,
title_fr = ep.title_fr,
title_qc = ep.title_qc,
title_vo = ep.title_vo,
property = ep.property,
season = ep.season or "",
episode = ep.episode or "",
}
end
return p