AngleSharp by Florian Rappl

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

.NET API 1,172,480 bytes

 CssContentProperty

Information can be found on MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/content
using AngleSharp.Css; using AngleSharp.Css.Values; using AngleSharp.Extensions; using System; using System.Collections.Generic; namespace AngleSharp.Dom.Css { internal sealed class CssContentProperty : CssProperty, ICssContentProperty, ICssProperty { private abstract class ContentMode { } private sealed class NormalContentMode : ContentMode { } private sealed class OpenQuoteContentMode : ContentMode { } private sealed class CloseQuoteContentMode : ContentMode { } private sealed class NoOpenQuoteContentMode : ContentMode { } private sealed class NoCloseQuoteContentMode : ContentMode { } private sealed class TextContentMode : ContentMode { private readonly string _text; public TextContentMode(string text) { _text = text; } } private sealed class CounterContentMode : ContentMode { private readonly Counter _counter; public CounterContentMode(Counter counter) { _counter = counter; } } private sealed class AttributeContentMode : ContentMode { private readonly string _attribute; public AttributeContentMode(string attribute) { _attribute = attribute; } } private sealed class UrlContentMode : ContentMode { private readonly Url _url; public UrlContentMode(Url url) { _url = url; } } private static readonly IValueConverter<ContentMode[]> Converter; private static readonly ContentMode[] Default; private static readonly Dictionary<string, ContentMode> ContentModes; private IEnumerable<ContentMode> _mode; static CssContentProperty() { ContentModes = new Dictionary<string, ContentMode>(StringComparer.OrdinalIgnoreCase); ContentModes.Add(Keywords.OpenQuote, new OpenQuoteContentMode()); ContentModes.Add(Keywords.NoOpenQuote, new NoOpenQuoteContentMode()); ContentModes.Add(Keywords.CloseQuote, new CloseQuoteContentMode()); ContentModes.Add(Keywords.NoCloseQuote, new NoCloseQuoteContentMode()); Default = new NormalContentMode[1] { new NormalContentMode() }; Converter = Converters.Assign(Keywords.Normal, Default).Or(Keywords.None, new ContentMode[0]).Or(ContentModes.ToConverter().Or(Converters.UrlConverter.To(TransformUrl)).Or(Converters.StringConverter.To(TransformString)) .Or(Converters.AttrConverter.To(TransformAttr)) .Or(Converters.CounterConverter.To(TransformCounter)) .Many(1, 2147483647)); } internal CssContentProperty(CssStyleDeclaration rule) : base(PropertyNames.Content, rule, PropertyFlags.None) { Reset(); } internal override void Reset() { _mode = Default; } private void SetMode(ContentMode[] mode) { _mode = mode; } protected override bool IsValid(ICssValue value) { return Converter.TryConvert(value, SetMode); } private static ContentMode TransformUrl(CssUrl url) { return new UrlContentMode(url); } private static ContentMode TransformString(string str) { return new TextContentMode(str); } private static ContentMode TransformAttr(string attr) { return new AttributeContentMode(attr); } private static ContentMode TransformCounter(Counter counter) { return new CounterContentMode(counter); } } }