Module:yesno: Difference between revisions

From Linguifex
Jump to navigation Jump to search
Created page with "-- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) val = type(va..."
 
m 1 revision imported
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
-- It works similarly to the template {{yesno}}.
local lower = string.lower
local type = type
local yesno
return function (val, default)
return function (val, default)
    val = type(val) == 'string' and val:lower() or val -- put in lower case
if val == nil then
    if val == nil then
return nil
        return nil
elseif not yesno then
    elseif val == false or val == 'no' or val == 'n' or val == 'false' or tonumber(val) == 0 then
yesno = {
        return false
[true] = true, [false] = false,
    elseif val == true or val == 'yes' or val == 'y' or val == 'true' or tonumber(val) == 1 then
["true"] = true, ["false"] = false,
        return true
["t"] = true, ["f"] = false,
    else
[1] = true, [0] = false,
        return default
["1"] = true, ["0"] = false,
    end
["yes"] = true, ["no"] = false,
["y"] = true, ["n"] = false,
["on"] = true, ["off"] = false,
}
end
local ret = yesno[val]
if ret ~= nil then
return ret
elseif type(val) ~= "string" then
return default
end
ret = yesno[lower(val)]
if ret ~= nil then
return ret
end
return default
end
end

Latest revision as of 11:22, 21 April 2026



-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
local lower = string.lower
local type = type
local yesno

return function (val, default)
	if val == nil then
		return nil
	elseif not yesno then
		yesno = {
			[true] = true,		[false] = false,
			["true"] = true,	["false"] = false,
			["t"] = true,		["f"] = false,
			[1] = true,			[0] = false,
			["1"] = true,		["0"] = false,
			["yes"] = true,		["no"] = false,
			["y"] = true,		["n"] = false,
			["on"] = true,		["off"] = false,
		}
	end
	local ret = yesno[val]
	if ret ~= nil then
		return ret
	elseif type(val) ~= "string" then
		return default
	end
	ret = yesno[lower(val)]
	if ret ~= nil then
		return ret
	end
	return default
end