main function

void main()

Implementation

void main() {
  // Setup read and write location
  final directory = Directory('Visa');
  final outputDartFile = File('svg_content_new.dart');
  final buffer = StringBuffer();

  // Taking some typos into this too
  String parseSize(String sizeString) {
    if (sizeString.contains('tiny')) return 'Tiny';
    if (sizeString.contains('tIny')) return 'Tiny';
    if (sizeString.contains('low')) return 'Low';
    if (sizeString.contains('default')) return 'Low';
    if (sizeString.contains('high')) return 'High';
    if (sizeString.contains('hIgh')) return 'High';
    if (sizeString.contains('Tiny')) return 'Tiny';
    if (sizeString.contains('TIny')) return 'Tiny';
    if (sizeString.contains('Low')) return 'Low';
    if (sizeString.contains('Default')) return 'Low';
    if (sizeString.contains('High')) return 'High';
    if (sizeString.contains('HIgh')) return 'High';
    return '';
  }

  // Format name to reduce refactor work
  String formatName(String name, String size) {
    name = name.toLowerCase().replaceAllMapped(
        RegExp(r'-(\w)'), (match) => match.group(1)!.toUpperCase());
    final sizeNote = {
      'Tiny': 'Tiny',
      'Low': 'Low',
      'High': 'High',
    }[parseSize(size)];

    if (sizeNote != null) {
      final formattedName =
          '${name[0].toLowerCase()}${name.substring(1)}$sizeNote';
      return '${formattedName[0].toLowerCase()}${formattedName.substring(1)}';
    }
    return '';
  }

  // Helper to remove spaces between tags
  String removeSpaces(String input) {
    return input
        .replaceAllMapped(RegExp(r'(?<=>)[ \t\n\r]*(?=<)'), (match) => "")
        .trim();
  }

  buffer.writeln('class VIcons {');

  for (final file in directory.listSync()) {
    //print('Processing: ${file.path}');
    if (file is File && file.path.endsWith('.svg')) {
      //print('Checking file: ${file.path}');
      final fullContent = file.readAsStringSync();
      // Skip the first 16 lines (license header)
      final lines = fullContent.split('\n');
      final content = lines.length > 16 ? lines.skip(16).join('\n') : fullContent;
      //print('File content: $content');
      final document = XmlDocument.parse(content);

      // Extract name and size from the filename
      final fileName = file.uri.pathSegments.last;
      final nameMatch = RegExp(r'Name=([\w\-]+)').firstMatch(fileName);
      final sizeMatch = RegExp(r'Size=([\w\-]+)').firstMatch(fileName);

      if (nameMatch == null || sizeMatch == null) {
        //print('Could not extract name or size from filename: $fileName');
        continue;
      }

      final nameValue = nameMatch.group(1)!;
      final sizeValue = sizeMatch.group(1)!;
      //print('Icon name extracted: $nameValue');
      //print('Icon size extracted: $sizeValue');

      final formattedName = formatName(nameValue, sizeValue);
      //print('Formatted name: $formattedName');

      // Modify paths if needed
      for (final XmlElement element in document.findAllElements('path')) {
        final pathID = element.getAttribute('id');
        if (pathID == 'path-2') {
          element.setAttribute('fill', '#FCC015');
        } else if (pathID == 'path-1') {
          element.setAttribute('fill', '#1434CB');
        }
      }

      final svgContent = removeSpaces(document.toXmlString(pretty: false));
      buffer.writeln('  static const $formattedName = \'$svgContent\';');

      // Add alt variant
      for (final XmlElement element in document.findAllElements('path')) {
        final pathID = element.getAttribute('id');
        if (pathID == 'path-1') {
          element.setAttribute('fill', '#FFFFFF');
        }
      }
      final altSvgContent = removeSpaces(document.toXmlString(pretty: false));
      buffer.writeln(
          '  static const ${formattedName}Alternate = \'$altSvgContent\';');
    }
  }

  buffer.writeln('}');
  outputDartFile.writeAsStringSync(buffer.toString());
}