Esempio n. 1
0
        public void PartialToken_Uniqueness()
        {
            var partialToken = new PartialToken
            {
                Content = new StringSlice("partial"),
                Indent  = 0,
                ContentStartPosition = 0,
                ContentEndPosition   = 6,
                IsClosed             = true,
                TagStartPosition     = 0,
                TagEndPosition       = 6
            };

            var partialToken2 = new PartialToken
            {
                Content = new StringSlice("partial"),
                Indent  = 0,
                ContentStartPosition = 0,
                ContentEndPosition   = 6,
                IsClosed             = true,
                TagStartPosition     = 0,
                TagEndPosition       = 6
            };

            Assert.False(partialToken.Equals(null));
            Assert.Equal(partialToken, partialToken2);
            Assert.Equal(partialToken.GetHashCode(), partialToken2.GetHashCode());
        }
Esempio n. 2
0
        public override Token Parse(TextReader reader)
        {
            PartialToken token = null;

            if ((char)reader.Peek() == '>')
            {
                token = Token.Partial();
            }
            return(token);
        }
        public override Token Parse(ExtendedStringReader reader)
        {
            PartialToken token = null;

            if ((char)reader.Peek() == '>')
            {
                token = Token.Partial(reader.GetContext());
            }
            return(token);
        }
Esempio n. 4
0
        /// <summary>
        /// Tries to match partial tag from the current slice
        /// </summary>
        /// <param name="processor">The processor</param>
        /// <param name="slice">The slice</param>
        /// <returns>If a match was found</returns>
        public override bool Match(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 == TagId)
            {
                index++;
                while (slice[index].IsWhitespace())
                {
                    index++;
                }

                slice.Start = index;
                var startIndex = slice.Start;
                var partialTag = new PartialToken
                {
                    LineIndent           = processor.HasSeenNonSpaceOnLine ? 0 : processor.LineIndent,
                    TagStartPosition     = tagStart,
                    ContentStartPosition = startIndex,
                    IsClosed             = false
                };
                processor.CurrentToken = partialTag;

                while (!slice.IsEmpty && !slice.Match(processor.CurrentTags.EndTag))
                {
                    slice.NextChar();
                }

                if (slice.IsEmpty)
                {
                    return(false);
                }

                var content = new StringSlice(slice.Text, startIndex, slice.Start - 1);
                content.TrimEnd();
                var contentEnd = content.End + 1;

                partialTag.ContentEndPosition = contentEnd;
                partialTag.TagEndPosition     = slice.Start + processor.CurrentTags.EndTag.Length;
                partialTag.IsClosed           = true;
                slice.Start += processor.CurrentTags.EndTag.Length;
                return(true);
            }

            return(false);
        }