AngleSharp by Florian Rappl

<PackageReference Include="AngleSharp" Version="0.8.4.1" />

.NET API 1,229,312 bytes

 CssValue

Represents a CSS value.
using AngleSharp.Extensions; using AngleSharp.Parser.Css; using System; using System.Collections; using System.Collections.Generic; namespace AngleSharp.Dom.Css { internal sealed class CssValue : ICssValue, IEnumerable<CssToken>, IEnumerable { private readonly CssValueType _type; private readonly List<CssToken> _tokens; public static CssValue Initial = FromString(Keywords.Initial, CssValueType.Initial); public CssToken this[int index] { get { return _tokens[index]; } } public int Count => _tokens.Count; public CssValueType Type => _type; public string CssText => _tokens.ToText(); private CssValue(CssToken token, CssValueType type) { _tokens = new List<CssToken>(); _tokens.Add(token); _type = type; } public CssValue(IEnumerable<CssToken> tokens) { _tokens = new List<CssToken>(tokens); _type = FindType(_tokens); } public static CssValue FromString(string text, CssValueType type) { CssToken token = new CssToken(CssTokenType.Ident, text, TextPosition.Empty); return new CssValue(token, type); } private static CssValueType FindType(List<CssToken> tokens) { CssValueType cssValueType = CssValueType.Custom; int num = 0; if (tokens.Count == 1) { if (tokens[0].Data.Equals(Keywords.Initial, StringComparison.OrdinalIgnoreCase)) return CssValueType.Initial; if (tokens[0].Data.Equals(Keywords.Inherit, StringComparison.OrdinalIgnoreCase)) return CssValueType.Inherit; } for (int i = 0; i < tokens.Count; i++) { if (cssValueType == CssValueType.Custom) cssValueType = CssValueType.Primitive; if (tokens[i].Type == CssTokenType.RoundBracketClose) num--; if (tokens[i].Type == CssTokenType.RoundBracketOpen) num++; if (num <= 0 && (tokens[i].Type == CssTokenType.Whitespace || tokens[i].Type == CssTokenType.Comma || (tokens[i].Type == CssTokenType.Delim && tokens[i].Data == "/"))) cssValueType = CssValueType.List; } return cssValueType; } public IEnumerator<CssToken> GetEnumerator() { return _tokens.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }