forked from minetest-mods/mesecons
Add print command print(string in quotes or condition, can be concatenated using comma)
This commit is contained in:
parent
6a524b8cdd
commit
ce72ed2bab
|
@ -141,8 +141,12 @@ end
|
||||||
|
|
||||||
--Code Parsing
|
--Code Parsing
|
||||||
function yc_code_remove_commentary(code)
|
function yc_code_remove_commentary(code)
|
||||||
|
is_string = false
|
||||||
for i = 1, #code do
|
for i = 1, #code do
|
||||||
if code:sub(i, i) == ":" then
|
if code:sub(i, i) == '"' then
|
||||||
|
is_string = (is_string==false) --toggle is_string
|
||||||
|
end
|
||||||
|
if code:sub(i, i) == ":" and is_string==false then
|
||||||
return code:sub(1, i-1)
|
return code:sub(1, i-1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -181,6 +185,9 @@ function parse_yccode(code, pos)
|
||||||
L = yc_command_on (params, Lvirtual)
|
L = yc_command_on (params, Lvirtual)
|
||||||
elseif command == "off" then
|
elseif command == "off" then
|
||||||
L = yc_command_off(params, Lvirtual)
|
L = yc_command_off(params, Lvirtual)
|
||||||
|
elseif command == "print" then
|
||||||
|
su = yc_command_print(params, eeprom, yc_merge_portstates(Lreal, Lvirtual))
|
||||||
|
if su ~= true then return nil end
|
||||||
elseif command == "sbi" then
|
elseif command == "sbi" then
|
||||||
new_eeprom, Lvirtual = yc_command_sbi (params, eeprom, yc_merge_portstates(Lreal, Lvirtual), Lvirtual)
|
new_eeprom, Lvirtual = yc_command_sbi (params, eeprom, yc_merge_portstates(Lreal, Lvirtual), Lvirtual)
|
||||||
if new_eeprom == nil then return nil
|
if new_eeprom == nil then return nil
|
||||||
|
@ -227,13 +234,17 @@ function parse_get_params(code, starti)
|
||||||
i = starti
|
i = starti
|
||||||
s = nil
|
s = nil
|
||||||
local params = {}
|
local params = {}
|
||||||
|
local is_string = false
|
||||||
while s ~= "" do
|
while s ~= "" do
|
||||||
s = string.sub(code, i, i)
|
s = string.sub(code, i, i)
|
||||||
if s == ")" then
|
if code:sub(i, i) == '"' then
|
||||||
|
is_string = (is_string==false) --toggle is_string
|
||||||
|
end
|
||||||
|
if s == ")" and is_string == false then
|
||||||
table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after )
|
table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after )
|
||||||
return params, i + 1
|
return params, i + 1
|
||||||
end
|
end
|
||||||
if s == "," then
|
if s == "," and is_string == false then
|
||||||
table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after )
|
table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after )
|
||||||
starti = i + 1
|
starti = i + 1
|
||||||
end
|
end
|
||||||
|
@ -315,6 +326,22 @@ function yc_command_off(params, L)
|
||||||
return L
|
return L
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function yc_command_print(params, eeprom, L)
|
||||||
|
local s = ""
|
||||||
|
for i, param in ipairs(params) do
|
||||||
|
if param:sub(1,1) == '"' and param:sub(#param, #param) == '"' then
|
||||||
|
s = s..param:sub(2, #param-1)
|
||||||
|
else
|
||||||
|
r = yc_command_parsecondition(param, L, eeprom)
|
||||||
|
if r == "1" or r == "0" then
|
||||||
|
s = s..r
|
||||||
|
else return nil end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
print(s) --don't remove
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
function yc_command_sbi(params, eeprom, L, Lv)
|
function yc_command_sbi(params, eeprom, L, Lv)
|
||||||
if params[1]==nil or params[2]==nil or params[3] ~=nil then return nil end
|
if params[1]==nil or params[2]==nil or params[3] ~=nil then return nil end
|
||||||
local status = yc_command_parsecondition(params[2], L, eeprom)
|
local status = yc_command_parsecondition(params[2], L, eeprom)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user