diff --git a/src/syntaxer.cpp b/src/syntaxer.cpp index 53e6a6d..61c93e3 100644 --- a/src/syntaxer.cpp +++ b/src/syntaxer.cpp @@ -792,20 +792,28 @@ static void remove_extra_brackets(std::vector& tv) static void process_remove_empty_brackets(std::vector& tv) { pr_debug("Pre-process: remove empty brackets"); - for (int i = 0; i < tv.size() - 1; i++) - { - if (tv[i].t == Expression::Token::OPERATOR - && tv[i].v.o == Expression::Token::OPA - && tv[i+1].t == Expression::Token::OPERATOR - && tv[i+1].v.o == Expression::Token::CPA) - { - std::vector highlight; - highlight.emplace_back(i); - highlight.emplace_back(i+1); - Parser::print_math_vector(tv, highlight); - tv.erase(tv.begin() + i, tv.begin() + i + 2); - i--; + int fix = -1; + while (fix) { + fix = 0; + + for (int i = 0; i < tv.size() - 1; i++) + { + if (tv[i].t == Expression::Token::OPERATOR + && tv[i].v.o == Expression::Token::OPA + && tv[i+1].t == Expression::Token::OPERATOR + && tv[i+1].v.o == Expression::Token::CPA) + { + std::vector highlight; + highlight.emplace_back(i); + highlight.emplace_back(i+1); + Parser::print_math_vector(tv, highlight); + + tv.erase(tv.begin() + i, tv.begin() + i + 2); + i--; + + fix++; + } } } }