Módulo:Diálogo
[crear]
Documentación del móduloLos editores pueden experimentar en la zona de pruebas de la plantilla.
Por favor, añade las categorías a la subpágina de documentación. Subpáginas de esta plantilla.
Por favor, añade las categorías a la subpágina de documentación. Subpáginas de esta plantilla.
-- Módulo para facilitar la redacción de diálogos (para utilizar mediante la plantilla homónima).
local p = {}
function p.dialogo(frame)
local oargs
-- Si se llama vía #invoke, usa los argumentos pasados a la plantilla invocante.
-- En otro caso, con fines de prueba, asume que los argumentos se han pasado directamente.
if frame == mw.getCurrentFrame() then
oargs = frame:getParent().args
else
oargs = frame
end
-- Tabla donde acumular el texto generado (finalmente se concatenará)
local texto = {}
-- Recorre los argumentos sin nombre dándoles
-- formato de cita o acotación
local idx = 1
while oargs[2 * idx - 1] and oargs[2 * idx] do
local personaje = mw.text.trim(oargs[2 * idx - 1])
local cita = mw.text.trim(oargs[2 * idx])
-- Acotación
if personaje == "acción" then
texto[#texto + 1] = "''[" .. cita .. "]''"
-- Cita de personaje
else
-- Nombre del personaje
local etiqueta = "Personaje"
if oargs[personaje] then
etiqueta = oargs[personaje]
elseif personaje ~= "" then
etiqueta = personaje
end
texto[#texto + 1] = "'''" .. etiqueta .. "'''"
-- Modo, si se ha indicado
if oargs["modo" .. idx] and oargs["modo" .. idx] ~= "" then
texto[#texto + 1] = " ''(" .. oargs["modo" .. idx] .. ")''"
end
-- Texto de la cita
if cita ~= "" then
texto[#texto + 1] = ": «" .. cita .. "»"
else
texto[#texto + 1] = ": ..."
end
end
texto[#texto + 1] = "<br />"
idx = idx + 1
end
-- Comprobación de la paridad del número de argumentos sin nombre
if oargs[2 * idx - 1] then
return "<span style=\"color:red\">La plantilla se ha utilizado incorrectamente.</span>"
end
-- Elimina el último <br />
if #texto > 0 then
table.remove(texto)
end
return table.concat(texto)
end
return p