| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:io'; |
| |
| import 'package:args/args.dart'; |
| import 'package:vitool/vitool.dart'; |
| |
| const String kCodegenComment = |
| '// AUTOGENERATED FILE DO NOT EDIT!\n' |
| '// This file was generated by vitool.\n'; |
| |
| void main(List<String> args) { |
| final ArgParser parser = ArgParser(); |
| |
| parser.addFlag( |
| 'help', |
| abbr: 'h', |
| negatable: false, |
| help: "Display the tool's usage instructions and quit.", |
| ); |
| |
| parser.addOption( |
| 'output', |
| abbr: 'o', |
| help: 'Target path to write the generated Dart file to.', |
| ); |
| |
| parser.addOption( |
| 'asset-name', |
| abbr: 'n', |
| help: 'Name to be used for the generated constant.', |
| ); |
| |
| parser.addOption( |
| 'part-of', |
| abbr: 'p', |
| help: "Library name to add a dart 'part of' clause for.", |
| ); |
| |
| parser.addOption( |
| 'header', |
| abbr: 'd', |
| help: 'File whose contents are to be prepended to the beginning of ' |
| 'the generated Dart file; this can be used for a license comment.', |
| ); |
| |
| parser.addFlag( |
| 'codegen_comment', |
| abbr: 'c', |
| defaultsTo: true, |
| help: 'Whether to include the following comment after the header:\n' |
| '$kCodegenComment', |
| ); |
| |
| final ArgResults argResults = parser.parse(args); |
| |
| if (argResults['help'] as bool || |
| !argResults.wasParsed('output') || |
| !argResults.wasParsed('asset-name') || |
| argResults.rest.isEmpty) { |
| printUsage(parser); |
| return; |
| } |
| |
| final List<FrameData> frames = <FrameData>[ |
| for (final String filePath in argResults.rest) interpretSvg(filePath), |
| ]; |
| |
| final StringBuffer generatedSb = StringBuffer(); |
| |
| if (argResults.wasParsed('header')) { |
| generatedSb.write(File(argResults['header'] as String).readAsStringSync()); |
| generatedSb.write('\n'); |
| } |
| |
| if (argResults['codegen_comment'] as bool) |
| generatedSb.write(kCodegenComment); |
| |
| if (argResults.wasParsed('part-of')) |
| generatedSb.write('part of ${argResults['part-of']};\n'); |
| |
| final Animation animation = Animation.fromFrameData(frames); |
| generatedSb.write(animation.toDart('_AnimatedIconData', argResults['asset-name'] as String)); |
| |
| final File outFile = File(argResults['output'] as String); |
| outFile.writeAsStringSync(generatedSb.toString()); |
| } |
| |
| void printUsage(ArgParser parser) { |
| print('Usage: vitool --asset-name=<asset_name> --output=<output_path> <frames_list>'); |
| print('\nExample: vitool --asset-name=_\$menu_arrow --output=lib/data/menu_arrow.g.dart assets/svg/menu_arrow/*.svg\n'); |
| print(parser.usage); |
| } |