diff --git a/res/layouts/console.xml.lua b/res/layouts/console.xml.lua index fb66aec3..261518b3 100644 --- a/res/layouts/console.xml.lua +++ b/res/layouts/console.xml.lua @@ -1,8 +1,13 @@ -function submit(text) +function setup_variables() local x,y,z = player.get_pos(0) console.set('pos.x', x) console.set('pos.y', y) console.set('pos.z', z) +end + +function submit(text) + setup_variables() + local status, result = pcall(function() return console.execute(text) end) if result ~= nil then document.log.text = document.log.text..tostring(result)..'\n' diff --git a/src/coders/commons.hpp b/src/coders/commons.hpp index 29a6d24f..1584c92d 100644 --- a/src/coders/commons.hpp +++ b/src/coders/commons.hpp @@ -31,11 +31,11 @@ inline bool is_whitespace(int c) { } inline bool is_identifier_start(int c) { - return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-' || c == '.'; + return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '.'; } inline bool is_identifier_part(int c) { - return is_identifier_start(c) || is_digit(c); + return is_identifier_start(c) || is_digit(c) || c == '-'; } inline int hexchar2int(int c) { diff --git a/src/logic/CommandsInterpreter.cpp b/src/logic/CommandsInterpreter.cpp index 0e6d9d90..a3f1da5a 100644 --- a/src/logic/CommandsInterpreter.cpp +++ b/src/logic/CommandsInterpreter.cpp @@ -13,7 +13,7 @@ inline bool is_cmd_identifier_part(char c, bool allowColon) { } inline bool is_cmd_identifier_start(char c) { - return is_identifier_start(c) || c == '.' || c == '$'; + return (is_identifier_start(c) || c == '.' || c == '$'); } class CommandParser : BasicParser { @@ -75,9 +75,13 @@ public: nextChar(); return parseString(c); } - if (c == '+' || c == '-' || is_digit(c)) { + if (c == '+' || c == '-') { + nextChar(); return parseNumber(c == '-' ? -1 : 1); } + if (is_digit(c)) { + return parseNumber(1); + } throw error("invalid character '"+std::string({c})+"'"); }