Módulo:Yesno

De Enciclopedia de conocimiento de la Iglesia de Dios
Ir a la navegación Ir a la búsqueda

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

<syntaxhighlight lang="lua">yesno(value, default)</syntaxhighlight>

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.

<syntaxhighlight lang="lua"> local yesno = require('Módulo:Yesno') </syntaxhighlight>

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

<syntaxhighlight lang="lua"> -- 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) </syntaxhighlight>

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

<syntaxhighlight lang="lua"> -- 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') </syntaxhighlight>

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.

<syntaxhighlight lang="lua"> -- 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') </syntaxhighlight>

Nótese que la cadena vacía también funciona igual: <syntaxhighlight lang="lua"> yesno() -- Retorna nil. yesno(, true) -- Retorna true. yesno(, 'bar') -- Retorna "bar". </syntaxhighlight>


-- 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