import 'dart:convert'; import 'dart:io'; /// 读取 iconfont.json 文件,返回解析后的 Map Map readIconFontJson([String path = 'iconfont.json']) { final file = File(path); if (!file.existsSync()) { throw Exception('未找到 $path 文件'); } final content = file.readAsStringSync(); return json.decode(content) as Map; } /// 获取 glyphs 列表 List getGlyphs(Map iconData) { return iconData['glyphs'] as List; } /// 下划线转驼峰命名,并处理常见特殊字符,保证 Dart 标识符合法 String toCamelCase(String input) { String processedInput = input.replaceAll('-', '_').replaceAll('+', 'plus').replaceAll('(', '').replaceAll(')', '').replaceAll(' ', ''); final List parts = processedInput.split('_'); if (parts.isEmpty) return input; final String firstPart = parts[0]; final String remainingParts = parts.skip(1).map((part) => part.isNotEmpty ? part[0].toUpperCase() + part.substring(1) : '').join(); return firstPart + remainingParts; } /// Dart 标识符合法化(首字符不能为数字,不能有特殊符号) String toLegalDartName(String input) { String name = toCamelCase(input); // 首字符为数字,前面加下划线 if (name.isNotEmpty && RegExp(r'^[0-9]').hasMatch(name[0])) { name = '_$name'; } // 只保留字母、数字和下划线 name = name.replaceAll(RegExp(r'[^a-zA-Z0-9_]'), ''); return name; } /// 读取 Dart 文件中已定义的静态常量名(如 static const IconData xxx = ...) Set getDefinedIconNames([String path = 'lib/src/yx_icon_fonts_data.dart']) { final file = File(path); if (!file.existsSync()) return {}; final content = file.readAsStringSync(); final reg = RegExp(r'static const IconData (\w+) ='); return reg.allMatches(content).map((m) => m.group(1)!).toSet(); }