/// <summary> /// Processes the file with the settings, definitions and the source manager specified. /// </summary> /// <param name="file"></param> /// <param name="settings"></param> /// <param name="defs"></param> /// <returns>Returns a list of files that can be compiled in reverse order</returns> public ISourceScript[] Process(string[] files, Settings settings = null, IDefinitions defs = null) { string dir = Directory.GetCurrentDirectory(); defs = defs ?? new Definitions(); SourceManager sm = new SourceManager(_plugins); InitializePlugins(settings, defs, sm); this.Log(DebugLevel.LOGS, Verbosity.LEVEL1, "Starting Processing of Files: {0}", files.Unpack(", ")); foreach (var file in files) { string f = Path.GetFullPath(file); Directory.SetCurrentDirectory(Path.GetDirectoryName(f)); sm.SetLock(false); sm.CreateScript(out ISourceScript sss, _sep, f, f, new Dictionary <string, object>()); sm.SetLock(true); List <ISourceScript> all = new List <ISourceScript>(); sm.AddToTodo(sss); } ISourceScript ss = sm.NextItem; do { if (!(ss as SourceScript).IsSourceLoaded) { RunStages(ProcessStage.ON_LOAD_STAGE, ss, sm, defs); } this.Log(DebugLevel.PROGRESS, Verbosity.LEVEL1, "Remaining Files: {0}", sm.GetTodoCount()); this.Log(DebugLevel.LOGS, Verbosity.LEVEL2, "Selecting File: {0}", Path.GetFileName(ss.GetFilePath())); //RUN MAIN sm.SetLock(false); RunStages(ProcessStage.ON_MAIN, ss, sm, defs); sm.SetLock(true); sm.SetState(ss, ProcessStage.ON_FINISH_UP); ss = sm.NextItem; } while (ss != null); Directory.SetCurrentDirectory(dir); ISourceScript[] ret = sm.GetList().ToArray(); this.Log(DebugLevel.LOGS, Verbosity.LEVEL1, "Finishing Up..."); foreach (var finishedScript in ret) { this.Log(DebugLevel.LOGS, Verbosity.LEVEL2, "Selecting File: {0}", Path.GetFileName(finishedScript.GetFilePath())); RunStages(ProcessStage.ON_FINISH_UP, finishedScript, sm, defs); } this.Log(DebugLevel.LOGS, Verbosity.LEVEL1, "Finished Processing Files."); return(ret); }
/// <summary> /// Processes the file with the settings, definitions and the source manager specified. /// </summary> /// <param name="files">the file paths to be processed</param> /// <param name="settings">the settings that are used</param> /// <param name="defs">the definitions that are used</param> /// <returns>Returns a list of files that can be compiled in reverse order</returns> private ISourceScript[] Process(IFileContent[] files, Settings settings, IDefinitions defs) { Timer.GlobalTimer.Restart(); //string dir = Directory.GetCurrentDirectory(); IDefinitions definitions = defs ?? new Definitions(); settings = settings ?? new Settings(); SourceManager sm = new SourceManager(_plugins); long old = Timer.MS; InitializePlugins(settings, definitions, sm); this.Log(DebugLevel.PROGRESS, Verbosity.LEVEL1, "Finished Initializing {1} Plugins({0}ms)", Timer.MS - old, _plugins.Count); old = Timer.MS; foreach (var file in files) { sm.SetLock(false); sm.TryCreateScript(out ISourceScript sss, _sep, file, new ImportResult()); sm.SetLock(true); sm.AddToTodo(sss); } this.Log(DebugLevel.PROGRESS, Verbosity.LEVEL1, "Loaded {1} Files in {0}ms", Timer.MS - old, sm.GetTodoCount()); this.Log(DebugLevel.LOGS, Verbosity.LEVEL1, "Starting Processing of Files: {0}", files.Unpack(", ")); old = Timer.MS; ISourceScript ss = sm.NextItem; do { if (!(ss as SourceScript).IsSourceLoaded) { RunStages(this, ProcessStage.ON_LOAD_STAGE, ss, sm, definitions); } this.Log(DebugLevel.PROGRESS, Verbosity.LEVEL1, "Remaining Files: {0}", sm.GetTodoCount()); this.Log(DebugLevel.LOGS, Verbosity.LEVEL2, "Selecting File: {0}", Path.GetFileName(ss.GetFileInterface().GetKey())); //RUN MAIN sm.SetLock(false); RunStages(this, ProcessStage.ON_MAIN, ss, sm, definitions); sm.SetLock(true); sm.SetState(ss, ProcessStage.ON_FINISH_UP); ss = sm.NextItem; } while (ss != null); //Directory.SetCurrentDirectory(dir); ISourceScript[] ret = sm.GetList().ToArray(); this.Log(DebugLevel.LOGS, Verbosity.LEVEL1, "Finishing Up..."); foreach (var finishedScript in ret) { this.Log(DebugLevel.LOGS, Verbosity.LEVEL2, "Selecting File: {0}", Path.GetFileName(finishedScript.GetFileInterface().GetKey())); RunStages(this, ProcessStage.ON_FINISH_UP, finishedScript, sm, definitions); } this.Log(DebugLevel.LOGS, Verbosity.LEVEL1, "Finished Processing Files."); this.Log(DebugLevel.PROGRESS, Verbosity.LEVEL1, "Processed {1} Files into {2} scripts in {0}ms", Timer.MS - old, sm.GetList().Count, ret.Length); return(ret); }