Exemplo n.º 1
0
 public override Node Clone(Node newParent)
 {
     var newSelector = new Selector(newParent);
     newSelector.Names = new List<string>(Names);
     newSelector.Block = (Block)Block.Clone(newSelector);
     return newSelector;
 }
Exemplo n.º 2
0
        internal static bool TryParse(Node parent, Queue<Word> remainingWords, out Selector selector)
        {
            var openingBraceFound = false;
            foreach (var word in remainingWords)
            {
                if (word.Text == "{")
                {
                    openingBraceFound = true;
                    break;
                }
            }

            if (!openingBraceFound)
            {
                selector = null;
                return false;
            }

            selector = new Selector(parent);
            while (remainingWords.Peek().Text != "{")
            {
                selector.Names.Add(remainingWords.Dequeue().Text);
            }
            Block block;
            if (!Block.TryParse(selector, remainingWords, out block))
            {
                selector = null;
                return false;
            }
            selector.Block = block;
            return true;
        }
Exemplo n.º 3
0
        internal void TryExtend(Selector targetSelector)
        {
            var searchNode = this as Node;
            while (searchNode != null &&
                   !(searchNode is Selector))
            {
                searchNode = searchNode.Parent;
            }

            var parentSelector = searchNode as Selector;
            var expressionValue = Value as Expression;
            foreach (NamedValue namedValue in expressionValue.Children)
            {
                var criteria = namedValue.Text;

                var originalTargetSelectorNames = new List<string>(targetSelector.Names);
                foreach (var targetSelectorName in originalTargetSelectorNames)
                {
                    if (!targetSelectorName.StartsWith(criteria))
                    {
                        continue;
                    }

                    var extendedNameSuffix = targetSelectorName.Substring(criteria.Length);
                    foreach (var parentName in parentSelector.Names)
                    {
                        var extendedName = parentName + extendedNameSuffix;
                        targetSelector.Names.Add(",");
                        targetSelector.Names.Add(extendedName);
                    }
                }
            }
        }