using System.Text; namespace XFESystem.Browser; internal sealed class BoundedText(int maximumCharacters) { private readonly StringBuilder text = new(); public int Length => text.Length; public void Append(string value) { if (value.Length > maximumCharacters - text.Length) throw new BrowserLimitException("The page or console output exceeds its character limit."); text.Append(value); } public void Clear() => text.Clear(); public override string ToString() => text.ToString(); public static string Safe(string value, int maximum) { var result = new StringBuilder(Math.Min(value.Length, maximum)); foreach (var character in value) { if (result.Length == maximum) break; if (!char.IsControl(character) || character is '\n' or '\r' or '\t') result.Append(character); } return result.ToString(); } }