wesnoth-cvs-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Wesnoth-cvs-commits] wesnoth/src builder.cpp cavegen.cpp config.cpp ...


From: Guillaume Melquiond
Subject: [Wesnoth-cvs-commits] wesnoth/src builder.cpp cavegen.cpp config.cpp ...
Date: Sun, 20 Feb 2005 16:45:22 -0500

CVSROOT:        /cvsroot/wesnoth
Module name:    wesnoth
Branch:         
Changes by:     Guillaume Melquiond <address@hidden>    05/02/20 21:45:22

Modified files:
        src            : builder.cpp cavegen.cpp config.cpp config.hpp 
                         dialogs.cpp font.cpp game.cpp game_events.cpp 
                         gamestatus.cpp gettext.cpp help.cpp map.cpp 
                         mapgen.cpp multiplayer_client.cpp 
                         multiplayer_connect.cpp playturn.cpp 
                         preferences.cpp race.cpp team.cpp theme.cpp 
                         unit.cpp unit_types.cpp 
        src/editor     : editor.cpp editor_main.cpp map_manip.cpp 
        src/serialization: string_utils.cpp string_utils.hpp 
        src/server     : server.cpp 
        src/tools      : exploder_cutter.cpp exploder_utils.cpp 
        src/widgets    : button.cpp menu.cpp 

Log message:
        Completely remove string functions from config.cpp.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/builder.cpp.diff?tr1=1.40&tr2=1.41&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/cavegen.cpp.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/config.cpp.diff?tr1=1.127&tr2=1.128&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/config.hpp.diff?tr1=1.55&tr2=1.56&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/dialogs.cpp.diff?tr1=1.80&tr2=1.81&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/font.cpp.diff?tr1=1.98&tr2=1.99&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/game.cpp.diff?tr1=1.193&tr2=1.194&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/game_events.cpp.diff?tr1=1.118&tr2=1.119&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/gamestatus.cpp.diff?tr1=1.54&tr2=1.55&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/gettext.cpp.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/help.cpp.diff?tr1=1.66&tr2=1.67&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/map.cpp.diff?tr1=1.49&tr2=1.50&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/mapgen.cpp.diff?tr1=1.55&tr2=1.56&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/multiplayer_client.cpp.diff?tr1=1.86&tr2=1.87&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/multiplayer_connect.cpp.diff?tr1=1.102&tr2=1.103&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/playturn.cpp.diff?tr1=1.328&tr2=1.329&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/preferences.cpp.diff?tr1=1.132&tr2=1.133&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/race.cpp.diff?tr1=1.11&tr2=1.12&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/team.cpp.diff?tr1=1.78&tr2=1.79&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/theme.cpp.diff?tr1=1.30&tr2=1.31&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/unit.cpp.diff?tr1=1.121&tr2=1.122&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/unit_types.cpp.diff?tr1=1.79&tr2=1.80&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/editor/editor.cpp.diff?tr1=1.90&tr2=1.91&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/editor/editor_main.cpp.diff?tr1=1.24&tr2=1.25&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/editor/map_manip.cpp.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/serialization/string_utils.cpp.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/serialization/string_utils.hpp.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/server/server.cpp.diff?tr1=1.64&tr2=1.65&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/tools/exploder_cutter.cpp.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/tools/exploder_utils.cpp.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/button.cpp.diff?tr1=1.53&tr2=1.54&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/menu.cpp.diff?tr1=1.76&tr2=1.77&r1=text&r2=text

