Módulo:Diálogo

De Wikiquote, la colección libre de citas y frases célebres.

[crear]

Documentación del módulo
Los 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.
-- 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