From b2e8f672f310276e7009895c0ac4e58fcfeb35ac Mon Sep 17 00:00:00 2001 From: that Date: Thu, 5 Mar 2015 20:25:39 +0100 Subject: gui: support string resources storing strings in a map (for fast lookup) in resource manager To define a string resource in : Hello To use a string, e.g.: %@foo% Not yet done: language-specific resources (should be solved not only for strings, but for all kinds of resources - e.g. for localized images) Change-Id: I3ba5cf5298c09e0d28a83973e9662f179271b33f --- gui/gui.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'gui/gui.cpp') 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); } -- cgit v1.2.3