// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // Very primitive arguments parser for the generator commands. import 'dart:io'; typedef Flags = ({ bool verbose, bool update, bool dryrun, bool optimize, bool acceptLicenseChange, File? targetFile, }); Flags parseArgs( List args, String toolName, { bool allowOptimize = false, bool allowFile = true, }) { var update = false; var dryrun = false; var verbose = false; var optimize = false; var acceptLicenseChange = false; File? output; for (var arg in args) { if (arg == '-h' || arg == '--help') { stderr ..writeln( "Usage: $toolName.dart [-u] ${allowOptimize ? "[-i|-o] " : ""}[-n]" "${allowFile ? " " : ""}", ) ..writeln('-h | --help : Print this help and exit') ..writeln('-u | --update : Fetch new data files') ..writeln('--accept-license : Accept a changed license') ..writeln( '-n | --dryrun : Write to stdout instead of target file', ); if (allowOptimize) { stderr.writeln( '-o | -i | --optimize : Optimize size parameters for tables', ); } stderr.writeln('-v | --verbose : Print more information'); if (allowFile) { stderr.writeln('If no target file is given, writes to stdout.'); } exit(0); } else if (arg == '-u' || arg == '--update') { update = true; } else if (arg == '-n' || arg == '--dryrun') { dryrun = true; } else if (arg == '-v' || arg == '--verbose') { verbose = true; } else if (arg == '--accept-license') { acceptLicenseChange = true; } else if (allowOptimize && arg == '-o' || arg == '-i' || arg.startsWith('--opt')) { // Try to find a better size for the table. // No need to do this unless the representation changes or // the input tables are updated. // The current value is optimal for the data and representation used. optimize = true; } else if (arg.startsWith('-') || !allowFile) { stderr.writeln('Unrecognized flag: $arg'); } else { output = File(arg); } } return ( acceptLicenseChange: acceptLicenseChange, dryrun: dryrun, optimize: optimize, targetFile: output, update: update, verbose: verbose, ); }