00001
00002
00003
00004
00005
00006
00007 #include "SgSystem.h"
00008 #include "SgStringUtil.h"
00009
00010 #include <cctype>
00011 #include <sstream>
00012
00013 using namespace std;
00014
00015
00016
00017 vector<string> SgStringUtil::SplitArguments(string s)
00018 {
00019 vector<string> result;
00020 bool escape = false;
00021 bool inString = false;
00022 ostringstream token;
00023 for (size_t i = 0; i < s.size(); ++i)
00024 {
00025 char c = s[i];
00026 if (c == '"' && ! escape)
00027 {
00028 if (inString)
00029 {
00030 result.push_back(token.str());
00031 token.str("");
00032 }
00033 inString = ! inString;
00034 }
00035 else if (isspace(c) && ! inString)
00036 {
00037 if (! token.str().empty())
00038 {
00039 result.push_back(token.str());
00040 token.str("");
00041 }
00042 }
00043 else
00044 token << c;
00045 escape = (c == '\\' && ! escape);
00046 }
00047 if (! token.str().empty())
00048 result.push_back(token.str());
00049 return result;
00050 }
00051
00052