l-boolean.lua /size: 1850 b    last modification: 2020-07-01 14:35
1if not modules then modules = { } end modules ['l-boolean'] = {
2    version   = 1.001,
3    comment   = "companion to luat-lib.mkiv",
4    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5    copyright = "PRAGMA ADE / ConTeXt Development Team",
6    license   = "see context related readme files"
7}
8
9local type, tonumber = type, tonumber
10
11boolean = boolean or { }
12local boolean = boolean
13
14function boolean.tonumber(b)
15    if b then return 1 else return 0 end -- test and return or return
16end
17
18function toboolean(str,tolerant) -- global
19    if  str == nil then
20        return false
21    elseif str == false then
22        return false
23    elseif str == true then
24        return true
25    elseif str == "true" then
26        return true
27    elseif str == "false" then
28        return false
29    elseif not tolerant then
30        return false
31    elseif str == 0 then
32        return false
33    elseif (tonumber(str) or 0) > 0 then
34        return true
35    else
36        return str == "yes" or str == "on" or str == "t"
37    end
38end
39
40string.toboolean = toboolean
41
42function string.booleanstring(str)
43    if str == "0" then
44        return false
45    elseif str == "1" then
46        return true
47    elseif str == "" then
48        return false
49    elseif str == "false" then
50        return false
51    elseif str == "true" then
52        return true
53    elseif (tonumber(str) or 0) > 0 then
54        return true
55    else
56        return str == "yes" or str == "on" or str == "t"
57    end
58end
59
60function string.is_boolean(str,default,strict)
61    if type(str) == "string" then
62        if str == "true" or str == "yes" or str == "on" or str == "t" or (not strict and str == "1") then
63            return true
64        elseif str == "false" or str == "no" or str == "off" or str == "f" or (not strict and str == "0") then
65            return false
66        end
67    end
68    return default
69end
70