/// <summary> /// Renders the content of a block helper. /// </summary> /// <param name="children">The children of the helper block.</param> /// <param name="context">The render context.</param> /// <param name="data">The new data model.</param> /// <returns>The string content of the result.</returns> private string RenderHelperChildren(IEnumerable<SyntaxTreeNode> children, RenderContext context, object data) { RenderContext targetContext = context; RenderContextScope scope = null; if (data != null) { scope = context.BeginScope(data); targetContext = scope.ScopeContext; } using (var writer = new StringWriter()) { var renderer = new RenderingParserVisitor(writer, targetContext, context.ModelMetadataProvider); foreach (var node in children) { node.Accept(renderer); } if (scope != null) { scope.Dispose(); } return writer.GetStringBuilder().ToString(); } }
/// <inheritdoc /> public Func <RenderContext, string> CompilePartial(string template) { var document = CreateDocument(template); // Collapse any whitespace. var whitespace = new WhiteSpaceCollapsingParserVisitor(); document.Accept(whitespace); return((context) => { using (var writer = new StringWriter()) { var render = new RenderingParserVisitor(writer, context, ModelMetadataProvider ?? new DefaultModelMetadataProvider()) { Service = this }; // Render the document. document.Accept(render); return writer.GetStringBuilder().ToString(); } }); }
/// <inheritdoc /> public HandlebarTemplate Compile(string template) { var document = CreateDocument(template); // Collapse any whitespace. var whitespace = new WhiteSpaceCollapsingParserVisitor(); document.Accept(whitespace); return((model, resolver) => { using (var writer = new StringWriter()) { var render = new RenderingParserVisitor(writer, model, ModelMetadataProvider ?? new DefaultModelMetadataProvider(), resolver) { Service = this }; // Render the document. document.Accept(render); return writer.GetStringBuilder().ToString(); } }); }
/// <summary> /// Creates a <see cref="RenderContext"/> using the renderer provided. /// </summary> /// <param name="renderer">The renderering parser visitor.</param> /// <param name="model">The model.</param> /// <returns>The render context.</returns> public static RenderContext CreateRenderContext(RenderingParserVisitor renderer, object model = null) { if (renderer == null) { throw new ArgumentNullException("renderer"); } var context = new RenderContext(renderer) { TemplateData = new TemplateData() { Model = model, ModelMetadata = (model == null) ? null : renderer.ModelMetadataProvider.GetMetadataForType(() => model, model.GetType()) }, ModelMetadataProvider = renderer.ModelMetadataProvider, Service = renderer.Service }; return context; }
/// <inheritdoc /> public Func<object, string> Compile(string template) { var document = CreateDocument(template); // Collapse any whitespace. var whitespace = new WhiteSpaceCollapsingParserVisitor(); document.Accept(whitespace); return (model) => { using (var writer = new StringWriter()) { var render = new RenderingParserVisitor(writer, model, ModelMetadataProvider ?? new DefaultModelMetadataProvider()) { Service = this }; // Render the document. document.Accept(render); return writer.GetStringBuilder().ToString(); } }; }