示例#1
0
 public static void Rule(List lhs, OpenBracket openBracket, OptionalListBody optionalListBody, CloseBracket closeBracket)
 {
     if (optionalListBody.CodeList == null)
     {
         lhs.CodeList = new CodeList();
     }
     else
     {
         lhs.CodeList = optionalListBody.CodeList;
     }
 }
示例#2
0
 public static void Rule(List lhs, OpenBracket openBracket, OptionalListBody optionalListBody, CloseBracket closeBracket)
 {
     if (optionalListBody.CodeList == null)
     {
         lhs.CodeList = new CodeList();
     }
     else
     {
         lhs.CodeList = optionalListBody.CodeList;
     }
 }
示例#3
0
 protected virtual OpenBracket VisitOpenBracket(OpenBracket node)
 {
     return(VisitSyntaxNode(node) as OpenBracket);
 }
示例#4
0
 protected override OpenBracket VisitOpenBracket(OpenBracket node)
 {
     visitedOpenBracket = true;
     Assert.IsTrue(node.Value == "[");
     return(base.VisitOpenBracket(node));
 }
示例#5
0
        public override bool Parse(ItemFactory itemFactory, ITextProvider text, TokenStream tokens)
        {
            if (tokens.CurrentToken.TokenType != CssTokenType.OpenSquareBracket)
            {
                return(false);
            }

            // Collect each piece of "[ name = value ]", any of which could be missing after the '['

            OpenBracket = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.SquareBracket);

            if (ItemName.IsAtItemName(tokens))
            {
                AttributeName = itemFactory.CreateSpecific <ItemName>(this);
                AttributeName.Parse(itemFactory, text, tokens);
                AttributeName.Context = CssClassifierContextCache.FromTypeEnum(CssClassifierContextType.ElementAttribute);
                Children.Add(AttributeName);
            }
            else
            {
                OpenBracket.AddParseError(ParseErrorType.AttributeSelectorElementMissing, ParseErrorLocation.AfterItem);
            }

            switch (tokens.CurrentToken.TokenType)
            {
            case CssTokenType.BeginsWith:           // ^=
            case CssTokenType.EndsWith:             // $=
            case CssTokenType.OneOf:                // ~=
            case CssTokenType.ListBeginsWith:       // |=
            case CssTokenType.ContainsString:       // *=
            case CssTokenType.Equals:               // =
                Operation = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.SelectorOperator);
                break;
            }

            if (tokens.CurrentToken.TokenType == CssTokenType.Identifier)
            {
                AttributeValue = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.ElementAttributeValue);
            }
            else if (tokens.CurrentToken.IsString())
            {
                AttributeValue = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.ElementAttributeValue);
            }

            if (AttributeValue != null && Operation == null)
            {
                AttributeValue.AddParseError(ParseErrorType.AttributeSelectorOperationMissing, ParseErrorLocation.BeforeItem);
            }
            else if (AttributeValue == null && Operation != null)
            {
                Operation.AddParseError(ParseErrorType.AttributeSelectorValueMissing, ParseErrorLocation.AfterItem);
            }

            if (AttributeValue != null && tokens.CurrentToken.TokenType == CssTokenType.Identifier)
            {
                OperationModifier = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.SelectorOperator);

                if (OperationModifier.Length != 1 || text[OperationModifier.Start] != 'i')
                {
                    OperationModifier.AddParseError(ParseErrorType.UnexpectedToken, ParseErrorLocation.WholeItem);
                }
            }

            if (tokens.CurrentToken.TokenType == CssTokenType.CloseSquareBracket)
            {
                CloseBracket = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.SquareBracket);
            }
            else
            {
                AddParseError(ParseErrorType.AttributeSelectorCloseBracketMissing, ParseErrorLocation.AfterItem);
            }

            return(Children.Count > 0);
        }
示例#6
0
 public static void Rule(List lhs, OpenBracket openBracket, OptionalListBody optionalListBody, CloseBracket closeBracket)
 {
     lhs.CodeList = optionalListBody.CodeList ?? new CodeList();
 }
        private bool ReadToken(out Token token)
        {
            var currentState = InputState.Start;
            var tokenStr     = new StringBuilder();

            for (; _pos < _expression.Length; _pos++)
            {
                var symbol = _expression[_pos];
                var pair   = _table.Get(new KeyValuePair <InputState, char>(currentState, symbol));

                if (pair.Key == InputState.Start)
                {
                    continue;
                }

                if (pair.Key == InputState.Finish)
                {
                    switch (pair.Value)
                    {
                    case OutputState.Add:
                        token = new Add();
                        Step();
                        return(true);

                    case OutputState.Sub:
                        token = new Substract();
                        Step();
                        return(true);

                    case OutputState.Mul:
                        token = new Multiply();
                        return(true);

                    case OutputState.Div:
                        token = new Divide();
                        Step();
                        return(true);

                    case OutputState.Pow:
                        token = new Power();
                        Step();
                        return(true);

                    case OutputState.LBr:
                        token = new OpenBracket();
                        Step();
                        return(true);

                    case OutputState.RBr:
                        token = new CloseBracket();
                        Step();
                        return(true);

                    case OutputState.LPart:
                        token = new Digit(tokenStr.ToString());
                        return(true);

                    case OutputState.RPart:
                        token = new Digit(tokenStr.ToString());
                        return(true);
                    }
                }
                currentState = pair.Key;
                tokenStr.Append(symbol);
            }
            token = null;
            return(false);
        }
示例#8
0
 public static void Rule(List lhs, OpenBracket openBracket, OptionalListBody optionalListBody, CloseBracket closeBracket)
 {
     lhs.CodeList = optionalListBody.CodeList ?? new CodeList();
 }