public ScriptHost(BaseScriptEngine engine) { Engine = engine; Book = new Book.SCBook(this); Spreadsheet = new Spreadsheet.SCSpreadsheet(this); Grid = new Grid.SCGrid(this); Heap = new Heap.SCHeap(this); }
public new static DashboardDocumentViewModel Create(BaseScriptEngine engine) => ViewModelSource.Create <DashboardDocumentViewModel>(() => new DashboardDocumentViewModel(engine));
public DashboardDocumentViewModel(BaseScriptEngine engine) : base(engine) { }
public new static PivotDocumentViewModel Create(BaseScriptEngine engine) => ViewModelSource.Create <PivotDocumentViewModel>(() => new PivotDocumentViewModel(engine));
public PivotDocumentViewModel(BaseScriptEngine engine) : base(engine) { }
protected override void EndProcessing() { var externalHost = CheckExternalHost(); var scriptFile = Project.Current.MapPath(ScriptFile); if (!Engine.HasValue && !string.IsNullOrWhiteSpace(scriptFile)) { var ext = Utils.NonNullString(Path.GetExtension(scriptFile)).ToLower().Trim(); switch (ext) { case ".ps1": case ".psm1": case ".psd1": case ".ps": Engine = ScriptEngine.PowerShell; break; case ".r": Engine = ScriptEngine.R; break; case ".python": case ".py": Engine = ScriptEngine.Python; break; } } BaseScriptEngine engine = (Engine ?? ScriptEngine.PowerShell) switch { ScriptEngine.PowerShell => new PowerShellScriptEngine(), ScriptEngine.R => new RScriptEngine(), ScriptEngine.Python => new PythonScriptEngine(), _ => new PowerShellScriptEngine() }; try { engine.RequestLine += (s, e) => e.Line = null; engine.BookServer = Book?.BookServer ?? externalHost.BookServer; engine.Workbook = Spreadsheet?.Workbook ?? externalHost.Spreadsheet; engine.GridDataSet = Data ?? new DataSet("Script"); engine.ExecutionType = BaseScriptEngine.ScriptExecutionType.Script; engine.SynchronizeInvoke = externalHost.SynchronizeInvoke; string script = Script; if (string.IsNullOrWhiteSpace(script)) { ExecuteLocked(() => { using var reader = File.OpenText(scriptFile); script = reader.ReadToEnd(); }, LockFiles ? LockObject : null); } var taskSource = new TaskCompletionSource <bool>(); engine.ExecutionFinished += callback; engine.Start(); if (Parameters != null) { if (engine is PowerShellScriptEngine psEngine) { foreach (DictionaryEntry parameter in Parameters) { psEngine.AddVariable(Convert.ToString(parameter.Key), parameter.Value); } } else if (engine is ProcessScriptEngine procEngine) { foreach (DictionaryEntry parameter in Parameters) { procEngine.EnvironmentVariables[Convert.ToString(parameter.Key)] = Convert.ToString(parameter.Value); } } else { throw new Exception("Parameters are not supported for selected script engine."); } } engine.SendCommand(script); taskSource.Task.Wait(); //Cannot await in event handler. void callback(object s, EventArgs e) { engine.ExecutionFinished -= callback; taskSource.SetResult(true); } } finally { engine.BookServer = null; //Do not dispose engine.Workbook = null; //Do not dispose engine.GridDataSet?.Dispose(); engine.GridDataSet = null; engine.Dispose(); } } }
public CustomConsoleDocumentViewModel(BaseScriptEngine engine) : base(engine) { }