Ir al contenido

Módulo:NumSym

De Wikipedia, la enciclopedia libre
Este módulo no tiene página de documentación[crear]
-- Módulo diseñado para representar gráficamente números estrobogramáticos
-- Sustituye los caracteres «1 2 3 4 5 6 7 8 9 0 ᘔ Ɛ» por una serie de imágenes
-- en formato SVG almacenadas en commons, de nombre SYMFONT
-- (en alusión a que son fuentes simétricas).
-- El resto de caracteres los deja tal como están.

local NumSym = {}

function nowrap( value )
	return tostring(
		mw.html.create('span')
			:css('white-space', 'nowrap')
			:wikitext( value )
			:done()
		)
end

function NumSym.NUMSYM(frame)
	--Volcado del frame
	local s = frame.args[1] or '' -- cadena de texto a transformar
	local p = frame.args[2] or '' -- tamaño en píxeles

	local SALIDA = "" --Valor que devuelve la rutina
	local NUMERO = "" --porción
	local MATRIZ = {} --Matriz donde se guardan los nombres de las imágenes de los números
	MATRIZ['0'] = "[[File:SYMFONT-0.svg|x15px|alt=0]]"
	MATRIZ['1'] = "[[File:SYMFONT-1.svg|x15px|alt=1]]"
	MATRIZ['2'] = "[[File:SYMFONT-2.svg|x15px|alt=2]]"
	MATRIZ['3'] = "[[File:SYMFONT-3.svg|x15px|alt=3]]"
	MATRIZ['4'] = "[[File:SYMFONT-4.svg|x15px|alt=4]]"
	MATRIZ['5'] = "[[File:SYMFONT-5.svg|x15px|alt=5]]"
	MATRIZ['6'] = "[[File:SYMFONT-6.svg|x15px|alt=6]]"
	MATRIZ['7'] = "[[File:SYMFONT-7.svg|x15px|alt=7]]"
	MATRIZ['8'] = "[[File:SYMFONT-8.svg|x15px|alt=8]]"
	MATRIZ['9'] = "[[File:SYMFONT-9.svg|x15px|alt=9]]"
	MATRIZ['ᘔ'] = "[[File:SYMFONT-2++.svg|x15px|alt=ᘔ]]"
	MATRIZ['Ɛ'] = "[[File:SYMFONT-3++.svg|x15px|alt=Ɛ]]"
	MATRIZ['ɛ'] = MATRIZ['Ɛ']

	--Si se han metido ᘔ o Ɛ (o ɛ), entonces poner [2] y [3] "reversibles":
	if mw.ustring.find(s, '[ᘔƐɛ]') then
		MATRIZ['2'] = "[[File:SYMFONT-2+.svg|x15px|alt=2]]"
		MATRIZ['3'] = "[[File:SYMFONT-3+.svg|x15px|alt=3]]"
    end

	local n = 0
	local l = mw.ustring.len( s ) or 0
	for i = 1, l do
		n = n + 1
		local c = mw.ustring.sub(s, i, i)
		if MATRIZ[c] then
			NUMERO = NUMERO .. MATRIZ[c]
		else
			if n >= 1 then
				-- Llamada a nowrap:
				NUMERO = nowrap(NUMERO)
				SALIDA = SALIDA .. NUMERO
				NUMERO = ""
			end
			SALIDA = SALIDA .. c
			n = 0
		end
	end

	--Cierre de la cadena tras salir del for:
    if n >= 1 then
		NUMERO = nowrap(NUMERO)
	end
	SALIDA = SALIDA .. NUMERO

	--Cambio del tamaño de los números si FFRR[2] es no nulo:
	if p ~= '' then
		SALIDA = SALIDA:gsub("x15px", "x" .. p .."px")
	end

	return SALIDA
end

return NumSym