From 683464ed2da8a50b2b1c296c7612efd8c5c640da Mon Sep 17 00:00:00 2001 From: Soreepeong Date: Fri, 8 Dec 2023 23:37:41 +0900 Subject: [PATCH] Fix normalization buffer offsetting --- .../Internal/ImGuiClipboardConfig.cs | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/Dalamud/Interface/Internal/ImGuiClipboardConfig.cs b/Dalamud/Interface/Internal/ImGuiClipboardConfig.cs index db47d9734..286f58a81 100644 --- a/Dalamud/Interface/Internal/ImGuiClipboardConfig.cs +++ b/Dalamud/Interface/Internal/ImGuiClipboardConfig.cs @@ -206,23 +206,40 @@ internal sealed unsafe class ImGuiClipboardConfig : IServiceType, IDisposable case >= 0xD800 and <= 0xDBFF: // UTF-16 surrogate; does not support // Replace with \uFFFD in UTF-8: EF BF BD buf[i++] = 0xEF; - buf.Insert(i++, 0xBF); - buf.Insert(i++, 0xBD); + + if (cb >= 2) + buf[i++] = 0xBF; + else + buf.Insert(i++, 0xBF); + + if (cb >= 3) + buf[i++] = 0xBD; + else + buf.Insert(i++, 0xBD); + + if (cb >= 4) + buf.RemoveAt(i); break; // See String.Manipulation.cs: IndexOfNewlineChar. case '\r': // CR; Carriage Return case '\n': // LF; Line Feed case '\f': // FF; Form Feed - buf[i++] = 0x0D; - buf.Insert(i++, 0x0A); - break; - case '\u0085': // NEL; Next Line case '\u2028': // LS; Line Separator case '\u2029': // PS; Paragraph Separator buf[i++] = 0x0D; - buf[i++] = 0x0A; + + if (cb >= 2) + buf[i++] = 0x0A; + else + buf.Insert(i++, 0x0A); + + if (cb >= 3) + buf.RemoveAt(i); + + if (cb >= 4) + buf.RemoveAt(i); break; default: