@@ -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