fixed bug in printf function

This commit is contained in:
louis 2014-11-02 11:19:05 +01:00
parent e258e9d9a6
commit 80ac260751

View File

@ -981,20 +981,28 @@ void cTemplateFunction::ParseConditionalTextToken(string &value, size_t start, s
void cTemplateFunction::ParsePrintfTextToken(string &value, size_t start, size_t end) { void cTemplateFunction::ParsePrintfTextToken(string &value, size_t start, size_t end) {
cTextToken token; cTextToken token;
token.type = ttPrintfToken; if (start > 0) {
//fetch parameter list from printf string constString = value.substr(0, start);
string printfParams = value.substr(start + 8, end - start - 9); value = value.replace(0, start, "");
value = value.replace(0, end - start + 1, ""); token.type = ttConstString;
splitstring s(printfParams.c_str()); token.value = constString;
vector<string> flds = s.split(',', 1); textTokens.push_back(token);
} else {
token.type = ttPrintfToken;
//fetch parameter list from printf
string printfParams = value.substr(start + 8, end - start - 9);
value = value.replace(0, end - start + 1, "");
splitstring s(printfParams.c_str());
vector<string> flds = s.split(',', 1);
int numParams = flds.size(); int numParams = flds.size();
if (numParams < 1) if (numParams < 1)
return; return;
string formatString = trim(flds[0]); string formatString = trim(flds[0]);
token.value = formatString.substr(1, formatString.size() - 2); token.value = formatString.substr(1, formatString.size() - 2);
for (int i=1; i < numParams; i++) { for (int i=1; i < numParams; i++) {
token.parameters.push_back(trim(flds[i])); token.parameters.push_back(trim(flds[i]));
}
} }
textTokens.push_back(token); textTokens.push_back(token);
} }
@ -1588,6 +1596,8 @@ void cTemplateFunction::Debug(void) {
tokType = "Token: "; tokType = "Token: ";
else if (tokenType == ttConditionalToken) else if (tokenType == ttConditionalToken)
tokType = "Conditional Token: "; tokType = "Conditional Token: ";
else if (tokenType == ttPrintfToken)
tokType = "PrintF Token: ";
esyslog("skindesigner: %s %d = \"%s\"", tokType.c_str(), i++, (*it).value.c_str()); esyslog("skindesigner: %s %d = \"%s\"", tokType.c_str(), i++, (*it).value.c_str());
if (tokenType == ttConditionalToken) { if (tokenType == ttConditionalToken) {
for (vector<cTextToken>::iterator it2 = (*it).subTokens.begin(); it2 != (*it).subTokens.end(); it2++) { for (vector<cTextToken>::iterator it2 = (*it).subTokens.begin(); it2 != (*it).subTokens.end(); it2++) {
@ -1600,6 +1610,11 @@ void cTemplateFunction::Debug(void) {
esyslog("skindesigner: %s \"%s\"", tokTypeCond.c_str(), (*it2).value.c_str()); esyslog("skindesigner: %s \"%s\"", tokTypeCond.c_str(), (*it2).value.c_str());
} }
} }
if (tokenType == ttPrintfToken) {
for (vector<string>::iterator it2 = (*it).parameters.begin(); it2 != (*it).parameters.end(); it2++) {
esyslog("skindesigner: Printf parameter: %s", (*it2).c_str());
}
}
} }
} }
if (fontName.size() > 0) { if (fontName.size() > 0) {