From 17497de3c3efa04094fc26a22810a42a4f78eb3c Mon Sep 17 00:00:00 2001 From: louis Date: Tue, 27 Jan 2015 17:36:29 +0100 Subject: [PATCH] fixed bug that global tokens were not parsed correctly --- HISTORY | 1 + libtemplate/globals.c | 38 ++++++++++++++++++++++---------------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/HISTORY b/HISTORY index 5b7b715..88ca447 100644 --- a/HISTORY +++ b/HISTORY @@ -190,3 +190,4 @@ Version 0.2.0 Version 0.2.1 +- fixed bug that global tokens were not parsed correctly diff --git a/libtemplate/globals.c b/libtemplate/globals.c index 1ce7502..e09638b 100644 --- a/libtemplate/globals.c +++ b/libtemplate/globals.c @@ -73,12 +73,15 @@ void cGlobals::ReplaceIntVars(string &value) { stringstream sToken; sToken << "{" << it->first << "}"; string token = sToken.str(); - size_t foundToken = value.find(token); - if (foundToken != string::npos) { - stringstream st; - st << it->second; - value = value.replace(foundToken, token.size(), st.str()); - } + size_t foundToken = string::npos; + do { + foundToken = value.find(token); + if (foundToken != string::npos) { + stringstream st; + st << it->second; + value = value.replace(foundToken, token.size(), st.str()); + } + } while (foundToken != string::npos); } } @@ -107,18 +110,21 @@ void cGlobals::ReplaceDoubleVars(string &value) { stringstream sToken; sToken << "{" << it->first << "}"; string token = sToken.str(); - size_t foundToken = value.find(token); - if (foundToken != string::npos) { - stringstream st; - st << it->second; - string doubleVal = st.str(); - if (config.replaceDecPoint) { - if (doubleVal.find_first_of('.') != string::npos) { - std::replace( doubleVal.begin(), doubleVal.end(), '.', config.decPoint); + size_t foundToken = string::npos; + do { + foundToken = value.find(token); + if (foundToken != string::npos) { + stringstream st; + st << it->second; + string doubleVal = st.str(); + if (config.replaceDecPoint) { + if (doubleVal.find_first_of('.') != string::npos) { + std::replace( doubleVal.begin(), doubleVal.end(), '.', config.decPoint); + } } + value = value.replace(foundToken, token.size(), doubleVal); } - value = value.replace(foundToken, token.size(), doubleVal); - } + } while (foundToken != string::npos); } }