示例#1
0
        public void SectionToken_Uniqueness()
        {
            var str     = new StringSlice("foo");
            var literal = new LiteralToken
            {
                Content = new[] { str },
                ContentStartPosition = 0,
                ContentEndPosition   = 2,
                Indent       = 0,
                IsClosed     = true,
                IsWhitespace = false
            };

            var blockToken = new SectionToken();

            blockToken.Children.Add(literal);

            var blockToken2 = new SectionToken();

            blockToken2.Children.Add(literal);

            Assert.False(blockToken.Equals(null));
            Assert.StrictEqual(blockToken, blockToken2);
            Assert.Equal(blockToken.GetHashCode(), blockToken2.GetHashCode());
        }
示例#2
0
        /// <summary>
        /// Tries to open a section tag using the slice
        /// </summary>
        /// <param name="processor">The processor</param>
        /// <param name="slice">The slice</param>
        /// <returns>The result of the match</returns>
        public override ParserState TryOpenBlock(Processor processor, ref StringSlice slice)
        {
            var tagStart = slice.Start - processor.CurrentTags.StartTag.Length;
            var index    = slice.Start;

            while (slice[index].IsWhitespace())
            {
                index++;
            }

            var match = slice[index];

            if (match == OpeningTagDelimiter)
            {
                slice.Start = index + 1; // Skip delimiter

                while (slice.CurrentChar.IsWhitespace())
                {
                    slice.NextChar();
                }

                var startIndex = slice.Start;

                // Take characters until closing tag
                while (!slice.IsEmpty && !slice.Match(processor.CurrentTags.EndTag))
                {
                    slice.NextChar();
                }

                var sectionName          = slice.ToString(startIndex, slice.Start).TrimEnd();
                var contentStartPosition = slice.Start + processor.CurrentTags.EndTag.Length;

                var sectionTag = new SectionToken
                {
                    SectionName          = sectionName,
                    StartPosition        = tagStart,
                    ContentStartPosition = contentStartPosition,
                    Parser   = this,
                    IsClosed = false
                };

                processor.CurrentToken = sectionTag;

                slice.Start = contentStartPosition;

                return(ParserState.Break);
            }

            return(ParserState.Continue);
        }
示例#3
0
        public void It_Can_Render_Multiple_IEnumerators()
        {
            const string result   = "abcabc";
            var          settings = new RendererSettingsBuilder().BuildSettings();

            // Get Enumerator doesn't exist on string (netstandard 1.3)
            // will be added back in netstandard 2.0
            var enumerator = "abc".ToCharArray().GetEnumerator();

            var context = new Context(
                new
            {
                list = enumerator
            },
                settings,
                settings.RenderSettings);

            var stringRenderer       = new StringRender(StreamWriter, settings.RendererPipeline);
            var sectionTokenRenderer = new SectionTokenRenderer();

            var sectionToken = new SectionToken
            {
                SectionName = "list",
                Children    = new List <MustacheToken>
                {
                    new InterpolationToken {
                        Content = new StringSlice(".")
                    },
                }
            };

            sectionTokenRenderer.Write(stringRenderer, sectionToken, context);
            sectionTokenRenderer.Write(stringRenderer, sectionToken, context);

            StreamWriter.Flush();
            MemStream.Position = 0;
            var sr    = new StreamReader(MemStream);
            var myStr = sr.ReadToEnd();

            Assert.Equal(result, myStr);
        }