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)); } }
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); } }
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); }