CssNamespaceRule
Represents an @namespace rule.
using AngleSharp.Extensions;
using AngleSharp.Parser.Css;
namespace AngleSharp.Dom.Css
{
internal sealed class CssNamespaceRule : CssRule, ICssNamespaceRule, ICssRule, 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;
}
private void CheckValidity()
{
ICssRuleList cssRuleList = base.Owner?.Rules;
if (cssRuleList != null) {
foreach (ICssRule item in cssRuleList) {
if (item.Type != CssRuleType.Charset && item.Type != CssRuleType.Import && item.Type != CssRuleType.Namespace)
throw new DomException(DomError.InvalidState);
}
}
}
public override string ToCss(IStyleFormatter formatter)
{
string str = string.IsNullOrEmpty(_prefix) ? string.Empty : " ";
string value = _prefix + str + _namespaceUri.CssUrl();
return formatter.Rule("@namespace", value);
}
}
}