import 'dart:io'; import 'utils.dart'; /// 自动生成示例内容的脚本 /// /// 使用方法: /// dart scripts/generate_example.dart void main() { final iconData = readIconFontJson(); final glyphs = getGlyphs(iconData); // 读取已定义的 YXIconFonts 静态常量 final definedIcons = getDefinedIconNames(); // 生成 icons.dart _generateIconsFile(glyphs, definedIcons); print('✅ 成功生成示例应用文件'); print('📁 生成的文件:'); print(' - example/lib/icons.dart'); } /// 生成 icons.dart 文件 void _generateIconsFile(List glyphs, Set definedIcons) { final buffer = StringBuffer(); buffer.writeln("import 'package:yx_icon_fonts/yx_icon_fonts.dart';"); buffer.writeln("import 'package:yx_icon_fonts_example/example_icon.dart';"); buffer.writeln(); buffer.writeln("// 此文件由脚本自动生成!"); buffer.writeln(); buffer.writeln("final icons = ["); // 按类别分组图标 final categories = >>{}; for (final glyph in glyphs) { final name = glyph['font_class'] as String; final unicodeDecimal = glyph['unicode_decimal'] as int; String category = '其他图标'; if (name.contains('msg')) { category = '消息相关图标'; } else if (name.contains('arrow')) { category = '箭头相关图标'; } else if (name.contains('edit')) { category = '编辑相关图标'; } else if (name.contains('me_')) { category = '个人中心相关图标'; } else if (name.contains('team') || name.contains('student')) { category = '团队和用户相关图标'; } else if (name.contains('filter') || name.contains('question') || name.contains('onlysee') || name.contains('hint') || name.contains('switch')) { category = '功能图标'; } else if (name.contains('delete')) { category = '删除相关图标'; } else if (name.contains('more')) { category = '更多和菜单相关图标'; } else if (name.contains('quit')) { category = '退出相关图标'; } else if (name.contains('copy')) { category = '复制相关图标'; } else if (name.contains('calendar')) { category = '日历相关图标'; } else if (name.contains('share')) { category = '分享相关图标'; } else if (name.contains('add') || name.contains('+')) { category = '添加相关图标'; } else if (name.contains('keyboard')) { category = '键盘相关图标'; } else if (name.contains('-')) { category = '特殊字符图标'; } categories.putIfAbsent(category, () => []); categories[category]!.add({ 'name': name, 'unicodeDecimal': unicodeDecimal, }); } // 生成图标列表 for (final category in categories.keys) { buffer.writeln(" // $category"); for (final icon in categories[category]!) { final name = icon['name'] as String; final camelCaseName = toLegalDartName(name); if (!definedIcons.contains(camelCaseName)) continue; // 跳过未定义的 final displayName = _getDisplayName(name); buffer.writeln(" ExampleIcon(YXIconFonts.$camelCaseName, '$displayName'),"); } buffer.writeln(); } buffer.writeln("];"); final file = File('example/lib/icons.dart'); file.writeAsStringSync(buffer.toString()); } /// 获取展示用名称 String _getDisplayName(String name) { return name.replaceAll('_', ' '); }