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
{
private readonly List<string> _tokens;
public int Length => _tokens.Count;
public string this[int index] {
get {
if (index < 0 || index >= _tokens.Count)
return null;
return _tokens[index];
}
}
public event EventHandler Changed;
internal TokenList(string value)
{
_tokens = new List<string>();
Update(value);
}
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.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;
}
internal 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]);
}
}
}
private void RaiseChanged()
{
if (this.Changed != null)
this.Changed(this, EventArgs.Empty);
}
public IEnumerator<string> GetEnumerator()
{
return _tokens.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public override string ToString()
{
return string.Join(" ", _tokens);
}
}
}