Diferencia entre revisiones de «Módulo:Personaje»

De Inkipedia
(Cambiada la optimización de la plantilla para soportar cuando una imagen no está disponible, necesario comprobar lo que está fallando)
(Código añadido)
 
Línea 1: Línea 1:
local m = {}
local m = {}
local function generateKey(nombre, juego)
    if not nombre then
        return juego or ""
    end
    return juego and nombre .. "_" .. juego or nombre
end
local function safeIndex(tabla, key)
    if not key then
        return nil
    end
    return tabla[key]
end
local translatedPersonaje = {
    [generateKey("Sheldon", nil)] = "Ammo Knights",
    [generateKey("Sheldon", "OC")] = "Sheldon",
    [generateKey("Annie", "S")] = "Cooler Heads",
    [generateKey("Annie", "S2")] = "SplatNet Gear Shop",
    [generateKey("Annie", "S3")] = "Cooler Heads",
    [generateKey("Jelonzo", nil)] = "Jelly Fresh",
    [generateKey("Crusty Sean", "S")] = "Shrimp Kicks",
    [generateKey("Crusty Sean", "S2")] = "Crust Bucket",
    [generateKey("Flow", nil)] = "Headspace",
    [generateKey("Jelfonzo", nil)] = "Ye Olde Cloth Shoppe",
    [generateKey("Bisk", nil)] = "Shella Fresh",
    [generateKey("Teléfono", nil)] = "Telephone",
    [generateKey("Teléfono roto", nil)] = "Broken Telephone",
    [generateKey("Gnarly Eddy", nil)] = "Naut Couture",
    [generateKey("Jel La Fleur", nil)] = "Man-o'-Wardrobe",
    [generateKey("Mr. Coco", nil)] = "Crush Station",
    [generateKey("Harmony", nil)] = "Hotlantis",
}
local translatedEstado = {
["oculto"] = "hidden",
["orden"] = "order",
["base"] = "Outpost",
["roto"] = "broken",
["cuadrado"] = "square",
["dron"] = "Drone",
}
local posicionEstado = {
    ["S2"] = {
        [generateKey("Telephone", "S2")] = "antes",
        [generateKey(nil, "S2")] = "despues",
    },
    ["S3"] = {
        [generateKey("Cuttlefish", "S3")] = {
            [generateKey("dry", "S3")] = "antes",
            [generateKey(nil, "S3")] = "despues",
        },
        [generateKey(nil, "S3")] = "despues",
    },
    [generateKey(nil)] = "despues",
}


