using System.Text.RegularExpressions; using Content.Shared.Speech.Components; using Content.Shared.Speech.EntitySystems; using Robust.Shared.Random; namespace Content.Shared.Speech.EntitySystems; public sealed partial class LizardAccentSystem : RelayAccentSystem { private static readonly Regex RegexLowerS = new("s+"); private static readonly Regex RegexUpperS = new("S+"); private static readonly Regex RegexInternalX = new(@"(\w)x"); private static readonly Regex RegexLowerEndX = new(@"\bx([\-|r|R]|\b)"); private static readonly Regex RegexUpperEndX = new(@"\bX([\-|r|R]|\b)"); // Corvax-Localization-Start private static readonly Regex _regexLowerC = new Regex("с+"); private static readonly Regex _regexUpperC = new Regex("С+"); private static readonly Regex _regexLowerZ = new Regex("з+"); private static readonly Regex _regexUpperZ = new Regex("З+"); private static readonly Regex _regexLowerSh = new Regex("ш+"); private static readonly Regex _regexUpperSh = new Regex("Ш+"); private static readonly Regex _regexLowerCh = new Regex("ч+"); private static readonly Regex _regexUpperCh = new Regex("Ч+"); private static readonly List _replacementsSs = new List { "сс", "ссс" }; private static readonly List _replacementsSsUpper = new List { "СС", "ССС" }; private static readonly List _replacementsSh = new List { "шш", "шшш" }; private static readonly List _replacementsShUpper = new List { "ШШ", "ШШШ" }; private static readonly List _replacementsCh = new List { "щщ", "щщщ" }; private static readonly List _replacementsChUpper = new List { "ЩЩ", "ЩЩЩ" }; // Corvax-Localization-End [Dependency] private IRobustRandom _random = default!; // Corvax-Localization public override string Accentuate(string message, Entity? ent = null) { // hissss message = RegexLowerS.Replace(message, "sss"); // hiSSS message = RegexUpperS.Replace(message, "SSS"); // ekssit message = RegexInternalX.Replace(message, "$1kss"); // ecks message = RegexLowerEndX.Replace(message, "ecks$1"); // eckS message = RegexUpperEndX.Replace(message, "ECKS$1"); // Corvax-Localization-Start message = _regexLowerC.Replace(message, _random.Pick(_replacementsSs)); message = _regexUpperC.Replace(message, _random.Pick(_replacementsSsUpper)); message = _regexLowerZ.Replace(message, _random.Pick(_replacementsSs)); // для "з+" используются те же замены, что и для "с+" message = _regexUpperZ.Replace(message, _random.Pick(_replacementsSsUpper)); // для "З+" используются те же замены, что и для "С+" message = _regexLowerSh.Replace(message, _random.Pick(_replacementsSh)); message = _regexUpperSh.Replace(message, _random.Pick(_replacementsShUpper)); message = _regexLowerCh.Replace(message, _random.Pick(_replacementsCh)); message = _regexUpperCh.Replace(message, _random.Pick(_replacementsChUpper)); // Corvax-Localization-End return message; } }