52 lines
2 KiB
Dart
52 lines
2 KiB
Dart
import 'package:libac_dart/argparse/Args.dart';
|
|
import 'package:libac_dart/argparse/types/Bool.dart';
|
|
import 'package:libac_dart/argparse/types/Integers.dart';
|
|
import 'package:libac_dart/argparse/types/String.dart';
|
|
|
|
class ArgumentParser {
|
|
/// Parses a list of arguments.
|
|
///
|
|
/// [args] The list of arguments to parse.
|
|
/// Returns an Arguments object representing the input.
|
|
static Arguments parse(List<String> args) {
|
|
final ret = Arguments();
|
|
for (var i = 0; i < args.length; i++) {
|
|
final arg = args[i];
|
|
if (arg.startsWith('--')) {
|
|
var key = arg.substring(2); // Remove the '--' part of the argument
|
|
dynamic value;
|
|
|
|
// Check if the argument has a value attached (either --arg=value or --arg value)
|
|
if (i + 1 < args.length && !args[i + 1].startsWith('--')) {
|
|
value = args[i + 1]; // --arg value
|
|
i++; // Skip the next argument as it is the value
|
|
} else if (arg.contains('=')) {
|
|
value = arg.substring(arg.indexOf('=') + 1); // --arg=value
|
|
key = key.substring(0, key.indexOf('='));
|
|
}
|
|
|
|
// Determine the argument type and add it to the list
|
|
if (int.tryParse(value?.toString() ?? '') != null) {
|
|
ret.setArg(
|
|
IntegerArgument(name: key, value: int.parse(value.toString())));
|
|
} else if (value?.toString().toLowerCase() == 'true' ||
|
|
value?.toString().toLowerCase() == 'false' ||
|
|
value == null) {
|
|
if (value != null)
|
|
ret.setArg(BoolArgument(
|
|
name: key, value: value.toString().toLowerCase() == 'true'));
|
|
else
|
|
ret.setArg(BoolArgument(name: key, value: true));
|
|
} else if (double.tryParse(value?.toString() ?? '') != null) {
|
|
ret.setArg(
|
|
DoubleArgument(name: key, value: double.parse(value.toString())));
|
|
} else {
|
|
// Default to StringArgument if no matching type is found
|
|
ret.setArg(StringArgument(name: key, value: value?.toString() ?? ''));
|
|
}
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
}
|