Exemplo n.º 1
0
            private CssAtRule ConsumeAtRule(CssToken token)
            {
                var name    = token.StringValue;
                var grammar = _grammar.GetAtRuleGrammar(name);

                if (grammar == null)
                {
                    // At rule not supported by grammar
                    SkipAtRule();
                    return(null);
                }

                CssComponent prelude = null;
                CssBlock     block   = null;

                if (TryRead(out token))
                {
                    var preludeScope = new AtRulePreludeScope(this, grammar);
                    prelude = grammar.ParseAtRulePrelude(preludeScope);
                    if (token.TokenType == CssTokenType.LeftCurlyBracket)
                    {
                        var blockScope = new RuleBlockScope(this, grammar);
                        block = new CssBlock(CssBlockType.CurlyBrackets, _grammar.ParseAtRuleBlock(blockScope));
                    }
                }

                return(grammar.CreateAtRule(name, prelude ?? CssComponent.Empty, block));
            }
Exemplo n.º 2
0
            /*
             * NOTE: Each ConsumeXXX method consumes the token that is current as of when the
             * method is called and consumes all subsequent tokens that are read from the tokenizer
             * during method execution. ConsumeXXX operations must only call other ConsumeYYY
             * operations and not call any ParseXXX methods.
             */

            /// <summary>
            /// Reads current token and all subsequent tokens that compose into a <see cref="CssQualifiedRule"/> instance.
            /// </summary>
            /// <returns></returns>
            private CssQualifiedRule ConsumeQualifiedRule(CssToken token)
            {
                var preludeFragmentParser = new QualifiedRulePreludeScope(this, _grammar);
                var prelude = _grammar.ParseQualifiedRulePrelude(preludeFragmentParser);

                if (token.TokenType == CssTokenType.LeftCurlyBracket && TryRead(out token))
                {
                    var blockFragmentParser = new RuleBlockScope(this, _grammar);
                    var block = new CssBlock(CssBlockType.CurlyBrackets, _grammar.ParseQualifiedRuleBlock(blockFragmentParser));
                    return(_grammar.CreateQualifiedRule(prelude, block));
                }

                // Parse error
                return(null);
            }