public override string LineStage(string source) { if (Utils.IsStatement(source, WarningKeyword)) { string err = Utils.SplitAndRemoveFirst(source, Separator).Unpack(" "); Logger.Log(LogType.Error, $"Warning: {err}", 1); if (ThrowOnWarning) { throw new ErrorException(err); } return(""); } if (Utils.IsStatement(source, ErrorKeyword)) { string err = Utils.SplitAndRemoveFirst(source, Separator).Unpack(" "); Logger.Log(LogType.Error, $"Error {err}", 1); if (ThrowOnError) { throw new ErrorException(err); } return(""); } return(source); }
public override bool FullScriptStage(ISourceScript script, ISourceManager sourceManager, IDefinitions defs) { Logger.Log(LogType.Log, "Disovering Include Statments...", PLUGIN_MIN_SEVERITY); List <string> source = script.GetSource().ToList(); string currentPath = Path.GetDirectoryName(script.GetFileInterface().GetFilePath()); //bool hasIncludedInline; //do //{ // hasIncludedInline = false; // for (int i = source.Count - 1; i >= 0; i--) // { // if (Utils.IsStatement(source[i], IncludeInlineKeyword)) // { // Logger.Log(LogType.Log, "Found Inline Include Statement...", PLUGIN_MIN_SEVERITY + 1); // string[] args = Utils.SplitAndRemoveFirst(source[i], Separator); // if (args.Length == 0) // { // Logger.Log(LogType.Error, "No File Specified", 1); // continue; // } // if (Utils.FileExistsRelativeTo(currentPath, args[0])) // { // Logger.Log(LogType.Log, "Replacing Inline Keyword with file content", // PLUGIN_MIN_SEVERITY + 2); // source.RemoveAt(i); // source.InsertRange(i, IOManager.ReadAllLines(Path.Combine(currentPath, args[0]))); // hasIncludedInline = true; // } // else // { // Logger.Log(LogType.Error, $"File does not exist: {args[0]}", 1); // } // } // } // script.SetSource(source.ToArray()); //} while (hasIncludedInline); string[] inlIncs = Utils.FindStatements(source.ToArray(), IncludeInlineKeyword); foreach (string inlInc in inlIncs) { Logger.Log(LogType.Log, $"Processing Statement: {inlInc}", PLUGIN_MIN_SEVERITY + 1); bool tmp = GetISourceScript( sourceManager, inlInc, currentPath, true, out List <ISourceScript> sources ); if (tmp) { foreach (ISourceScript sourceScript in sources) { Logger.Log( LogType.Log, $"Processing Inline Include: {Path.GetFileName( sourceScript.GetFileInterface().GetKey() )}", PLUGIN_MIN_SEVERITY + 2 ); if (!sourceManager.IsIncluded(sourceScript)) { sourceManager.AddToTodo(sourceScript); } else { sourceManager.FixOrder(sourceScript); } } } else { return (false); //We crash if we didnt find the file. but if the user forgets to specify the path we will just log the error } } string[] incs = Utils.FindStatements(source.ToArray(), IncludeKeyword). Where(x => !Utils.IsStatement(x, IncludeInlineKeyword)). ToArray(); foreach (string includes in incs) { Logger.Log(LogType.Log, $"Processing Statement: {includes}", PLUGIN_MIN_SEVERITY + 1); bool tmp = GetISourceScript( sourceManager, includes, currentPath, false, out List <ISourceScript> sources ); if (tmp) { foreach (ISourceScript sourceScript in sources) { Logger.Log( LogType.Log, $"Processing Include: {Path.GetFileName( sourceScript.GetFileInterface().GetKey() )}", PLUGIN_MIN_SEVERITY + 2 ); if (!sourceManager.IsIncluded(sourceScript)) { sourceManager.AddToTodo(sourceScript); } else { sourceManager.FixOrder(sourceScript); } } } else { return (false); //We crash if we didnt find the file. but if the user forgets to specify the path we will just log the error } } Logger.Log(LogType.Log, "Inclusion of Files Finished", PLUGIN_MIN_SEVERITY); return(true); }