/// <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)));
        }
Exemple #2
0
        /// <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));
 }