emit static method
Emits a main library + one part file per locale.
Keys are basenames relative to the output directory of
config.outputFile.
Implementation
static SwayEmitResult emit(
List<ParsedLocaleFile> localeFiles, {
required SwayConfig config,
}) {
if (localeFiles.isEmpty) {
throw StateError('No locale files to emit');
}
final sorted = [...localeFiles]
..sort((a, b) => a.languageCode.compareTo(b.languageCode));
final base = sorted.firstWhere(
(f) => f.languageCode == config.baseLocale,
orElse: () => sorted.first,
);
final mainName = p.basename(config.outputFile);
final stem = _stem(mainName); // "sway" from "sway.g.dart"
final files = <String, String>{};
final partNames = <String>[];
for (final file in sorted) {
final partName = '${stem}_${file.languageCode}.g.dart';
partNames.add(partName);
final partBuf = StringBuffer();
partBuf.writeln('// GENERATED FILE — DO NOT EDIT');
partBuf.writeln(
'// Generated by Sway — To regenerate, run: dart run sway:codegen',
);
partBuf.writeln();
partBuf.writeln("part of '$mainName';");
partBuf.writeln();
_emitLocaleImpl(partBuf, file, base, config);
files[partName] = partBuf.toString();
}
final mainBuf = StringBuffer();
mainBuf.writeln('// GENERATED FILE — DO NOT EDIT');
mainBuf.writeln(
'// Generated by Sway — To regenerate, run: dart run sway:codegen',
);
mainBuf.writeln();
mainBuf.writeln("import 'package:flutter/widgets.dart';");
mainBuf.writeln(
"import 'package:sway/sway.dart' show PluralCategory, resolvePlural;",
);
mainBuf.writeln();
for (final partName in partNames) {
mainBuf.writeln("part '$partName';");
}
mainBuf.writeln();
_emitNestedAbstracts(mainBuf, base.data, '');
_emitRootAbstract(mainBuf, base, sorted);
files[mainName] = mainBuf.toString();
return SwayEmitResult(files);
}