CssRuleList
Represents an array like structure containing CSS rules.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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];
}
}
public string CssText {
get {
StringBuilder stringBuilder = Pool.NewStringBuilder();
for (int i = 0; i < _rules.Count; i++) {
stringBuilder.AppendLine(_rules[i].CssText);
}
return stringBuilder.ToPool();
}
}
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 value, ICssStyleSheet owner, ICssRule parent)
{
_rules.Add(value);
value.Owner = owner;
value.Parent = parent;
}
public IEnumerator<ICssRule> GetEnumerator()
{
List<CssRule>.Enumerator enumerator = _rules.GetEnumerator();
try {
while (enumerator.MoveNext()) {
CssRule current = enumerator.Current;
yield return (ICssRule)current;
}
} finally {
((IDisposable)enumerator).Dispose();
}
enumerator = default(List<CssRule>.Enumerator);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}