コード例 #1
0
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (AtRule.IsRule(text, stream, "for"))
            {
                ParseRule(itemFactory, text, stream);

                var variable = new VariableName(SassClassifierType.VariableDefinition);
                if (variable.Parse(itemFactory, text, stream))
                {
                    Variable = variable;
                    Children.Add(Variable);
                }

                if (IsKeyword(text, stream, "from"))
                {
                    FromKeyword = Children.AddCurrentAndAdvance(stream, SassClassifierType.Keyword);

                    while (!(IsKeyword(text, stream, "to") || IsKeyword(text, stream, "through")))
                    {
                        ParseItem fromValue;
                        if (itemFactory.TryCreateParsedOrDefault(this, text, stream, out fromValue))
                        {
                            FromExpressionValues.Add(fromValue);
                            Children.Add(fromValue);
                        }
                    }
                }

                bool isToKeyword      = IsKeyword(text, stream, "to");
                bool isThroughKeyword = !isToKeyword && IsKeyword(text, stream, "through");

                if (isToKeyword || isThroughKeyword)
                {
                    if (isToKeyword)
                    {
                        ToKeyword = Children.AddCurrentAndAdvance(stream, SassClassifierType.Keyword);
                    }

                    if (isThroughKeyword)
                    {
                        ThroughKeyword = Children.AddCurrentAndAdvance(stream, SassClassifierType.Keyword);
                    }

                    while (!IsRangeTerminator(stream.Current.Type))
                    {
                        ParseItem rangeValue;
                        if (itemFactory.TryCreateParsedOrDefault(this, text, stream, out rangeValue))
                        {
                            RangeExpressionValues.Add(rangeValue);
                            Children.Add(rangeValue);
                        }
                    }
                }

                ParseBody(itemFactory, text, stream);
            }

            return(Children.Count > 0);
        }
コード例 #2
0
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            var name = new VariableName(SassClassifierType.VariableReference);

            if (name.Parse(itemFactory, text, stream))
            {
                Name = name;
                Children.Add(name);
            }

            return(Children.Count > 0);
        }
コード例 #3
0
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            var name = new VariableName(SassClassifierType.VariableDefinition);

            if (name.Parse(itemFactory, text, stream))
            {
                Name = name;
                Children.Add(name);
            }

            if (stream.Current.Type == TokenType.Colon)
            {
                Colon = Children.AddCurrentAndAdvance(stream);
            }

            while (!IsValueTerminator(Mode, stream))
            {
                ParseItem item;
                if (itemFactory.TryCreateParsedOrDefault(this, text, stream, out item))
                {
                    Values.Add(item);
                    Children.Add(item);
                }
            }

            if (stream.Current.Type == TokenType.Bang)
            {
                var modifier = new DefaultModifier();
                if (modifier.Parse(itemFactory, text, stream))
                {
                    Modifier = modifier;
                    Children.Add(modifier);
                }
                else
                {
                    Children.AddCurrentAndAdvance(stream);
                }
            }

            if (stream.Current.Type == TokenType.Semicolon)
            {
                Semicolon = Children.AddCurrentAndAdvance(stream);
            }

            return(Children.Count > 0);
        }