Пример #1
0
        public ParserReader(List<MarkupRuleBase> rules, InputReader reader)
        {
            if(reader == null)
                throw new ArgumentNullException("reader");

            _rules = rules;
            Input = reader;
        }
Пример #2
0
        public void CanReadName_AutomaticlyMakesAnInitialReadOnStart()
        {
            var input = new StringReader("so-me_na:me other text");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.AreEqual("so-me_na:me", reader.ReadName());
            Assert.AreEqual(11, reader.Index);
        }
Пример #3
0
        public void CanReadOnlyOneChar()
        {
            var input = new StringReader("a");
            var reader = new InputReader(input);

            Assert.True(reader.ReadNextLine());
            Assert.True(reader.Read());
            Assert.AreEqual('a',reader.CurrentChar);
            Assert.False(reader.Read());
        }
Пример #4
0
        public void CanReadName()
        {
            var input = new StringReader("so-me_na:me other text");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.True(reader.Read());

            Assert.AreEqual("so-me_na:me", reader.ReadName());
            Assert.AreEqual(11,reader.Index);
        }
Пример #5
0
        internal DocumentNode Parse(InputReader reader)
        {
            var document = new DocumentNode();
            _rules.Add(new MetaMarkupRule(document));
            var parserReader = new ParserReader(_rules, reader);

            while(parserReader.Read())
            {
                var node = parserReader.ParseNode();
                if(node != null)
                    document.Childs.Add(node);
            }

            return document;
        }
Пример #6
0
        public void CanReadLineWithIndent()
        {
            var input = new StringReader("  ab");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.True(reader.Read());
            Assert.AreEqual('a', reader.CurrentChar);
            Assert.AreEqual(0, reader.LineNumber);
            Assert.AreEqual(2, reader.Index);
            Assert.True(reader.Read());
            Assert.AreEqual('b', reader.CurrentChar);
            Assert.AreEqual(0, reader.LineNumber);
            Assert.AreEqual(3, reader.Index);
            Assert.False(reader.Read());
        }
Пример #7
0
        public void CanReadNextLineAndReadIfEndOfStream()
        {
            var input = new StringReader("a\n  bc\nd");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.True(reader.Read());
            Assert.AreEqual('a', reader.CurrentChar);
            Assert.False(reader.Read());
            Assert.True(reader.ReadNextLineAndReadIfEndOfStream());
            Assert.AreEqual('b', reader.CurrentChar);
            Assert.True(reader.Read());
            Assert.AreEqual('c', reader.CurrentChar);
            Assert.False(reader.Read());
            Assert.False(reader.Read());
            Assert.True(reader.ReadNextLineAndReadIfEndOfStream());
            Assert.AreEqual('d', reader.CurrentChar);
            Assert.False(reader.Read());
            Assert.False(reader.ReadNextLineAndReadIfEndOfStream());
            Assert.False(reader.Read());
        }
Пример #8
0
        public void CanReadToEnd()
        {
            var input = new StringReader("abc\nxyz");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.True(reader.Read());
            Assert.True(reader.Read()); // skip first char
            Assert.AreEqual("bc", reader.ReadToEnd());
            Assert.AreEqual(0,reader.LineNumber);
            Assert.AreEqual(3,reader.Index);
        }
Пример #9
0
        public void EmptyStringReturnReadFalse()
        {
            var input = new StringReader("");
            var reader = new InputReader(input);
            reader.ReadNextLine();

            Assert.False(reader.Read());
        }
Пример #10
0
        public void CanReadToEnd_AutomaticlyMakesAnInitialReadOnStart()
        {
            var input = new StringReader("abc\nxyz");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.AreEqual("abc", reader.ReadToEnd());
            Assert.AreEqual(0, reader.LineNumber);
            Assert.AreEqual(3, reader.Index);
        }