Patches:
Index: wesnoth/src/builder.cpp
diff -u wesnoth/src/builder.cpp:1.40 wesnoth/src/builder.cpp:1.41
--- wesnoth/src/builder.cpp:1.40        Fri Dec 31 21:01:37 2004
+++ wesnoth/src/builder.cpp     Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: builder.cpp,v 1.40 2004/12/31 21:01:37 isaaccp Exp $ */
+/* $Id: builder.cpp,v 1.41 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2004 by Philippe Plantier <address@hidden>
    Part of the Battle for Wesnoth Project http://www.wesnoth.org
@@ -495,7 +495,7 @@
 
                } else if((**img)["position"] == "vertical") {
 
-                       std::vector<std::string> base = 
config::split((**img)["base"]);
+                       std::vector<std::string> base = 
utils::split((**img)["base"]);
                        int basex = 0, basey = 0;
 
                        if(base.size() >= 2) {
@@ -546,7 +546,7 @@
 void terrain_builder::add_constraint_item(std::vector<std::string> &list, 
const config& cfg, const std::string &item)
 {
        if(!cfg[item].empty()) {
-               std::vector<std::string> item_string = config::split(cfg[item]);
+               std::vector<std::string> item_string = utils::split(cfg[item]);
                
                for(std::vector<std::string>::const_iterator itor = 
item_string.begin();
                                itor != item_string.end(); ++itor) {
@@ -575,11 +575,11 @@
        int lineno = 0;
        int x = 0;
 
-       const std::vector<std::string> &lines = config::split(mapstring, '\n', 
0);
+       const std::vector<std::string> &lines = utils::split(mapstring, '\n', 
0);
        std::vector<std::string>::const_iterator line = lines.begin();
        
        //Strips trailing empty lines
-       while(line != lines.end() && 
std::find_if(line->begin(),line->end(),config::notspace) == line->end()) {
+       while (line != lines.end() && std::find_if(line->begin(), line->end(), 
utils::notspace) == line->end()) {
                line++;
        }
        //Break if there only are blank lines
@@ -604,7 +604,7 @@
 
                while(lpos < line->size()) {
                        std::string types = line->substr(lpos, 4);
-                       config::strip(types);
+                       utils::strip(types);
                        
                        //If there are numbers in the types string, consider it
                        //is an anchor
@@ -641,7 +641,7 @@
 
                add_rule(rules, tpl);
        } else {
-               const std::vector<std::string>& rot = config::split(rotations, 
',');
+               const std::vector<std::string>& rot = utils::split(rotations, 
',');
                        
                for(size_t angle = 0; angle < rot.size(); angle++) {
                        building_rule rule = rotate_rule(tpl, angle, rot);
@@ -688,7 +688,7 @@
                                loc.y = atoi((**tc)["y"].c_str());
                        } 
                        if(!(**tc)["loc"].empty()) {
-                               std::vector<std::string> sloc = 
config::split((**tc)["pos"]);
+                               std::vector<std::string> sloc = 
utils::split((**tc)["pos"]);
                                if(sloc.size() == 2) {
                                        loc.x = atoi(sloc[0].c_str());
                                        loc.y = atoi(sloc[1].c_str());
Index: wesnoth/src/cavegen.cpp
diff -u wesnoth/src/cavegen.cpp:1.14 wesnoth/src/cavegen.cpp:1.15
--- wesnoth/src/cavegen.cpp:1.14        Sun Feb  6 10:40:12 2005
+++ wesnoth/src/cavegen.cpp     Sun Feb 20 21:45:21 2005
@@ -137,7 +137,7 @@
                size_t min_xpos = 0, min_ypos = 0, max_xpos = width_, max_ypos 
= height_;
 
                if(xpos != "") {
-                       const std::vector<std::string>& items = 
config::split(xpos,'-');
+                       const std::vector<std::string>& items = 
utils::split(xpos, '-');
                        if(items.empty() == false) {
                                min_xpos = atoi(items.front().c_str()) - 1;
                                max_xpos = atoi(items.back().c_str());
@@ -145,7 +145,7 @@
                }
 
                if(ypos != "") {
-                       const std::vector<std::string>& items = 
config::split(ypos,'-');
+                       const std::vector<std::string>& items = 
utils::split(ypos, '-');
                        if(items.empty() == false) {
                                min_ypos = atoi(items.front().c_str()) - 1;
                                max_ypos = atoi(items.back().c_str());
Index: wesnoth/src/config.cpp
diff -u wesnoth/src/config.cpp:1.127 wesnoth/src/config.cpp:1.128
--- wesnoth/src/config.cpp:1.127        Sun Feb 20 19:22:31 2005
+++ wesnoth/src/config.cpp      Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: config.cpp,v 1.127 2005/02/20 19:22:31 silene Exp $ */
+/* $Id: config.cpp,v 1.128 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -27,10 +27,11 @@
 #include "game_events.hpp"
 #include "gettext.hpp"
 #include "log.hpp"
-#include "serialization/preprocessor.hpp"
 #include "util.hpp"
 #include "wassert.hpp"
 #include "wesconfig.h"
+#include "serialization/preprocessor.hpp"
+#include "serialization/string_utils.hpp"
 
 #define ERR_CF lg::err(lg::config)
 #define WRN_CF lg::warn(lg::config)
@@ -290,7 +291,7 @@
                                        //we strip it away, since it simply 
indicates that this value is translatable.
                                        if(value.empty() == false && 
std::count(value.begin(),value.end(),'_') == 1) {
                                                std::string val = value;
-                                               if(strip(val) == "_") {
+                                               if (utils::strip(val) == "_") {
                                                        value = "";
                                                        translatable = true;
                                                }
@@ -319,8 +320,8 @@
                                        //see if this is a CSV list=CSV list 
style assignment (e.g. x,y=5,8)
                                        std::vector<std::string> vars, values;
                                        
if(std::count(var.begin(),var.end(),',') > 0) {
-                                               vars = config::split(var);
-                                               values = config::split(value);
+                                               vars = utils::split(var);
+                                               values = utils::split(value);
                                        } else {
                                                vars.push_back(var);
                                                values.push_back(value);
@@ -352,7 +353,7 @@
                                                        }
 
                                                        if(has_quotes == false) 
{
-                                                               strip(value);
+                                                               
utils::strip(value);
                                                        }
 
                                                        if(n < vars.size()) {
@@ -911,213 +912,13 @@
                return NULL;
 }
 
-std::string config::join(const std::vector<std::string>& v, char c)
-{
-       std::stringstream str;
-       for(std::vector<std::string>::const_iterator i = v.begin(); i != 
v.end(); ++i) {
-               str << *i;
-               if(i+1 != v.end()) {
-                       str << c;
-               }
-       }
-
-       return str.str();
-}
-
-std::vector<std::string> config::split(const std::string& val, char c, int 
flags)
-{
-       std::vector<std::string> res;
-
-       std::string::const_iterator i1 = val.begin();
-       std::string::const_iterator i2 = val.begin();
-
-       while(i2 != val.end()) {
-               if(*i2 == c) {
-                       std::string new_val(i1,i2);
-                       if(flags & STRIP_SPACES)
-                               strip(new_val);
-                       if(!(flags & REMOVE_EMPTY) || !new_val.empty())
-                               res.push_back(new_val);
-                       ++i2;
-                       if(flags & STRIP_SPACES) {
-                               while(i2 != val.end() && *i2 == ' ')
-                                       ++i2;
-                       }
-
-                       i1 = i2;
-               } else {
-                       ++i2;
-               }
-       }
-
-       std::string new_val(i1,i2);
-       if(flags & STRIP_SPACES)
-               strip(new_val);
-       if(!(flags & REMOVE_EMPTY) || !new_val.empty())
-               res.push_back(new_val);
-
-       return res;
-}
-
-//identical to split(), except it does not split when it otherwise
-//would if the previous character was identical to the parameter 'quote'.
-//i.e. it does not split quoted commas.
-//this method was added to make it possible to quote user input,
-//particularly so commas in user input will not cause visual problems in menus.
-//why not change split()? that would change the methods post condition.
-std::vector<std::string> config::quoted_split(const std::string& val, char c, 
int flags, char quote)
-{
-       std::vector<std::string> res;
-
-       std::string::const_iterator i1 = val.begin();
-       std::string::const_iterator i2 = val.begin();
-
-       while(i2 != val.end()) {
-               if(*i2 == quote) {
-                       // ignore quoted character
-                       ++i2;
-                       if(i2 != val.end()) ++i2;
-               } else if(*i2 == c) {
-                       std::string new_val(i1,i2);
-                       if(flags & STRIP_SPACES)
-                               strip(new_val);
-                       if(!(flags & REMOVE_EMPTY) || !new_val.empty())
-                               res.push_back(new_val);
-                       ++i2;
-                       if(flags & STRIP_SPACES) {
-                               while(i2 != val.end() && *i2 == ' ')
-                                       ++i2;
-                       }
-
-                       i1 = i2;
-               } else {
-                       ++i2;
-               }
-       }
-
-       std::string new_val(i1,i2);
-       if(flags & STRIP_SPACES)
-               strip(new_val);
-       if(!(flags & REMOVE_EMPTY) || !new_val.empty())
-               res.push_back(new_val);
-
-       return res;
-}
-
-std::pair<int,int> config::parse_range(const std::string& str)
-{
-       const std::string::const_iterator dash = 
std::find(str.begin(),str.end(),'-');
-       const std::string a(str.begin(),dash);
-       const std::string b = dash != str.end() ? std::string(dash+1,str.end()) 
: a;
-       std::pair<int,int> res(atoi(a.c_str()),atoi(b.c_str()));
-       if(res.second < res.first)
-               res.second = res.first;
-
-       return res;
-}
-
-//make sure we regard '\r' and '\n' as a space, since Mac, Unix, and DOS
-//all consider these differently.
-bool config::notspace(char c) { return !portable_isspace(c); }
-
-//prepend all special characters with a backslash
-//special characters are:
-//address@hidden,\*
-std::string& config::escape(std::string& str)
-{
-       if(!str.empty()) {
-               std::string::size_type pos = 0;
-
-               do {
-                       pos = str.find_first_of("address@hidden,\\*",pos);
-                       if(pos != std::string::npos) {
-                               str.insert(pos,1,'\\');
-                               pos += 2;
-                       }
-               } while(pos < str.size() && pos != std::string::npos);
-       }
-       return str;
-}
-// remove all escape characters (backslash)
-std::string& config::unescape(std::string& str)
-{
-       std::string::size_type pos = 0;
-
-       do {
-               pos = str.find('\\',pos);
-               if(pos != std::string::npos) {
-                       str.erase(pos,1);
-                       ++pos;
-               }
-       } while(pos < str.size() && pos != std::string::npos);
-       return str;
-}
-std::string& config::strip(std::string& str)
-{
-       //if all the string contains is whitespace, then the whitespace may
-       //have meaning, so don't strip it
-       const std::string::iterator 
it=std::find_if(str.begin(),str.end(),notspace);
-       if(it == str.end())
-               return str;
-
-       str.erase(str.begin(),it);
-       
str.erase(std::find_if(str.rbegin(),str.rend(),notspace).base(),str.end());
-
-       return str;
-}
-
+#if 0
 bool config::has_value(const std::string& values, const std::string& val)
 {
        const std::vector<std::string>& vals = split(values);
        return std::count(vals.begin(),vals.end(),val) > 0;
 }
-
-namespace {
-
-bool not_id(char c)
-{
-       return !isdigit(c) && !isalpha(c) && c != '.' && c != '_';
-}
-
-void do_interpolation(std::string& res, size_t npos, const string_map* m)
-{
-       LOG_CF << "doing interpolation into '" << res << "': " << npos << "\n";
-       const std::string::iterator i = 
std::find(res.begin()+npos,res.end(),'$');
-       if(i == res.end() || i+1 == res.end()) {
-               return;
-       }
-
-       npos = i - res.begin();
-
-       const std::string::iterator end = std::find_if(i+1,res.end(),not_id);
-
-       const std::string key(i+1,end);
-       res.erase(i,end);
-
-       if(m != NULL) {
-               const string_map::const_iterator itor = m->find(key);
-               if(itor != m->end()) {
-                       res.insert(npos,itor->second);
-               }
-       } else {
-               res.insert(npos,game_events::get_variable_const(key));
-       }
-
-       do_interpolation(res,npos,m);
-}
-
-}
-
-std::string config::interpolate_variables_into_string(const std::string& str, 
const string_map* symbols)
-{
-       std::string res = str;
-       do_interpolation(res,0,symbols);
-
-       //remove any pipes in the string, as they are used simply to seperate 
variables
-       res.erase(std::remove(res.begin(),res.end(),'|'),res.end());
-
-       return res;
-}
+#endif
 
 void config::clear()
 {
Index: wesnoth/src/config.hpp
diff -u wesnoth/src/config.hpp:1.55 wesnoth/src/config.hpp:1.56
--- wesnoth/src/config.hpp:1.55 Sun Feb 20 19:22:31 2005
+++ wesnoth/src/config.hpp      Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: config.hpp,v 1.55 2005/02/20 19:22:31 silene Exp $ */
+/* $Id: config.hpp,v 1.56 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -116,26 +116,6 @@
        void clear_children(const std::string& key);
        void remove_child(const std::string& key, size_t index);
 
-       // REMOVE_EMPTY : remove empty elements
-       // STRIP_SPACES : strips leading and trailing blank spaces
-       enum { REMOVE_EMPTY = 0x01, STRIP_SPACES = 0x02 };
-       static std::vector<std::string> split(const std::string& val, char 
c=',', int flags = REMOVE_EMPTY | STRIP_SPACES);
-       static std::string join(const std::vector<std::string>& v, char c=',');
-       static std::vector<std::string> quoted_split(const std::string& val, 
char c=',',
-                                                    int flags = REMOVE_EMPTY | 
STRIP_SPACES, char quote='\\');
-
-       static std::pair<int,int> parse_range(const std::string& str);
-       static bool notspace(char c);
-       static std::string& escape(std::string& str);
-       static std::string& unescape(std::string& str);
-       static std::string& strip(std::string& str);
-       static bool has_value(const std::string& values, const std::string& 
val);
-
-       //function which will interpolate variables, starting with '$' in the 
string 'str' with
-       //the equivalent symbols in the given symbol table. If 'symbols' is 
NULL, then game event
-       //variables will be used instead
-       static std::string interpolate_variables_into_string(const std::string& 
str, const string_map* symbols=NULL);
-
        void clear();
        bool empty() const;
 
Index: wesnoth/src/dialogs.cpp
diff -u wesnoth/src/dialogs.cpp:1.80 wesnoth/src/dialogs.cpp:1.81
--- wesnoth/src/dialogs.cpp:1.80        Wed Jan 19 20:11:34 2005
+++ wesnoth/src/dialogs.cpp     Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: dialogs.cpp,v 1.80 2005/01/19 20:11:34 silene Exp $ */
+/* $Id: dialogs.cpp,v 1.81 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -351,7 +351,7 @@
 
        // escape all special characters in filenames
        std::string name = (*info_)[index_].name;
-       str << font::BOLD_TEXT << config::escape(name) << "\n" << time_buf;
+       str << font::BOLD_TEXT << utils::escape(name) << "\n" << time_buf;
 
        const std::string& campaign_type = summary["campaign_type"];
        if(summary["corrupt"] == "yes") {
@@ -696,7 +696,7 @@
        
        const std::string text = details.str();
        
-       const std::vector<std::string> lines = config::split(text,'\n');
+       const std::vector<std::string> lines = utils::split(text, '\n');
 
        SDL_Rect cur_area = area;
 
@@ -770,7 +770,7 @@
 
        /* description text */
        const std::string& desc_text = 
