CssDocumentRule
sealed class CssDocumentRule : CssGroupingRule, ICssDocumentRule, ICssConditionRule, ICssGroupingRule, ICssRule
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;
}
}
}
}