remove calc widget
This commit is contained in:
@@ -1,62 +0,0 @@
|
|||||||
-- name = "Калькулятор"
|
|
||||||
-- description = "Работает с математическими, строковыми и логическими операторами и функциями"
|
|
||||||
-- type = "widget"
|
|
||||||
-- author = "Andrey Gavrilov"
|
|
||||||
-- version = "1.0"
|
|
||||||
|
|
||||||
local maths = {"abs", "acos", "asin", "atan", "ceil", "cos", "cos", "deg", "exp", "floor", "fmod", "frexp", "huge", "ldexp", "log", "max", "min", "modf", "pi", "pow", "rad", "random", "sin", "sqrt", "tan"}
|
|
||||||
local strings = {"byte", "char", "dump", "find", "format", "len", "lower", "match", "rep", "reverse", "sub", "upper"}
|
|
||||||
local types = {"nil", "function", "table", "userdata", "thread"}
|
|
||||||
|
|
||||||
function on_alarm()
|
|
||||||
ui:show_text("Введите выражение")
|
|
||||||
end
|
|
||||||
|
|
||||||
function on_click()
|
|
||||||
ui:show_edit_dialog("Введите выражение")
|
|
||||||
end
|
|
||||||
|
|
||||||
function on_dialog_action(text)
|
|
||||||
if text == "" or text == -1 then
|
|
||||||
on_alarm()
|
|
||||||
else
|
|
||||||
ui:show_text("Результат: "..calculate_string(text))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function calculate_string(text)
|
|
||||||
local str = format_str(text)
|
|
||||||
local f = load("return "..str)
|
|
||||||
local status, result = pcall(f)
|
|
||||||
if get_index(types, type(result)) > 0 or not status then
|
|
||||||
result = "неопределён"
|
|
||||||
else
|
|
||||||
result = tostring(result)
|
|
||||||
system:copy_to_clipboard(result)
|
|
||||||
end
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
function format_str(text)
|
|
||||||
text = text:gsub("pi", "math.pi")
|
|
||||||
text = text:gsub("π", "math.pi")
|
|
||||||
text = text:gsub("math%.math", "math")
|
|
||||||
local pattern = "(√) ?(%d+%.?%d*)"
|
|
||||||
local oper, first = text:match(pattern)
|
|
||||||
if oper == "√" then
|
|
||||||
return "math.sqrt("..first..")"
|
|
||||||
end
|
|
||||||
local pattern = "(%d+%.?%d*) ?([+-*/%^]) ?(%d+%.?%d*)"
|
|
||||||
local first, oper, last = text:match(pattern)
|
|
||||||
if oper == "^" then
|
|
||||||
return "math.pow("..first..", "..last..")"
|
|
||||||
end
|
|
||||||
func = text:match("^%a+")
|
|
||||||
if get_index(maths, func) > 0 then
|
|
||||||
return "math."..text
|
|
||||||
end
|
|
||||||
if get_index(strings, func) > 0 then
|
|
||||||
return "string.".. text
|
|
||||||
end
|
|
||||||
return text
|
|
||||||
end
|
|
||||||
Reference in New Issue
Block a user