summaryrefslogtreecommitdiffstats
path: root/gui/gui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/gui.cpp')
-rw-r--r--gui/gui.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/gui/gui.cpp b/gui/gui.cpp
index f3d31d7b3..cd6f45d08 100644
--- a/gui/gui.cpp
+++ b/gui/gui.cpp
@@ -729,35 +729,37 @@ int gui_changePackage(std::string newPackage)
return 0;
}
-std::string gui_parse_text(string inText)
+std::string gui_parse_text(std::string str)
{
- // Copied from std::string GUIText::parseText(void)
// This function parses text for DataManager values encompassed by %value% in the XML
- static int counter = 0;
- std::string str = inText;
+ // and string resources (%@resource_name%)
size_t pos = 0;
- size_t next = 0, end = 0;
while (1)
{
- next = str.find('%', pos);
+ size_t next = str.find('%', pos);
if (next == std::string::npos)
return str;
- end = str.find('%', next + 1);
+ size_t end = str.find('%', next + 1);
if (end == std::string::npos)
return str;
// We have a block of data
- std::string var = str.substr(next + 1,(end - next) - 1);
- str.erase(next,(end - next) + 1);
+ std::string var = str.substr(next + 1, (end - next) - 1);
+ str.erase(next, (end - next) + 1);
if (next + 1 == end)
str.insert(next, 1, '%');
else
{
std::string value;
- if (DataManager::GetValue(var, value) == 0)
+ if (var.size() > 0 && var[0] == '@') {
+ // this is a string resource ("%@string_name%")
+ value = PageManager::GetResources()->FindString(var.substr(1));
+ str.insert(next, value);
+ }
+ else if (DataManager::GetValue(var, value) == 0)
str.insert(next, value);
}