示例#1
0
        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);
        }
示例#2
0
        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);
        }