private void Calculate() { // IDs var visitorIDs = new CssItemCollector <IdSelector>(); _selector.Accept(visitorIDs); if (visitorIDs.Items.Count > 0) { IDs = visitorIDs.Items.Count;// *100; } // Classes var visitorClasses = new CssItemCollector <ClassSelector>(); _selector.Accept(visitorClasses); if (visitorClasses.Items.Count > 0) { Classes = visitorClasses.Items.Count;// *10; } // Attributes var visitorAttribute = new CssItemCollector <AttributeSelector>(); _selector.Accept(visitorAttribute); if (visitorAttribute.Items.Count > 0) { Attributes = visitorAttribute.Items.Count;// *10; } // Elements var visitorElements = new CssItemCollector <ItemName>(); _selector.Accept(visitorElements); Elements = visitorElements.Items.Where(i => i.Text != "*" && i.FindType <AttributeSelector>() == null).Count(); // Pseudo Elements var visitorPseudoElementSelector = new CssItemCollector <PseudoElementSelector>(); _selector.Accept(visitorPseudoElementSelector); var visitorPseudoElementFunctionSelector = new CssItemCollector <PseudoElementFunctionSelector>(); _selector.Accept(visitorPseudoElementFunctionSelector); PseudoElements = visitorPseudoElementSelector.Items.Count + visitorPseudoElementFunctionSelector.Items.Count; // Pseudo Classes var visitorPseudoClassSelector = new CssItemCollector <PseudoClassSelector>(); _selector.Accept(visitorPseudoClassSelector); var visitorPseudoClassFunctionSelector = new CssItemCollector <PseudoClassFunctionSelector>(true); _selector.Accept(visitorPseudoClassFunctionSelector); int pseudoClases = visitorPseudoClassSelector.Items.Count(p => !p.IsPseudoElement()); pseudoClases += visitorPseudoClassFunctionSelector.Items.Where(p => !p.Text.StartsWith(":not(", StringComparison.Ordinal) && !p.Text.StartsWith(":matches(", StringComparison.Ordinal)).Count(); Elements += visitorPseudoClassSelector.Items.Count(p => p.IsPseudoElement()); if (pseudoClases > 0) { PseudoClasses = pseudoClases;// *10; } // Total //Total = IDs + Classes + Attributes + Elements + PseudoElements + PseudoClasses; }