Ejemplo n.º 1
0
        [MethodImpl(MethodImplOptions.AggressiveInlining)]// Private static function called in loops, inline it
        static CssAtRule Consume_AtRule(DataConsumer <CssToken> Stream)
        {
            if (Stream is null)
            {
                throw new CssParserException(CssErrors.STREAM_IS_NULL);
            }
            var       name = (Stream.Next as ValuedTokenBase).Value;
            CssAtRule Rule = new CssAtRule(name);
            CssToken  Token;

            do
            {
                Token = Stream.Consume();
                switch (Token.Type)
                {
                case ECssTokenType.Semicolon:
                case ECssTokenType.EOF:
                    return(Rule);

                case ECssTokenType.Bracket_Open:
                    Rule.Block = Consume_SimpleBlock(Stream);
                    break;

                default:
                {
                    Stream.Reconsume();
                    Rule.Prelude.Add(Consume_ComponentValue(Stream));
                }
                break;
                }
            }while (Token.Type != ECssTokenType.EOF);
            return(Rule);
        }
Ejemplo n.º 2
0
        public override Value ReadStartValue(CssLexer lexer)
        {
            // Read off the at:
            lexer.Read();

            // Read the name now:
            string name = lexer.ReadString();

            // Skip any junk:
            lexer.SkipJunk();

            // Map to an at rule:
            CssAtRule rule = CssAtRules.GetLocal(name);

            if (rule == null)
            {
                // Unrecognised - enter error recovery mode:
                lexer.ErrorRecovery();

                // Done:
                return(null);
            }

            // Create the representitive unit:
            AtRuleUnit at = new AtRuleUnit();

            at.AtRule = rule;

            // Now in @ mode:
            rule.SetupParsing(lexer);

            return(at);
        }