aboutsummaryrefslogblamecommitdiff
path: root/Ryujinx.Ui.LocaleGenerator/LocaleGenerator.cs
blob: f154e704c89d47e72dd41b7853e718b8843638ec (plain) (tree)




























                                                                                                                                                            
using Microsoft.CodeAnalysis;
using System.Linq;

namespace Ryujinx.Ui.LocaleGenerator
{
    [Generator]
    public class LocaleGenerator : IIncrementalGenerator
    {
        public void Initialize(IncrementalGeneratorInitializationContext context)
        {
            var englishLocaleFile = context.AdditionalTextsProvider.Where(static x => x.Path.EndsWith("en_US.json"));

            IncrementalValuesProvider<string> contents = englishLocaleFile.Select((text, cancellationToken) => text.GetText(cancellationToken)!.ToString());

            context.RegisterSourceOutput(contents, (spc, content) =>
            {
                var lines = content.Split('\n').Where(x => x.Trim().StartsWith("\"")).Select(x => x.Split(':').First().Trim().Replace("\"", ""));
                string enumSource = "namespace Ryujinx.Ava.Common.Locale;\n";
                enumSource += "internal enum LocaleKeys\n{\n";
                foreach (var line in lines)
                {
                    enumSource += $"    {line},\n";
                }
                enumSource += "}\n";

                spc.AddSource("LocaleKeys", enumSource);
            });
        }
    }
}