示例#1
0
        public static List<LogInfo> AddVariables(EngineState s, CodeCommand cmd)
        {
            CodeInfo_AddVariables info = cmd.Info.Cast<CodeInfo_AddVariables>();

            string scriptFile = StringEscaper.Preprocess(s, info.ScriptFile);
            string sectionName = StringEscaper.Preprocess(s, info.SectionName);

            Script sc = Engine.GetScriptInstance(s, s.CurrentScript.RealPath, scriptFile, out _);

            // Does section exist?
            if (!sc.Sections.ContainsKey(sectionName))
                return new List<LogInfo>
                    {new LogInfo(LogState.Error, $"Script [{scriptFile}] does not have section [{sectionName}]")};

            // Directly read from file
            List<string> lines = IniReadWriter.ParseRawSection(sc.RealPath, sectionName);
            if (lines == null)
                return new List<LogInfo>
                    {new LogInfo(LogState.Error, $"Script [{scriptFile}] does not have section [{sectionName}]")};

            // Add Variables
            Dictionary<string, string> varDict = IniReadWriter.ParseIniLinesVarStyle(lines);
            List<LogInfo> varLogs = s.Variables.AddVariables(info.Global ? VarsType.Global : VarsType.Local, varDict);

            // Add Macros
            ScriptSection localSection = sc.Sections[sectionName];
            List<LogInfo> macroLogs = s.Macro.LoadMacroDict(info.Global ? MacroType.Global : MacroType.Local, localSection, lines, true);
            varLogs.AddRange(macroLogs);

            if (varLogs.Count == 0) // No variables
                varLogs.Add(new LogInfo(LogState.Info,
                    $"Script [{scriptFile}]'s section [{sectionName}] does not have any variables"));

            return varLogs;
        }
示例#2
0
        public static List <LogInfo> AddVariables(EngineState s, CodeCommand cmd)
        {
            Debug.Assert(cmd.Info.GetType() == typeof(CodeInfo_AddVariables));
            CodeInfo_AddVariables info = cmd.Info as CodeInfo_AddVariables;

            string pluginFile  = StringEscaper.Preprocess(s, info.PluginFile);
            string sectionName = StringEscaper.Preprocess(s, info.SectionName);

            Plugin p = Engine.GetPluginInstance(s, cmd, s.CurrentPlugin.FullPath, pluginFile, out bool inCurrentPlugin);

            // Does section exists?
            if (!p.Sections.ContainsKey(sectionName))
            {
                throw new ExecuteException($"Plugin [{pluginFile}] does not have section [{sectionName}]");
            }

            // Directly read from file
            List <string> lines = Ini.ParseRawSection(p.FullPath, sectionName);

            // Add Variables
            Dictionary <string, string> varDict = Ini.ParseIniLinesVarStyle(lines);
            List <LogInfo> varLogs = s.Variables.AddVariables(info.Global ? VarsType.Global : VarsType.Local, varDict);

            // Add Macros
            SectionAddress addr      = new SectionAddress(p, p.Sections[sectionName]);
            List <LogInfo> macroLogs = s.Macro.LoadLocalMacroDict(addr, lines, true);

            varLogs.AddRange(macroLogs);

            if (varLogs.Count == 0) // No variables
            {
                varLogs.Add(new LogInfo(LogState.Info, $"Plugin [{pluginFile}]'s section [{sectionName}] does not have any variables"));
            }

            return(varLogs);
        }