/// <summary> /// Compiles a <see cref="UvssRuleSet"/> from the specified syntax node. /// </summary> private static UvssRuleSet CompileRuleSet(UvssRuleSetSyntax node, CultureInfo culture) { var selectors = new List <UvssSelector>(); for (int i = 0; i < node.Selectors.Count; i++) { var selectorNode = node.Selectors[i]; var selector = CompileSelector(selectorNode); selectors.Add(selector); } var rules = new List <UvssRule>(); var triggers = new List <UvssTrigger>(); for (int i = 0; i < node.Body.Content.Count; i++) { var bodyNode = node.Body.Content[i]; switch (bodyNode.Kind) { case SyntaxKind.Rule: { var rule = CompileRule((UvssRuleSyntax)bodyNode, culture); rules.Add(rule); } break; case SyntaxKind.Transition: { var transition = CompileTransition((UvssTransitionSyntax)bodyNode, culture); rules.Add(transition); } break; case SyntaxKind.PropertyTrigger: { var trigger = CompilePropertyTrigger((UvssPropertyTriggerSyntax)bodyNode, culture); triggers.Add(trigger); } break; case SyntaxKind.EventTrigger: { var trigger = CompileEventTrigger((UvssEventTriggerSyntax)bodyNode, culture); triggers.Add(trigger); } break; } } return(new UvssRuleSet( new UvssSelectorCollection(selectors), new UvssRuleCollection(rules), new UvssTriggerCollection(triggers))); }
/// <inheritdoc/> public override SyntaxNode VisitRuleSet(UvssRuleSetSyntax node) { var unchanged = true; var newSelectorList = VisitSeparatedList(node.Selectors); if (newSelectorList.Node != node.Selectors.Node) { unchanged = false; } var newBody = (UvssBlockSyntax)Visit(node.Body); if (newBody != node.Body) { unchanged = false; } return(unchanged ? node : new UvssRuleSetSyntax( newSelectorList, newBody)); }
/// <summary> /// Visits the specified rule set node. /// </summary> /// <param name="node">The node to visit.</param> /// <returns>A node which should replace the visited node, or a reference to the visited node /// itself if no changes were made.</returns> public virtual SyntaxNode VisitRuleSet(UvssRuleSetSyntax node) { return(VisitSyntaxNode(node)); }