summaryrefslogtreecommitdiff
path: root/libcore
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2015-06-15 11:27:32 +0200
committerlouis <louis.braun@gmx.de>2015-06-15 11:27:32 +0200
commitbbe8c56fcb7890f43828a41363b9930ed4a2978d (patch)
tree66e4028564b1dc49c84d1c8daeca781342fbbe31 /libcore
parent41736f4428f7d0545f11f5d1cbdc92a352c6049c (diff)
downloadvdr-plugin-skindesigner-bbe8c56fcb7890f43828a41363b9930ed4a2978d.tar.gz
vdr-plugin-skindesigner-bbe8c56fcb7890f43828a41363b9930ed4a2978d.tar.bz2
fixed bug in svgtemplate parsing
Diffstat (limited to 'libcore')
-rw-r--r--libcore/imagecache.c6
-rw-r--r--libcore/imageloader.c27
2 files changed, 22 insertions, 11 deletions
diff --git a/libcore/imagecache.c b/libcore/imagecache.c
index fe07e98..63edb42 100644
--- a/libcore/imagecache.c
+++ b/libcore/imagecache.c
@@ -390,12 +390,15 @@ bool cImageCache::LoadIcon(eImageType type, string name) {
return LoadImage(*subIconSkinPath, name, "png");
//and finally check if a svg template exists
+ esyslog("skindesigner: checking svg template for %s", name.c_str());
cSVGTemplate svgTemplate(name, svgTemplatePath);
if (!svgTemplate.Exists())
return false;
+ esyslog("skindesigner: template found for %s", name.c_str());
svgTemplate.ReadTemplate();
if (!svgTemplate.ParseTemplate())
return false;
+ esyslog("skindesigner: template parsed for %s", name.c_str());
string tmpImageName = svgTemplate.WriteImage();
return LoadImage(tmpImageName.c_str());
}
@@ -441,12 +444,15 @@ bool cImageCache::LoadSkinpart(string name) {
return LoadImage(skinPartsPathSkin.c_str(), name, "png");
//check if a svg template exists
+ esyslog("skindesigner: checking svg template for %s", name.c_str());
cSVGTemplate svgTemplate(name, svgTemplatePath);
if (!svgTemplate.Exists())
return false;
+ esyslog("skindesigner: template found for %s", name.c_str());
svgTemplate.ReadTemplate();
if (!svgTemplate.ParseTemplate())
return false;
+ esyslog("skindesigner: template parsed for %s", name.c_str());
string tmpImageName = svgTemplate.WriteImage();
return LoadImage(tmpImageName.c_str());
}
diff --git a/libcore/imageloader.c b/libcore/imageloader.c
index 1f78702..b417e01 100644
--- a/libcore/imageloader.c
+++ b/libcore/imageloader.c
@@ -442,16 +442,21 @@ bool cSVGTemplate::ParseTemplate(void) {
i++;
continue;
}
- size_t hitEnd = line.find(endToken, hit);
- if (hitEnd == string::npos) {
- return false;
- }
- string colorName = GetColorName(line, hit, hitEnd);
- tColor replaceColor = 0x0;
- if (!config.GetThemeColor(colorName, replaceColor)) {
- return false;
- }
- ReplaceTokens(line, hit, hitEnd, replaceColor);
+ while (hit != string::npos) {
+ size_t hitEnd = line.find(endToken, hit);
+ if (hitEnd == string::npos) {
+ esyslog("skindesigner: error in SVG Template %s: invalid tag", imageName.c_str());
+ return false;
+ }
+ string colorName = GetColorName(line, hit, hitEnd);
+ tColor replaceColor = 0x0;
+ if (!config.GetThemeColor(colorName, replaceColor)) {
+ esyslog("skindesigner: error in SVG Template %s: invalid color %x", imageName.c_str(), replaceColor);
+ return false;
+ }
+ ReplaceTokens(line, hit, hitEnd, replaceColor);
+ hit = line.find(startTokenColor);
+ }
svgTemplate[i] = line;
i++;
}
@@ -485,7 +490,7 @@ string cSVGTemplate::GetColorName(string line, size_t tokenStart, size_t tokenEn
}
void cSVGTemplate::ReplaceTokens(string &line, size_t tokenStart, size_t tokenEnd, tColor color) {
- string rgbColor = *cString::sprintf("%x", color & 0x00FFFFFF);
+ string rgbColor = *cString::sprintf("%06x", color & 0x00FFFFFF);
line.replace(tokenStart, tokenEnd - tokenStart + 2, rgbColor);
size_t hitAlpha = line.find(startTokenOpac);
if (hitAlpha == string::npos) {