| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- using Content.Server.Speech.Components;
- using System.Text.RegularExpressions;
- namespace Content.Server.Speech.EntitySystems;
- /// <summary>
- /// System that gives the speaker a faux-French accent.
- /// </summary>
- public sealed class FrenchAccentSystem : EntitySystem
- {
- [Dependency] private readonly ReplacementAccentSystem _replacement = default!;
- private static readonly Regex RegexTh = new(@"th", RegexOptions.IgnoreCase);
- private static readonly Regex RegexStartH = new(@"(?<!\w)h", RegexOptions.IgnoreCase);
- private static readonly Regex RegexSpacePunctuation = new(@"(?<=\w\w)[!?;:](?!\w)", RegexOptions.IgnoreCase);
- public override void Initialize()
- {
- base.Initialize();
- SubscribeLocalEvent<FrenchAccentComponent, AccentGetEvent>(OnAccentGet);
- }
- public string Accentuate(string message, FrenchAccentComponent component)
- {
- var msg = message;
- msg = _replacement.ApplyReplacements(msg, "french");
- // replaces th with z
- msg = RegexTh.Replace(msg, "'z");
- // replaces h with ' at the start of words.
- msg = RegexStartH.Replace(msg, "'");
- // spaces out ! ? : and ;.
- msg = RegexSpacePunctuation.Replace(msg, " $&");
- return msg;
- }
- private void OnAccentGet(EntityUid uid, FrenchAccentComponent component, AccentGetEvent args)
- {
- args.Message = Accentuate(args.Message, component);
- }
- }
|