diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java index e4a7c06ca9..1cc6fcb715 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java @@ -164,4 +164,15 @@ public interface ChatFilterConfig extends Config { return 0; } + + @ConfigItem( + keyName = "stripAccents", + name = "Strip accents", + description = "Remove accents before applying filters", + position = 13 + ) + default boolean stripAccents() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java index a529800017..e5befde35f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java @@ -321,7 +321,7 @@ public class ChatFilterPlugin extends Plugin { String strippedMessage = jagexPrintableCharMatcher.retainFrom(message) .replace('\u00A0', ' '); - String strippedAccents = StringUtils.stripAccents(strippedMessage); + String strippedAccents = stripAccents(strippedMessage); assert strippedMessage.length() == strippedAccents.length(); if (username != null && shouldFilterByName(username)) @@ -377,23 +377,28 @@ public class ChatFilterPlugin extends Plugin filteredNamePatterns.clear(); Text.fromCSV(config.filteredWords()).stream() - .map(StringUtils::stripAccents) + .map(this::stripAccents) .map(s -> Pattern.compile(Pattern.quote(s), Pattern.CASE_INSENSITIVE)) .forEach(filteredPatterns::add); NEWLINE_SPLITTER.splitToList(config.filteredRegex()).stream() - .map(StringUtils::stripAccents) + .map(this::stripAccents) .map(ChatFilterPlugin::compilePattern) .filter(Objects::nonNull) .forEach(filteredPatterns::add); NEWLINE_SPLITTER.splitToList(config.filteredNames()).stream() - .map(StringUtils::stripAccents) + .map(this::stripAccents) .map(ChatFilterPlugin::compilePattern) .filter(Objects::nonNull) .forEach(filteredNamePatterns::add); } + private String stripAccents(String input) + { + return config.stripAccents() ? StringUtils.stripAccents(input) : input; + } + private static Pattern compilePattern(String pattern) { try diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java index b93f3b1078..324e3dacdf 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java @@ -191,6 +191,7 @@ public class ChatFilterPluginTest { when(chatFilterConfig.filterType()).thenReturn(ChatFilterType.CENSOR_WORDS); when(chatFilterConfig.filteredWords()).thenReturn("filterme"); + when(chatFilterConfig.stripAccents()).thenReturn(true); chatFilterPlugin.updateFilteredPatterns(); assertEquals("plëäsë ******** plügïn", chatFilterPlugin.censorMessage("Blue", "plëäsë fïltërmë plügïn")); @@ -211,6 +212,7 @@ public class ChatFilterPluginTest { when(chatFilterConfig.filterType()).thenReturn(ChatFilterType.CENSOR_WORDS); when(chatFilterConfig.filteredWords()).thenReturn("plëäsë, filterme"); + when(chatFilterConfig.stripAccents()).thenReturn(true); chatFilterPlugin.updateFilteredPatterns(); assertEquals("****** ******** plügïn", chatFilterPlugin.censorMessage("Blue", "plëäsë fïltërmë plügïn"));