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
{
private abstract class ContentMode
{
public abstract string Stringify(IElement element);
}
private sealed class NormalContentMode : ContentMode
{
public override string Stringify(IElement element)
{
return string.Empty;
}
}
private sealed class OpenQuoteContentMode : ContentMode
{
public override string Stringify(IElement element)
{
return string.Empty;
}
}
private sealed class CloseQuoteContentMode : ContentMode
{
public override string Stringify(IElement element)
{
return string.Empty;
}
}
private sealed class NoOpenQuoteContentMode : ContentMode
{
public override string Stringify(IElement element)
{
return string.Empty;
}
}
private sealed class NoCloseQuoteContentMode : ContentMode
{
public override string Stringify(IElement element)
{
return string.Empty;
}
}
private sealed class TextContentMode : ContentMode
{
private readonly string _text;
public TextContentMode(string text)
{
_text = text;
}
public override string Stringify(IElement element)
{
return _text;
}
}
private sealed class CounterContentMode : ContentMode
{
private readonly Counter _counter;
public CounterContentMode(Counter counter)
{
_counter = counter;
}
public override string Stringify(IElement element)
{
return string.Empty;
}
}
private sealed class AttributeContentMode : ContentMode
{
private readonly string _attribute;
public AttributeContentMode(string attribute)
{
_attribute = attribute;
}
public override string Stringify(IElement element)
{
return element.GetAttribute(_attribute) ?? string.Empty;
}
}
private sealed class UrlContentMode : ContentMode
{
private readonly string _url;
public UrlContentMode(string url)
{
_url = url;
}
public override string Stringify(IElement element)
{
return string.Empty;
}
}
private static readonly Dictionary<string, ContentMode> ContentModes = new Dictionary<string, ContentMode>(StringComparer.OrdinalIgnoreCase) {
{
Keywords.OpenQuote,
new OpenQuoteContentMode()
},
{
Keywords.NoOpenQuote,
new NoOpenQuoteContentMode()
},
{
Keywords.CloseQuote,
new CloseQuoteContentMode()
},
{
Keywords.NoCloseQuote,
new NoCloseQuoteContentMode()
}
};
private static readonly ContentMode[] Default = new NormalContentMode[1] {
new NormalContentMode()
};
private static readonly IValueConverter StyleConverter = Converters.Assign(Keywords.Normal, Default).OrNone().Or(ContentModes.ToConverter().Or(Converters.UrlConverter).Or(Converters.StringConverter)
.Or(Converters.AttrConverter)
.Or(Converters.CounterConverter)
.Many(1, 65535))
.OrDefault();
internal override IValueConverter Converter => StyleConverter;
internal CssContentProperty()
: base(PropertyNames.Content, PropertyFlags.None)
{
}
private static ContentMode TransformUrl(string 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);
}
}
}