parseArguments static method
Parses the given command
into arguments.
Implementation
static List<String> parseArguments(String command) {
var argumentList = List<String>.empty(growable: true);
var currentArgument = StringBuffer();
var singleQuoteStarted = false;
var doubleQuoteStarted = false;
for (var i = 0; i < command.length; i++) {
var previousChar;
if (i > 0) {
previousChar = command.codeUnitAt(i - 1);
} else {
previousChar = null;
}
var currentChar = command.codeUnitAt(i);
if (currentChar == ' '.codeUnitAt(0)) {
if (singleQuoteStarted || doubleQuoteStarted) {
currentArgument.write(String.fromCharCode(currentChar));
} else if (currentArgument.length > 0) {
argumentList.add(currentArgument.toString());
currentArgument = StringBuffer();
}
} else if (currentChar == '\''.codeUnitAt(0) &&
(previousChar == null || previousChar != '\\'.codeUnitAt(0))) {
if (singleQuoteStarted) {
singleQuoteStarted = false;
} else if (doubleQuoteStarted) {
currentArgument.write(String.fromCharCode(currentChar));
} else {
singleQuoteStarted = true;
}
} else if (currentChar == '\"'.codeUnitAt(0) &&
(previousChar == null || previousChar != '\\'.codeUnitAt(0))) {
if (doubleQuoteStarted) {
doubleQuoteStarted = false;
} else if (singleQuoteStarted) {
currentArgument.write(String.fromCharCode(currentChar));
} else {
doubleQuoteStarted = true;
}
} else {
currentArgument.write(String.fromCharCode(currentChar));
}
}
if (currentArgument.length > 0) {
argumentList.add(currentArgument.toString());
}
return argumentList;
}