parse method

NatrixParserOutput parse(
  1. List<String> mergedArguments,
  2. Iterable<NatrixFlag> predefinedFlags
)

Reads mergedArguments (by default from NatrixParser.mergeArguments()) and converts them into concrete, interface-compliant value representations.

Implementation

NatrixParserOutput parse(
  final List<String> mergedArguments,
  final Iterable<NatrixFlag> predefinedFlags,
) {
  final List<String> options = [];
  final List<String> args = mergedArguments;

  for (int i = 0; i < args.length; i++) {
    if (!args[i].startsWith("-")) {
      options.add(simpleStringReduction(args[i]));
      continue;
    }
    final NatrixParserFlag r = parseRawFlag(args[i]);
    final NatrixFlag? flag = predefinedFlags.firstWhereOrNull(
      (f) => r.isShort ? f.acronym == r.tag : f.id == r.tag,
    );
    if (flag == null) {
      throw Exception(
        "There is no flag with the identifier \"$r\" in this context.",
      );
    }
    if (r.val.isNotEmpty || i >= args.length - 1) {
      continue;
    }
    if (!args[i + 1].startsWith("-")) {
      i++;
      continue;
    }
  }
  return NatrixParserOutput(
    options,
    parseFlags(mergedArguments, predefinedFlags),
  );
}