CssStyleSheet
Represents a CSS Stylesheet.
using AngleSharp.Network;
using AngleSharp.Parser.Css;
using System.Text;
namespace AngleSharp.Dom.Css
{
internal sealed class CssStyleSheet : StyleSheet, ICssStyleSheet, IStyleSheet
{
private readonly CssRuleList _rules;
private readonly TextSource _source;
private readonly IConfiguration _config;
private ICssRule _ownerRule;
public override string Type => MimeTypes.Css;
internal CssRuleList Rules => _rules;
ICssRuleList ICssStyleSheet.Rules {
get {
return _rules;
}
}
public ICssRule OwnerRule {
get {
return _ownerRule;
}
internal set {
_ownerRule = value;
}
}
internal TextSource Source => _source;
public string CssText {
get {
StringBuilder stringBuilder = Pool.NewStringBuilder();
if (_rules.Length > 0) {
stringBuilder.Append(_rules[0].CssText);
for (int i = 1; i < _rules.Length; i++) {
stringBuilder.AppendLine();
stringBuilder.Append(_rules[i].CssText);
}
}
return stringBuilder.ToPool();
}
}
internal IConfiguration Options => _config;
internal CssStyleSheet(IConfiguration config)
: this(config, new TextSource(string.Empty))
{
}
internal CssStyleSheet(IConfiguration config, string source)
: this(config, new TextSource(source))
{
}
internal CssStyleSheet(IConfiguration config, TextSource source)
{
_source = source;
_rules = new CssRuleList();
_config = (config ?? Configuration.Default);
}
public void RemoveAt(int index)
{
_rules.RemoveAt(index);
}
public int Insert(string rule, int index)
{
CssRule value = CssParser.ParseRule(rule, null);
_rules.Insert(value, index, this, null);
return index;
}
}
}