@@ -32,6 +32,12 @@ public class Universe
3232 /// </summary>
3333 public static readonly Dictionary < string , PatchLibrary > AllManagedLibraries ;
3434
35+
36+ /// <summary>
37+ /// This contains all the constant text based libraries that have been registered
38+ /// </summary>
39+ public static readonly Dictionary < string , string > AllRawLibraries = new ( ) ;
40+
3541 private static List < string > _preloadedLabels ;
3642
3743 static Universe ( )
@@ -141,6 +147,7 @@ public Universe(Action<ITextPatcher> registerPatcher, Action<string> errorLogger
141147 AllMods = allMods ;
142148 MessageLogger ( "Setup universe!" ) ;
143149 SetupBasePriorities ( allMods ) ;
150+ LoadAllRawPatches ( ) ;
144151 }
145152
146153 // TODO: Fix this so that other mods stages get their guids working
@@ -195,6 +202,40 @@ public void SyntaxError(TextWriter output, IRecognizer recognizer, int offending
195202 ErrorLogger . Invoke ( $ "error lexing { File } - { line } :{ charPositionInLine } : { msg } ") ;
196203 }
197204 }
205+
206+ private void LoadAllRawPatches ( )
207+ {
208+ var tokenTransformer = new Transformer ( msg => throw new LoadException ( msg ) ) ;
209+ foreach ( var ( id , raw ) in AllRawLibraries )
210+ {
211+ try
212+ {
213+ MessageLogger . Invoke ( $ "Loading library { id } ") ;
214+ var charStream = CharStreams . fromString ( raw ) ;
215+ var lexerErrorGenerator = new LexerListener ( id , ErrorLogger ) ;
216+ var lexer = new sassy_lexer ( charStream ) ;
217+ lexer . AddErrorListener ( lexerErrorGenerator ) ;
218+ if ( lexerErrorGenerator . Errored )
219+ throw new LoadException ( "lexer errors detected" ) ;
220+ var tokenStream = new CommonTokenStream ( lexer ) ;
221+ var parser = new sassy_parser ( tokenStream ) ;
222+ var parserErrorGenerator = new ParserListener ( id , ErrorLogger ) ;
223+ parser . AddErrorListener ( parserErrorGenerator ) ;
224+ if ( parserErrorGenerator . Errored )
225+ throw new LoadException ( "parser errors detected" ) ;
226+ var patchContext = parser . patch ( ) ;
227+ tokenTransformer . Errored = false ;
228+ var patch = tokenTransformer . Visit ( patchContext ) as SassyPatch ;
229+ var lib = new SassyPatchLibrary ( patch ) ;
230+ AllLibraries [ id ] = lib ;
231+ }
232+ catch ( Exception e )
233+ {
234+ ErrorLogger ( $ "Could not load library: { id } due to: { e . Message } ") ;
235+ }
236+ }
237+ }
238+
198239 /// <summary>
199240 /// Loads all patches from a directory
200241 /// </summary>
@@ -471,9 +512,9 @@ private void SetupBasePriorities(List<string> modLoadOrder)
471512 MessageLogger ( $ "Last implicit global: { lastPost } ") ;
472513 }
473514
474- public static void RegisterAddressablesLibrary ( string modId , string name , string key )
515+ public static void RegisterRawLibrary ( string modId , string name , string raw )
475516 {
476- AllManagedLibraries . Add ( $ "{ modId } :{ name } ", new AddressablesPatchLibrary ( key ) ) ;
517+ AllRawLibraries . Add ( $ "{ modId } :{ name } ", raw ) ;
477518 }
478519 }
479520}
0 commit comments