Пример #1
0
        private void ProcessPhrase(Binding binding, BindingPhrase phrase, ElementNode element)
        {
            IEnumerable <Snippet> code = from bindingNode in phrase.Nodes select this.BuildSnippetsForNode(binding, bindingNode, element);

            if (phrase.Type == BindingPhrase.PhraseType.Expression)
            {
                base.Accept(new ExpressionNode(code));
            }
            else
            {
                if (phrase.Type != BindingPhrase.PhraseType.Statement)
                {
                    throw new CompilerException("Unknown binding phrase type " + phrase.Type);
                }
                base.Accept(new StatementNode(code));
            }
        }
Пример #2
0
        private void ProcessPhrase(Binding binding, BindingPhrase phrase, ElementNode element)
        {
            var snippets = phrase.Nodes.SelectMany(bindingNode => BuildSnippetsForNode(binding, bindingNode, element));

            if (phrase.Type == BindingPhrase.PhraseType.Expression)
            {
                Accept(new ExpressionNode(snippets));
            }
            else if (phrase.Type == BindingPhrase.PhraseType.Statement)
            {
                Accept(new StatementNode(snippets));
            }
            else
            {
                throw new CompilerException("Unknown binding phrase type " + phrase.Type);
            }
        }
Пример #3
0
        private void BeginBinding(ElementNode element, Binding binding)
        {
            if (binding.HasChildReference)
            {
                string code = string.Format("{{var __bindingWriter{0} = new System.IO.StringWriter(); using(OutputScope(__bindingWriter{0})) {{", base.FrameData.NestingLevel);
                base.Accept(new StatementNode(code));
            }
            else
            {
                BindingPhrase phrase = binding.Phrases.First <BindingPhrase>();
                this.ProcessPhrase(binding, phrase, element);
            }
            Frame frameData = new Frame {
                Binding      = binding,
                Element      = element,
                NestingLevel = base.FrameData.NestingLevel + 1
            };

            base.PushFrame(this.Nodes, frameData);
        }