-- Función para normalizar el tipo de traducción
-- Función para normalizar el tipo de traducción
Línea 37: Línea 96:
function m.main(frame)
function m.main(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args
     local juego = args["tipo"] or args[1]
     local juego = args["juego"] or args[1]
     local nombre = args["nombre"] or args[2]
     local nombre = args["nombre"] or args[2]
     local estado = args["estado"] or args[3]
     local estado = args["estado"] or args[3]
Línea 44: Línea 103:
      
      
     -- Normalizar el nombre del juego
     -- Normalizar el nombre del juego
     juego = require('Módulo:Acortar_juego').getGame(juego)
     juego = require('Módulo:Acortar_juego').getGame(juego) or juego


     -- Traducir el personaje
     -- Traducir el personaje
     local nombreIngles = require('Módulo:Castellano').getPersonaje(nombre)
     local nombreIngles = require('Módulo:Castellano').getPersonaje(nombre) or nombre
      
     nombreIngles = translatedPersonaje[generateKey(nombre, juego)] or translatedPersonaje[nombre] or nombreIngles
 
--Otras comprobaciones
     if tamano == "icono" then
     if tamano == "icono" then
     icono = tamano or icono
     icono = tamano or icono
Línea 56: Línea 117:
     if estado ~= nil and not tonumber(estado) and estado ~="icono" then
     if estado ~= nil and not tonumber(estado) and estado ~="icono" then
         estado = genericType(estado)
         estado = genericType(estado)
        estado = translatedEstado[estado]
     elseif estado == "icono" then
     elseif estado == "icono" then
     icono = estado or icono
     icono = estado or icono
Línea 65: Línea 127:


     -- Lógica para determinar la imagen
     -- Lógica para determinar la imagen
   
     local constructorProvisional
     local constructorProvisional
      
      
     if estado ~= nil then
     if estado ~= nil then
     if mw.title.new("File:" .. juego .. " Icon " .. nombreIngles .. " " .. estado .. ".png").exists then
     local keyJuego = generateKey(juego)
    constructorProvisional = string.format("[[File:%s Icon %s %s.png|%dpx|link=%s]]", juego, nombreIngles, estado, tamano, nombre)
local keyNombre = generateKey(nombreIngles)
local keyEstado = generateKey(estado)
local subTabla = safeIndex(posicionEstado, keyJuego)
if subTabla then
    local posicion = safeIndex(subTabla[keyNombre], keyEstado) or "despues"
else
else
    constructorProvisional = string.format("[[File:Not found.png|%dpx|link=]]", tamano)
    local posicion = "despues"
end
end
else
    local posicion = safeIndex(posicionEstado[generateKey(juego)], generateKey(nombreIngles))[generateKey(estado)] or "despues"
    if mw.title.new("File:" .. juego .. " Icon " .. nombreIngles .. ".png").exists then
        if posicion == "antes" then
    constructorProvisional = string.format("[[File:%s Icon %s.png|%dpx|link=%s]]", juego, nombreIngles, tamano, nombre)
            constructorProvisional = string.format("[[File:%s Icon %s %s %s.png|%dpx|link=%s]]", juego, estado, nombreIngles, tamano, nombre)
else
        else
constructorProvisional = string.format("[[File:%s Icon %s.png|%dpx|link=%s]]", juego, nombreIngles, tamano, nombre)
            constructorProvisional = string.format("[[File:%s Icon %s %s.png|%dpx|link=%s]]", juego, nombreIngles, estado, tamano, nombre)
    --constructorProvisional = string.format("[[File:Not found.png|%dpx|link=]]", tamano)
        end
end
    else
end
        constructorProvisional = string.format("[[File:%s Icon %s.png|%dpx|link=%s]]", juego, nombreIngles, tamano, nombre)
    end
      
      
     if icono == nil then
     if icono == nil then
constructorProvisional = string.format("%s [[%s]]", constructorProvisional, nombre)
        constructorProvisional = string.format("%s [[%s]]", constructorProvisional, nombre)
return constructorProvisional
        return constructorProvisional
     end
     end
     return constructorProvisional
     return constructorProvisional
end
end


return m
return m

Revisión actual - 15:28 21 mar 2024

La documentación para este módulo puede ser creada en Módulo:Personaje/doc


local m = {}

local function generateKey(nombre, juego)
    if not nombre then
        return juego or ""
    end
    return juego and nombre .. "_" .. juego or nombre
end

local function safeIndex(tabla, key)
    if not key then
        return nil
    end
    return tabla[key]
end

local translatedPersonaje = {
    [generateKey("Sheldon", nil)] = "Ammo Knights",
    [generateKey("Sheldon", "OC")] = "Sheldon",
    [generateKey("Annie", "S")] = "Cooler Heads",
    [generateKey("Annie", "S2")] = "SplatNet Gear Shop",
    [generateKey("Annie", "S3")] = "Cooler Heads",
    [generateKey("Jelonzo", nil)] = "Jelly Fresh",
    [generateKey("Crusty Sean", "S")] = "Shrimp Kicks",
    [generateKey("Crusty Sean", "S2")] = "Crust Bucket",
    [generateKey("Flow", nil)] = "Headspace",
    [generateKey("Jelfonzo", nil)] = "Ye Olde Cloth Shoppe",
    [generateKey("Bisk", nil)] = "Shella Fresh",
    [generateKey("Teléfono", nil)] = "Telephone",
    [generateKey("Teléfono roto", nil)] = "Broken Telephone",
    [generateKey("Gnarly Eddy", nil)] = "Naut Couture",
    [generateKey("Jel La Fleur", nil)] = "Man-o'-Wardrobe",
    [generateKey("Mr. Coco", nil)] = "Crush Station",
    [generateKey("Harmony", nil)] = "Hotlantis",
}

local translatedEstado = {
	["oculto"] = "hidden",
	["orden"] = "order",
	["base"] = "Outpost",
	["roto"] = "broken",
	["cuadrado"] = "square",
	["dron"] = "Drone",
}

local posicionEstado = {
    ["S2"] = {
        [generateKey("Telephone", "S2")] = "antes",
        [generateKey(nil, "S2")] = "despues",
    },
    ["S3"] = {
        [generateKey("Cuttlefish", "S3")] = {
            [generateKey("dry", "S3")] = "antes",
            [generateKey(nil, "S3")] = "despues",
        },
        [generateKey(nil, "S3")] = "despues",
    },
    [generateKey(nil)] = "despues",
}

-- Función para normalizar el tipo de traducción
local function genericType(input)
    if input == nil then
    	return nil
    end
    -- Convertir a minúsculas
    input = input:lower()

    -- Tabla de mapeo para reemplazar letras con tildes y diéresis
    local mapping = {
        ["á"] = "a", ["é"] = "e", ["í"] = "i", ["ó"] = "o", ["ú"] = "u",
        ["à"] = "a", ["è"] = "e", ["ì"] = "i", ["ò"] = "o", ["ù"] = "u",
        ["ä"] = "a", ["ë"] = "e", ["ï"] = "i", ["ö"] = "o", ["ü"] = "u",
        ["ã"] = "a", ["ẽ"] = "e", ["ĩ"] = "i", ["õ"] = "o", ["ũ"] = "u",
        ["ñ"] = "n",
        ["ç"] = "c",
        ["Á"] = "a", ["É"] = "e", ["Í"] = "i", ["Ó"] = "o", ["Ú"] = "u",
		["À"] = "a", ["È"] = "e", ["Ì"] = "i", ["Ò"] = "o", ["Ù"] = "u",
		["Ä"] = "a", ["Ë"] = "e", ["Ï"] = "i", ["Ö"] = "o", ["Ü"] = "u",
		["Ã"] = "a", ["Ẽ"] = "e", ["Ĩ"] = "i", ["Õ"] = "o", ["Ũ"] = "u",
		["Ñ"] = "n",
		["Ç"] = "c"
    }
    
    -- Reemplazar letras con tilde y diéresis según la tabla de mapeo
    for k, v in pairs(mapping) do
        input = input:gsub(k, v)
    end

    -- Eliminar caracteres especiales y espacios
    input = input:gsub("[%s%p%c]", "")
    return input
end

function m.main(frame)
    local args = frame:getParent().args
    local juego = args["juego"] or args[1]
    local nombre = args["nombre"] or args[2]
    local estado = args["estado"] or args[3]
    local tamano = args[4] or args["tamaño"] or 24
    local icono = args[5] or args["icono"] or nil
    
    -- Normalizar el nombre del juego
    juego = require('Módulo:Acortar_juego').getGame(juego) or juego

    -- Traducir el personaje
    local nombreIngles = require('Módulo:Castellano').getPersonaje(nombre) or nombre
    nombreIngles = translatedPersonaje[generateKey(nombre, juego)] or translatedPersonaje[nombre] or nombreIngles

	--Otras comprobaciones
    if tamano == "icono" then
    	icono = tamano or icono
    	tamano = 24
    end
    
    if estado ~= nil and not tonumber(estado) and estado ~="icono" then
        estado = genericType(estado)
        estado = translatedEstado[estado]
    elseif estado == "icono" then
    	icono = estado or icono
    	estado = nil
    elseif tonumber(estado) then
        tamano = tonumber(estado) or tamano
        estado = nil
    end

    -- Lógica para determinar la imagen
    local constructorProvisional
    
    if estado ~= nil then
    	local keyJuego = generateKey(juego)
		local keyNombre = generateKey(nombreIngles)
		local keyEstado = generateKey(estado)
		
		local subTabla = safeIndex(posicionEstado, keyJuego)
		if subTabla then
		    local posicion = safeIndex(subTabla[keyNombre], keyEstado) or "despues"
		else
		    local posicion = "despues"
		end
    	local posicion = safeIndex(posicionEstado[generateKey(juego)], generateKey(nombreIngles))[generateKey(estado)] or "despues"
        if posicion == "antes" then
            constructorProvisional = string.format("[[File:%s Icon %s %s %s.png|%dpx|link=%s]]", juego, estado, nombreIngles, tamano, nombre)
        else
            constructorProvisional = string.format("[[File:%s Icon %s %s.png|%dpx|link=%s]]", juego, nombreIngles, estado, tamano, nombre)
        end
    else
        constructorProvisional = string.format("[[File:%s Icon %s.png|%dpx|link=%s]]", juego, nombreIngles, tamano, nombre)
    end
    
    if icono == nil then
        constructorProvisional = string.format("%s [[%s]]", constructorProvisional, nombre)
        return constructorProvisional
    end
    return constructorProvisional
end


return m