| // take an un-split argv string and tokenize it. |
| module.exports = function (argString) { |
| if (Array.isArray(argString)) return argString |
| |
| argString = argString.trim() |
| |
| var i = 0 |
| var prevC = null |
| var c = null |
| var opening = null |
| var args = [] |
| |
| for (var ii = 0; ii < argString.length; ii++) { |
| prevC = c |
| c = argString.charAt(ii) |
| |
| // split on spaces unless we're in quotes. |
| if (c === ' ' && !opening) { |
| if (!(prevC === ' ')) { |
| i++ |
| } |
| continue |
| } |
| |
| // don't split the string if we're in matching |
| // opening or closing single and double quotes. |
| if (c === opening) { |
| if (!args[i]) args[i] = '' |
| opening = null |
| } else if ((c === "'" || c === '"') && !opening) { |
| opening = c |
| } |
| |
| if (!args[i]) args[i] = '' |
| args[i] += c |
| } |
| |
| return args |
| } |