예제 #1
0
        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));
        }
예제 #2
0
        /// <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);
        }