private MacroExpander(ExpansionSettings settings, ILogger logger) { Settings = settings; Logger = logger; _rewriteDirectives = settings.GameDataPaths?.SelectMany(LoadRewriteDirectives)?.ToArray() ?? Array.Empty <RewriteDirective>(); _directoryFunctions = new DirectoryFunctions(settings.Directory, Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)); }
/// <summary> /// Loads the specified map file, expands any macro entities within, and returns the resulting map. /// The given path must be absolute. /// </summary> public static Map ExpandMacros(string path, ExpansionSettings settings, Logger logger) { // TODO: Verify that 'path' is absolute! Either that, or document the behavior for relative paths! (relative to cwd?) var globals = new Dictionary <string, object>(); var expander = new MacroExpander(settings, logger); var mainTemplate = expander.GetMapTemplate(path, globals); var context = new InstantiationContext( mainTemplate, insertionEntityProperties: settings.Variables.ToDictionary(kv => kv.Key, kv => Interpreter.Print(kv.Value)), workingDirectory: settings.Directory, globals: globals); expander.CreateInstance(context); return(context.OutputMap); }