TokenList
A simple list of tokens that is immutable.
using AngleSharp.Extensions;
using System;
using System.Collections;
using System.Collections.Generic;
namespace AngleSharp.Dom.Collections
{
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;
public event Action<string> Changed;
internal TokenList(string value)
{
_tokens = new List<string>();
Update(value);
}
public void Update(string value)
{
_tokens.Clear();
if (!string.IsNullOrEmpty(value)) {
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);
}
}
}