// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_srep #define tools_srep #include #include #include "forit" namespace tools { inline void replace(std::string& a_string,char a_old,char a_new){ tools_sforit(a_string,it) { if((*it)==a_old) *it = a_new; } } inline bool replace(std::string& a_string,const std::string& a_old,const std::string& a_new){ // return true : some replacement done. // return false : nothing replaced. if(a_old.empty()) return false; std::string snew; std::string::size_type lold = a_old.length(); bool status = false; std::string stmp = a_string; while(true) { std::string::size_type pos = stmp.find(a_old); if(pos==std::string::npos){ snew += stmp; break; } else { snew += stmp.substr(0,pos); snew += a_new; stmp = stmp.substr(pos+lold,stmp.length()-(pos+lold)); status = true; } } a_string = snew; return status; } inline bool replace_(std::string& a_string,const std::string& a_old,const std::string& a_new) { return replace(a_string,a_old,a_new); } inline bool replace(std::vector& a_strings,const std::string& a_old,const std::string& a_new){ tools_vforit(std::string,a_strings,it) { if(!replace(*it,a_old,a_new)) return false; } return true; } inline void toxml(std::string& a_string){ // > : < // < : > // & : & // " : " // ' : ' replace(a_string,"&","&"); //must be first. replace(a_string,"<","<"); replace(a_string,">",">"); replace(a_string,"\"","""); replace(a_string,"'","'"); } inline std::string to_xml(const std::string& a_string){ std::string s = a_string; toxml(s); return s; } inline void to_win(std::string& a_string) { replace(a_string,"/cygdrive/c","C:"); // CYGWIN. replace(a_string,"/mnt/c","C:"); // WSL. replace(a_string,'/','\\'); } inline void to_win_python(std::string& a_string) { replace(a_string,"/cygdrive/c","c:"); // CYGWIN. replace(a_string,"/mnt/c","c:"); // WSL. (Python wants c: in lowercase). replace(a_string,"C:","c:"); replace(a_string,'\\','/'); } } #endif