| // 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 | |
| } |