Пример #11
0
        public void CanReadWithSkiplist()
        {
            var input = new StringReader("abcdef");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());
            Assert.True(reader.Read());

            Assert.True(reader.Read());
            Assert.True(reader.Skip("bc"));
            Assert.AreEqual('d', reader.CurrentChar);
            Assert.AreEqual(3, reader.Index);
        }
Пример #12
0
        public void CanReadWhiteSpaces_AutomaticlyMakesAnInitialReadOnStart()
        {
            var input = new StringReader("  abc");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            reader.SkipWhiteSpaces();
            Assert.AreEqual('a', reader.CurrentChar);
            Assert.AreEqual(2, reader.Index);
        }
Пример #13
0
        public void CanReadWhiteSpaces()
        {
            var input = new StringReader("a  bc");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.True(reader.Read());
            Assert.True(reader.Read());
            reader.SkipWhiteSpaces();
            Assert.AreEqual('b',reader.CurrentChar);
            Assert.AreEqual(3,reader.Index);
        }
Пример #14
0
        public void CanReadWhile_AutomaticlyMakesAnInitialReadOnStart()
        {
            var input = new StringReader("123bcdef");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.AreEqual("123", reader.ReadWhile(Char.IsNumber));
            Assert.AreEqual(3, reader.Index);
        }
Пример #15
0
        public void CanReadWhile()
        {
            var input = new StringReader("a123bcdef");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.True(reader.Read());
            Assert.True(reader.Read());
            Assert.AreEqual("123",reader.ReadWhile(Char.IsNumber));
            Assert.AreEqual(4,reader.Index);
        }
Пример #16
0
        public void CanReadTwoLines()
        {
            var input = new StringReader("abc\nxyz");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.True(reader.Read());
            Assert.AreEqual('a', reader.CurrentChar);
            Assert.AreEqual(0, reader.LineNumber);
            Assert.AreEqual(0, reader.Index);
            Assert.True(reader.Read());
            Assert.AreEqual('b', reader.CurrentChar);
            Assert.AreEqual(0, reader.LineNumber);
            Assert.AreEqual(1, reader.Index);
            Assert.True(reader.Read());
            Assert.AreEqual('c', reader.CurrentChar);
            Assert.AreEqual(0, reader.LineNumber);
            Assert.AreEqual(2, reader.Index);
            Assert.False(reader.Read());
            Assert.False(reader.Read());

            Assert.True(reader.ReadNextLine());
            Assert.True(reader.Read());
            Assert.AreEqual('x', reader.CurrentChar);
            Assert.AreEqual(1, reader.LineNumber);
            Assert.AreEqual(0, reader.Index);
            Assert.True(reader.Read());
            Assert.AreEqual('y', reader.CurrentChar);
            Assert.AreEqual(1, reader.LineNumber);
            Assert.AreEqual(1, reader.Index);
            Assert.True(reader.Read());
            Assert.AreEqual('z', reader.CurrentChar);
            Assert.AreEqual(1, reader.LineNumber);
            Assert.AreEqual(2, reader.Index);
            Assert.False(reader.Read());
        }
Пример #17
0
        private static TagNode ReadTagNode(InputReader reader)
        {
            var operatorInfo = reader.SourceInfo;

            if(reader.CurrentChar == '%')
            {
                reader.Skip("%");

                var name = reader.ReadNameEscaped();

                return new TagNode(name) { StartInfo = operatorInfo, OperatorInfo = operatorInfo };
            }

            return new TagNode("div") { StartInfo = operatorInfo, OperatorInfo = operatorInfo };
        }
Пример #18
0
        public void CanReadWithSkiplist_AutomaticlyMakesAnInitialReadOnStart()
        {
            var input = new StringReader("abcdef");
            var reader = new InputReader(input);
            Assert.True(reader.ReadNextLine());

            Assert.True(reader.Skip("ab"));
            Assert.AreEqual('c', reader.CurrentChar);
            Assert.AreEqual(2, reader.Index);
        }