示例#1
0
        protected override bool ParseSelectorToken(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (stream.Current.Type == TokenType.OpenBrace)
            {
                OpenBrace = Children.AddCurrentAndAdvance(stream, SassClassifierType.SquareBrace);
                if (stream.Current.Type == TokenType.Identifier)
                    Attribute = Children.AddCurrentAndAdvance(stream);

                if (IsAttributeOperator(stream.Current.Type))
                    Operator = Children.AddCurrentAndAdvance(stream);

                if (stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString)
                {
                    Value = itemFactory.CreateSpecificParsed<StringValue>(this, text, stream);
                    if (Value != null)
                        Children.Add(Value);
                } else if (stream.Current.Type == TokenType.Identifier)
                {
                    Value = Children.AddCurrentAndAdvance(stream, SassClassifierType.String);
                }

                if (stream.Current.Type == TokenType.CloseBrace)
                    CloseBrace = Children.AddCurrentAndAdvance(stream, SassClassifierType.SquareBrace);
            }

            return Children.Count > 0;
        }
        protected override void ParseImport(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString)
            {
                Filename = itemFactory.CreateSpecificParsed<StringValue>(this, text, stream);
                if (Filename != null)
                    Children.Add(Filename);
            }
            else if (UrlItem.IsUrl(text, stream.Current))
            {
                var url = new UrlItem();
                if (url.Parse(itemFactory, text, stream))
                {
                    Url = url;
                    Children.Add(url);
                }
            }

            while (!IsTerminator(stream.Current.Type))
            {
                var query = new MediaQuery();
                if (!query.Parse(itemFactory, text, stream))
                    break;

                _MediaQueries.Add(query);
                Children.Add(query);
            }
        }
        protected override void ParseImport(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString)
            {
                Filename = itemFactory.CreateSpecificParsed <StringValue>(this, text, stream);
                if (Filename != null)
                {
                    Children.Add(Filename);
                }
            }
            else if (UrlItem.IsUrl(text, stream.Current))
            {
                var url = new UrlItem();
                if (url.Parse(itemFactory, text, stream))
                {
                    Url = url;
                    Children.Add(url);
                }
            }

            while (!IsTerminator(stream.Current.Type))
            {
                var query = new MediaQuery();
                if (!query.Parse(itemFactory, text, stream))
                {
                    break;
                }

                _MediaQueries.Add(query);
                Children.Add(query);
            }
        }
示例#4
0
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (IsUrl(text, stream.Current))
            {
                Function = Children.AddCurrentAndAdvance(stream, SassClassifierType.SystemFunction);

                if (stream.Current.Type == TokenType.OpenFunctionBrace)
                    OpenBrace = Children.AddCurrentAndAdvance(stream, SassClassifierType.FunctionBrace);

                if ((stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString))
                {
                    Url = itemFactory.CreateSpecificParsed<StringValue>(this, text, stream);
                    if (Url != null)
                        Children.Add(Url);
                }
                else
                {
                    // not using string, so just consume everything until close of url()
                    while (!IsUrlTerminator(stream.Current.Type))
                    {
                        Children.AddCurrentAndAdvance(stream, SassClassifierType.String);
                    }
                }

                if (stream.Current.Type == TokenType.CloseFunctionBrace)
                    CloseBrace = Children.AddCurrentAndAdvance(stream, SassClassifierType.FunctionBrace);
            }

            return Children.Count > 0;
        }
示例#5
0
 protected override void ParseDirective(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
 {
     switch (stream.Current.Type)
     {
         case TokenType.String:
             CharacterSet = itemFactory.CreateSpecificParsed<StringValue>(this, text, stream);
             if (CharacterSet != null)
                 Children.Add(CharacterSet);
             break;
         case TokenType.Identifier:
             CharacterSet = Children.AddCurrentAndAdvance(stream);
             break;
     }
 }
示例#6
0
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (stream.Current.Type == TokenType.Identifier)
            {
                Name = Children.AddCurrentAndAdvance(stream, SassClassifierType.XmlDocumentationTag);

                if (stream.Current.Type == TokenType.Equal)
                    EqualSign = Children.AddCurrentAndAdvance(stream);

                if (stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString)
                    Value = itemFactory.CreateSpecificParsed<StringValue>(this, text, stream);
            }

            return Children.Count > 0;
        }
