From c275c25d0a9904cdae8d3ba741de7be0db5c923c Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Fri, 4 Dec 2020 23:43:10 -0500 Subject: [PATCH] initial scaffolding for programmatic scripting support (e.g. via XML) --- MBS.Framework/MBS.Framework.csproj | 7 +++ MBS.Framework/Scripting/ScriptEnvironment.cs | 8 +++ .../Scripting/Strings/ScriptableString.cs | 54 +++++++++++++++++++ .../Scripting/Strings/StringComponent.cs | 16 ++++++ .../ConditionalStringComponent.cs | 10 ++++ .../LiteralStringComponent.cs | 27 ++++++++++ 6 files changed, 122 insertions(+) create mode 100644 MBS.Framework/Scripting/ScriptEnvironment.cs create mode 100644 MBS.Framework/Scripting/Strings/ScriptableString.cs create mode 100644 MBS.Framework/Scripting/Strings/StringComponent.cs create mode 100644 MBS.Framework/Scripting/Strings/StringComponents/ConditionalStringComponent.cs create mode 100644 MBS.Framework/Scripting/Strings/StringComponents/LiteralStringComponent.cs diff --git a/MBS.Framework/MBS.Framework.csproj b/MBS.Framework/MBS.Framework.csproj index 73ad8c1..61da8ad 100644 --- a/MBS.Framework/MBS.Framework.csproj +++ b/MBS.Framework/MBS.Framework.csproj @@ -86,6 +86,11 @@ + + + + + @@ -93,6 +98,8 @@ + + diff --git a/MBS.Framework/Scripting/ScriptEnvironment.cs b/MBS.Framework/Scripting/ScriptEnvironment.cs new file mode 100644 index 0000000..c5216be --- /dev/null +++ b/MBS.Framework/Scripting/ScriptEnvironment.cs @@ -0,0 +1,8 @@ +using System; +namespace MBS.Framework.Scripting +{ + public class ScriptEnvironment + { + + } +} diff --git a/MBS.Framework/Scripting/Strings/ScriptableString.cs b/MBS.Framework/Scripting/Strings/ScriptableString.cs new file mode 100644 index 0000000..0876f61 --- /dev/null +++ b/MBS.Framework/Scripting/Strings/ScriptableString.cs @@ -0,0 +1,54 @@ +using System; +using System.Text; + +namespace MBS.Framework.Scripting.Strings +{ + public class ScriptableString : ICloneable + { + public ScriptableString(StringComponent[] components = null) + { + if (components != null) + { + for (int i = 0; i < components.Length; i++) + { + Components.Add(components[i]); + } + } + } + + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < Components.Count; i++) + { + sb.Append(Components[i].ToString()); + if (i < Components.Count - 1) + sb.Append(' '); + } + return sb.ToString(); + } + public string ToString(ScriptEnvironment environment) + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < Components.Count; i++) + { + sb.Append(Components[i].ToString(environment)); + if (i < Components.Count - 1) + sb.Append(' '); + } + return sb.ToString(); + } + + public StringComponent.StringComponentCollection Components { get; } = new StringComponent.StringComponentCollection(); + + public object Clone() + { + ScriptableString clone = new ScriptableString(); + for (int i = 0; i < Components.Count; i++) + { + clone.Components.Add(Components[i].Clone() as StringComponent); + } + return clone; + } + } +} diff --git a/MBS.Framework/Scripting/Strings/StringComponent.cs b/MBS.Framework/Scripting/Strings/StringComponent.cs new file mode 100644 index 0000000..bdf3268 --- /dev/null +++ b/MBS.Framework/Scripting/Strings/StringComponent.cs @@ -0,0 +1,16 @@ +using System; + +namespace MBS.Framework.Scripting.Strings +{ + public abstract class StringComponent : ICloneable + { + public class StringComponentCollection + : System.Collections.ObjectModel.Collection + { + } + + public abstract string ToString(ScriptEnvironment environment); + + public abstract object Clone(); + } +} diff --git a/MBS.Framework/Scripting/Strings/StringComponents/ConditionalStringComponent.cs b/MBS.Framework/Scripting/Strings/StringComponents/ConditionalStringComponent.cs new file mode 100644 index 0000000..e93d2e1 --- /dev/null +++ b/MBS.Framework/Scripting/Strings/StringComponents/ConditionalStringComponent.cs @@ -0,0 +1,10 @@ +using System; +using MBS.Framework.Logic.Conditional; + +namespace MBS.Framework.Scripting.Strings.StringComponents +{ + public class ConditionalStringComponent + { + public IConditionalStatement Condition { get; } + } +} diff --git a/MBS.Framework/Scripting/Strings/StringComponents/LiteralStringComponent.cs b/MBS.Framework/Scripting/Strings/StringComponents/LiteralStringComponent.cs new file mode 100644 index 0000000..9a2b3fd --- /dev/null +++ b/MBS.Framework/Scripting/Strings/StringComponents/LiteralStringComponent.cs @@ -0,0 +1,27 @@ +using System; +namespace MBS.Framework.Scripting.Strings.StringComponents +{ + public class LiteralStringComponent : StringComponent + { + public string Value { get; set; } = null; + + public override string ToString(ScriptEnvironment environment) + { + return Value; + } + public override string ToString() + { + return String.Format("\"{0}\"", Value); + } + + public LiteralStringComponent(string value) + { + Value = value; + } + + public override object Clone() + { + return new LiteralStringComponent(Value?.Clone() as string); + } + } +}