parseFlags method
Iterable<NatrixFlag>
parseFlags(
- List<
String> mergedArguments, - Iterable<
NatrixFlag> predefinedFlags
Using the predefinedFlags, it is possible to determine the corresponding
NatrixFlag called from the input values (mergedArguments) and create
a copy of the instance with the new value provided.
Implementation
Iterable<NatrixFlag> parseFlags(
final List<String> mergedArguments,
final Iterable<NatrixFlag> predefinedFlags,
) {
final List<String> args = mergedArguments;
final List<NatrixFlag> flags = [];
for (NatrixFlag f in predefinedFlags) {
NatrixParserFlag? raw;
for (int i = 0; i < args.length; i++) {
if (!args[i].startsWith("-")) {
continue;
}
final NatrixParserFlag r = parseRawFlag(args[i]);
if (r.isShort ? f.acronym != r.tag : f.id != r.tag) {
continue;
}
if (f is NatrixBoolFlag || r.val.isNotEmpty) {
raw = r;
break;
}
final String e =
"The flag with the identifier \"$r\" requires a value.";
if (i >= args.length - 1) {
throw Exception(e);
}
final String val = args[i + 1];
if (val.startsWith("-")) {
throw Exception(e);
}
raw = r.set(val);
break;
}
if (raw == null) {
flags.add(f);
continue;
}
flags.add(f.set(f.parse(raw.val)));
}
return flags;
}