CssRangeToken
Represents the CSS range token.
using AngleSharp.Extensions;
using System.Collections.Generic;
using System.Globalization;
namespace AngleSharp.Parser.Css
{
internal sealed class CssRangeToken : CssToken
{
private readonly string[] _range;
private readonly string _start;
private readonly string _end;
public bool IsEmpty {
get {
if (_range != null)
return _range.Length == 0;
return true;
}
}
public string Start => _start;
public string End => _end;
public string[] SelectedRange => _range;
public CssRangeToken(string range, TextPosition position)
: base(CssTokenType.Range, range, position)
{
_start = range.Replace('?', '0');
_end = range.Replace('?', 'F');
_range = GetRange();
}
public CssRangeToken(string start, string end, TextPosition position)
: base(CssTokenType.Range, start + "-" + end, position)
{
_start = start;
_end = end;
_range = GetRange();
}
private string[] GetRange()
{
int i = int.Parse(_start, NumberStyles.HexNumber);
if (i <= 1114111) {
if (_end != null) {
List<string> list = new List<string>();
int num = int.Parse(_end, NumberStyles.HexNumber);
if (num > 1114111)
num = 1114111;
for (; i <= num; i++) {
list.Add(i.ConvertFromUtf32());
}
return list.ToArray();
}
return new string[1] {
i.ConvertFromUtf32()
};
}
return null;
}
}
}