LocaleGenerator.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334
  1. using Microsoft.CodeAnalysis;
  2. using System.Linq;
  3. using System.Text;
  4. namespace Ryujinx.UI.LocaleGenerator
  5. {
  6. [Generator]
  7. public class LocaleGenerator : IIncrementalGenerator
  8. {
  9. public void Initialize(IncrementalGeneratorInitializationContext context)
  10. {
  11. var localeFile = context.AdditionalTextsProvider.Where(static x => x.Path.EndsWith("locales.json"));
  12. IncrementalValuesProvider<string> contents = localeFile.Select((text, cancellationToken) => text.GetText(cancellationToken)!.ToString());
  13. context.RegisterSourceOutput(contents, (spc, content) =>
  14. {
  15. var lines = content.Split('\n').Where(x => x.Trim().StartsWith("\"ID\":")).Select(x => x.Split(':')[1].Trim().Replace("\"", string.Empty).Replace(",", string.Empty));
  16. StringBuilder enumSourceBuilder = new();
  17. enumSourceBuilder.AppendLine("namespace Ryujinx.Ava.Common.Locale;");
  18. enumSourceBuilder.AppendLine("public enum LocaleKeys");
  19. enumSourceBuilder.AppendLine("{");
  20. foreach (var line in lines)
  21. {
  22. enumSourceBuilder.AppendLine($" {line},");
  23. }
  24. enumSourceBuilder.AppendLine("}");
  25. spc.AddSource("LocaleKeys", enumSourceBuilder.ToString());
  26. });
  27. }
  28. }
  29. }