Ir al contenido

Módulo:Yesno

De Wikipedia, la enciclopedia libre

Este módulo ofrece un tratamiento consistente para procesar entradas booleanas o strings del estilo. Mientras que Lua permite los valores booleanos true y false, las plantillas de wikicódigo solo los pueden expresar con textos como "sí", "no", etc. Este módulo procesa estos tipos de strings y los convierte en un booleano que Lua pueda procesar. También retorna nil si recibe nil, para permitir la distinción entre nil y false. El módulo también acepta otras estructuras de Lua como entrada, e.g. booleanos, números, tablas, y funciones. Se puede especificar un valor por defecto para retornar si recibe una entrada que no se reconoce como booleano o nil.

Sintaxis

yesno(value, default)

value es el valor a evaluar. Una entrada booleana o del estilo (ver más abajo) siempre evalúa a true o false, y nil siempre evalúa a nil. Otros valores evalúan a default.

Uso

Primero, carga el módulo. Nótese que solo puede ser cargado desde otros módulos de Lua, no desde páginas normales de la wiki. Para el resto de casos se puede utilizar {{yesno}} en su lugar.

local yesno = require('Módulo:Yesno')

Algunos valores de entrada siempre retornan true, y otros siempre retornan false. nil siempre retorna nil.

-- Estos siempre retornan true:
yesno('yes')
yesno('y')
yesno('true')
yesno('t')
yesno('1')
yesno(1)
yesno(true)
yesno('si')
yesno('sí')
yesno('s')
yesno('verdad')

-- Estos siempre retornan false:
yesno('no')
yesno('n')
yesno('false')
yesno('f')
yesno('0')
yesno(0)
yesno(false)
yesno('falso')

-- Un valor nil siempre retorna nil:
yesno(nil)

Los strings se pasan a minúsculas antes de hacer las comprobaciones:

-- Estos siempre retornan true:
yesno('Yes')
yesno('YES')
yesno('yEs')
yesno('Y')
yesno('tRuE')
yesno('sI')
yesno('Sí')
yesno('S')
yesno('veRdaD')

-- Estos siempre retornan false:
yesno('No')
yesno('NO')
yesno('nO')
yesno('N')
yesno('fALsE')
yesno('fALsO')

Puedes especificar un valor por defecto para el caso en que yesno recibe una entrada no especificada anteriormente. Si no introduces un valor por defecto el módulo devolverá nil en estos casos.

-- Estos retornan nil:
yesno('foo')
yesno({})
yesno(5)
yesno(function() return 'Esto es una función.' end)

-- Estos retornan true:
yesno('foo', true)
yesno({}, true)
yesno(5, true)
yesno(function() return 'Esto es una función.' end, true)

-- Estos retornan "bar":
yesno('foo', 'bar')
yesno({}, 'bar')
yesno(5, 'bar')
yesno(function() return 'Esto es una función.' end, 'bar')

Nótese que la cadena vacía también funciona igual:

yesno('')        -- Retorna nil.
yesno('', true)  -- Retorna true.
yesno('', 'bar') -- Retorna "bar".

-- Función que proporciona un tratamiento consistente de entrada de wikitexto similar al booleano.

return function (val, default)
	-- If your wiki uses non-ASCII characters for any of "yes", "no", etc., you
	-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
	-- following line.
	val = type(val) == 'string' and val:lower() or val
	if val == nil then
		return nil
	elseif val == true 
		or val == 'yes'
		or val == 'y'
		or val == 'sí'
		or val == 'si'
		or val == 's'
		or val == 'true'
		or val == 'verdad'
		or val == 't'
		or tonumber(val) == 1
	then
		return true
	elseif val == false
		or val == 'no'
		or val == 'n'
		or val == 'false'
		or val == 'falso'
		or val == 'f'
		or val == 'off'
		or tonumber(val) == 0
	then
		return false
	else
		return default
	end
end