+std::string evaluate(){
+ // replace ".[ExecutableType]" with "[ExecutableExt]"
+ {
+ size_t pos;
+ const std::string pattern = ".[ExecutableType]";
+ while ( ( pos = m_string.find(pattern) ) != std::string::npos ) {
+ m_string.replace(pos, pattern.length(), "[ExecutableExt]");
+ }
+ }
+
+ // add missing [ExtraQ3map2Args] if "[RadiantPath]q3map2[ExecutableExt]"
+ {
+ size_t pos;
+ const std::string pattern = "\"[RadiantPath]q3map2[ExecutableExt]\"";
+ const std::string extra = "[ExtraQ3map2Args]";
+ if ( ( pos = m_string.find(pattern) ) != std::string::npos
+ && m_string.find(extra) == std::string::npos )
+ {
+ m_string.insert(pos + pattern.size(), " ");
+ m_string.insert(pos + pattern.size() + 1, extra);
+ }
+ }
+
+ std::string output;
+ std::string variable_name;