示例#1
0
		/// <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();
			}
		}
示例#2
0
        /// <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();
                }
            });
        }
示例#3
0
        /// <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();
                }
            });
        }
示例#4
0
		/// <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;
		}
示例#5
0
		/// <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();
				       }
			       };
		}