CssFunctionToken
Represents a CSS function token.
using AngleSharp.Extensions;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace AngleSharp.Parser.Css
{
internal sealed class CssFunctionToken : CssToken, IEnumerable<CssToken>, IEnumerable
{
private readonly List<CssToken> _arguments;
public IEnumerable<CssToken> ArgumentTokens {
get {
int num = _arguments.Count - 1;
if (num >= 0 && _arguments[num].Type == CssTokenType.RoundBracketClose)
num--;
return _arguments.Take(1 + num);
}
}
public CssFunctionToken(string data, TextPosition position)
: base(CssTokenType.Function, data, position)
{
_arguments = new List<CssToken>();
}
public void With(CssToken token)
{
if (_arguments.Count > 0) {
if (token.Type == CssTokenType.Comma && _arguments[_arguments.Count - 1].Type == CssTokenType.Whitespace)
_arguments.RemoveAt(_arguments.Count - 1);
else if (token.Type != CssTokenType.Whitespace && _arguments[_arguments.Count - 1].Type == CssTokenType.Comma) {
_arguments.Add(CssToken.Whitespace);
}
}
_arguments.Add(token);
}
public void Close(CssToken token)
{
if (_arguments.Count > 0 && _arguments[_arguments.Count - 1].Type == CssTokenType.Whitespace)
_arguments.RemoveAt(_arguments.Count - 1);
_arguments.Add(token);
}
public IEnumerator<CssToken> GetEnumerator()
{
return _arguments.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public override string ToValue()
{
return base.Data + "(" + _arguments.ToText();
}
}
}