AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="1.1.1-beta.390" />

.NET API 956,416 bytes

 TokenList

A simple list of tokens that is immutable.
using AngleSharp.Common; using AngleSharp.Text; using System; using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace AngleSharp.Dom { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal class TokenList : ITokenList, IEnumerable<string>, IEnumerable, IBindable { private readonly List<string> _tokens; public string this[int index] { get { return _tokens[index]; } } public int Length => _tokens.Count; [System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1 })] [method: System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1 })] [field: System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1 })] public event Action<string> Changed; [System.Runtime.CompilerServices.NullableContext(2)] internal TokenList(string value) { _tokens = new List<string>(); Update(value); } [System.Runtime.CompilerServices.NullableContext(2)] public void Update(string value) { _tokens.Clear(); if (value != null && value.Length > 0) { string[] array = value.SplitSpaces(); for (int i = 0; i < array.Length; i++) { if (!_tokens.Contains(array[i])) _tokens.Add(array[i]); } } } public bool Contains(string token) { return _tokens.Contains(token); } public void Remove(params string[] tokens) { bool flag = false; foreach (string item in tokens) { if (_tokens.Contains(item)) { _tokens.Remove(item); flag = true; } } if (flag) RaiseChanged(); } public void Add(params string[] tokens) { bool flag = false; foreach (string item in tokens) { if (!_tokens.Contains(item)) { _tokens.Add(item); flag = true; } } if (flag) RaiseChanged(); } public bool Toggle(string token, bool force = false) { bool flag = _tokens.Contains(token); if (flag & force) return true; if (flag) _tokens.Remove(token); else _tokens.Add(token); RaiseChanged(); return !flag; } private void RaiseChanged() { this.Changed?.Invoke(ToString()); } public IEnumerator<string> GetEnumerator() { return _tokens.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public override string ToString() { return string.Join(" ", _tokens); } } }