You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.1 KiB
40 lines
1.1 KiB
/** |
|
* @license |
|
* Copyright (c) 2016, Contributors |
|
* SPDX-License-Identifier: ISC |
|
*/ |
|
// take an un-split argv string and tokenize it. |
|
export function tokenizeArgString(argString) { |
|
if (Array.isArray(argString)) { |
|
return argString.map(e => typeof e !== 'string' ? e + '' : e); |
|
} |
|
argString = argString.trim(); |
|
let i = 0; |
|
let prevC = null; |
|
let c = null; |
|
let opening = null; |
|
const args = []; |
|
for (let 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) { |
|
opening = null; |
|
} |
|
else if ((c === "'" || c === '"') && !opening) { |
|
opening = c; |
|
} |
|
if (!args[i]) |
|
args[i] = ''; |
|
args[i] += c; |
|
} |
|
return args; |
|
}
|
|
|