Update Lumina and use MacroStringParser (#2033)

No longer requires hook and main thread requirements on compiling macro
strings.

Needs lookup table fixing on Lumina; using reflection to fix for the
time being.
This commit is contained in:
srkizer 2024-09-15 02:23:24 +09:00 committed by GitHub
parent 4b4227d127
commit 1f74293de4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 40 additions and 123 deletions

View file

@ -1,4 +1,4 @@
using Dalamud.Interface.ImGuiSeStringRenderer.Internal;
using Lumina.Text.Parse;
using DSeString = Dalamud.Game.Text.SeStringHandling.SeString;
using DSeStringBuilder = Dalamud.Game.Text.SeStringHandling.SeStringBuilder;
@ -24,44 +24,44 @@ public static class SeStringExtensions
/// <param name="ssb">Target SeString builder.</param>
/// <param name="macroString">Macro string in UTF-8 to compile and append to <paramref name="ssb"/>.</param>
/// <returns><c>this</c> for method chaining.</returns>
/// <remarks>Must be called from the main thread.</remarks>
public static LSeStringBuilder AppendMacroString(this LSeStringBuilder ssb, ReadOnlySpan<byte> macroString)
{
ThreadSafety.AssertMainThread();
return ssb.Append(Service<SeStringRenderer>.Get().Compile(macroString));
}
[Obsolete($"Use {nameof(LSeStringBuilder)}.{nameof(LSeStringBuilder.AppendMacroString)} directly instead.")]
[Api11ToDo("Remove")]
public static LSeStringBuilder AppendMacroString(this LSeStringBuilder ssb, ReadOnlySpan<byte> macroString) =>
ssb.AppendMacroString(macroString, new() { ExceptionMode = MacroStringParseExceptionMode.EmbedError });
/// <summary>Compiles and appends a macro string.</summary>
/// <param name="ssb">Target SeString builder.</param>
/// <param name="macroString">Macro string in UTF-16 to compile and append to <paramref name="ssb"/>.</param>
/// <returns><c>this</c> for method chaining.</returns>
/// <remarks>Must be called from the main thread.</remarks>
public static LSeStringBuilder AppendMacroString(this LSeStringBuilder ssb, ReadOnlySpan<char> macroString)
{
ThreadSafety.AssertMainThread();
return ssb.Append(Service<SeStringRenderer>.Get().Compile(macroString));
}
[Obsolete($"Use {nameof(LSeStringBuilder)}.{nameof(LSeStringBuilder.AppendMacroString)} directly instead.")]
[Api11ToDo("Remove")]
public static LSeStringBuilder AppendMacroString(this LSeStringBuilder ssb, ReadOnlySpan<char> macroString) =>
ssb.AppendMacroString(macroString, new() { ExceptionMode = MacroStringParseExceptionMode.EmbedError });
/// <summary>Compiles and appends a macro string.</summary>
/// <param name="ssb">Target SeString builder.</param>
/// <param name="macroString">Macro string in UTF-8 to compile and append to <paramref name="ssb"/>.</param>
/// <returns><c>this</c> for method chaining.</returns>
/// <remarks>Must be called from the main thread.</remarks>
public static DSeStringBuilder AppendMacroString(this DSeStringBuilder ssb, ReadOnlySpan<byte> macroString)
{
ThreadSafety.AssertMainThread();
return ssb.Append(DSeString.Parse(Service<SeStringRenderer>.Get().Compile(macroString)));
var lssb = LSeStringBuilder.SharedPool.Get();
lssb.AppendMacroString(macroString, new() { ExceptionMode = MacroStringParseExceptionMode.EmbedError });
ssb.Append(DSeString.Parse(lssb.ToReadOnlySeString().Data.Span));
LSeStringBuilder.SharedPool.Return(lssb);
return ssb;
}
/// <summary>Compiles and appends a macro string.</summary>
/// <param name="ssb">Target SeString builder.</param>
/// <param name="macroString">Macro string in UTF-16 to compile and append to <paramref name="ssb"/>.</param>
/// <returns><c>this</c> for method chaining.</returns>
/// <remarks>Must be called from the main thread.</remarks>
public static DSeStringBuilder AppendMacroString(this DSeStringBuilder ssb, ReadOnlySpan<char> macroString)
{
ThreadSafety.AssertMainThread();
return ssb.Append(DSeString.Parse(Service<SeStringRenderer>.Get().Compile(macroString)));
var lssb = LSeStringBuilder.SharedPool.Get();
lssb.AppendMacroString(macroString, new() { ExceptionMode = MacroStringParseExceptionMode.EmbedError });
ssb.Append(DSeString.Parse(lssb.ToReadOnlySeString().Data.Span));
LSeStringBuilder.SharedPool.Return(lssb);
return ssb;
}
/// <summary>