mirror of
https://github.com/goatcorp/Dalamud.git
synced 2026-02-18 22:07:44 +01:00
refactor: Dalamud.Game.Chat => Dalamud.Game.Text, move Sanitizer
This commit is contained in:
parent
7996b64827
commit
3decb57b2c
38 changed files with 141 additions and 140 deletions
|
|
@ -7,9 +7,9 @@ using System.Text;
|
|||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using CheapLoc;
|
||||
using Dalamud.Game.Chat;
|
||||
using Dalamud.Game.Chat.SeStringHandling;
|
||||
using Dalamud.Game.Chat.SeStringHandling.Payloads;
|
||||
using Dalamud.Game.Text;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Dalamud.Game.Internal.Libc;
|
||||
using Dalamud.Interface;
|
||||
using Dalamud.Plugin;
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text.RegularExpressions;
|
||||
using Dalamud.Game.Chat;
|
||||
using Dalamud.Game.Chat.SeStringHandling;
|
||||
using Dalamud.Game.Text;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Game.Internal.Libc;
|
||||
using Serilog;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using Dalamud.Game.Chat;
|
||||
using Dalamud.Game.Chat.SeStringHandling;
|
||||
using Dalamud.Game.Chat.SeStringHandling.Payloads;
|
||||
using Dalamud.Game.Text;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Dalamud.Game.Internal.Libc;
|
||||
using Dalamud.Hooking;
|
||||
using Serilog;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using Dalamud.Game.Chat.SeStringHandling.Payloads;
|
||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Dalamud.Hooking;
|
||||
using ImGuiNET;
|
||||
using Serilog;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using Dalamud.Data;
|
||||
using Dalamud.Game.Chat.SeStringHandling;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
|
||||
namespace Dalamud.Game.Internal.Gui.Structs {
|
||||
|
|
|
|||
40
Dalamud/Game/Text/Sanitizer/ISanitizer.cs
Normal file
40
Dalamud/Game/Text/Sanitizer/ISanitizer.cs
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace Dalamud.Game.Text.Sanitizer
|
||||
{
|
||||
/// <summary>
|
||||
/// Sanitize strings to remove soft hyphens and other special characters.
|
||||
/// </summary>
|
||||
public interface ISanitizer
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a sanitized string using current clientLanguage.
|
||||
/// </summary>
|
||||
/// <param name="unsanitizedString">An unsanitized string to sanitize.</param>
|
||||
/// <returns>A sanitized string.</returns>
|
||||
string Sanitize(string unsanitizedString);
|
||||
|
||||
/// <summary>
|
||||
/// Creates a sanitized string using request clientLanguage.
|
||||
/// </summary>
|
||||
/// <param name="unsanitizedString">An unsanitized string to sanitize.</param>
|
||||
/// <param name="clientLanguage">Target language for sanitized strings.</param>
|
||||
/// <returns>A sanitized string.</returns>
|
||||
string Sanitize(string unsanitizedString, ClientLanguage clientLanguage);
|
||||
|
||||
/// <summary>
|
||||
/// Creates a list of sanitized strings using current clientLanguage.
|
||||
/// </summary>
|
||||
/// <param name="unsanitizedStrings">List of unsanitized string to sanitize.</param>
|
||||
/// <returns>A list of sanitized strings.</returns>
|
||||
IEnumerable<string> Sanitize(IEnumerable<string> unsanitizedStrings);
|
||||
|
||||
/// <summary>
|
||||
/// Creates a list of sanitized strings using requested clientLanguage.
|
||||
/// </summary>
|
||||
/// <param name="unsanitizedStrings">List of unsanitized string to sanitize.</param>
|
||||
/// <param name="clientLanguage">Target language for sanitized strings.</param>
|
||||
/// <returns>A list of sanitized strings.</returns>
|
||||
IEnumerable<string> Sanitize(IEnumerable<string> unsanitizedStrings, ClientLanguage clientLanguage);
|
||||
}
|
||||
}
|
||||
131
Dalamud/Game/Text/Sanitizer/Sanitizer.cs
Normal file
131
Dalamud/Game/Text/Sanitizer/Sanitizer.cs
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Dalamud.Game.Text.Sanitizer
|
||||
{
|
||||
/// <summary>
|
||||
/// Sanitize strings to remove soft hyphens and other special characters.
|
||||
/// </summary>
|
||||
public class Sanitizer : ISanitizer
|
||||
{
|
||||
private static readonly Dictionary<string, string> DESanitizationDict = new Dictionary<string, string>
|
||||
{
|
||||
{ "\u0020\u2020", string.Empty }, // dagger
|
||||
};
|
||||
|
||||
private static readonly Dictionary<string, string> FRSanitizationDict = new Dictionary<string, string>
|
||||
{
|
||||
{ "\u0153", "\u006F\u0065" }, // ligature oe
|
||||
};
|
||||
|
||||
private readonly ClientLanguage defaultClientLanguage;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Sanitizer"/> class.
|
||||
/// </summary>
|
||||
/// <param name="defaultClientLanguage">Default clientLanguage for sanitizing strings.</param>
|
||||
public Sanitizer(ClientLanguage defaultClientLanguage)
|
||||
{
|
||||
this.defaultClientLanguage = defaultClientLanguage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a sanitized string using current clientLanguage.
|
||||
/// </summary>
|
||||
/// <param name="unsanitizedString">An unsanitized string to sanitize.</param>
|
||||
/// <returns>A sanitized string.</returns>
|
||||
public string Sanitize(string unsanitizedString)
|
||||
{
|
||||
return SanitizeByLanguage(unsanitizedString, this.defaultClientLanguage);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a sanitized string using request clientLanguage.
|
||||
/// </summary>
|
||||
/// <param name="unsanitizedString">An unsanitized string to sanitize.</param>
|
||||
/// <param name="clientLanguage">Target language for sanitized strings.</param>
|
||||
/// <returns>A sanitized string.</returns>
|
||||
public string Sanitize(string unsanitizedString, ClientLanguage clientLanguage)
|
||||
{
|
||||
return SanitizeByLanguage(unsanitizedString, clientLanguage);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a list of sanitized strings using current clientLanguage.
|
||||
/// </summary>
|
||||
/// <param name="unsanitizedStrings">List of unsanitized string to sanitize.</param>
|
||||
/// <returns>A list of sanitized strings.</returns>
|
||||
public IEnumerable<string> Sanitize(IEnumerable<string> unsanitizedStrings)
|
||||
{
|
||||
return SanitizeByLanguage(unsanitizedStrings, this.defaultClientLanguage);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a list of sanitized strings using requested clientLanguage.
|
||||
/// </summary>
|
||||
/// <param name="unsanitizedStrings">List of unsanitized string to sanitize.</param>
|
||||
/// <param name="clientLanguage">Target language for sanitized strings.</param>
|
||||
/// <returns>A list of sanitized strings.</returns>
|
||||
public IEnumerable<string> Sanitize(IEnumerable<string> unsanitizedStrings, ClientLanguage clientLanguage)
|
||||
{
|
||||
return SanitizeByLanguage(unsanitizedStrings, clientLanguage);
|
||||
}
|
||||
|
||||
private static string SanitizeByLanguage(string unsanitizedString, ClientLanguage clientLanguage)
|
||||
{
|
||||
var sanitizedString = FilterUnprintableCharacters(unsanitizedString);
|
||||
switch (clientLanguage)
|
||||
{
|
||||
case ClientLanguage.Japanese:
|
||||
case ClientLanguage.English:
|
||||
return sanitizedString;
|
||||
case ClientLanguage.German:
|
||||
return FilterByDict(sanitizedString, DESanitizationDict);
|
||||
case ClientLanguage.French:
|
||||
return FilterByDict(sanitizedString, FRSanitizationDict);
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(clientLanguage), clientLanguage, null);
|
||||
}
|
||||
}
|
||||
|
||||
private static IEnumerable<string> SanitizeByLanguage(
|
||||
IEnumerable<string> unsanitizedStrings, ClientLanguage clientLanguage)
|
||||
{
|
||||
var sanitizedStrings = new List<string>();
|
||||
switch (clientLanguage)
|
||||
{
|
||||
case ClientLanguage.Japanese:
|
||||
case ClientLanguage.English:
|
||||
sanitizedStrings.AddRange(unsanitizedStrings.Select(FilterUnprintableCharacters));
|
||||
return sanitizedStrings;
|
||||
case ClientLanguage.German:
|
||||
sanitizedStrings.AddRange(
|
||||
unsanitizedStrings.Select(
|
||||
unsanitizedString =>
|
||||
FilterByDict(FilterUnprintableCharacters(unsanitizedString), DESanitizationDict)));
|
||||
return sanitizedStrings;
|
||||
case ClientLanguage.French:
|
||||
sanitizedStrings.AddRange(
|
||||
unsanitizedStrings.Select(
|
||||
unsanitizedString =>
|
||||
FilterByDict(FilterUnprintableCharacters(unsanitizedString), FRSanitizationDict)));
|
||||
return sanitizedStrings;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(clientLanguage), clientLanguage, null);
|
||||
}
|
||||
}
|
||||
|
||||
private static string FilterUnprintableCharacters(string str)
|
||||
{
|
||||
return new string(str?.Where(ch => ch >= 0x20).ToArray());
|
||||
}
|
||||
|
||||
private static string FilterByDict(string str, Dictionary<string, string> dict)
|
||||
{
|
||||
return dict.Aggregate(
|
||||
str, (current, kvp) =>
|
||||
current.Replace(kvp.Key, kvp.Value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,7 +5,7 @@ using System.Text;
|
|||
using System.Threading.Tasks;
|
||||
#pragma warning disable 1591
|
||||
|
||||
namespace Dalamud.Game.Chat
|
||||
namespace Dalamud.Game.Text
|
||||
{
|
||||
/// <summary>
|
||||
/// Special unicode characters with game-related symbols that work both in-game and in any dalamud window.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#pragma warning disable 1591
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling {
|
||||
namespace Dalamud.Game.Text.SeStringHandling {
|
||||
public enum BitmapFontIcon : uint {
|
||||
None,
|
||||
ControllerDPadUp,
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling
|
||||
namespace Dalamud.Game.Text.SeStringHandling
|
||||
{
|
||||
public interface ITextProvider
|
||||
{
|
||||
|
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using Dalamud.Data;
|
||||
using Dalamud.Game.Chat.SeStringHandling.Payloads;
|
||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Serilog;
|
||||
|
||||
// TODOs:
|
||||
|
|
@ -14,7 +14,7 @@ using Serilog;
|
|||
// - [SeString] some way to add surrounding formatting information as flags/data to text (or other?) payloads?
|
||||
// eg, if a text payload is surrounded by italics payloads, strip them out and mark the text payload as italicized
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling
|
||||
namespace Dalamud.Game.Text.SeStringHandling
|
||||
{
|
||||
/// <summary>
|
||||
/// This class represents a parsed SeString payload.
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling
|
||||
namespace Dalamud.Game.Text.SeStringHandling
|
||||
{
|
||||
/// <summary>
|
||||
/// All parsed types of SeString payloads.
|
||||
|
|
@ -8,7 +8,7 @@ using Dalamud.Data;
|
|||
using Dalamud.Data.TransientSheet;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload containing an auto-translation/completion chat message.
|
||||
|
|
@ -6,7 +6,7 @@ using System.Text;
|
|||
using System.Threading.Tasks;
|
||||
using JetBrains.Annotations;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads {
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads {
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
|
|
@ -2,7 +2,7 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload containing information about enabling or disabling italics formatting on following text.
|
||||
|
|
@ -2,7 +2,7 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads {
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads {
|
||||
|
||||
/// <summary>
|
||||
/// SeString payload representing a bitmap icon from fontIcon
|
||||
|
|
@ -7,7 +7,7 @@ using Dalamud.Data;
|
|||
using Lumina.Excel.GeneratedSheets;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload representing an interactable item link.
|
||||
|
|
@ -5,7 +5,7 @@ using System.IO;
|
|||
using Dalamud.Data;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload representing an interactable map position link.
|
||||
|
|
@ -6,7 +6,7 @@ using System.Text;
|
|||
using Dalamud.Data;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload representing a player link.
|
||||
|
|
@ -5,7 +5,7 @@ using Dalamud.Data;
|
|||
using Lumina.Excel.GeneratedSheets;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads {
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads {
|
||||
/// <summary>
|
||||
/// An SeString Payload representing an interactable quest link.
|
||||
/// </summary>
|
||||
|
|
@ -4,7 +4,7 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload representing unhandled raw payload data.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
using System.IO;
|
||||
using System.IO;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads {
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads {
|
||||
/// <summary>
|
||||
/// A wrapped '–'
|
||||
/// </summary>
|
||||
|
|
@ -5,7 +5,7 @@ using System.IO;
|
|||
using Dalamud.Data;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload representing an interactable status link.
|
||||
|
|
@ -4,7 +4,7 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload representing a plain text string.
|
||||
|
|
@ -5,7 +5,7 @@ using System.IO;
|
|||
using Dalamud.Data;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload representing a UI foreground color applied to following text payloads.
|
||||
|
|
@ -5,7 +5,7 @@ using System.IO;
|
|||
using Dalamud.Data;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
{
|
||||
/// <summary>
|
||||
/// An SeString Payload representing a UI glow color applied to following text payloads.
|
||||
|
|
@ -4,10 +4,10 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using Dalamud.Data;
|
||||
using Dalamud.Game.Chat.SeStringHandling.Payloads;
|
||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling
|
||||
namespace Dalamud.Game.Text.SeStringHandling
|
||||
{
|
||||
/// <summary>
|
||||
/// This class represents a parsed SeString.
|
||||
|
|
@ -6,10 +6,10 @@ using System.Runtime.CompilerServices;
|
|||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Dalamud.Data;
|
||||
using Dalamud.Game.Chat.SeStringHandling.Payloads;
|
||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
|
||||
namespace Dalamud.Game.Chat.SeStringHandling
|
||||
namespace Dalamud.Game.Text.SeStringHandling
|
||||
{
|
||||
public class SeStringManager
|
||||
{
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.Chat {
|
||||
namespace Dalamud.Game.Text
|
||||
{
|
||||
public sealed class XivChatEntry {
|
||||
public XivChatType Type { get; set; } = XivChatType.Debug;
|
||||
|
||||
|
|
@ -2,7 +2,7 @@ using System;
|
|||
using System.Linq;
|
||||
#pragma warning disable 1591
|
||||
|
||||
namespace Dalamud.Game.Chat
|
||||
namespace Dalamud.Game.Text
|
||||
{
|
||||
/// <summary>
|
||||
/// The FFXIV chat types as seen in the LogKind ex table.
|
||||
Loading…
Add table
Add a link
Reference in a new issue