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; }
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); }