Files
wnsrc/lua/pac3/libraries/expression.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

81 lines
1.6 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local lib = {
PI = math.pi,
rand = math.random,
randx = function(a, b)
a = a or -1
b = b or 1
return math.Rand(a, b)
end,
abs = math.abs,
acos = math.acos,
asin = math.asin,
atan = math.atan,
atan2 = math.atan2,
ceil = math.ceil,
cos = math.cos,
cosh = math.cosh,
deg = math.deg,
exp = math.exp,
floor = math.floor,
frexp = math.frexp,
ldexp = math.ldexp,
log = math.log,
log10 = math.log10,
max = math.max,
min = math.min,
rad = math.rad,
sin = math.sin,
sinh = math.sinh,
sqrt = math.sqrt,
tanh = math.tanh,
tan = math.tan,
sgn = function(n) return n>0 and 1 or n<0 and -1 or 0 end,
clamp = math.Clamp,
round = math.Round,
}
local blacklist = {"repeat", "until", "function", "end"}
local function compile_expression(str, extra_lib)
for _, word in pairs(blacklist) do
if str:find("[%p%s]" .. word) or str:find(word .. "[%p%s]") then
return false, string.format("illegal characters used %q", word)
end
end
local functions = {}
for k,v in pairs(lib) do functions[k] = v end
if extra_lib then
for k,v in pairs(extra_lib) do functions[k] = v end
end
functions.select = select
str = "local IN = select(1, ...) return " .. str
local func = CompileString(str, "pac_expression", false)
if isstring(func) then
return false, func
else
setfenv(func, functions)
return true, func
end
end
return compile_expression