示例#7
0
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString)
            {
                Filename = itemFactory.CreateSpecificParsed<StringValue>(this, text, stream);
                if (Filename != null)
                    Children.Add(Filename);

                if (stream.Current.Type == TokenType.NewLine)
                    Children.AddCurrentAndAdvance(stream);

                if (stream.Current.Type == TokenType.Comma)
                    Comma = Children.AddCurrentAndAdvance(stream, SassClassifierType.Punctuation);
            }

            return Children.Count > 0;
        }
示例#8
0
        protected override void ParseDirective(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            switch (stream.Current.Type)
            {
            case TokenType.String:
                CharacterSet = itemFactory.CreateSpecificParsed <StringValue>(this, text, stream);
                if (CharacterSet != null)
                {
                    Children.Add(CharacterSet);
                }
                break;

            case TokenType.Identifier:
                CharacterSet = Children.AddCurrentAndAdvance(stream);
                break;
            }
        }
示例#9
0
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (stream.Current.Type == TokenType.Identifier)
            {
                Name = Children.AddCurrentAndAdvance(stream, SassClassifierType.XmlDocumentationTag);

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

                if (stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString)
                {
                    Value = itemFactory.CreateSpecificParsed <StringValue>(this, text, stream);
                }
            }

            return(Children.Count > 0);
        }
示例#10
0
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString)
            {
                Filename = itemFactory.CreateSpecificParsed <StringValue>(this, text, stream);
                if (Filename != null)
                {
                    Children.Add(Filename);
                }

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

                if (stream.Current.Type == TokenType.Comma)
                {
                    Comma = Children.AddCurrentAndAdvance(stream, SassClassifierType.Punctuation);
                }
            }

            return(Children.Count > 0);
        }
示例#11
0
        protected override bool ParseSelectorToken(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (stream.Current.Type == TokenType.OpenBrace)
            {
                OpenBrace = Children.AddCurrentAndAdvance(stream, SassClassifierType.SquareBrace);
                if (stream.Current.Type == TokenType.Identifier)
                {
                    Attribute = Children.AddCurrentAndAdvance(stream);
                }

                if (IsAttributeOperator(stream.Current.Type))
                {
                    Operator = Children.AddCurrentAndAdvance(stream);
                }

                if (stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString)
                {
                    Value = itemFactory.CreateSpecificParsed <StringValue>(this, text, stream);
                    if (Value != null)
                    {
                        Children.Add(Value);
                    }
                }
                else if (stream.Current.Type == TokenType.Identifier)
                {
                    Value = Children.AddCurrentAndAdvance(stream, SassClassifierType.String);
                }

                if (stream.Current.Type == TokenType.CloseBrace)
                {
                    CloseBrace = Children.AddCurrentAndAdvance(stream, SassClassifierType.SquareBrace);
                }
            }

            return(Children.Count > 0);
        }
示例#12
0
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            if (IsUrl(text, stream.Current))
            {
                Function = Children.AddCurrentAndAdvance(stream, SassClassifierType.SystemFunction);

                if (stream.Current.Type == TokenType.OpenFunctionBrace)
                {
                    OpenBrace = Children.AddCurrentAndAdvance(stream, SassClassifierType.FunctionBrace);
                }

                if ((stream.Current.Type == TokenType.String || stream.Current.Type == TokenType.BadString))
                {
                    Url = itemFactory.CreateSpecificParsed <StringValue>(this, text, stream);
                    if (Url != null)
                    {
                        Children.Add(Url);
                    }
                }
                else
                {
                    // not using string, so just consume everything until close of url()
                    while (!IsUrlTerminator(stream.Current.Type))
                    {
                        Children.AddCurrentAndAdvance(stream, SassClassifierType.String);
                    }
                }

                if (stream.Current.Type == TokenType.CloseFunctionBrace)
                {
                    CloseBrace = Children.AddCurrentAndAdvance(stream, SassClassifierType.FunctionBrace);
                }
            }

            return(Children.Count > 0);
        }