using System.Text.RegularExpressions;
using Content.Server.Speech.Components;
namespace Content.Server.Speech.EntitySystems;
public sealed class FrontalLispSystem : EntitySystem
{
// @formatter:off
private static readonly Regex RegexUpperTh = new(@"[T]+[Ss]+|[S]+[Cc]+(?=[IiEeYy]+)|[C]+(?=[IiEeYy]+)|[P][Ss]+|([S]+[Tt]+|[T]+)(?=[Ii]+[Oo]+[Uu]*[Nn]*)|[C]+[Hh]+(?=[Ii]*[Ee]*)|[Z]+|[S]+|[X]+(?=[Ee]+)");
private static readonly Regex RegexLowerTh = new(@"[t]+[s]+|[s]+[c]+(?=[iey]+)|[c]+(?=[iey]+)|[p][s]+|([s]+[t]+|[t]+)(?=[i]+[o]+[u]*[n]*)|[c]+[h]+(?=[i]*[e]*)|[z]+|[s]+|[x]+(?=[e]+)");
private static readonly Regex RegexUpperEcks = new(@"[E]+[Xx]+[Cc]*|[X]+");
private static readonly Regex RegexLowerEcks = new(@"[e]+[x]+[c]*|[x]+");
// WD start
private static readonly Regex RegexUpperS = new(@"С");
private static readonly Regex RegexLowerS = new(@"с");
private static readonly Regex RegexUpperZ = new(@"З");
private static readonly Regex RegexLowerZ = new(@"з");
// WD end
// @formatter:on
public override void Initialize()
base.Initialize();
SubscribeLocalEvent<FrontalLispComponent, AccentGetEvent>(OnAccent);
}
private void OnAccent(EntityUid uid, FrontalLispComponent component, AccentGetEvent args)
var message = args.Message;
// handles ts, sc(i|e|y), c(i|e|y), ps, st(io(u|n)), ch(i|e), z, s
message = RegexUpperTh.Replace(message, "TH");
message = RegexLowerTh.Replace(message, "th");
// handles ex(c), x
message = RegexUpperEcks.Replace(message, "EKTH");
message = RegexLowerEcks.Replace(message, "ekth");
message = RegexUpperS.Replace(message, "Ш");
message = RegexLowerS.Replace(message, "ш");
message = RegexUpperZ.Replace(message, "Ж");
message = RegexLowerZ.Replace(message, "ж");
args.Message = message;