diff --git a/Dalamud/Game/Text/Evaluator/SeStringEvaluator.cs b/Dalamud/Game/Text/Evaluator/SeStringEvaluator.cs index 47c4b5899..6c768cfa1 100644 --- a/Dalamud/Game/Text/Evaluator/SeStringEvaluator.cs +++ b/Dalamud/Game/Text/Evaluator/SeStringEvaluator.cs @@ -1744,7 +1744,7 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator return false; case TextParameterType.String: - this.EvaluateAndAppendTo(builder, p.StringValue.AsReadOnlySeStringSpan(), null, language); + this.EvaluateAndAppendTo(builder, p.StringValue.AsSpan(), null, language); return false; case TextParameterType.Uninitialized: diff --git a/Dalamud/Utility/CStringExtensions.cs b/Dalamud/Utility/CStringExtensions.cs index a1848c512..f025ee85c 100644 --- a/Dalamud/Utility/CStringExtensions.cs +++ b/Dalamud/Utility/CStringExtensions.cs @@ -1,4 +1,6 @@ -using InteropGenerator.Runtime; +using Dalamud.Game.Text.SeStringHandling; + +using InteropGenerator.Runtime; using Lumina.Text.ReadOnly; @@ -7,6 +9,9 @@ namespace Dalamud.Utility; /// /// A set of helpful utilities for working with s from ClientStructs. /// +/// +/// WARNING: Will break if a custom ClientStructs is used. These are here for CONVENIENCE ONLY! +/// public static class CStringExtensions { /// @@ -14,11 +19,34 @@ public static class CStringExtensions /// /// The pointer to convert. /// A span. - public static unsafe ReadOnlySeStringSpan AsReadOnlySeStringSpan(this CStringPointer ptr) + public static ReadOnlySeStringSpan AsReadOnlySeStringSpan(this CStringPointer ptr) { return ptr.AsSpan(); } + /// + /// Convert a CStringPointer to a Dalamud SeString. + /// + /// The pointer to convert. + /// A Dalamud-flavored SeString. + public static SeString AsDalamudSeString(this CStringPointer ptr) + { + return ptr.AsReadOnlySeStringSpan().ToDalamudString(); + } + + /// + /// Get a new SeString that's a copy of the text in this CStringPointer. + /// + /// The pointer to copy. + /// A new Lumina SeString. + public static Lumina.Text.SeString AsLuminaSeString(this CStringPointer ptr) + { + var ssb = new Lumina.Text.SeStringBuilder(); + ssb.Append(ptr.AsSpan()); + + return ssb.ToSeString(); + } + /// /// Extract text from this CStringPointer following 's rules. Only /// useful for SeStrings.