using System.Linq; using System.Text.RegularExpressions; using Base.Utils; namespace Base; public sealed class Command(string text) { private static readonly Regex RegexBalancedBrackets = new (RegexUtils.Balance(@"\[", @"\]"), RegexOptions.Compiled); private static readonly Regex RegexBalancedParentheses = new (RegexUtils.Balance(@"\(", @"\)"), RegexOptions.Compiled); public string Text { get; } = text; public string? PotentialAppName { get { int firstSpace = Text.IndexOf(' '); if (firstSpace == -1) { return null; } string firstToken = Text[..firstSpace]; if (!firstToken.All(char.IsLetter)) { return null; } return firstToken; } } public bool IsSingleToken => !Text.Contains(' '); public Command ReplaceBrackets(MatchEvaluator evaluator) { return new Command(RegexBalancedParentheses.Replace(RegexBalancedBrackets.Replace(Text, evaluator), evaluator)); } }