gui: support string resources

storing strings in a map (for fast lookup) in resource manager

To define a string resource in <resources>:
<string name="foo">Hello</string>

To use a string, e.g.:
<text>%@foo%</text>

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
diff --git a/gui/text.cpp b/gui/text.cpp
index 3487f7a..effb935 100644
--- a/gui/text.cpp
+++ b/gui/text.cpp
@@ -55,7 +55,7 @@
 	if (child)  mText = child->value();
 
 	// Simple way to check for static state
-	mLastValue = parseText();
+	mLastValue = gui_parse_text(mText);
 	if (mLastValue != mText)   mIsStatic = 0;
 
 	mFontHeight = mFont->GetHeight();
@@ -70,7 +70,7 @@
 	if (mFont)
 		fontResource = mFont->GetResource();
 
-	mLastValue = parseText();
+	mLastValue = gui_parse_text(mText);
 	string displayValue = mLastValue;
 
 	if (charSkip)
@@ -126,7 +126,7 @@
 	if (mIsStatic || !mVarChanged)
 		return 0;
 
-	std::string newValue = parseText();
+	std::string newValue = gui_parse_text(mText);
 	if (mLastValue == newValue)
 		return 0;
 	else
@@ -142,44 +142,11 @@
 		fontResource = mFont->GetResource();
 
 	h = mFontHeight;
-	mLastValue = parseText();
+	mLastValue = gui_parse_text(mText);
 	w = gr_measureEx(mLastValue.c_str(), fontResource);
 	return 0;
 }
 
-std::string GUIText::parseText(void)
-{
-	static int counter = 0;
-	std::string str = mText;
-	size_t pos = 0;
-	size_t next = 0, end = 0;
-
-	while (1)
-	{
-		next = str.find('%', pos);
-		if (next == std::string::npos) return str;
-		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);
-
-		if (next + 1 == end)
-		{
-			str.insert(next, 1, '%');
-		}
-		else
-		{
-			std::string value;
-			if (DataManager::GetValue(var, value) == 0)
-				str.insert(next, value);
-		}
-
-		pos = next + 1;
-	}
-}
-
 int GUIText::NotifyVarChange(const std::string& varName, const std::string& value)
 {
 	GUIObject::NotifyVarChange(varName, value);