From 0f53677eb6f4dd7494e77c7f329d48821ef77114 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Fri, 14 Aug 2009 02:04:22 +0200 Subject: [PATCH] count braces while passing format in the loop to omit nested ones --- src/song.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/song.cpp b/src/song.cpp index bf44697e..74861d3f 100644 --- a/src/song.cpp +++ b/src/song.cpp @@ -371,9 +371,16 @@ std::string MPD::Song::Format_ParseBraces(std::string::const_iterator &it, std:: else result += *it; } + int brace_counter = 0; if (*it != '}' || !has_some_tags) { - for (; *it != '}'; ++it) { } + for (; *it != '}' || brace_counter; ++it) + { + if (*it == '{') + ++brace_counter; + else if (*it == '}') + --brace_counter; + } if (*++it == '|') return Format_ParseBraces(++it, end_it); else @@ -381,8 +388,17 @@ std::string MPD::Song::Format_ParseBraces(std::string::const_iterator &it, std:: } else { - if (*++it == '|') - for (; *it != '}' || *++it == '|'; ++it) { } + if (*(it+1) == '|') + { + for (; *it != '}' || *(it+1) == '|' || brace_counter; ++it) + { + if (*it == '{') + ++brace_counter; + else if (*it == '}') + --brace_counter; + } + } + ++it; return result; } }