From: Jeff R. <jef...@us...> - 2005-11-19 03:13:37
|
Update of /cvsroot/svgdomcsharp/SharpVectorGraphics/src/SharpVectorScripting/SharpVectors/Scripting In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12283/src/SharpVectorScripting/SharpVectors/Scripting Modified Files: JScriptEngine.cs ScriptEngine.cs VsaScriptEngine.cs Log Message: Library wide changes for scripting support and automated re-rendering Index: ScriptEngine.cs =================================================================== RCS file: /cvsroot/svgdomcsharp/SharpVectorGraphics/src/SharpVectorScripting/SharpVectors/Scripting/ScriptEngine.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- ScriptEngine.cs 9 Jun 2003 02:26:29 -0000 1.3 +++ ScriptEngine.cs 19 Nov 2005 03:13:24 -0000 1.4 @@ -2,19 +2,21 @@ namespace SharpVectors.Scripting { - public abstract class ScriptEngine - { - #region Fields - protected object scriptGlobal; - #endregion + public abstract class ScriptEngine + { + #region Fields + protected object scriptGlobal; + #endregion - #region Constructor - protected ScriptEngine(object scriptGlobal) - { - this.scriptGlobal = scriptGlobal; - } - #endregion + #region Constructor + protected ScriptEngine(object scriptGlobal) + { + this.scriptGlobal = (new ScriptableSvgWindow(scriptGlobal, this)) as IScriptableSvgWindow; + } + #endregion - public abstract void Execute(string code); - } + public abstract void Execute(string code); + public abstract void Initialise(); + public abstract void Close(); + } } Index: VsaScriptEngine.cs =================================================================== RCS file: /cvsroot/svgdomcsharp/SharpVectorGraphics/src/SharpVectorScripting/SharpVectors/Scripting/VsaScriptEngine.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- VsaScriptEngine.cs 9 Jun 2003 02:26:29 -0000 1.3 +++ VsaScriptEngine.cs 19 Nov 2005 03:13:24 -0000 1.4 @@ -3,58 +3,68 @@ namespace SharpVectors.Scripting { - public abstract class VsaScriptEngine : ScriptEngine, IVsaSite - { - #region Fields - protected IVsaEngine engine; - protected IVsaItems items; - #endregion - #region Constructor - protected VsaScriptEngine(object scriptGlobal) : base(scriptGlobal) {} - #endregion + public abstract class VsaScriptEngine : ScriptEngine, IVsaSite + { + #region Fields + protected IVsaEngine engine; + protected IVsaItems items; + #endregion - #region VsaSite interface - void IVsaSite.GetCompiledState(out Byte[] pe, out Byte[] debugInfo) - { - pe = debugInfo = null; - } + #region Constructor + protected VsaScriptEngine(object scriptGlobal) : base(scriptGlobal) {} + #endregion - object IVsaSite.GetEventSourceInstance(string itemName, string eventSourceName) - { - return this.scriptGlobal; - } + #region VsaSite interface + void IVsaSite.GetCompiledState(out Byte[] pe, out Byte[] debugInfo) + { + pe = debugInfo = null; + } - object IVsaSite.GetGlobalInstance(string name) - { - object result; + object IVsaSite.GetEventSourceInstance(string itemName, string eventSourceName) + { + return this.scriptGlobal; + } - switch (name) - { - case "window": - result = this.scriptGlobal; - break; - default: - Console.WriteLine("GlobalInstance not found: " + name); - result = null; - break; - } + object IVsaSite.GetGlobalInstance(string name) + { + object result; - return result; - } + switch (name) + { + case "window": + result = this.scriptGlobal; + break; + default: + Console.WriteLine("GlobalInstance not found: " + name); + result = null; + break; + } - void IVsaSite.Notify(string notify, object info) - { - } + return result; + } - bool IVsaSite.OnCompilerError(IVsaError e) - { - Console.WriteLine( - String.Format("Error of severity {0} on line {1}: {2}", e.Severity, e.Line, e.Description)); + void IVsaSite.Notify(string notify, object info) + { + } - // Continue to report errors - return true; - } - #endregion - } + bool IVsaSite.OnCompilerError(IVsaError e) + { + Console.WriteLine( + String.Format("Error of severity {0} on line {1}: {2}", e.Severity, e.Line, e.Description)); + + //((IScriptableSvgWindow)scriptGlobal).alert(String.Format("Compilation Error of severity {0} on line {1}: {2}", e.Severity, e.Line, e.Description)); + // Continue to report errors + return true; + } + + public IVsaEngine Engine + { + get + { + return engine; + } + } + #endregion + } } Index: JScriptEngine.cs =================================================================== RCS file: /cvsroot/svgdomcsharp/SharpVectorGraphics/src/SharpVectorScripting/SharpVectors/Scripting/JScriptEngine.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- JScriptEngine.cs 9 Jun 2003 02:26:29 -0000 1.2 +++ JScriptEngine.cs 19 Nov 2005 03:13:24 -0000 1.3 @@ -2,94 +2,151 @@ using System.Reflection; using System.Text; using Microsoft.Vsa; +using Microsoft.JScript; +using Microsoft.JScript.Vsa; using System.Windows.Forms; namespace SharpVectors.Scripting { - public class JScriptEngine : VsaScriptEngine - { - #region Fields - private static int counter = 0; - #endregion + public class JScriptEngine : VsaScriptEngine + { + #region Fields + private static int counter = 0; + #endregion - #region Constructors - public JScriptEngine(object scriptGlobal) : base(scriptGlobal) - { - engine = new Microsoft.JScript.Vsa.VsaEngine(); - engine.RootMoniker = "sharpvectors://jsengine/" + counter++; - engine.Site = this; - engine.InitNew(); - engine.RootNamespace = "SharpVectors.Scripting.Runtime"; - engine.GenerateDebugInfo = true; - items = engine.Items; + #region Constructors + public JScriptEngine(object scriptGlobal) : base(scriptGlobal) + { + engine = new Microsoft.JScript.Vsa.VsaEngine(); + engine.RootMoniker = "sharpvectors://jsengine/" + counter++; + engine.Site = this; + engine.InitNew(); + engine.RootNamespace = "SharpVectors.Scripting"; + engine.GenerateDebugInfo = false; + engine.RevokeCache(); + engine.SetOption("Fast", false); + + items = engine.Items; + Assembly asm = typeof(SharpVectors.Scripting.JScriptEngine).Assembly; + IVsaReferenceItem refItem = (IVsaReferenceItem)items.CreateItem(asm.Location, VsaItemType.Reference, VsaItemFlag.None); + refItem.AssemblyName = asm.Location; + } + + #endregion - // add all assemblies from this AppDomain - foreach ( Assembly asm in AppDomain.CurrentDomain.GetAssemblies() ) - { - string assemName = asm.Location; - IVsaReferenceItem refItem = (IVsaReferenceItem) items.CreateItem(assemName, VsaItemType.Reference, VsaItemFlag.None); + #region Public Methods + + public override void Initialise() + { + // Get the Items + items = engine.Items; + // Load the preamble code + string preamble = @" + var document = window.document; + function setTimeout(script : String, delay : ulong) : String { return window.setTimeout(script, delay); } + function clearTimeout(token : String) : void { window.clearTimeout(token); } + function setInterval(script : String, delay : ulong) : String { return window.setInterval(script, delay); } + function clearInterval(token : String) : void { window.clearInterval(token); } + function getSrc() : String { return window.getSrc(); } + function printNode(node : Object) : String { return window.printNode(node); } + function parseXML(xml : String, owner : Object) : Object { return window.parseXML(xml, owner); } + function alert(msg : String) : void { window.alert(msg); } + function browserEval(src : String, evt : Object) : String { return eval( src, 'unsafe'); } + window.registerEval(browserEval); + "; + IVsaCodeItem codeItem = (IVsaCodeItem)items.CreateItem("Preamble", VsaItemType.Code, VsaItemFlag.None); + codeItem.SourceText = preamble; + + // Add the global "window" item + IVsaGlobalItem globalItem = (IVsaGlobalItem) items.CreateItem("window", VsaItemType.AppGlobal, VsaItemFlag.None); + globalItem.TypeString = "SharpVectors.Scripting.IScriptableSvgWindow"; + globalItem.ExposeMembers = true; + } - refItem.AssemblyName = assemName; - } + public override void Close() + { + engine.Close(); + } - // Load the preamble code - string preamble = @" -import System.Xml; -function alert(msg : String) : void { window.alert(msg); } -function printNode(node : XmlNode) : String { return window.PrintNode(node); } -"; - IVsaCodeItem codeItem = (IVsaCodeItem)items.CreateItem("Preamble", VsaItemType.Code, VsaItemFlag.None); - codeItem.SourceText = preamble; + public override void Execute(string code) + { + try + { + if (engine.IsRunning) + { + engine.Reset(); } - #endregion - #region Public Methods - public override void Execute(string code) + // Load the script code + IVsaCodeItem codeItem = (IVsaCodeItem) items.CreateItem("Script", VsaItemType.Code, VsaItemFlag.None); + codeItem.SourceText = code; + + // compile and run + if (engine.Compile()) { - // Load the script code - IVsaCodeItem codeItem = (IVsaCodeItem) items.CreateItem("Script", VsaItemType.Code, VsaItemFlag.None); - codeItem.SourceText = code; + engine.Run(); + } + } + catch (Exception e) + { + MessageBox.Show(e.Message + "\n" + e.StackTrace + "\n" + e.ToString()); + } + } - // Add the global "window" item - IVsaGlobalItem globalItem = (IVsaGlobalItem) items.CreateItem("window", VsaItemType.AppGlobal, VsaItemFlag.None); - globalItem.TypeString = "SharpVectors.Dom.Svg.SvgWindow"; + private ScriptFunction evaluateFunction = null; + public ScriptFunction EvaluateFunction + { + get + { + return evaluateFunction; + } + set + { + evaluateFunction = value; + } + } - // compile and run - engine.Compile(); - engine.Run(); - } - #endregion + public object Evaluate(string code, object @event) + { + if (evaluateFunction == null) + return null; + Object[] args = new Object[2]; + args[0] = code; + args[1] = ScriptableObject.CreateWrapper(@event); + return evaluateFunction.Invoke(evaluateFunction.GetParent(), args); + } + #endregion - #region Private Methods - private void showTypeInfo() + #region Private Methods + private void showTypeInfo() + { + if ( engine.IsRunning ) + { + // show types + System.Type[] types = engine.Assembly.GetTypes(); + StringBuilder typeNames = new StringBuilder(); + foreach ( Type type in types ) { - if ( engine.IsRunning ) + typeNames.Append(type.FullName); + typeNames.Append("\n"); + MethodInfo[] methods = type.GetMethods(); + foreach ( MethodInfo method in methods ) + { + typeNames.Append(" "); + typeNames.Append(method.Name); + typeNames.Append("("); + foreach ( ParameterInfo param in method.GetParameters() ) { - // show types - System.Type[] types = engine.Assembly.GetTypes(); - StringBuilder typeNames = new StringBuilder(); - foreach ( Type type in types ) - { - typeNames.Append(type.FullName); - typeNames.Append("\n"); - MethodInfo[] methods = type.GetMethods(); - foreach ( MethodInfo method in methods ) - { - typeNames.Append(" "); - typeNames.Append(method.Name); - typeNames.Append("("); - foreach ( ParameterInfo param in method.GetParameters() ) - { - typeNames.Append(" "); - typeNames.Append(param.ParameterType.Name); - } - typeNames.Append(" )\n"); - } - } - MessageBox.Show(typeNames.ToString()); + typeNames.Append(" "); + typeNames.Append(param.ParameterType.Name); } + typeNames.Append(" )\n"); + } } - #endregion - } + MessageBox.Show(typeNames.ToString()); + } + } + #endregion + } } |