Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/27/14 14:13:02 (10 years ago)
Author:
jkarder
Message:

#2136:

  • renamed some HLScript files
  • fixed a bug where variables could be renamed while a script was running
  • the complete source code is now always visible
  • removed "show generated code" feature
Location:
trunk/sources/HeuristicLab.HLScript/3.3
Files:
1 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.HLScript/3.3/HeuristicLab.HLScript-3.3.csproj

    r10391 r10401  
    8787    <Compile Include="VariableStore.cs" />
    8888    <None Include="Plugin.cs.frame" />
    89     <Compile Include="HLScript.cs" />
    90     <Compile Include="HLScriptGeneration.cs" />
     89    <Compile Include="Script.cs" />
     90    <Compile Include="UserScriptBase.cs" />
    9191    <Compile Include="Plugin.cs" />
    9292    <Compile Include="Properties\AssemblyInfo.cs" />
  • trunk/sources/HeuristicLab.HLScript/3.3/Script.cs

    r10400 r10401  
    1717
    1818namespace HeuristicLab.HLScript {
    19   [Item("HL Script", "A HeuristicLab script.")]
     19  [Item("Script", "A HeuristicLab script.")]
    2020  [Creatable("Scripts")]
    2121  [StorableClass]
    22   public sealed class HLScript : NamedItem, IStorableContent {
     22  public sealed class Script : NamedItem, IStorableContent {
    2323    #region Constants
    24     private const string ScriptNamespaceName = "HeuristicLab.HLScript";
    2524    private const string ExecuteMethodName = "Execute";
    2625    private const string CodeTemplate =
     
    2928using System;
    3029
    31 public override void Main() {
    32   // type your code here
    33 }
    34 
    35 // further classes and methods";
     30namespace UserScripts {
     31  public class UserScript : HeuristicLab.HLScript.UserScriptBase {
     32    public override void Main() {
     33      // type your code here
     34    }
     35
     36    // further classes and methods
     37
     38  }
     39}";
    3640    #endregion
    3741
    3842    #region Fields & Properties
    39     private HLScriptGeneration compiledHLScript;
     43    private UserScriptBase compiledScript;
    4044
    4145    public string Filename { get; set; }
     
    5862        if (value == code) return;
    5963        code = value;
    60         compiledHLScript = null;
     64        compiledScript = null;
    6165        OnCodeChanged();
    6266      }
     
    8084    #region Construction & Initialization
    8185    [StorableConstructor]
    82     private HLScript(bool deserializing) : base(deserializing) { }
    83     private HLScript(HLScript original, Cloner cloner)
     86    private Script(bool deserializing) : base(deserializing) { }
     87    private Script(Script original, Cloner cloner)
    8488      : base(original, cloner) {
    8589      code = original.code;
     
    9094    }
    9195
    92     public HLScript()
    93       : base("HL Script", "A HeuristicLab script.") {
     96    public Script()
     97      : base("Script", "A HeuristicLab script.") {
    9498      code = CodeTemplate;
    9599      variableStore = new VariableStore();
     
    97101
    98102    public override IDeepCloneable Clone(Cloner cloner) {
    99       return new HLScript(this, cloner);
     103      return new Script(this, cloner);
    100104    }
    101105    #endregion
    102106
    103107    private void RegisterScriptEvents() {
    104       if (compiledHLScript == null) return;
    105       compiledHLScript.ConsoleOutputChanged += compiledHLScript_ConsoleOutputChanged;
     108      if (compiledScript == null) return;
     109      compiledScript.ConsoleOutputChanged += compiledScript_ConsoleOutputChanged;
    106110    }
    107111
    108112    private void DeregisterScriptEvents() {
    109       if (compiledHLScript == null) return;
    110       compiledHLScript.ConsoleOutputChanged -= compiledHLScript_ConsoleOutputChanged;
     113      if (compiledScript == null) return;
     114      compiledScript.ConsoleOutputChanged -= compiledScript_ConsoleOutputChanged;
    111115    }
    112116
     
    143147    public void Compile() {
    144148      var results = DoCompile();
    145       compiledHLScript = null;
     149      compiledScript = null;
    146150      CompileErrors = results.Errors;
    147151      if (results.Errors.HasErrors) {
     
    160164        var types = assembly.GetTypes();
    161165        DeregisterScriptEvents();
    162         compiledHLScript = (HLScriptGeneration)Activator.CreateInstance(types[0]);
     166        compiledScript = (UserScriptBase)Activator.CreateInstance(types[0]);
    163167        RegisterScriptEvents();
    164168      }
     
    181185    }
    182186
    183     private readonly Regex LineSplitter = new Regex(@"\r\n|\r|\n");
    184187    private readonly Regex SafeTypeNameCharRegex = new Regex("[_a-zA-Z0-9]+");
    185188    private readonly Regex SafeTypeNameRegex = new Regex("[_a-zA-Z][_a-zA-Z0-9]*");
    186     private readonly Regex NamespaceDeclarationRegex = new Regex(@"using\s+(@?[a-z_A-Z]\w+(?:\s*\.\s*@?[a-z_A-Z]\w*)*)\s*;");
    187     private readonly Regex NamespaceRegex = new Regex(@"(@?[a-z_A-Z]\w+(?:\s*\.\s*@?[a-z_A-Z]\w*)*)");
    188     private readonly Regex CommentRegex = new Regex(@"((/\*)[^/]+(\*/))|(//.*)");
    189189
    190190    private CodeCompileUnit CreateCompilationUnit() {
    191       var ns = new CodeNamespace(ScriptNamespaceName);
    192       ns.Types.Add(CreateScriptClass());
    193       ns.Imports.AddRange(
    194         GetNamespaces()
    195         .Select(n => new CodeNamespaceImport(n))
    196         .ToArray());
    197       var unit = new CodeCompileUnit();
    198       unit.Namespaces.Add(ns);
     191      var unit = new CodeSnippetCompileUnit(code);
    199192      return unit;
    200     }
    201 
    202     private IEnumerable<string> GetNamespaces() {
    203       var strings = NamespaceDeclarationRegex.Matches(CommentRegex.Replace(code, string.Empty))
    204                                              .Cast<Match>()
    205                                              .Select(m => m.Value);
    206       foreach (var s in strings) {
    207         var match = NamespaceRegex.Match(s.Replace("using", string.Empty));
    208         yield return match.Value;
    209       }
    210     }
    211 
    212     private IEnumerable<string> GetCodeLines() {
    213       var lines = LineSplitter.Split(code);
    214       foreach (var line in lines) {
    215         string trimmedLine = line.Trim();
    216         if (!NamespaceDeclarationRegex.IsMatch(trimmedLine))
    217           yield return trimmedLine;
    218       }
    219193    }
    220194
     
    230204      }
    231205    }
    232 
    233     private CodeTypeDeclaration CreateScriptClass() {
    234       var typeDecl = new CodeTypeDeclaration(CompiledTypeName) {
    235         IsClass = true,
    236         TypeAttributes = TypeAttributes.Public,
    237       };
    238       typeDecl.BaseTypes.Add(typeof(HLScriptGeneration));
    239       typeDecl.Members.Add(new CodeSnippetTypeMember(string.Join(Environment.NewLine, GetCodeLines())));
    240       return typeDecl;
    241     }
    242206    #endregion
    243207
    244208    private Thread scriptThread;
    245209    public void Execute() {
    246       if (compiledHLScript == null) return;
    247       var executeMethod = typeof(HLScriptGeneration).GetMethod(ExecuteMethodName, BindingFlags.NonPublic | BindingFlags.Instance);
     210      if (compiledScript == null) return;
     211      var executeMethod = typeof(UserScriptBase).GetMethod(ExecuteMethodName, BindingFlags.NonPublic | BindingFlags.Instance);
    248212      if (executeMethod != null) {
    249213        scriptThread = new Thread(() => {
    250214          try {
    251215            OnScriptExecutionStarted();
    252             executeMethod.Invoke(compiledHLScript, new[] { VariableStore });
     216            executeMethod.Invoke(compiledScript, new[] { VariableStore });
    253217          } finally {
    254218            OnScriptExecutionFinished();
     
    264228    }
    265229
    266     private void compiledHLScript_ConsoleOutputChanged(object sender, EventArgs<string> e) {
     230    private void compiledScript_ConsoleOutputChanged(object sender, EventArgs<string> e) {
    267231      OnConsoleOutputChanged(e.Value);
    268232    }
  • trunk/sources/HeuristicLab.HLScript/3.3/UserScriptBase.cs

    r10400 r10401  
    77
    88namespace HeuristicLab.HLScript {
    9   public abstract class HLScriptGeneration {
     9  public abstract class UserScriptBase {
    1010    protected dynamic vars;
    1111
     
    1515    }
    1616
    17     protected HLScriptGeneration() {
     17    protected UserScriptBase() {
    1818      console = new EventWriter(this);
    1919    }
     
    5656
    5757    protected class EventWriter : TextWriter {
    58       private readonly HLScriptGeneration hlsg;
     58      private readonly UserScriptBase usb;
    5959
    60       public EventWriter(HLScriptGeneration hlsg) {
    61         this.hlsg = hlsg;
     60      public EventWriter(UserScriptBase usb) {
     61        this.usb = usb;
    6262      }
    6363
     
    6868      #region Write/WriteLine Overrides
    6969      #region Write
    70       public override void Write(bool value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
    71       public override void Write(char value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
    72       public override void Write(char[] buffer) { hlsg.OnConsoleOutputChanged(new string(buffer)); }
    73       public override void Write(char[] buffer, int index, int count) { hlsg.OnConsoleOutputChanged(new string(buffer, index, count)); }
    74       public override void Write(decimal value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
    75       public override void Write(double value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
    76       public override void Write(float value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
    77       public override void Write(int value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
    78       public override void Write(long value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
    79       public override void Write(object value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
    80       public override void Write(string value) { hlsg.OnConsoleOutputChanged(value); }
    81       public override void Write(string format, object arg0) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0)); }
    82       public override void Write(string format, object arg0, object arg1) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0, arg0)); }
    83       public override void Write(string format, object arg0, object arg1, object arg2) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2)); }
    84       public override void Write(string format, params object[] arg) { hlsg.OnConsoleOutputChanged(string.Format(format, arg)); }
    85       public override void Write(uint value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
    86       public override void Write(ulong value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
     70      public override void Write(bool value) { usb.OnConsoleOutputChanged(value.ToString()); }
     71      public override void Write(char value) { usb.OnConsoleOutputChanged(value.ToString()); }
     72      public override void Write(char[] buffer) { usb.OnConsoleOutputChanged(new string(buffer)); }
     73      public override void Write(char[] buffer, int index, int count) { usb.OnConsoleOutputChanged(new string(buffer, index, count)); }
     74      public override void Write(decimal value) { usb.OnConsoleOutputChanged(value.ToString()); }
     75      public override void Write(double value) { usb.OnConsoleOutputChanged(value.ToString()); }
     76      public override void Write(float value) { usb.OnConsoleOutputChanged(value.ToString()); }
     77      public override void Write(int value) { usb.OnConsoleOutputChanged(value.ToString()); }
     78      public override void Write(long value) { usb.OnConsoleOutputChanged(value.ToString()); }
     79      public override void Write(object value) { usb.OnConsoleOutputChanged(value.ToString()); }
     80      public override void Write(string value) { usb.OnConsoleOutputChanged(value); }
     81      public override void Write(string format, object arg0) { usb.OnConsoleOutputChanged(string.Format(format, arg0)); }
     82      public override void Write(string format, object arg0, object arg1) { usb.OnConsoleOutputChanged(string.Format(format, arg0, arg0)); }
     83      public override void Write(string format, object arg0, object arg1, object arg2) { usb.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2)); }
     84      public override void Write(string format, params object[] arg) { usb.OnConsoleOutputChanged(string.Format(format, arg)); }
     85      public override void Write(uint value) { usb.OnConsoleOutputChanged(value.ToString()); }
     86      public override void Write(ulong value) { usb.OnConsoleOutputChanged(value.ToString()); }
    8787      #endregion
    8888
    8989      #region WriteLine
    90       public override void WriteLine() { hlsg.OnConsoleOutputChanged(Environment.NewLine); }
    91       public override void WriteLine(bool value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    92       public override void WriteLine(char value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    93       public override void WriteLine(char[] buffer) { hlsg.OnConsoleOutputChanged(new string(buffer) + Environment.NewLine); }
    94       public override void WriteLine(char[] buffer, int index, int count) { hlsg.OnConsoleOutputChanged(new string(buffer, index, count) + Environment.NewLine); }
    95       public override void WriteLine(decimal value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    96       public override void WriteLine(double value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    97       public override void WriteLine(float value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    98       public override void WriteLine(int value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    99       public override void WriteLine(long value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    100       public override void WriteLine(object value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    101       public override void WriteLine(string value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    102       public override void WriteLine(string format, object arg0) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0) + Environment.NewLine); }
    103       public override void WriteLine(string format, object arg0, object arg1) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0, arg1) + Environment.NewLine); }
    104       public override void WriteLine(string format, object arg0, object arg1, object arg2) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2) + Environment.NewLine); }
    105       public override void WriteLine(string format, params object[] arg) { hlsg.OnConsoleOutputChanged(string.Format(format, arg) + Environment.NewLine); }
    106       public override void WriteLine(uint value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
    107       public override void WriteLine(ulong value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
     90      public override void WriteLine() { usb.OnConsoleOutputChanged(Environment.NewLine); }
     91      public override void WriteLine(bool value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     92      public override void WriteLine(char value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     93      public override void WriteLine(char[] buffer) { usb.OnConsoleOutputChanged(new string(buffer) + Environment.NewLine); }
     94      public override void WriteLine(char[] buffer, int index, int count) { usb.OnConsoleOutputChanged(new string(buffer, index, count) + Environment.NewLine); }
     95      public override void WriteLine(decimal value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     96      public override void WriteLine(double value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     97      public override void WriteLine(float value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     98      public override void WriteLine(int value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     99      public override void WriteLine(long value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     100      public override void WriteLine(object value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     101      public override void WriteLine(string value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     102      public override void WriteLine(string format, object arg0) { usb.OnConsoleOutputChanged(string.Format(format, arg0) + Environment.NewLine); }
     103      public override void WriteLine(string format, object arg0, object arg1) { usb.OnConsoleOutputChanged(string.Format(format, arg0, arg1) + Environment.NewLine); }
     104      public override void WriteLine(string format, object arg0, object arg1, object arg2) { usb.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2) + Environment.NewLine); }
     105      public override void WriteLine(string format, params object[] arg) { usb.OnConsoleOutputChanged(string.Format(format, arg) + Environment.NewLine); }
     106      public override void WriteLine(uint value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
     107      public override void WriteLine(ulong value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }
    108108      #endregion
    109109      #endregion
Note: See TracChangeset for help on using the changeset viewer.