Skip to content

Commit fe9f4f5

Browse files
committed
refactor: rewrite the way using extension to get custom grammars
1 parent 39fba17 commit fe9f4f5

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

src/Models/TextMateHelper.cs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class RegistryOptionsWrapper : IRegistryOptions
2222
public RegistryOptionsWrapper(ThemeName defaultTheme)
2323
{
2424
_backend = new RegistryOptions(defaultTheme);
25-
_extraGrammars = new Dictionary<string, IRawGrammar>();
25+
_extraGrammars = new List<IRawGrammar>();
2626

2727
string[] extraGrammarFiles = ["toml.json"];
2828
foreach (var file in extraGrammarFiles)
@@ -33,7 +33,7 @@ public RegistryOptionsWrapper(ThemeName defaultTheme)
3333
try
3434
{
3535
var grammar = GrammarReader.ReadGrammarSync(new StreamReader(asset));
36-
_extraGrammars.Add(grammar.GetScopeName(), grammar);
36+
_extraGrammars.Add(grammar);
3737
}
3838
catch
3939
{
@@ -49,10 +49,8 @@ public IRawTheme GetTheme(string scopeName)
4949

5050
public IRawGrammar GetGrammar(string scopeName)
5151
{
52-
if (_extraGrammars.TryGetValue(scopeName, out var grammar))
53-
return grammar;
54-
55-
return _backend.GetGrammar(scopeName);
52+
var grammar = _extraGrammars.Find(x => x.GetScopeName().Equals(scopeName, StringComparison.Ordinal));
53+
return grammar ?? _backend.GetGrammar(scopeName);
5654
}
5755

5856
public ICollection<string> GetInjections(string scopeName)
@@ -73,22 +71,22 @@ public IRawTheme LoadTheme(ThemeName name)
7371
public string GetScopeByFileName(string filename)
7472
{
7573
var extension = Path.GetExtension(filename);
76-
var scope = $"source{extension}";
77-
if (_extraGrammars.ContainsKey(scope))
78-
return scope;
74+
var grammar = _extraGrammars.Find(x => x.GetScopeName().EndsWith(extension, StringComparison.OrdinalIgnoreCase));
75+
if (grammar != null)
76+
return grammar.GetScopeName();
7977

8078
if (extension == ".h")
8179
extension = ".cpp";
82-
else if (extension == ".resx" || extension == ".plist")
80+
else if (extension == ".resx" || extension == ".plist" || extension == ".manifest")
8381
extension = ".xml";
8482
else if (extension == ".command")
8583
extension = ".sh";
8684

8785
return _backend.GetScopeByExtension(extension);
8886
}
8987

90-
private RegistryOptions _backend = null;
91-
private Dictionary<string, IRawGrammar> _extraGrammars = null;
88+
private readonly RegistryOptions _backend;
89+
private readonly List<IRawGrammar> _extraGrammars;
9290
}
9391

9492
public static class TextMateHelper
@@ -108,10 +106,8 @@ public static void SetThemeByApp(TextMate.Installation installation)
108106

109107
if (installation.RegistryOptions is RegistryOptionsWrapper reg)
110108
{
111-
if (Application.Current?.ActualThemeVariant == ThemeVariant.Dark)
112-
installation.SetTheme(reg.LoadTheme(ThemeName.DarkPlus));
113-
else
114-
installation.SetTheme(reg.LoadTheme(ThemeName.LightPlus));
109+
var isDark = Application.Current?.ActualThemeVariant == ThemeVariant.Dark;
110+
installation.SetTheme(reg.LoadTheme(isDark ? ThemeName.DarkPlus : ThemeName.LightPlus));
115111
}
116112
}
117113

0 commit comments

Comments
 (0)