示例#1
0
        internal static bool TryParse(Node parent, Queue <Word> remainingWords, out ExtendDirective directive)
        {
            directive = null;
            if (remainingWords.Peek().Text != "@extend")
            {
                return(false);
            }

            directive      = new ExtendDirective(parent);
            directive.Name = remainingWords.Dequeue().Text.Substring(1);


            Expression expression;

            if (!Expression.TryParse(directive, remainingWords, out expression))
            {
                throw new Exception("errp?");
            }
            // remove ';'
            if (remainingWords.Peek().Text == ";")
            {
                remainingWords.Dequeue();
            }
            directive.Value = expression;


            return(true);
        }
示例#2
0
        internal static bool TryParse(Node parent, Queue<Word> remainingWords, out ExtendDirective directive)
        {
            directive = null;
            if (remainingWords.Peek().Text != "@extend")
            {
                return false;
            }

            directive = new ExtendDirective(parent);
            directive.Name = remainingWords.Dequeue().Text.Substring(1);

            Expression expression;
            if (!Expression.TryParse(directive, remainingWords, out expression))
            {
                throw new Exception("errp?");
            }
            // remove ';'
            if (remainingWords.Peek().Text == ";")
            {
                remainingWords.Dequeue();
            }
            directive.Value = expression;

            return true;
        }
示例#3
0
 public override Node Clone(Node newParent)
 {
     var newDirective = new ExtendDirective(newParent);
     newDirective.Name = Name;
     newDirective.Value = Value.Clone(newDirective);
     return newDirective;
 }
示例#4
0
        public override Node Clone(Node newParent)
        {
            var newDirective = new ExtendDirective(newParent);

            newDirective.Name  = Name;
            newDirective.Value = Value.Clone(newDirective);
            return(newDirective);
        }
示例#5
0
        internal static bool TryParse(Node parent, Queue <Word> remainingWords, out Block block)
        {
            if (remainingWords.Peek().Text != "{")
            {
                block = null;
                return(false);
            }
            remainingWords.Dequeue();

            block = new Block(parent);
            while (remainingWords.Peek().Text != "}")
            {
                IncludeDirective includeDirective;
                if (IncludeDirective.TryParse(block, remainingWords, out includeDirective))
                {
                    block.Children.Add(includeDirective);
                    continue;
                }

                ExtendDirective excludeDirective;
                if (ExtendDirective.TryParse(block, remainingWords, out excludeDirective))
                {
                    block.Children.Add(excludeDirective);
                    continue;
                }

                PropertyAssignment property;
                if (PropertyAssignment.TryParse(block, remainingWords, out property))
                {
                    block.Children.Add(property);
                    continue;
                }

                Selector selector;
                if (Selector.TryParse(block, remainingWords, out selector))
                {
                    block.Children.Add(selector);
                    continue;
                }
            }
            remainingWords.Dequeue();

            return(true);
        }