diff options
author | mrwastl <mrwastl@users.sourceforge.net> | 2011-05-07 20:10:34 +0200 |
---|---|---|
committer | mrwastl <mrwastl@users.sourceforge.net> | 2011-05-07 20:10:34 +0200 |
commit | 36ea730a7024db3a9738183f870367153f1b1578 (patch) | |
tree | 81d65e9751aa9dc47aa85752a68e69711f1bc442 /glcdskin | |
parent | 46e597df44402086edd010b69702c2de52b75fc8 (diff) | |
download | graphlcd-base-36ea730a7024db3a9738183f870367153f1b1578.tar.gz graphlcd-base-36ea730a7024db3a9738183f870367153f1b1578.tar.bz2 |
bug fix when value of a variable contains token definitions: reparse this value
Diffstat (limited to 'glcdskin')
-rw-r--r-- | glcdskin/string.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/glcdskin/string.c b/glcdskin/string.c index 90a1670..f2195c6 100644 --- a/glcdskin/string.c +++ b/glcdskin/string.c @@ -257,8 +257,18 @@ cType cSkinString::Evaluate(void) const idxend = result_raw.find("#", idxstart+1); cSkinVariable * variable = mSkin->GetVariable(result_raw.substr(idxstart+1, idxend-idxstart-1)); if (variable) { - result_trans.append ((std::string) variable->Value()); - // syslog(LOG_ERR, "string variable %s", trans.c_str()); + std::string val = (std::string) variable->Value(); + + // if value of variable contains token definions: reparse value + if (val.find("{") != std::string::npos) { + cSkinString *result = new cSkinString(Object(), false); + if (result->Parse(val)) { + val = (std::string) result->Evaluate(); + } + delete result; + } + result_trans.append (val); + // syslog(LOG_ERR, "string variable %s", trans.c_str()); } idxstart = idxend+1; pos = idxstart; |