AngleSharp by AngleSharp

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

 PseudoClassSelectorFactory

Provides string to CSS pseudo class selector instance mappings.
using AngleSharp.Css; using AngleSharp.Dom; using AngleSharp.Dom.Css; using AngleSharp.Extensions; using System; using System.Collections.Generic; namespace AngleSharp.Services.Default { public class PseudoClassSelectorFactory : IPseudoClassSelectorFactory { private readonly Dictionary<string, ISelector> _selectors = new Dictionary<string, ISelector>(StringComparer.OrdinalIgnoreCase) { { PseudoClassNames.Root, SimpleSelector.PseudoClass((IElement el) => el.Owner.DocumentElement == el, PseudoClassNames.Root) }, { PseudoClassNames.Scope, SimpleSelector.PseudoClass((IElement el) => el.Owner.DocumentElement == el, PseudoClassNames.Scope) }, { PseudoClassNames.OnlyType, SimpleSelector.PseudoClass((IElement el) => el.IsOnlyOfType(), PseudoClassNames.OnlyType) }, { PseudoClassNames.FirstOfType, SimpleSelector.PseudoClass((IElement el) => el.IsFirstOfType(), PseudoClassNames.FirstOfType) }, { PseudoClassNames.LastOfType, SimpleSelector.PseudoClass((IElement el) => el.IsLastOfType(), PseudoClassNames.LastOfType) }, { PseudoClassNames.OnlyChild, SimpleSelector.PseudoClass((IElement el) => el.IsOnlyChild(), PseudoClassNames.OnlyChild) }, { PseudoClassNames.FirstChild, SimpleSelector.PseudoClass((IElement el) => el.IsFirstChild(), PseudoClassNames.FirstChild) }, { PseudoClassNames.LastChild, SimpleSelector.PseudoClass((IElement el) => el.IsLastChild(), PseudoClassNames.LastChild) }, { PseudoClassNames.Empty, SimpleSelector.PseudoClass(delegate(IElement el) { if (el.ChildElementCount == 0) return el.TextContent.Is(string.Empty); return false; }, PseudoClassNames.Empty) }, { PseudoClassNames.AnyLink, SimpleSelector.PseudoClass(delegate(IElement el) { if (!el.IsLink()) return el.IsVisited(); return true; }, PseudoClassNames.AnyLink) }, { PseudoClassNames.Link, SimpleSelector.PseudoClass((IElement el) => el.IsLink(), PseudoClassNames.Link) }, { PseudoClassNames.Visited, SimpleSelector.PseudoClass((IElement el) => el.IsVisited(), PseudoClassNames.Visited) }, { PseudoClassNames.Active, SimpleSelector.PseudoClass((IElement el) => el.IsActive(), PseudoClassNames.Active) }, { PseudoClassNames.Hover, SimpleSelector.PseudoClass((IElement el) => el.IsHovered(), PseudoClassNames.Hover) }, { PseudoClassNames.Focus, SimpleSelector.PseudoClass((IElement el) => el.IsFocused, PseudoClassNames.Focus) }, { PseudoClassNames.Target, SimpleSelector.PseudoClass((IElement el) => el.IsTarget(), PseudoClassNames.Target) }, { PseudoClassNames.Enabled, SimpleSelector.PseudoClass((IElement el) => el.IsEnabled(), PseudoClassNames.Enabled) }, { PseudoClassNames.Disabled, SimpleSelector.PseudoClass((IElement el) => el.IsDisabled(), PseudoClassNames.Disabled) }, { PseudoClassNames.Default, SimpleSelector.PseudoClass((IElement el) => el.IsDefault(), PseudoClassNames.Default) }, { PseudoClassNames.Checked, SimpleSelector.PseudoClass((IElement el) => el.IsChecked(), PseudoClassNames.Checked) }, { PseudoClassNames.Indeterminate, SimpleSelector.PseudoClass((IElement el) => el.IsIndeterminate(), PseudoClassNames.Indeterminate) }, { PseudoClassNames.PlaceholderShown, SimpleSelector.PseudoClass((IElement el) => el.IsPlaceholderShown(), PseudoClassNames.PlaceholderShown) }, { PseudoClassNames.Unchecked, SimpleSelector.PseudoClass((IElement el) => el.IsUnchecked(), PseudoClassNames.Unchecked) }, { PseudoClassNames.Valid, SimpleSelector.PseudoClass((IElement el) => el.IsValid(), PseudoClassNames.Valid) }, { PseudoClassNames.Invalid, SimpleSelector.PseudoClass((IElement el) => el.IsInvalid(), PseudoClassNames.Invalid) }, { PseudoClassNames.Required, SimpleSelector.PseudoClass((IElement el) => el.IsRequired(), PseudoClassNames.Required) }, { PseudoClassNames.ReadOnly, SimpleSelector.PseudoClass((IElement el) => el.IsReadOnly(), PseudoClassNames.ReadOnly) }, { PseudoClassNames.ReadWrite, SimpleSelector.PseudoClass((IElement el) => el.IsEditable(), PseudoClassNames.ReadWrite) }, { PseudoClassNames.InRange, SimpleSelector.PseudoClass((IElement el) => el.IsInRange(), PseudoClassNames.InRange) }, { PseudoClassNames.OutOfRange, SimpleSelector.PseudoClass((IElement el) => el.IsOutOfRange(), PseudoClassNames.OutOfRange) }, { PseudoClassNames.Optional, SimpleSelector.PseudoClass((IElement el) => el.IsOptional(), PseudoClassNames.Optional) }, { PseudoClassNames.Shadow, SimpleSelector.PseudoClass((IElement el) => el.IsShadow(), PseudoClassNames.Shadow) }, { PseudoElementNames.Before, Factory.PseudoElementSelector.Create(PseudoElementNames.Before) }, { PseudoElementNames.After, Factory.PseudoElementSelector.Create(PseudoElementNames.After) }, { PseudoElementNames.FirstLine, Factory.PseudoElementSelector.Create(PseudoElementNames.FirstLine) }, { PseudoElementNames.FirstLetter, Factory.PseudoElementSelector.Create(PseudoElementNames.FirstLetter) } }; public void Register(string name, ISelector selector) { _selectors.Add(name, selector); } public ISelector Unregister(string name) { ISelector value = null; if (_selectors.TryGetValue(name, out value)) _selectors.Remove(name); return value; } protected virtual ISelector CreateDefault(string name) { return null; } public ISelector Create(string name) { ISelector value = null; if (_selectors.TryGetValue(name, out value)) return value; return CreateDefault(name); } } }