AngleSharp by Florian Rappl

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

.NET API 1,171,968 bytes

 CssDocumentRule

Contains the rules specified by a @document { /* ... */ } rule.
using AngleSharp.Css; using AngleSharp.Extensions; using AngleSharp.Parser.Css; using System; using System.Collections.Generic; namespace AngleSharp.Dom.Css { internal sealed class CssDocumentRule : CssGroupingRule, ICssDocumentRule, ICssConditionRule, ICssGroupingRule, ICssRule { public enum DocumentFunction { Url, UrlPrefix, Domain, RegExp } private readonly List<Tuple<DocumentFunction, string>> _conditions; public string ConditionText { get { string[] array = new string[_conditions.Count]; for (int i = 0; i < array.Length; i++) { Tuple<DocumentFunction, string> tuple = _conditions[i]; string functionName = GetFunctionName(tuple.Item1); string str = tuple.Item2.CssString(); array[i] = functionName + "(" + str + ")"; } return string.Join(", ", array); } set { IEnumerable<Tuple<DocumentFunction, string>> enumerable = CssParser.ParseDocumentRules(value, null); if (enumerable != null) { _conditions.Clear(); _conditions.AddRange(enumerable); } } } internal List<Tuple<DocumentFunction, string>> Conditions => _conditions; internal CssDocumentRule() : base(CssRuleType.Document) { _conditions = new List<Tuple<DocumentFunction, string>>(); } protected override void ReplaceWith(ICssRule rule) { base.ReplaceWith(rule); CssDocumentRule cssDocumentRule = rule as CssDocumentRule; _conditions.Clear(); _conditions.AddRange(cssDocumentRule._conditions); } protected override string ToCss() { return "@document " + ConditionText + " " + base.Rules.ToCssBlock(); } private static string GetFunctionName(DocumentFunction function) { switch (function) { case DocumentFunction.Url: return FunctionNames.Url; case DocumentFunction.UrlPrefix: return FunctionNames.Url_Prefix; case DocumentFunction.Domain: return FunctionNames.Domain; case DocumentFunction.RegExp: return FunctionNames.Regexp; default: return string.Empty; } } } }