#include #include #include #include using namespace std; using namespace boost; string escapeAndQuote(const std::string& s) { string ret("\""); for (string::const_iterator i = s.begin(); i != s.end(); ++i) { const unsigned char c = *i; const string::const_iterator next = i + 1; if (c == '"' || (c == '\\' && (next == s.end() || *next == '"'))) { ret += '\\'; } ret += c; } ret += "\""; return ret; } string resolveReplacementKeys(const string& s) { format resolver(s); resolver.exceptions(io::no_error_bits); return (resolver % "zip\\zam").str(); // subject value example } int main() { const string param_field("-dir \"c:\\\\program files\\\\dir\\\\\" -quote-of-the-day \"\\\"zip zam bam\\\"\" --quality=low --subject \"%1%\" \\\\ \"25%% more\""); cout << "Parameter field value:\n" << param_field << "\n\n"; const escaped_list_separator special("\\", " ","\""); const tokenizer > params(param_field, special); cout << "Parameters unescaped, unresolved and unquoted:\n"; for(tokenizer >::const_iterator param = params.begin(); param != params.end(); ++param){ cout << *param << "\n"; } cout << "\nParameters escaped, resolved and quoted for Win32:\n"; for(tokenizer >::const_iterator param = params.begin(); param != params.end(); ++param){ cout << escapeAndQuote(resolveReplacementKeys(*param)) << "\n"; } }