mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-09 09:19:51 +03:00
merge Michael's changes
This commit is contained in:
@@ -40,7 +40,12 @@ std::deque<Token> exprToTokens(const std::string & expr) {
|
||||
if (*p) {
|
||||
++p;
|
||||
}
|
||||
const auto s = std::string(b, p);
|
||||
auto s = std::string(b, p);
|
||||
auto n = s.find("\"\"");
|
||||
while (n != std::string::npos) {
|
||||
s.erase(n, 2);
|
||||
n = s.find("\"\"");
|
||||
}
|
||||
tokens.emplace_back(Token::Type::String, s, -3);
|
||||
if (*p == '\0') {
|
||||
--p;
|
||||
@@ -333,8 +338,8 @@ bool isnum(const std::string & s) {
|
||||
std::string commands(std::string & expr, bool quotes) {
|
||||
auto expr_new = emsesp::Helpers::toLower(expr);
|
||||
for (uint8_t device = 0; device < emsesp::EMSdevice::DeviceType::UNKNOWN; device++) {
|
||||
const char * d = emsesp::EMSdevice::device_type_2_device_name(device);
|
||||
auto f = expr_new.find(d);
|
||||
std::string d = (std::string)emsesp::EMSdevice::device_type_2_device_name(device) + "/";
|
||||
auto f = expr_new.find(d);
|
||||
while (f != std::string::npos) {
|
||||
// entity names are alphanumeric or _
|
||||
auto e = expr_new.find_first_not_of("/._abcdefghijklmnopqrstuvwxyz0123456789", f);
|
||||
@@ -375,6 +380,14 @@ std::string commands(std::string & expr, bool quotes) {
|
||||
f = expr_new.find(d, e);
|
||||
}
|
||||
}
|
||||
if (quotes) {
|
||||
// remove double quotes
|
||||
auto f = expr.find("\"\"");
|
||||
while (f != std::string::npos) {
|
||||
expr.erase(f, 2);
|
||||
f = expr.find("\"\"");
|
||||
}
|
||||
}
|
||||
return expr;
|
||||
}
|
||||
|
||||
@@ -416,7 +429,7 @@ std::string to_hex(uint32_t i) {
|
||||
// RPN calculator
|
||||
std::string calculate(const std::string & expr) {
|
||||
std::string expr_new = expr;
|
||||
commands(expr_new);
|
||||
// commands(expr_new);
|
||||
|
||||
const auto tokens = exprToTokens(expr_new);
|
||||
// for debugging only
|
||||
@@ -651,6 +664,7 @@ std::string calculate(const std::string & expr) {
|
||||
// check for multiple instances of <cond> ? <expr1> : <expr2>
|
||||
std::string compute(const std::string & expr) {
|
||||
std::string expr_new = expr;
|
||||
commands(expr_new); // replace ems-esp commands with values
|
||||
|
||||
// search json with url:
|
||||
auto f = expr_new.find_first_of('{');
|
||||
|
||||
Reference in New Issue
Block a user