generate method

void generate(
  1. String inputFilePath, {
  2. String? outputDir,
  3. String? fileName,
  4. String? className,
  5. String? delimiter,
  6. int? startIndex,
  7. bool? dependOnContext,
  8. bool? useSingleQuotes,
  9. bool? replaceNoBreakSpaces,
  10. bool? exposeGetString,
  11. bool? exposeLocaStrings,
  12. bool? exposeLocaleMaps,
  13. bool? generateComments,
  14. List<String>? commentLanguages,
})

Implementation

void generate(
  String inputFilePath, {
  String? outputDir,
  String? fileName,
  String? className,
  String? delimiter,
  int? startIndex,
  bool? dependOnContext,
  bool? useSingleQuotes,
  bool? replaceNoBreakSpaces,
  bool? exposeGetString,
  bool? exposeLocaStrings,
  bool? exposeLocaleMaps,
  bool? generateComments,
  List<String>? commentLanguages,
}) {
  final file = File(inputFilePath);
  Validator.validateFile(file);

  // File is valid, state progress
  FlappyLogger.logProgress('Loading file $inputFilePath...');

  // if null has been passed in, ensure that vars are given default values
  outputDir ??= DefaultSettings.outputDirectory;
  fileName ??= DefaultSettings.fileName;
  className ??= DefaultSettings.className;
  delimiter ??= DefaultSettings.delimiter;
  startIndex ??= DefaultSettings.startIndex;
  dependOnContext ??= DefaultSettings.dependOnContext;
  useSingleQuotes ??= DefaultSettings.useSingleQuotes;
  replaceNoBreakSpaces ??= DefaultSettings.replaceNoBreakSpaces;
  exposeGetString ??= DefaultSettings.exposeGetString;
  exposeLocaStrings ??= DefaultSettings.exposeLocaStrings;
  exposeLocaleMaps ??= DefaultSettings.exposeLocaleMaps;
  generateComments ??= DefaultSettings.generateComments;
  commentLanguages ??= DefaultSettings.commentLanguages;

  final codeGenerator = CodeGenerator(
    className: className,
    dependOnContext: dependOnContext,
    useSingleQuotes: useSingleQuotes,
    replaceNoBreakSpaces: replaceNoBreakSpaces,
    exposeGetString: exposeGetString,
    exposeLocaStrings: exposeGetString,
    exposeLocaleMaps: exposeLocaleMaps,
  );

  final parser = file.hasCSVExtension
      ? CSVParser(
          file: file,
          startIndex: startIndex,
          fieldDelimiter: delimiter,
        )
      : ExcelParser(file: file, startIndex: startIndex);

  final supportedLanguages = parser.supportedLanguages;
  Validator.validateSupportedLanguages(supportedLanguages);
  codeGenerator.setSupportedLanguages(supportedLanguages);
  if (generateComments) {
    codeGenerator.enableCommentGeneration(commentLanguages);
  }
  FlappyLogger.logProgress('Locales $supportedLanguages determined.');

  final localizationsTable = parser.localizationsTable;
  Validator.validateLocalizationsTable(localizationsTable);
  FlappyLogger.logProgress('Parsing ${localizationsTable.length} key(s)...');

  for (final row in localizationsTable) {
    Validator.validateLocalizationTableRow(
      row,
      numberSupportedLanguages: supportedLanguages.length,
    );
    codeGenerator.addField(row.key, row.defaultWord, row.words);
  }

  codeGenerator.finalize();

  // format the contents according to dart defaults
  final formattedString = codeGenerator.formattedString;

  // write output file
  final path = outputDir.isEmpty ? 'i18n.dart' : '$outputDir/$fileName.dart';
  FileWriter().write(contents: formattedString, path: path);

  FlappyLogger.logProgress('Localizations successfully generated!');
}