Multi-Platform Package Manager for Stable Diffusion
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
1.4 KiB

using System.Collections.Generic;
using System.IO;
using System.Reflection;
using TextMateSharp.Grammars;
using TextMateSharp.Internal.Grammars;
using TextMateSharp.Internal.Grammars.Reader;
using TextMateSharp.Internal.Types;
using TextMateSharp.Registry;
namespace StabilityMatrix.Avalonia.Extensions;
public static class TextMateExtensions
{
public static IGrammar LoadGrammarFromStream(
this Registry registry,
Stream stream,
int? initialLanguage = default,
Dictionary<string, int>? embeddedLanguages = default)
{
IRawGrammar rawGrammar;
using (var sr = new StreamReader(stream))
{
rawGrammar = GrammarReader.ReadGrammarSync(sr);
}
var locatorField = typeof(Registry).GetField("locator", BindingFlags.NonPublic | BindingFlags.Instance);
var locator = (IRegistryOptions) locatorField!.GetValue(registry)!;
var injections = locator.GetInjections(rawGrammar.GetScopeName());
var syncRegistryField = typeof(Registry).GetField("syncRegistry", BindingFlags.NonPublic | BindingFlags.Instance);
var syncRegistry = (SyncRegistry) syncRegistryField!.GetValue(registry)!;
syncRegistry.AddGrammar(rawGrammar, injections);
return registry.GrammarForScopeName(
rawGrammar.GetScopeName(),
initialLanguage ?? 0,
embeddedLanguages ?? new Dictionary<string, int>());
}
}