Este módulo fornece uma interface consistente para o processamento de strings de entrada booleanas ou de tipo booleano. Enquanto Lua permite os valores booleanos true
e false
, predefinições em código wiki só podem expressar valores booleanos através de strings tais como "sim", "não", etc. Este módulo processa esse tipo de strings e converte-as em entradas booleanas para que Lua possa processá-las. Ele também retorna valores nil
como nil
, para permitir que haja distinção entre nil
e false
. O módulo também aceita outras estruturas em Lua como entrada, por exemplo booleanos, números, tabelas, e funções. Se for fornecida uma entrada que não seja ele não reconheça como booleana ou nil
, é possível especificar um valor padrão a ser retornado.
yesno(valor, padrão)
valor
é o valor a ser testado. Entradas booleanas ou de tipo booleano (ver abaixo) são sempre avaliadas como true
ou false
, e valores nil
sempre são avaliados como nil
. Outros valores são avaliados como padrão
.
Primeiro, carregue o módulo. Note que ele só pode ser carregado a partir de outros módulos feitos em Lua, nem de páginas wiki normais. Para páginas wiki normais pode ser utilizada a predefinição Tagalo em vez disso.
local yesno = require('Module:Yesno')
Alguns valores de entrada sempre retornam true
, e alguns sempre retornam false
. Valores nil
sempre retornam nil
.
-- Estes sempre retornam true: yesno('sim') yesno('verdadeiro') yesno('yes') yesno('y') yesno('true') yesno('1') yesno(1) yesno(true) -- Estes sempre retornam false: yesno('não') yesno('falso') yesno('no') yesno('n') yesno('false') yesno('0') yesno(0) yesno(false) -- Valores nil sempre retornam nil: yesno(nil)
Valores string são convertidos para letras minúsculas antes de serem testados:
-- Estes sempre retornam true: yesno('Sim') yesno('SIM') yesno('sIm') yesno('vErDaDeIrO') -- Estes sempre retornam false: yesno('Não') yesno('NÃO') yesno('nÃO') yesno('fALsO')
É possível especificar um valor padrão para o caso de yesno receber como entrada algo que não esteja listado acima. Se não for fornecido um valor padrão, o módulo retornará nil
para tais entradas.
-- Estes retornam nil: yesno('teste') yesno({}) yesno(5) yesno(function() return 'Esta é uma função.' end) -- Estes retornam true: yesno('teste', true) yesno({}, true) yesno(5, true) yesno(function() return 'Esta é uma função.' end, true) -- Estes retornam "padrão": yesno('teste', 'padrão') yesno({}, 'padrão') yesno(5, 'padrão') yesno(function() return 'Esta é uma função.' end, 'padrão')
Note que a string vazia também funciona deste modo:
yesno('') -- Retorna nil. yesno('', true) -- Retorna true. yesno('', 'padrão') -- Retorna "padrão".
Embora a string vazia geralmente seja avaliada como false em código wiki, ela é avaliada como true em Lua. Este módulo prefere o comportamento em Lua em vez do comportamento em código wiki. Se para o seu módulo for importante tratar strings vazias como false, você precisará remover os argumentos vazios em um estágio anterior do processamento.
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
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 == 'sim'
or val == 'verdadeiro'
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'não'
or val == 'falso'
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or tonumber(val) == 0
then
return false
else
return default
end
end