1
0

FrontalLispSystem.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334
  1. using System.Text.RegularExpressions;
  2. using Content.Server.Speech.Components;
  3. namespace Content.Server.Speech.EntitySystems;
  4. public sealed class FrontalLispSystem : EntitySystem
  5. {
  6. // @formatter:off
  7. 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]+)");
  8. 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]+)");
  9. private static readonly Regex RegexUpperEcks = new(@"[E]+[Xx]+[Cc]*|[X]+");
  10. private static readonly Regex RegexLowerEcks = new(@"[e]+[x]+[c]*|[x]+");
  11. // @formatter:on
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<FrontalLispComponent, AccentGetEvent>(OnAccent);
  16. }
  17. private void OnAccent(EntityUid uid, FrontalLispComponent component, AccentGetEvent args)
  18. {
  19. var message = args.Message;
  20. // handles ts, sc(i|e|y), c(i|e|y), ps, st(io(u|n)), ch(i|e), z, s
  21. message = RegexUpperTh.Replace(message, "TH");
  22. message = RegexLowerTh.Replace(message, "th");
  23. // handles ex(c), x
  24. message = RegexUpperEcks.Replace(message, "EKTH");
  25. message = RegexLowerEcks.Replace(message, "ekth");
  26. args.Message = message;
  27. }
  28. }