コード例 #1
0
        protected override void ParseArgument(ItemFactory itemFactory, ITextProvider text, TokenStream tokens)
        {
            SimpleSelector simpleSelector = itemFactory.CreateSpecific <SimpleSelector>(this);

            if (simpleSelector.ParseInFunction(itemFactory, text, tokens))
            {
                Selector = simpleSelector;
                ArgumentItems.Add(Selector);
                Children.Add(Selector);
            }

            if (tokens.CurrentToken.TokenType != CssTokenType.Comma &&
                tokens.CurrentToken.TokenType != CssTokenType.CloseFunctionBrace)
            {
                Children.AddParseError(ParseErrorType.FunctionArgumentCommaMissing);
            }
        }
コード例 #2
0
        public override bool Parse(ItemFactory itemFactory, ITextProvider text, TokenStream tokens)
        {
            while (!IsAtSelectorGroupTerminator(tokens))
            {
                SimpleSelector simpleSelector = itemFactory.CreateSpecific <SimpleSelector>(this);
                if (!simpleSelector.Parse(itemFactory, text, tokens))
                {
                    break;
                }

                SimpleSelectors.Add(simpleSelector);
                Children.Add(simpleSelector);
            }

            if (tokens.CurrentToken.TokenType == CssTokenType.Comma)
            {
                Comma = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.Punctuation);

                if (SimpleSelectors.Count == 0)
                {
                    Comma.AddParseError(ParseErrorType.SelectorBeforeCommaMissing, ParseErrorLocation.BeforeItem);
                }
            }

            if (SimpleSelectors.Count > 0)
            {
                SimpleSelector lastSimpleSelector = SimpleSelectors[SimpleSelectors.Count - 1];

                if (lastSimpleSelector.SelectorCombineOperator != null)
                {
                    lastSimpleSelector.AddParseError(ParseErrorType.SelectorAfterCombineOperatorMissing, ParseErrorLocation.AfterItem);
                }
            }

            return(Children.Count > 0);
        }