You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.1 KiB
Lua

local lpeg = require "lpeg"
local C = lpeg.C
local P = lpeg.P
local S = lpeg.S
local function case_insensitive(str)
local patt = P(true)
for i=1, #str do
local c = str:sub(i, i)
patt = patt * S(c:upper() .. c:lower())
end
return patt
end
local function no_rich_capture(patt)
return C(patt) / function(a) return a end
end
local function read_hex(hex_num)
return tonumber(hex_num, 16)
end
local safe_tonumber do -- locale independent tonumber function
local tolocale
local function updatelocale()
local decpoint = string.format("%f", 0.5):match "[^05]+"
if decpoint == "." then
tolocale = function(str)
return str
end
else
tolocale = function(str)
str = str:gsub("%.", decpoint, 1)
return str
end
end
end
updatelocale()
safe_tonumber = function(str)
local num = tonumber(tolocale(str))
if num then
return num
else
updatelocale()
return tonumber(tolocale(str))
end
end
end
return {
case_insensitive = case_insensitive;
no_rich_capture = no_rich_capture;
read_hex = read_hex;
safe_tonumber = safe_tonumber;
}