refactor: Dalamud.Game.Chat => Dalamud.Game.Text, move Sanitizer

This commit is contained in:
goat 2021-04-04 21:54:24 +02:00
parent 7996b64827
commit 3decb57b2c
38 changed files with 141 additions and 140 deletions

View file

@ -7,13 +7,13 @@ using System.Reflection;
using Dalamud.Configuration;
using Dalamud.Data;
using Dalamud.Game;
using Dalamud.Game.Chat.SeStringHandling;
using Dalamud.Game.Chat.SeStringHandling.Payloads;
using Dalamud.Game.ClientState;
using Dalamud.Game.Command;
using Dalamud.Game.Internal;
using Dalamud.Game.Text.Sanitizer;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Game.Text.SeStringHandling.Payloads;
using Dalamud.Interface;
using Dalamud.Plugin.Sanitizer;
namespace Dalamud.Plugin
{
@ -49,7 +49,7 @@ namespace Dalamud.Plugin
this.pluginName = pluginName;
this.configs = configs;
this.Sanitizer = new Sanitizer.Sanitizer(this.Data.Language);
this.Sanitizer = new Sanitizer(this.Data.Language);
this.UiLanguage = this.dalamud.Configuration.LanguageOverride;
dalamud.LocalizationManager.OnLocalizationChanged += this.OnLocalizationChanged;
}

View file

@ -10,7 +10,7 @@ using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using CheapLoc;
using Dalamud.Game.Chat;
using Dalamud.Game.Text;
using Newtonsoft.Json;
using Serilog;

View file

@ -1,40 +0,0 @@
using System.Collections.Generic;
namespace Dalamud.Plugin.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);
}
}

View file

@ -1,131 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Dalamud.Plugin.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));
}
}
}