splitCommandLine static method

List<String> splitCommandLine(
  1. String line
)

Split a command line string into arguments, respecting quotes.

Implementation

static List<String> splitCommandLine(String line) {
  final args = <String>[];
  final current = StringBuffer();
  var inSingleQuote = false;
  var inDoubleQuote = false;
  var escaped = false;

  for (var i = 0; i < line.length; i++) {
    final char = line[i];

    if (escaped) {
      current.write(char);
      escaped = false;
      continue;
    }

    if (char == '\\') {
      escaped = true;
      continue;
    }

    if (char == "'" && !inDoubleQuote) {
      inSingleQuote = !inSingleQuote;
      continue;
    }

    if (char == '"' && !inSingleQuote) {
      inDoubleQuote = !inDoubleQuote;
      continue;
    }

    if (char == ' ' && !inSingleQuote && !inDoubleQuote) {
      if (current.isNotEmpty) {
        args.add(current.toString());
        current.clear();
      }
      continue;
    }

    current.write(char);
  }

  if (current.isNotEmpty) {
    args.add(current.toString());
  }

  return args;
}