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();
}
}
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();
}
}