font::word_wrap_text((*descriptions_)[index_].first,font::SIZE_SMALL,area.w-2*campaign_preview_border);
-       const std::vector<std::string> lines = config::split(desc_text,'\n');
+       const std::vector<std::string> lines = utils::split(desc_text, '\n');
        SDL_Rect txt_area = { area.x+campaign_preview_border,area.y,0,0 };
 
        for(std::vector<std::string>::const_iterator line = lines.begin(); line 
!= lines.end(); ++line) {
Index: wesnoth/src/editor/editor.cpp
diff -u wesnoth/src/editor/editor.cpp:1.90 wesnoth/src/editor/editor.cpp:1.91
--- wesnoth/src/editor/editor.cpp:1.90  Sat Feb 19 19:37:36 2005
+++ wesnoth/src/editor/editor.cpp       Sun Feb 20 21:45:22 2005
@@ -546,7 +546,7 @@
        if (!load_successful) {
                const std::string failed_msg = _("Load failed: ");
                const std::string show_msg = failed_msg +
-                       config::interpolate_variables_into_string(msg, 
&symbols);
+                       utils::interpolate_variables_into_string(msg, &symbols);
                gui::show_dialog(gui_, NULL, "", show_msg, gui::OK_ONLY);
                throw load_map_exception();
        }
Index: wesnoth/src/editor/editor_main.cpp
diff -u wesnoth/src/editor/editor_main.cpp:1.24 
wesnoth/src/editor/editor_main.cpp:1.25
--- wesnoth/src/editor/editor_main.cpp:1.24     Wed Jan 26 20:36:24 2005
+++ wesnoth/src/editor/editor_main.cpp  Sun Feb 20 21:45:22 2005
@@ -82,7 +82,7 @@
                        if(arg+1 != argc) {
                                ++arg;
                                const std::string val(argv[arg]);
-                               const std::vector<std::string> res = 
config::split(val,'x');
+                               const std::vector<std::string> res = 
utils::split(val, 'x');
                                if(res.size() == 2) {
                                        const int xres = 
lexical_cast_default<int>(res.front());
                                        const int yres = 
lexical_cast_default<int>(res.back());
Index: wesnoth/src/editor/map_manip.cpp
diff -u wesnoth/src/editor/map_manip.cpp:1.7 
wesnoth/src/editor/map_manip.cpp:1.8
--- wesnoth/src/editor/map_manip.cpp:1.7        Fri May 28 17:07:46 2004
+++ wesnoth/src/editor/map_manip.cpp    Sun Feb 20 21:45:22 2005
@@ -13,6 +13,7 @@
 #include "../map.hpp"
 #include "../config.hpp"
 #include "../util.hpp"
+#include "serialization/string_utils.hpp"
 
 #include "map_manip.hpp"
 
@@ -192,7 +193,7 @@
 std::string resize_map(const gamemap &map, const unsigned new_w,
                                           const unsigned new_h, const 
gamemap::TERRAIN fill_with) {
        std::string str_map = map.write();
-       std::vector<std::string> lines = config::split(str_map, '\n');
+       std::vector<std::string> lines = utils::split(str_map, '\n');
        bool map_changed = false;
        const unsigned old_w = (unsigned)map.x();
        const unsigned old_h = (unsigned)map.y();
@@ -209,7 +210,7 @@
                map_changed = true;
        }
        if (map_changed) {
-               return config::join(lines, '\n');
+               return utils::join(lines, '\n');
        }
        else {
                return "";
@@ -222,7 +223,7 @@
        if (str_map == "") {
                return str_map;
        }
-       std::vector<std::string> lines = config::split(str_map, '\n');
+       std::vector<std::string> lines = utils::split(str_map, '\n');
        std::vector<std::string> new_lines;
        if (axis == FLIP_Y) {
                if (is_even(lines[0].size())) {
@@ -249,7 +250,7 @@
        else {
                new_lines = lines;
        }
-       return config::join(new_lines, '\n');
+       return utils::join(new_lines, '\n');
 }
 
 bool valid_mapdata(const std::string &data, const config &cfg) {
Index: wesnoth/src/font.cpp
diff -u wesnoth/src/font.cpp:1.98 wesnoth/src/font.cpp:1.99
--- wesnoth/src/font.cpp:1.98   Wed Feb  9 23:32:01 2005
+++ wesnoth/src/font.cpp        Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: font.cpp,v 1.98 2005/02/09 23:32:01 ydirson Exp $ */
+/* $Id: font.cpp,v 1.99 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -344,7 +344,7 @@
                return surface();
 
        // XXX Changed by erl, to not strip when rendering text. Works 
everywhere?
-       const std::vector<std::string> lines = config::split(text,'\n', 
config::REMOVE_EMPTY);
+       const std::vector<std::string> lines = utils::split(text, '\n', 
utils::REMOVE_EMPTY);
        std::vector<surface> surfaces;
        surfaces.reserve(lines.size());
        size_t width = 0, height = 0;
@@ -565,7 +565,7 @@
                if(i1 != i2) {
                        std::string new_string(i1,i2);
 
-                       config::unescape(new_string);
+                       utils::unescape(new_string);
 
                        const SDL_Rect rect = draw_text_line(gui, area, sz, 
col, new_string, x, y, use_tooltips, text_style);
                        if(rect.w > res.w) {
Index: wesnoth/src/game.cpp
diff -u wesnoth/src/game.cpp:1.193 wesnoth/src/game.cpp:1.194
--- wesnoth/src/game.cpp:1.193  Sun Feb 20 15:27:25 2005
+++ wesnoth/src/game.cpp        Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: game.cpp,v 1.193 2005/02/20 15:27:25 Sirp Exp $ */
+/* $Id: game.cpp,v 1.194 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -392,7 +392,7 @@
                        if(arg_+1 != argc_) {
                                ++arg_;
                                const std::string val(argv_[arg_]);
-                               const std::vector<std::string> res = 
config::split(val,'x');
+                               const std::vector<std::string> res = 
utils::split(val, 'x');
                                if(res.size() == 2) {
                                        const int xres = 
lexical_cast_default<int>(res.front());
                                        const int yres = 
lexical_cast_default<int>(res.back());
@@ -650,7 +650,7 @@
                        continue;
                }
 
-               std::vector<std::string> name_value = config::split(val,'=');
+               std::vector<std::string> name_value = utils::split(val, '=');
                if(name_value.size() > 2) {
                        std::cerr << "invalid argument '" << val << "'\n";
                        return false;
@@ -679,7 +679,7 @@
                        } else if(last_digit && name_head == "--side") {
                                side_types[side] = value;
                        } else if(last_digit && name_head == "--parm") {
-                               const std::vector<std::string> name_value = 
config::split(value,':');
+                               const std::vector<std::string> name_value = 
utils::split(value, ':');
                                if(name_value.size() != 2) {
                                        std::cerr << "argument to '" << name << 
"' must be in the format name:value\n";
                                        return false;
@@ -985,9 +985,9 @@
        state_.scenario = campaign["first_scenario"];
 
        const std::string difficulty_descriptions = 
campaign["difficulty_descriptions"];
-       std::vector<std::string> difficulty_options = 
config::split(difficulty_descriptions,';');
+       std::vector<std::string> difficulty_options = 
utils::split(difficulty_descriptions, ';');
 
-       const std::vector<std::string> difficulties = 
config::split(campaign["difficulties"]);
+       const std::vector<std::string> difficulties = 
utils::split(campaign["difficulties"]);
 
        if(difficulties.empty() == false) {
                if(difficulty_options.size() != difficulties.size()) {
@@ -1058,7 +1058,7 @@
                return;
        }
 
-       const std::vector<std::string> items = config::split(host,':');
+       const std::vector<std::string> items = utils::split(host, ':');
        host = items.front();
 
        try {
Index: wesnoth/src/game_events.cpp
diff -u wesnoth/src/game_events.cpp:1.118 wesnoth/src/game_events.cpp:1.119
--- wesnoth/src/game_events.cpp:1.118   Fri Jan 21 20:07:30 2005
+++ wesnoth/src/game_events.cpp Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: game_events.cpp,v 1.118 2005/01/21 20:07:30 Sirp Exp $ */
+/* $Id: game_events.cpp,v 1.119 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -301,7 +301,7 @@
 
                const std::string& type = cfg["type"];
 
-               const std::vector<std::string>& types = config::split(type);
+               const std::vector<std::string>& types = utils::split(type);
                for(std::vector<std::string>::const_iterator i = types.begin(); 
i != types.end(); ++i) {
                        (*teams)[index].recruits().insert(*i);
                        preferences::encountered_units().insert(*i);
@@ -321,7 +321,7 @@
                        return rval;
 
                const std::string& type = cfg["type"];
-               const std::vector<std::string>& types = config::split(type);
+               const std::vector<std::string>& types = utils::split(type);
                for(std::vector<std::string>::const_iterator i = types.begin(); 
i != types.end(); ++i) {
                        (*teams)[index].recruits().erase(*i);
 
@@ -338,7 +338,7 @@
                if(index >= teams->size())
                        return rval;
 
-               std::vector<std::string> recruit = 
config::split(cfg["recruit"]);
+               std::vector<std::string> recruit = utils::split(cfg["recruit"]);
                if(recruit.size() == 1 && recruit.back() == "")
                        recruit.clear();
 
@@ -461,8 +461,8 @@
                const game_data::unit_type_map::const_iterator itor = 
game_data_ptr->unit_types.find(type);
                if(itor != game_data_ptr->unit_types.end()) {
                        unit dummy_unit(&itor->second,0,false,true,gender);
-                       const std::vector<std::string> xvals = 
config::split(cfg["x"]);
-                       const std::vector<std::string> yvals = 
config::split(cfg["y"]);
+                       const std::vector<std::string> xvals = 
utils::split(cfg["x"]);
+                       const std::vector<std::string> yvals = 
utils::split(cfg["y"]);
                        std::vector<gamemap::location> path;
                        gamemap::location src;
                        gamemap::location dst;
@@ -493,19 +493,22 @@
 
        //setting a variable
        else if(cmd == "set_variable") {
-               const std::string& name = 
config::interpolate_variables_into_string(cfg.get_attribute("name"));
+               const std::string& name = 
utils::interpolate_variables_into_string(
+                       cfg.get_attribute("name"));
                std::string& var = game_events::get_variable(name);
                const std::string& value = cfg["value"];
                if(value.empty() == false) {
                        var = value;
                }
 
-               const std::string& format = 
config::interpolate_variables_into_string(cfg.get_attribute("format"));
+               const std::string& format = 
utils::interpolate_variables_into_string(
+                       cfg.get_attribute("format"));
                if(format.empty() == false) {
                        var = format;
                }
 
-               const std::string& to_variable = 
config::interpolate_variables_into_string(cfg.get_attribute("to_variable"));
+               const std::string& to_variable = 
utils::interpolate_variables_into_string(
+                       cfg.get_attribute("to_variable"));
                if(to_variable.empty() == false) {
                        var = game_events::get_variable(to_variable);
                }
@@ -628,9 +631,9 @@
        else if(cmd == "role") {
 
                //get a list of the types this unit can be
-               std::vector<std::string> types = config::split(cfg["type"]);
+               std::vector<std::string> types = utils::split(cfg["type"]);
 
-                std::vector<std::string> sides = config::split(cfg["side"]);
+                std::vector<std::string> sides = utils::split(cfg["side"]);
 
                //iterate over all the types, and for each type, try to find
                //a unit that matches
@@ -977,7 +980,7 @@
                //if we're not replaying, or if we are replaying and there is 
no choice
                //to be made, show the dialog.
                if(get_replay_source().at_end() || options.empty()) {
-                       const std::string msg = 
config::interpolate_variables_into_string(cfg["message"]);
+                       const std::string msg = 
utils::interpolate_variables_into_string(cfg["message"]);
                        option_chosen = 
gui::show_dialog(*screen,surface,caption,msg,
                                        options.empty() ? gui::MESSAGE : 
gui::OK_ONLY,
                                        options.empty() ? NULL : &options);
@@ -1127,7 +1130,8 @@
        }
 
        else if(cmd == "unstore_unit") {
-               const config& var = 
game_events::get_variable_cfg(config::interpolate_variables_into_string(cfg.get_attribute("variable")));
+               const config& var = game_events::get_variable_cfg(
+                       
utils::interpolate_variables_into_string(cfg.get_attribute("variable")));
 
                try {
                        const unit u(*game_data_ptr,var);
@@ -1282,8 +1286,8 @@
                                                    const std::string& yloc)
 {
        if(std::find(xloc.begin(),xloc.end(),',') != xloc.end()) {
-               std::vector<std::string> xlocs = config::split(xloc);
-               std::vector<std::string> ylocs = config::split(yloc);
+               std::vector<std::string> xlocs = utils::split(xloc);
+               std::vector<std::string> ylocs = utils::split(yloc);
 
                const int size = xlocs.size() < 
ylocs.size()?xlocs.size():ylocs.size();
                for(int i = 0; i != size; ++i) {
@@ -1540,7 +1544,7 @@
        used_items.clear();
        const std::string& used = cfg["used_items"];
        if(!used.empty()) {
-               const std::vector<std::string>& v = config::split(used);
+               const std::vector<std::string>& v = utils::split(used);
                for(std::vector<std::string>::const_iterator i = v.begin(); i 
!= v.end(); ++i) {
                        used_items.insert(*i);
                }
Index: wesnoth/src/gamestatus.cpp
diff -u wesnoth/src/gamestatus.cpp:1.54 wesnoth/src/gamestatus.cpp:1.55
--- wesnoth/src/gamestatus.cpp:1.54     Sun Feb 20 15:27:25 2005
+++ wesnoth/src/gamestatus.cpp  Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: gamestatus.cpp,v 1.54 2005/02/20 15:27:25 Sirp Exp $ */
+/* $Id: gamestatus.cpp,v 1.55 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -208,7 +208,7 @@
 
        const std::string& can_recruit_str = (*cfg)["can_recruit"];
        if(can_recruit_str != "") {
-               const std::vector<std::string> can_recruit = 
config::split(can_recruit_str);
+               const std::vector<std::string> can_recruit = 
utils::split(can_recruit_str);
                
std::copy(can_recruit.begin(),can_recruit.end(),std::inserter(res.can_recruit,res.can_recruit.end()));
        }
 
Index: wesnoth/src/gettext.cpp
diff -u wesnoth/src/gettext.cpp:1.7 wesnoth/src/gettext.cpp:1.8
--- wesnoth/src/gettext.cpp:1.7 Sun Dec  5 18:24:44 2004
+++ wesnoth/src/gettext.cpp     Sun Feb 20 21:45:21 2005
@@ -1,6 +1,7 @@
 #include "global.hpp"
 
 #include "gettext.hpp"
+#include "serialization/string_utils.hpp"
 
 #include <cstring>
 
@@ -38,7 +39,6 @@
 std::string vgettext (const char *msgid, const string_map& symbols)
 {
        const std::string orig(gettext(msgid));
-       const std::string msg = config::interpolate_variables_into_string(orig,
-                       &symbols);
+       const std::string msg = utils::interpolate_variables_into_string(orig, 
&symbols);
        return msg;
 }
Index: wesnoth/src/help.cpp
diff -u wesnoth/src/help.cpp:1.66 wesnoth/src/help.cpp:1.67
--- wesnoth/src/help.cpp:1.66   Sun Jan 23 15:32:07 2005
+++ wesnoth/src/help.cpp        Sun Feb 20 21:45:21 2005
@@ -735,7 +735,7 @@
        const config *toplevel = cfg.child("toplevel");
        if (toplevel != NULL) {
                const std::vector<std::string> toplevel_refs
-                       = config::quoted_split((*toplevel)["sections"]);
+                       = utils::quoted_split((*toplevel)["sections"]);
                if (std::find(toplevel_refs.begin(), toplevel_refs.end(), 
section_id)
                        != toplevel_refs.end()) {
                        return true;
@@ -744,7 +744,7 @@
        for (config::const_child_itors itors = cfg.child_range("section");
                 itors.first != itors.second; itors.first++) {
                const std::vector<std::string> sections_refd
-                       = config::quoted_split((*(*itors.first))["sections"]);
+                       = utils::quoted_split((*(*itors.first))["sections"]);
                if (std::find(sections_refd.begin(), sections_refd.end(), 
section_id)
                        != sections_refd.end()) {
                        return true;
@@ -757,7 +757,7 @@
        const config *toplevel = cfg.child("toplevel");
        if (toplevel != NULL) {
                const std::vector<std::string> toplevel_refs
-                       = config::quoted_split((*toplevel)["topics"]);
+                       = utils::quoted_split((*toplevel)["topics"]);
                if (std::find(toplevel_refs.begin(), toplevel_refs.end(), 
topic_id)
                        != toplevel_refs.end()) {
                        return true;
@@ -766,7 +766,7 @@
        for (config::const_child_itors itors = cfg.child_range("section");
                 itors.first != itors.second; itors.first++) {
                const std::vector<std::string> topics_refd
-                       = config::quoted_split((*(*itors.first))["topics"]);
+                       = utils::quoted_split((*(*itors.first))["topics"]);
                if (std::find(topics_refd.begin(), topics_refd.end(), topic_id)
                        != topics_refd.end()) {
                        return true;
@@ -782,7 +782,7 @@
                                  << std::endl;
        }
        else if (section_cfg != NULL) {
-               const std::vector<std::string> sections = 
config::quoted_split((*section_cfg)["sections"]);
+               const std::vector<std::string> sections = 
utils::quoted_split((*section_cfg)["sections"]);
                const std::string id = level == 0 ? "toplevel" : 
(*section_cfg)["id"];
                if (level != 0) {
                        if (!is_valid_id(id)) {
@@ -814,7 +814,7 @@
                        generate_sections((*section_cfg)["generator"]);
                std::transform(generated_sections.begin(), 
generated_sections.end(),
                                           std::back_inserter(sec.sections), 
create_section());
-               const std::vector<std::string> topics = 
config::quoted_split((*section_cfg)["topics"]);
+               const std::vector<std::string> topics = 
utils::quoted_split((*section_cfg)["topics"]);
                // Find all topics in this section.
                for (it = topics.begin(); it != topics.end(); it++) {
                        config const *topic_cfg = help_cfg->find_child("topic", 
"id", *it);
@@ -1300,7 +1300,7 @@
                        }
                        string_map sm;
                        sm["terrains"] = alias_ss.str();
-                       ss << config::interpolate_variables_into_string(
+                       ss << utils::interpolate_variables_into_string(
                                _("This terrain acts as $terrains for movement 
and defense purposes."), &sm);
                        if (aliased_terrains.size() > 1)
                                ss << " " << _("The terrain with the best 
modifier is chosen automatically.");
@@ -1386,7 +1386,7 @@
        std::vector<std::string>::iterator it =
                std::remove(res_lines.begin(), res_lines.end(), "");
        std::vector<std::string> res_lines_rem(res_lines.begin(), it);
-       std::string text = config::join(res_lines_rem, '\n');
+       std::string text = utils::join(res_lines_rem, '\n');
        return text;
 }
 
@@ -2449,7 +2449,7 @@
 std::vector<std::string> split_in_width(const std::string &s, const int 
font_size,
                                                                                
const unsigned width) {
        std::string wrapped = font::word_wrap_text(s, font_size, width);
-       std::vector<std::string> parts = config::split(wrapped, '\n', 0);
+       std::vector<std::string> parts = utils::split(wrapped, '\n', 0);
        return parts;
 }
 
Index: wesnoth/src/map.cpp
diff -u wesnoth/src/map.cpp:1.49 wesnoth/src/map.cpp:1.50
--- wesnoth/src/map.cpp:1.49    Sat Feb 19 09:26:31 2005
+++ wesnoth/src/map.cpp Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: map.cpp,v 1.49 2005/02/19 09:26:31 isaaccp Exp $ */
+/* $Id: map.cpp,v 1.50 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -393,12 +393,12 @@
 std::vector<gamemap::location> parse_location_range(const std::string& x, 
const std::string& y)
 {
        std::vector<gamemap::location> res;
-       const std::vector<std::string> xvals = config::split(x);
-       const std::vector<std::string> yvals = config::split(y);
+       const std::vector<std::string> xvals = utils::split(x);
+       const std::vector<std::string> yvals = utils::split(y);
 
        for(unsigned int i = 0; i != minimum(xvals.size(),yvals.size()); ++i) {
-               const std::pair<int,int> xrange = config::parse_range(xvals[i]);
-               const std::pair<int,int> yrange = config::parse_range(yvals[i]);
+               const std::pair<int,int> xrange = utils::parse_range(xvals[i]);
+               const std::pair<int,int> yrange = utils::parse_range(yvals[i]);
 
                for(int x = xrange.first; x <= xrange.second; ++x) {
                        for(int y = yrange.first; y <= yrange.second; ++y) {
Index: wesnoth/src/mapgen.cpp
diff -u wesnoth/src/mapgen.cpp:1.55 wesnoth/src/mapgen.cpp:1.56
--- wesnoth/src/mapgen.cpp:1.55 Sun Feb  6 10:40:12 2005
+++ wesnoth/src/mapgen.cpp      Sun Feb 20 21:45:21 2005
@@ -30,7 +30,7 @@
 {
        //the first token is the name of the generator, tokens after
        //that are arguments to the generator
-       std::vector<std::string> parameters = config::split(parms,' ');
+       std::vector<std::string> parameters = utils::split(parms, ' ');
        util::scoped_ptr<map_generator> 
generator(create_map_generator(parameters.front(),cfg));
        if(generator == NULL) {
                ERR_CF << "could not find map generator '" << 
parameters.front() << "'\n";
@@ -45,7 +45,7 @@
 {
        //the first token is the name of the generator, tokens after
        //that are arguments to the generator
-       std::vector<std::string> parameters = config::split(parms,' ');
+       std::vector<std::string> parameters = utils::split(parms, ' ');
        util::scoped_ptr<map_generator> 
generator(create_map_generator(parameters.front(),cfg));
        if(generator == NULL) {
                ERR_CF << "could not find map generator '" << 
parameters.front() << "'\n";
@@ -526,7 +526,7 @@
 std::string generate_name(const unit_race& name_generator, const std::string& 
id, std::string* base_name=NULL,
                                                  
std::map<std::string,std::string>* additional_symbols=NULL)
 {
-       const std::vector<std::string>& options = 
config::split(string_table[id]);
+       const std::vector<std::string>& options = 
utils::split(string_table[id]);
        if(options.empty() == false) {
                const size_t choice = rand()%options.size();
                LOG_NG << "calling name generator...\n";
@@ -546,7 +546,7 @@
 
                (*additional_symbols)["name"] = name;
                LOG_NG << "interpolation variables into '" << options[choice] 
<< "'\n";
-               return 
config::interpolate_variables_into_string(options[choice],additional_symbols);
+               return 
utils::interpolate_variables_into_string(options[choice], additional_symbols);
        }
 
        return "";
@@ -1007,7 +1007,7 @@
                                        }
 
                                        if(direction != -1) {
-                                               const std::vector<std::string> 
items = config::split(convert_to_bridge);
+                                               const std::vector<std::string> 
items = utils::split(convert_to_bridge);
                                                if(size_t(direction) < 
items.size() && items[direction].empty() == false) {
                                                        terrain[x][y] = 
items[direction][0];
                                                }
Index: wesnoth/src/multiplayer_client.cpp
diff -u wesnoth/src/multiplayer_client.cpp:1.86 
wesnoth/src/multiplayer_client.cpp:1.87
--- wesnoth/src/multiplayer_client.cpp:1.86     Sun Jan 23 01:13:23 2005
+++ wesnoth/src/multiplayer_client.cpp  Sun Feb 20 21:45:21 2005
@@ -633,7 +633,7 @@
        }
 
        if(!side["leader"].empty()) {
-               leaders_ = config::split(side["leader"]);
+               leaders_ = utils::split(side["leader"]);
        }
        
        const std::string default_leader = side["type"];
@@ -747,7 +747,7 @@
                const config& side = *side_list_[selection_];
                std::string faction = side["name"];
                const std::string recruits = side["recruit"];
-               const std::vector<std::string> recruit_list = 
config::split(recruits);
+               const std::vector<std::string> recruit_list = 
utils::split(recruits);
                std::ostringstream recruit_string;
 
                if(faction[0] == font::IMAGE) {
Index: wesnoth/src/multiplayer_connect.cpp
diff -u wesnoth/src/multiplayer_connect.cpp:1.102 
wesnoth/src/multiplayer_connect.cpp:1.103
--- wesnoth/src/multiplayer_connect.cpp:1.102   Wed Feb  9 15:25:32 2005
+++ wesnoth/src/multiplayer_connect.cpp Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: multiplayer_connect.cpp,v 1.102 2005/02/09 15:25:32 j_daniel Exp $ */
+/* $Id: multiplayer_connect.cpp,v 1.103 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -786,7 +786,7 @@
                        if ((**side)["type"] == "random" || 
(**side)["type"].empty()) {
                                // Choose a random leader type.  
                                std::vector<std::string> types = 
-                                       config::split((**side)["leader"]);
+                                       utils::split((**side)["leader"]);
                                if (!types.empty()) {
                                        const int lchoice = rand() % 
types.size();
                                        (**side)["type"] = types[lchoice];
Index: wesnoth/src/playturn.cpp
diff -u wesnoth/src/playturn.cpp:1.328 wesnoth/src/playturn.cpp:1.329
--- wesnoth/src/playturn.cpp:1.328      Sun Feb  6 10:40:12 2005
+++ wesnoth/src/playturn.cpp    Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: playturn.cpp,v 1.328 2005/02/06 10:40:12 isaaccp Exp $ */
+/* $Id: playturn.cpp,v 1.329 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -1878,7 +1878,7 @@
                if(message != "") {
                        string_map symbols;
                        symbols["noun"] = (u.gender() == unit_race::MALE ? 
_("him") : _("her"));
-                       message = 
config::interpolate_variables_into_string(message,&symbols);
+                       message = 
utils::interpolate_variables_into_string(message, &symbols);
 
                        const int res = 
gui::show_dialog(disp_,NULL,"",message,gui::YES_NO);
                        if(res != 0) {
@@ -2310,7 +2310,7 @@
        bool found = false;
        gamemap::location loc = last_search_hit_;
        //If this is a location search, just center on that location.
-       std::vector<std::string> args = config::split(last_search_,',');
+       std::vector<std::string> args = utils::split(last_search_, ',');
        if(args.size() == 2) {
                int x, y;
                x = lexical_cast_default<int>(args[0], 0)-1;
@@ -2361,7 +2361,7 @@
                //Not found, inform the player
                string_map symbols;
                symbols["search"] = last_search_;
-               const std::string msg = 
config::interpolate_variables_into_string(
+               const std::string msg = 
utils::interpolate_variables_into_string(
                        _("Couldn't find label or unit containing the string 
'$search'."),&symbols);
                gui::show_dialog(gui_,NULL,"",msg);
        }
Index: wesnoth/src/preferences.cpp
diff -u wesnoth/src/preferences.cpp:1.132 wesnoth/src/preferences.cpp:1.133
--- wesnoth/src/preferences.cpp:1.132   Sun Feb 20 15:27:25 2005
+++ wesnoth/src/preferences.cpp Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: preferences.cpp,v 1.132 2005/02/20 15:27:25 Sirp Exp $ */
+/* $Id: preferences.cpp,v 1.133 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -71,10 +71,10 @@
        set_show_haloes(prefs["show_haloes"] != "no");
 
        std::vector<std::string> v;
-       v = config::split(prefs["encountered_units"]);
+       v = utils::split(prefs["encountered_units"]);
        std::copy(v.begin(), v.end(),
                          std::inserter(encountered_units_set, 
encountered_units_set.begin()));
-       v = config::split(prefs["encountered_terrains"]);
+       v = utils::split(prefs["encountered_terrains"]);
        std::copy(v.begin(), v.end(),
                          std::inserter(encountered_terrains_set, 
encountered_terrains_set.begin()));
 }
@@ -84,11 +84,11 @@
        
        std::vector<std::string> v;
        std::copy(encountered_units_set.begin(), encountered_units_set.end(), 
std::back_inserter(v));
-       prefs["encountered_units"] = config::join(v);
+       prefs["encountered_units"] = utils::join(v);
        v.clear();
        std::copy(encountered_terrains_set.begin(), 
encountered_terrains_set.end(),
                          std::back_inserter(v));
-       prefs["encountered_terrains"] = config::join(v);
+       prefs["encountered_terrains"] = utils::join(v);
        encountered_units_set.clear();
        encountered_terrains_set.clear();
        try {
Index: wesnoth/src/race.cpp
diff -u wesnoth/src/race.cpp:1.11 wesnoth/src/race.cpp:1.12
--- wesnoth/src/race.cpp:1.11   Thu Nov 18 04:08:32 2004
+++ wesnoth/src/race.cpp        Sun Feb 20 21:45:21 2005
@@ -99,8 +99,8 @@
 unit_race::unit_race(const config& cfg) : name_(cfg["name"]), 
ntraits_(atoi(cfg["num_traits"].c_str())),
                                           not_living_(cfg["not_living"] == 
"yes")
 {
-       names_[MALE] = config::split(cfg["male_names"]);
-       names_[FEMALE] = config::split(cfg["female_names"]);
+       names_[MALE] = utils::split(cfg["male_names"]);
+       names_[FEMALE] = utils::split(cfg["female_names"]);
 
        chain_size_ = atoi(cfg["markov_chain_size"].c_str());
        if(chain_size_ <= 0)
Index: wesnoth/src/serialization/string_utils.cpp
diff -u wesnoth/src/serialization/string_utils.cpp:1.2 
wesnoth/src/serialization/string_utils.cpp:1.3
--- wesnoth/src/serialization/string_utils.cpp:1.2      Sun Feb 20 20:46:48 2005
+++ wesnoth/src/serialization/string_utils.cpp  Sun Feb 20 21:45:22 2005
@@ -1,4 +1,4 @@
-/* $Id: string_utils.cpp,v 1.2 2005/02/20 20:46:48 silene Exp $ */
+/* $Id: string_utils.cpp,v 1.3 2005/02/20 21:45:22 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Copyright (C) 2005 by Guillaume Melquiond <address@hidden>
@@ -13,6 +13,7 @@
 */
 
 #include <cctype>
+#include <sstream>
 
 #include "serialization/string_utils.hpp"
 
@@ -131,11 +132,108 @@
        do_interpolation(res, 0, symbols);
 
        //remove any pipes in the string, as they are used simply to seperate 
variables
-       res.erase(std::remove(res.begin(),res.end(),'|'),res.end());
+       res.erase(std::remove(res.begin(), res.end(), '|'), res.end());
 
        return res;
 }
 
+//prepend all special characters with a backslash
+//special characters are:
+//address@hidden,\*
+std::string &escape(std::string &str)
+{
+       std::string::size_type pos = 0;
+       do {
+               pos = str.find_first_of("address@hidden,\\*", pos);
+               if (pos == std::string::npos)
+                       break;
+               str.insert(pos, 1, '\\');
+               pos += 2;
+       } while (pos < str.size());
+       return str;
+}
+
+// remove all escape characters (backslash)
+std::string &unescape(std::string &str)
+{
+       std::string::size_type pos = 0;
+       do {
+               pos = str.find('\\', pos);
+               if (pos == std::string::npos)
+                       break;
+               str.erase(pos, 1);
+               ++pos;
+       } while (pos < str.size());
+       return str;
+}
+
+std::string join(std::vector< std::string > const &v, char c)
+{
+       std::stringstream str;
+       for(std::vector< std::string >::const_iterator i = v.begin(); i != 
v.end(); ++i) {
+               str << *i;
+               if (i + 1 != v.end())
+                       str << c;
+       }
+
+       return str.str();
+}
+
+//identical to split(), except it does not split when it otherwise
+//would if the previous character was identical to the parameter 'quote'.
+//i.e. it does not split quoted commas.
+//this method was added to make it possible to quote user input,
+//particularly so commas in user input will not cause visual problems in menus.
+//why not change split()? that would change the methods post condition.
+std::vector< std::string > quoted_split(std::string const &val, char c, int 
flags, char quote)
+{
+       std::vector<std::string> res;
+
+       std::string::const_iterator i1 = val.begin();
+       std::string::const_iterator i2 = val.begin();
 
+       while (i2 != val.end()) {
+               if (*i2 == quote) {
+                       // ignore quoted character
+                       ++i2;
+                       if (i2 != val.end()) ++i2;
+               } else if (*i2 == c) {
+                       std::string new_val(i1, i2);
+                       if (flags & STRIP_SPACES)
+                               strip(new_val);
+                       if (!(flags & REMOVE_EMPTY) || !new_val.empty())
+                               res.push_back(new_val);
+                       ++i2;
+                       if (flags & STRIP_SPACES) {
+                               while(i2 != val.end() && *i2 == ' ')
+                                       ++i2;
+                       }
+
+                       i1 = i2;
+               } else {
+                       ++i2;
+               }
+       }
+
+       std::string new_val(i1, i2);
+       if (flags & STRIP_SPACES)
+               strip(new_val);
+       if (!(flags & REMOVE_EMPTY) || !new_val.empty())
+               res.push_back(new_val);
+
+       return res;
+}
+
+std::pair< int, int > parse_range(std::string const &str)
+{
+       const std::string::const_iterator dash = std::find(str.begin(), 
str.end(), '-');
+       const std::string a(str.begin(), dash);
+       const std::string b = dash != str.end() ? std::string(dash + 1, 
str.end()) : a;
+       std::pair<int,int> res(atoi(a.c_str()), atoi(b.c_str()));
+       if (res.second < res.first)
+               res.second = res.first;
+
+       return res;
+}
 
 }
Index: wesnoth/src/serialization/string_utils.hpp
diff -u wesnoth/src/serialization/string_utils.hpp:1.1 
wesnoth/src/serialization/string_utils.hpp:1.2
--- wesnoth/src/serialization/string_utils.hpp:1.1      Sun Feb 20 19:22:31 2005
+++ wesnoth/src/serialization/string_utils.hpp  Sun Feb 20 21:45:22 2005
@@ -1,4 +1,4 @@
-/* $Id: string_utils.hpp,v 1.1 2005/02/20 19:22:31 silene Exp $ */
+/* $Id: string_utils.hpp,v 1.2 2005/02/20 21:45:22 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Copyright (C) 2005 by Guillaume Melquiond <address@hidden>
@@ -32,7 +32,7 @@
 std::string join(std::vector< std::string > const &v, char c = ',');
 std::vector< std::string > quoted_split(std::string const &val, char c= ',',
                                         int flags = REMOVE_EMPTY | 
STRIP_SPACES, char quote = '\\');
-std::pair< int, int > parse_range(const std::string& str);
+std::pair< int, int > parse_range(std::string const &str);
 bool notspace(char c);
 std::string &escape(std::string &str);
 std::string &unescape(std::string &str);
Index: wesnoth/src/server/server.cpp
diff -u wesnoth/src/server/server.cpp:1.64 wesnoth/src/server/server.cpp:1.65
--- wesnoth/src/server/server.cpp:1.64  Sun Feb 20 21:37:14 2005
+++ wesnoth/src/server/server.cpp       Sun Feb 20 21:45:22 2005
@@ -5,6 +5,7 @@
 #include "../network.hpp"
 #include "../util.hpp"
 #include "../wassert.hpp"
+#include "serialization/string_utils.hpp"
 
 #include "SDL.h"
 
@@ -367,7 +368,7 @@
 
        //check the username is valid (all alpha-numeric or space)
        std::string username = (*login)["username"];
-       config::strip(username);
+       utils::strip(username);
        const int alnum = 
std::count_if(username.begin(),username.end(),isalnum);
        const int spaces = std::count(username.begin(),username.end(),' ');
        if((alnum + spaces != username.size()) || spaces == username.size() || 
username.empty()) {
Index: wesnoth/src/team.cpp
diff -u wesnoth/src/team.cpp:1.78 wesnoth/src/team.cpp:1.79
--- wesnoth/src/team.cpp:1.78   Thu Feb  3 19:48:00 2005
+++ wesnoth/src/team.cpp        Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: team.cpp,v 1.78 2005/02/03 19:48:00 silene Exp $ */
+/* $Id: team.cpp,v 1.79 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -94,7 +94,7 @@
 
        const std::string& enemies_list = cfg["enemy"];
        if(!enemies_list.empty()) {
-               std::vector<std::string> venemies = config::split(enemies_list);
+               std::vector<std::string> venemies = utils::split(enemies_list);
                for(std::vector<std::string>::const_iterator i = 
venemies.begin(); i != venemies.end(); ++i) {
                        enemies.push_back(atoi(i->c_str()));
                }
@@ -156,7 +156,7 @@
                village_value = atof(village_val.c_str());
        }
 
-       std::vector<std::string> recruits = config::split(cfg["recruit"]);
+       std::vector<std::string> recruits = utils::split(cfg["recruit"]);
        for(std::vector<std::string>::const_iterator i = recruits.begin(); i != 
recruits.end(); ++i) {
                can_recruit.insert(*i);
        }
@@ -166,7 +166,7 @@
                recruit_pattern = global_ai_params["recruitment_pattern"];
        }
 
-       recruitment_pattern = config::split(recruit_pattern);
+       recruitment_pattern = utils::split(recruit_pattern);
 
        //default recruitment pattern is to buy 2 fighters for every 1 archer
        if(recruitment_pattern.empty()) {
@@ -361,7 +361,7 @@
        for(std::vector<config>::const_iterator i = info_.ai_params.begin(); i 
!= info_.ai_params.end(); ++i) {
                const std::string& time_of_day = (*i)["time_of_day"];
                if(time_of_day.empty() == false) {
-                       const std::vector<std::string>& times = 
config::split(time_of_day);
+                       const std::vector<std::string>& times = 
utils::split(time_of_day);
                        if(std::count(times.begin(),times.end(),tod.id) == 0) {
                                continue;
                        }
@@ -371,9 +371,9 @@
                if(turns.empty() == false) {
                        bool matched = false;
 
-                       const std::vector<std::string>& turns_list = 
config::split(turns);
+                       const std::vector<std::string>& turns_list = 
utils::split(turns);
                        for(std::vector<std::string>::const_iterator j = 
turns_list.begin(); j != turns_list.end(); ++j) {
-                               const std::pair<int,int> range = 
config::parse_range(*j);
+                               const std::pair<int,int> range = 
utils::parse_range(*j);
                                if(turn >= range.first && turn <= range.second) 
{
                                        matched = true;
                                        break;
Index: wesnoth/src/theme.cpp
diff -u wesnoth/src/theme.cpp:1.30 wesnoth/src/theme.cpp:1.31
--- wesnoth/src/theme.cpp:1.30  Wed Jan 19 21:57:16 2005
+++ wesnoth/src/theme.cpp       Sun Feb 20 21:45:21 2005
@@ -37,7 +37,7 @@
 
        _rect read_rect(const config& cfg) {
                _rect rect = { 0, 0, 0, 0 };
-               const std::vector<std::string> items = 
config::split(cfg["rect"].c_str());
+               const std::vector<std::string> items = 
utils::split(cfg["rect"].c_str());
                if(items.size() >= 1)
                        rect.x1 = atoi(items[0].c_str());
 
@@ -67,7 +67,7 @@
        std::string resolve_rect(const std::string& rect_str) {
                _rect rect = { 0, 0, 0, 0 };
                std::stringstream resolved;
-               const std::vector<std::string> items = 
config::split(rect_str.c_str());
+               const std::vector<std::string> items = 
utils::split(rect_str.c_str());
                if(items.size() >= 1) {
                        rect.x1 = compute(items[0], ref_rect.x1, ref_rect.x2);
                        resolved << rect.x1;
@@ -411,7 +411,7 @@
 theme::menu::menu(const config& cfg) : object(cfg), 
context_(cfg["is_context_menu"] == "true"),
                                        title_(cfg["title"] + 
cfg["title_literal"]),
                                                                           
image_(cfg["image"]),
-                                                                          
items_(config::split(cfg["items"]))
+                                                                          
items_(utils::split(cfg["items"]))
 {}
 
 bool theme::menu::is_context() const { return context_; }
Index: wesnoth/src/tools/exploder_cutter.cpp
diff -u wesnoth/src/tools/exploder_cutter.cpp:1.3 
wesnoth/src/tools/exploder_cutter.cpp:1.4
--- wesnoth/src/tools/exploder_cutter.cpp:1.3   Mon Jul 19 18:31:32 2004
+++ wesnoth/src/tools/exploder_cutter.cpp       Sun Feb 20 21:45:22 2005
@@ -1,4 +1,4 @@
-/* $Id: exploder_cutter.cpp,v 1.3 2004/07/19 18:31:32 gruikya Exp $ */
+/* $Id: exploder_cutter.cpp,v 1.4 2005/02/20 21:45:22 silene Exp $ */
 /*
    Copyright (C) 2004 by Philippe Plantier <address@hidden>
    Part of the Battle for Wesnoth Project http://www.wesnoth.org
@@ -12,8 +12,9 @@
 */
 
 #include "exploder_cutter.hpp"
-#include "../filesystem.hpp"
-#include "../sdl_utils.hpp"
+#include "filesystem.hpp"
+#include "sdl_utils.hpp"
+#include "serialization/string_utils.hpp"
 #include "SDL_image.h"
 
 cutter::cutter() : verbose_(false)
@@ -128,7 +129,7 @@
 
        const cutter::mask& mask = masks_[name];
 
-       std::vector<std::string> pos = config::split((*config)["pos"]);
+       std::vector<std::string> pos = utils::split((*config)["pos"]);
        if(pos.size() != 2) 
                throw exploder_failure("Invalid position " + (*config)["pos"]);
 
Index: wesnoth/src/tools/exploder_utils.cpp
diff -u wesnoth/src/tools/exploder_utils.cpp:1.3 
wesnoth/src/tools/exploder_utils.cpp:1.4
--- wesnoth/src/tools/exploder_utils.cpp:1.3    Mon Jul 19 18:31:32 2004
+++ wesnoth/src/tools/exploder_utils.cpp        Sun Feb 20 21:45:22 2005
@@ -1,4 +1,4 @@
-/* $Id: exploder_utils.cpp,v 1.3 2004/07/19 18:31:32 gruikya Exp $ */
+/* $Id: exploder_utils.cpp,v 1.4 2005/02/20 21:45:22 silene Exp $ */
 /*
    Copyright (C) 2004 by Philippe Plantier <address@hidden>
    Part of the Battle for Wesnoth Project http://www.wesnoth.org
@@ -12,13 +12,13 @@
 */
 
 #include "exploder_utils.hpp"
-#include "../game_config.hpp"
-#include "../config.hpp"
+#include "game_config.hpp"
+#include "serialization/string_utils.hpp"
 #include <png.h>
 
 exploder_point::exploder_point(const std::string &s)
 {
-       std::vector<std::string> items = config::split(s);
+       std::vector<std::string> items = utils::split(s);
        if(items.size() != 2) {
                x = y = 0;
        } else {
@@ -29,7 +29,7 @@
 
 exploder_rect::exploder_rect(const std::string &s)
 {
-       std::vector<std::string> items = config::split(s);
+       std::vector<std::string> items = utils::split(s);
        if(items.size() != 4) {
                x = y = w = h = 0;
        } else {
Index: wesnoth/src/unit.cpp
diff -u wesnoth/src/unit.cpp:1.121 wesnoth/src/unit.cpp:1.122
--- wesnoth/src/unit.cpp:1.121  Wed Feb  9 23:32:01 2005
+++ wesnoth/src/unit.cpp        Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: unit.cpp,v 1.121 2005/02/09 23:32:01 ydirson Exp $ */
+/* $Id: unit.cpp,v 1.122 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -507,7 +507,7 @@
                if(std::find(type.begin(),type.end(),',') != type.end() &&
                   std::search(type.begin(),type.end(),this_type.begin(),
                                   this_type.end()) != type.end()) {
-                       const std::vector<std::string>& vals = 
config::split(type);
+                       const std::vector<std::string>& vals = 
utils::split(type);
 
                        if(std::find(vals.begin(),vals.end(),this_type) == 
vals.end()) {
                                return false;
@@ -535,7 +535,7 @@
        if(side.empty() == false && this->side() != atoi(side.c_str()))
          {
                if(std::find(side.begin(),side.end(),',') != side.end()) {
-                       const std::vector<std::string>& vals = 
config::split(side);
+                       const std::vector<std::string>& vals = 
utils::split(side);
 
                        std::ostringstream s;
                        s << (this->side());
@@ -694,7 +694,7 @@
                }
        }
 
-       overlays_ = config::split(cfg["overlays"]);
+       overlays_ = utils::split(cfg["overlays"]);
        if(overlays_.size() == 1 && overlays_.front() == "") {
                overlays_.clear();
        }
@@ -764,7 +764,7 @@
        cfg.add_child("variables",variables_);
        cfg.add_child("status",status_flags);
 
-       cfg["overlays"] = config::join(overlays_);
+       cfg["overlays"] = utils::join(overlays_);
 
        cfg["user_description"] = description_;
        cfg["description"] = underlying_description_;
@@ -1005,7 +1005,7 @@
                //see if the effect only applies to certain unit types
                const std::string& type_filter = (**i.first)["unit_type"];
                if(type_filter.empty() == false) {
-                       const std::vector<std::string>& types = 
config::split(type_filter);
+                       const std::vector<std::string>& types = 
utils::split(type_filter);
                        
if(std::find(types.begin(),types.end(),this->type().name()) == types.end()) {
                                continue;
                        }
Index: wesnoth/src/unit_types.cpp
diff -u wesnoth/src/unit_types.cpp:1.79 wesnoth/src/unit_types.cpp:1.80
--- wesnoth/src/unit_types.cpp:1.79     Sat Feb 19 09:26:31 2005
+++ wesnoth/src/unit_types.cpp  Sun Feb 20 21:45:21 2005
@@ -1,4 +1,4 @@
-/* $Id: unit_types.cpp,v 1.79 2005/02/19 09:26:31 isaaccp Exp $ */
+/* $Id: unit_types.cpp,v 1.80 2005/02/20 21:45:21 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -146,7 +146,7 @@
                if(dir == "") {
                        animation_.push_back(unit_animation(**an));
                } else {
-                       const std::vector<std::string>& directions = 
config::split(dir);
+                       const std::vector<std::string>& directions = 
utils::split(dir);
                        for(std::vector<std::string>::const_iterator i = 
directions.begin(); i != directions.end(); ++i) {
                                const gamemap::location::DIRECTION d = 
gamemap::location::parse_direction(*i);
                                if(d != gamemap::location::NDIRECTIONS) {
@@ -569,7 +569,7 @@
                gender_types_[unit_race::FEMALE] = new 
unit_type(*female_cfg,mv_types,races,traits);
        }
 
-       const std::vector<std::string> genders = config::split(cfg["gender"]);
+       const std::vector<std::string> genders = utils::split(cfg["gender"]);
        for(std::vector<std::string>::const_iterator i = genders.begin();
            i != genders.end(); ++i) {
                if(*i == "male") {
@@ -591,7 +591,7 @@
                race_ = &dummy_race;
        }
 
-       abilities_ = config::split(cfg_["ability"]);
+       abilities_ = utils::split(cfg_["ability"]);
 
        //if the string was empty, split will give us one empty string in the 
list,
        //remove it.
@@ -868,7 +868,7 @@
        if(val == "null" || val == "")
                return std::vector<std::string>();
        else
-               return config::split(val);
+               return utils::split(val);
 }
 
 const std::string& unit_type::usage() const
Index: wesnoth/src/widgets/button.cpp
diff -u wesnoth/src/widgets/button.cpp:1.53 wesnoth/src/widgets/button.cpp:1.54
--- wesnoth/src/widgets/button.cpp:1.53 Thu Jan 20 22:49:46 2005
+++ wesnoth/src/widgets/button.cpp      Sun Feb 20 21:45:22 2005
@@ -1,4 +1,4 @@
-/* $Id: button.cpp,v 1.53 2005/01/20 22:49:46 silene Exp $ */
+/* $Id: button.cpp,v 1.54 2005/02/20 21:45:22 silene Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -192,7 +192,7 @@
 
        //if we have a list of items, use the first one that isn't an image
        if (std::find(label_.begin(), label_.end(), COLUMN_SEPARATOR) != 
label_.end()) {
-               const std::vector<std::string>& items = config::split(label_, 
COLUMN_SEPARATOR);
+               const std::vector<std::string>& items = utils::split(label_, 
COLUMN_SEPARATOR);
                const std::vector<std::string>::const_iterator i = 
std::find_if(items.begin(),items.end(),not_image);
                if(i != items.end()) {
                        label_ = *i;
Index: wesnoth/src/widgets/menu.cpp
diff -u wesnoth/src/widgets/menu.cpp:1.76 wesnoth/src/widgets/menu.cpp:1.77
--- wesnoth/src/widgets/menu.cpp:1.76   Thu Dec  2 22:21:45 2004
+++ wesnoth/src/widgets/menu.cpp        Sun Feb 20 21:45:22 2005
@@ -36,7 +36,7 @@
 {
        for(std::vector<std::string>::const_iterator item = items.begin();
            item != items.end(); ++item) {
-               items_.push_back(config::quoted_split(*item, COLUMN_SEPARATOR, 
!strip_spaces));
+               items_.push_back(utils::quoted_split(*item, COLUMN_SEPARATOR, 
!strip_spaces));
 
                //make sure there is always at least one item
                if(items_.back().empty())
@@ -64,7 +64,7 @@
                        
if(std::find(j->begin(),j->end(),static_cast<char>(HELP_STRING_SEPARATOR)) == 
j->end()) {
                                help_.back().push_back("");
                        } else {
-                               const std::vector<std::string>& items = 
config::split(*j,HELP_STRING_SEPARATOR,0);
+                               const std::vector<std::string>& items = 
utils::split(*j, HELP_STRING_SEPARATOR, 0);
                                if(items.size() >= 2) {
                                        *j = items.front();
                                        help_.back().push_back(items.back());
@@ -329,7 +329,7 @@
 namespace {
        SDL_Rect item_size(const std::string& item) {
                SDL_Rect res = {0,0,0,0};
-               std::vector<std::string> img_text_items = config::split(item, 
IMG_TEXT_SEPARATOR);
+               std::vector<std::string> img_text_items = utils::split(item, 
IMG_TEXT_SEPARATOR);
                for (std::vector<std::string>::const_iterator it = 
img_text_items.begin();
                         it != img_text_items.end(); it++) {
                        if (res.w > 0 || res.h > 0) {
@@ -406,7 +406,7 @@
        for(size_t i = 0; i != items_[item].size(); ++i) {
                const int last_x = xpos;
                std::string str = items_[item][i];
-               std::vector<std::string> img_text_items = config::split(str, 
IMG_TEXT_SEPARATOR);
+               std::vector<std::string> img_text_items = utils::split(str, 
IMG_TEXT_SEPARATOR);
                for (std::vector<std::string>::const_iterator it = 
img_text_items.begin();
                         it != img_text_items.end(); it++) {
                        str = *it;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]