Esempio n. 1
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();
                }
            });
        }
Esempio n. 2
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();
                }
            });
        }
Esempio n. 3
0
        public void CollapsesPreviousWhiteSpace()
        {
            var factory = new Factory();

            // "Hello {{~test}}"
            var document = factory.Document(
                factory.Text("Hello"),
                factory.WhiteSpace(1),
                factory.Expression(
                    factory.MetaCode("{{", T.OpenTag),
                    factory.MetaCode("~", T.Tilde),
                    factory.Span(SpanKind.Expression, factory.Symbol("this", T.Identifier)),
                    factory.MetaCode("}}", T.CloseTag)));

            factory = new Factory();

            // "Hello{{~test}}"
            var expected = factory.Document(
                factory.Text("Hello"),
                factory.WhiteSpace(1, collapsed: true),
                factory.Expression(
                    factory.MetaCode("{{", T.OpenTag),
                    factory.MetaCode("~", T.Tilde),
                    factory.Span(SpanKind.Expression, factory.Symbol("this", T.Identifier)),
                    factory.MetaCode("}}", T.CloseTag)));

            var visitor = new WhiteSpaceCollapsingParserVisitor();

            visitor.VisitBlock(document);

            var builder  = new StringBuilder();
            var comparer = new EquivalanceComparer(builder, 0);

            Assert.True(comparer.Equals(expected, document), builder.ToString());
        }
Esempio n. 4
0
        public void CollapsesWhiteSpaceInParentBlocks()
        {
            var factory = new Factory();

            // "Message:{{#this~}} Hello {{~/this~}} There"
            var document = factory.Document(
                factory.Text("Message:"),
                factory.Tag("this",
                            factory.TagElement("this",
                                               factory.MetaCode("{{", T.OpenTag),
                                               factory.MetaCode("#", T.Hash),
                                               factory.Expression(factory.Parameter("this")),
                                               factory.MetaCode("~", T.Tilde),
                                               factory.MetaCode("}}", T.CloseTag)),
                            factory.WhiteSpace(1),
                            factory.Text("Hello"),
                            factory.WhiteSpace(1),
                            factory.TagElement("this",
                                               factory.MetaCode("{{", T.OpenTag),
                                               factory.MetaCode("~", T.Tilde),
                                               factory.MetaCode("/", T.Slash),
                                               factory.Expression(factory.Parameter("this")),
                                               factory.MetaCode("~", T.Tilde),
                                               factory.MetaCode("}}", T.CloseTag))),
                factory.WhiteSpace(1),
                factory.Text("There"));

            factory = new Factory();

            // "Message:{{#this~}}Hello{{~/this~}}There"
            var expected = factory.Document(
                factory.Text("Message:"),
                factory.Tag("this",
                            factory.TagElement("this",
                                               factory.MetaCode("{{", T.OpenTag),
                                               factory.MetaCode("#", T.Hash),
                                               factory.Expression(factory.Parameter("this")),
                                               factory.MetaCode("~", T.Tilde),
                                               factory.MetaCode("}}", T.CloseTag)),
                            factory.WhiteSpace(1, collapsed: true),
                            factory.Text("Hello"),
                            factory.WhiteSpace(1, collapsed: true),
                            factory.TagElement("this",
                                               factory.MetaCode("{{", T.OpenTag),
                                               factory.MetaCode("~", T.Tilde),
                                               factory.MetaCode("/", T.Slash),
                                               factory.Expression(factory.Parameter("this")),
                                               factory.MetaCode("~", T.Tilde),
                                               factory.MetaCode("}}", T.CloseTag))),
                factory.WhiteSpace(1, collapsed: true),
                factory.Text("There"));

            var visitor = new WhiteSpaceCollapsingParserVisitor();

            visitor.VisitBlock(document);

            var builder  = new StringBuilder();
            var comparer = new EquivalanceComparer(builder, 0);

            Assert.True(comparer.Equals(expected, document), builder.ToString());
        }