CssRuleList
Represents an array like structure containing CSS rules.
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace AngleSharp.Dom.Css
{
internal sealed class CssRuleList : ICssRuleList, IEnumerable<ICssRule>, IEnumerable
{
private readonly List<CssRule> _rules;
public int Length => _rules.Count;
ICssRule ICssRuleList.this[int index] {
get {
if (index < 0 || index >= _rules.Count)
return null;
return _rules[index];
}
}
internal CssRule this[int index] {
get {
return _rules[index];
}
}
internal CssRuleList()
{
_rules = new List<CssRule>();
}
internal void Clear()
{
for (int num = _rules.Count - 1; num >= 0; num--) {
CssRule cssRule = _rules[num];
_rules.RemoveAt(num);
cssRule.Parent = null;
cssRule.Owner = null;
}
}
internal void Import(CssRuleList rules, ICssStyleSheet owner, ICssRule parent)
{
while (rules._rules.Count > 0) {
CssRule cssRule = rules._rules[0];
rules._rules.RemoveAt(0);
cssRule.Parent = parent;
cssRule.Owner = owner;
_rules.Add(cssRule);
}
}
internal void RemoveAt(int index)
{
if (index >= _rules.Count)
throw new DomException(DomError.IndexSizeError);
CssRule cssRule = _rules[index];
if (cssRule.Type == CssRuleType.Namespace && _rules.Any(delegate(CssRule m) {
if (m.Type != CssRuleType.Import && m.Type != CssRuleType.Charset)
return m.Type != CssRuleType.Namespace;
return false;
}))
throw new DomException(DomError.InvalidState);
_rules.RemoveAt(index);
cssRule.Parent = null;
cssRule.Owner = null;
}
internal void Insert(CssRule value, int index, ICssStyleSheet owner, ICssRule parent)
{
if (value == null)
throw new DomException(DomError.Syntax);
if (value.Type == CssRuleType.Charset)
throw new DomException(DomError.Syntax);
if (index > _rules.Count)
throw new DomException(DomError.IndexSizeError);
if (value.Type == CssRuleType.Namespace && _rules.Any(delegate(CssRule m) {
if (m.Type != CssRuleType.Import && m.Type != CssRuleType.Charset)
return m.Type != CssRuleType.Namespace;
return false;
}))
throw new DomException(DomError.InvalidState);
_rules.Insert(index, value);
value.Owner = owner;
value.Parent = parent;
}
internal void Add(CssRule rule, ICssStyleSheet owner, ICssRule parent)
{
if (rule != null) {
_rules.Add(rule);
rule.Owner = owner;
rule.Parent = parent;
}
}
public IEnumerator<ICssRule> GetEnumerator()
{
foreach (CssRule rule in _rules) {
yield return (ICssRule)rule;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}