StyleSheetExtensions
Defines a set of extension methods for style sheets.
using AngleSharp.Dom;
using AngleSharp.Dom.Css;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace AngleSharp.Extensions
{
[DebuggerStepThrough]
public static class StyleSheetExtensions
{
public static IEnumerable<TRule> RulesOf<TRule>(this IEnumerable<IStyleSheet> sheets) where TRule : ICssRule
{
if (sheets == null)
throw new ArgumentNullException("sheets");
return (from m in sheets
where !m.IsDisabled
select m).OfType<ICssStyleSheet>().SelectMany((ICssStyleSheet m) => m.Rules).OfType<TRule>();
}
public static IEnumerable<ICssStyleRule> StylesWith(this IEnumerable<IStyleSheet> sheets, ISelector selector)
{
if (selector == null)
throw new ArgumentNullException("selector");
string selectorText = selector.Text;
return from m in sheets.RulesOf<ICssStyleRule>()
where m.SelectorText == selectorText
select m;
}
public static IDocument GetDocument(this IStyleSheet sheet)
{
if (sheet == null || sheet.OwnerNode == null)
return null;
return sheet.OwnerNode.Owner;
}
public static IEnumerable<ICssComment> GetComments(this ICssNode node)
{
return node.GetAll<ICssComment>();
}
public static IEnumerable<ICssNode> GetAllDescendents(this ICssNode node)
{
if (node == null)
throw new ArgumentNullException("node");
return node.Children.SelectMany((ICssNode m) => m.GetAllDescendents());
}
public static IEnumerable<T> GetAll<T>(this ICssNode node) where T : IStyleFormattable
{
if (node == null)
throw new ArgumentNullException("node");
if (node is T)
yield return (T)node;
foreach (T item in Enumerable.SelectMany<ICssNode, T>(node.Children, (Func<ICssNode, IEnumerable<T>>)((ICssNode m) => StyleSheetExtensions.GetAll<T>(m)))) {
yield return item;
}
}
}
}