1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#include "process.ih"
vector<string> Process::split(ConstIter begin, ConstIter const &end)
{
vector<string> ret;
string next;
for (; begin != end; )
{
switch (*begin)
{
case '"': // dquoted string: accept all until the
// next, and then do unescape.
next += dquotedString(begin, end);
break;
case '\'': // quoted string: accept all until
// the next ', without unescaping
next += quotedString(begin, end);
break;
case '\\': // unescape a lone escape sequence
next += escapedString(begin, end);
break;
case ' ': // mere blanks end the current element.
case '\t':
if (next.length())
{
ret.push_back(next);
next.clear();
}
++begin;
break;
default: // add remaining chars to the next element
next += *begin++;
break;
}
}
if (next.length()) // add any remaining element
ret.push_back(next);
return ret;
}
|