|
|
@@ -30,6 +30,10 @@ BXParser::Operator BXParser::readOperator() { |
|
|
|
skip(); // '=' |
|
|
|
skip(); // '+' |
|
|
|
return Operator::EQUALS_PLUS; |
|
|
|
} else if (peek() == '|' && ch2 == '|') { |
|
|
|
skip(); // '|' |
|
|
|
skip(); // '=' |
|
|
|
return Operator::BAR_EQUALS; |
|
|
|
} |
|
|
|
|
|
|
|
return Operator::NONE; |
|
|
@@ -225,8 +229,14 @@ bool BXParser::parseString(const BXVariables &vars, std::string &content, int se |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
if (ch == ':' && peek(2) == '=') |
|
|
|
int ch2 = peek(2); |
|
|
|
if ( |
|
|
|
(ch == ':' && ch2 == '=') || |
|
|
|
(ch == '+' && ch2 == '=') || |
|
|
|
(ch == '=' && ch2 == '+') || |
|
|
|
(ch == '|' && ch2 == '=')) { |
|
|
|
return success; |
|
|
|
} |
|
|
|
|
|
|
|
content.push_back(get()); |
|
|
|
success = true; |
|
|
@@ -305,6 +315,27 @@ void BXParser::parse(BXVariables &vars) { |
|
|
|
values.clear(); |
|
|
|
break; |
|
|
|
|
|
|
|
case Operator::BAR_EQUALS: |
|
|
|
{ |
|
|
|
auto &vec = vars[key]; |
|
|
|
for (size_t i = 0; i < vec.size(); ++i) { |
|
|
|
bool exists = false; |
|
|
|
for (auto &val: values) { |
|
|
|
if (val == vec[i]) { |
|
|
|
exists = true; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (!exists) { |
|
|
|
values.push_back(std::move(vec[i])); |
|
|
|
} |
|
|
|
} |
|
|
|
vec = std::move(values); |
|
|
|
} |
|
|
|
values.clear(); |
|
|
|
break; |
|
|
|
|
|
|
|
case Operator::NONE: |
|
|
|
break; |
|
|
|
} |