Пример #1
0
        private Token ReaderComment(CharIterator reader)
        {
            var isMulti = reader.NextIs('*');
            var i       = isMulti ? reader.IndexOf("*/") : reader.IndexOf("\n");
            var start   = reader.Position + 2;
            var end     = i < 0 ? reader.Length : i - 1;
            var content = reader.ReadSeek(start, end - start);

            reader.Position = i < 0 ? reader.Length : i + 1;
            return(new Token()
            {
                Type = TokenType.Comment, Content = content
            });
        }
Пример #2
0
        private bool IsBlock(CharIterator reader)
        {
            var endIndex = reader.IndexOf('}');

            if (endIndex < 0)
            {
                return(false);
            }
            var lineIndex = reader.IndexOf('\n');

            if (lineIndex > 0 && endIndex > lineIndex)
            {
                return(false);
            }
            var startIndex = reader.IndexOf('{', 1);

            return(startIndex > endIndex);
        }
Пример #3
0
        private Token ReaderValue(CharIterator reader)
        {
            var end     = reader.IndexOf('}');
            var content = reader.Read(end - reader.Position - 1, 1);

            reader.Position = end;
            return(new Token()
            {
                Type = content.IndexOf('~') >= 0 ? TokenType.Random : TokenType.Value, Content = content
            });
        }
Пример #4
0
        private Token ReaderIntFor(CharIterator reader)
        {
            var end     = reader.IndexOf('}');
            var content = reader.Read(end - reader.Position - 1, 1);

            reader.Position = end;
            return(new BlockToken()
            {
                Type = TokenType.IntFor,
                Content = content,
                Children = RenderBlockInner(reader, true)
            });
        }
Пример #5
0
        private Token ReaderFor(CharIterator reader)
        {
            var end     = reader.IndexOf('}');
            var start   = reader.Position + (reader.NextIs('~') ? 2 : 4);
            var content = reader.ReadSeek(start, end - start);

            reader.Position = end;
            return(new BlockToken()
            {
                Type = TokenType.For,
                Content = content,
                Children = RenderBlockInner(reader, true)
            });
        }