From ff4090d1092ca58ae597a5329069e5297c9bee3a Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Mon, 8 Sep 2025 10:13:10 +0100 Subject: [PATCH] Add support for LuaScript bindings to optionally have UTF-8 string encoding. #887 --- Helios/HeliosBinding.cs | 17 ++++++++++- Helios/HeliosSerializer.cs | 9 +++++- Profile Editor/BindingsPanel.xaml | 51 +++++++++++++++++++++++-------- 3 files changed, 63 insertions(+), 14 deletions(-) diff --git a/Helios/HeliosBinding.cs b/Helios/HeliosBinding.cs index a928b7551..316180b99 100644 --- a/Helios/HeliosBinding.cs +++ b/Helios/HeliosBinding.cs @@ -19,6 +19,7 @@ namespace GadrocsWorkshop.Helios using NLua; using NLua.Exceptions; using System; + using System.Text; /// /// A binding from a source trigger to a target action @@ -33,6 +34,7 @@ public class HeliosBinding : NotificationObject, INamedBindingElement private WeakReference _triggerSource = new WeakReference(null); private WeakReference _targetAction = new WeakReference(null); private bool _bypassTargetTriggers; + private bool _luaScriptUTF8Encoding = false; private BindingValueSources _valueSource; private BindingValue _value = BindingValue.Empty; private string _condition = ""; @@ -263,7 +265,19 @@ public bool BypassCascadingTriggers } } } - + public bool LuaScriptUTF8Encoding + { + get => _luaScriptUTF8Encoding; + set + { + if (!_luaScriptUTF8Encoding.Equals(value)) + { + bool oldValue = _luaScriptUTF8Encoding; + _luaScriptUTF8Encoding = value; + OnPropertyChanged("LuaScriptUTF8Encoding", oldValue, value, true); + } + } + } private Lua LuaInterpreter { get @@ -271,6 +285,7 @@ private Lua LuaInterpreter if (_luaInterpreter == null) { _luaInterpreter = new Lua(); + _luaInterpreter.State.Encoding = _luaScriptUTF8Encoding ? Encoding.UTF8 : Encoding.ASCII; // add lua environment variables _luaInterpreter.DoString("HeliosPath = " + "'" + ConfigManager.DocumentPath.Replace("\\", "\\\\") + "'"); diff --git a/Helios/HeliosSerializer.cs b/Helios/HeliosSerializer.cs index 693bcf95a..1a24a1c3d 100644 --- a/Helios/HeliosSerializer.cs +++ b/Helios/HeliosSerializer.cs @@ -276,7 +276,10 @@ public void SerializeBinding(HeliosBinding binding, XmlWriter xmlWriter) xmlWriter.WriteStartElement("Binding"); xmlWriter.WriteAttributeString("BypassCascadingTriggers", boolConverter.ConvertToInvariantString(binding.BypassCascadingTriggers)); - + if (binding.LuaScriptUTF8Encoding) + { + xmlWriter.WriteAttributeString("LuaScriptUTF8Encoding", boolConverter.ConvertToInvariantString(binding.LuaScriptUTF8Encoding)); + } xmlWriter.WriteStartElement("Trigger"); xmlWriter.WriteAttributeString("Source", GetReferenceName(binding.Trigger.Source)); xmlWriter.WriteAttributeString("Name", binding.Trigger.TriggerID); @@ -356,6 +359,10 @@ private HeliosBinding DeserializeBinding(HeliosProfile profile, HeliosVisual roo HeliosBinding binding = (HeliosBinding)CreateNewObject("Binding", ""); binding.BypassCascadingTriggers = (bool)boolConverter.ConvertFromString(null, CultureInfo.InvariantCulture, xmlReader.GetAttribute("BypassCascadingTriggers")); + if(xmlReader.GetAttribute("LuaScriptUTF8Encoding") != null) + { + binding.LuaScriptUTF8Encoding = (bool)boolConverter.ConvertFromString(null, CultureInfo.InvariantCulture, xmlReader.GetAttribute("LuaScriptUTF8Encoding")); + } xmlReader.ReadStartElement("Binding"); string sourcePath = xmlReader.GetAttribute("Source"); diff --git a/Profile Editor/BindingsPanel.xaml b/Profile Editor/BindingsPanel.xaml index e8841ba58..513ccb3eb 100644 --- a/Profile Editor/BindingsPanel.xaml +++ b/Profile Editor/BindingsPanel.xaml @@ -9,7 +9,7 @@ d:DesignHeight="300" d:DesignWidth="600" Background="{StaticResource ToolBackground}"> - + - + - - - + - + - + @@ -94,7 +94,7 @@ - + @@ -117,7 +117,7 @@ - + Value Source @@ -305,14 +305,41 @@ Other Global Variables: + + Bypass Cascading Triggers When checked any triggers which would normally occur because of this action are surpressed. - Conditional Expression - - If this LUA script returns false then this binding will abort without executing the action. + + + + + + + + + + + + + + + Use UTF-8 + When checked strings in the LuaScript interpreter will be UTF-8 encoded. + + + Conditional Expression + + If this LUA script returns false then this binding will abort without executing the action.