CssNamespaceRule
Represents an @namespace rule.
using AngleSharp.Extensions;
using AngleSharp.Parser.Css;
using System.IO;
namespace AngleSharp.Dom.Css
{
internal sealed class CssNamespaceRule : CssRule, ICssNamespaceRule, ICssRule, ICssNode, IStyleFormattable
{
private string _namespaceUri;
private string _prefix;
public string NamespaceUri {
get {
return _namespaceUri;
}
set {
CheckValidity();
_namespaceUri = (value ?? string.Empty);
}
}
public string Prefix {
get {
return _prefix;
}
set {
CheckValidity();
_prefix = (value ?? string.Empty);
}
}
internal CssNamespaceRule(CssParser parser)
: base(CssRuleType.Namespace, parser)
{
}
protected override void ReplaceWith(ICssRule rule)
{
CssNamespaceRule cssNamespaceRule = rule as CssNamespaceRule;
_namespaceUri = cssNamespaceRule._namespaceUri;
_prefix = cssNamespaceRule._prefix;
base.ReplaceWith(rule);
}
public override void ToCss(TextWriter writer, IStyleFormatter formatter)
{
string str = string.IsNullOrEmpty(_prefix) ? string.Empty : " ";
string value = _prefix + str + _namespaceUri.CssUrl();
writer.Write(formatter.Rule("@namespace", value));
}
private static bool IsNotSupported(CssRuleType type)
{
if (type != CssRuleType.Charset && type != CssRuleType.Import)
return type != CssRuleType.Namespace;
return false;
}
private void CheckValidity()
{
ICssRuleList cssRuleList = base.Owner?.Rules;
if (cssRuleList != null) {
foreach (ICssRule item in cssRuleList) {
if (IsNotSupported(item.Type))
throw new DomException(DomError.InvalidState);
}
}
}
}
}