public void TextNavigator_SkipChar_2()
        {
            TextNavigator navigator = new TextNavigator("123456");

            Assert.IsTrue(navigator.SkipChar(3));
            Assert.AreEqual('4', navigator.ReadChar());
            Assert.IsFalse(navigator.SkipChar(3));
            Assert.IsTrue(navigator.IsEOF);
        }
        public void TextNavigator_SkipChar_3()
        {
            char[]        allowed   = { '1', '2' };
            TextNavigator navigator = new TextNavigator("123456");

            Assert.IsTrue(navigator.SkipChar(allowed));
            Assert.IsTrue(navigator.SkipChar(allowed));
            Assert.IsFalse(navigator.SkipChar(allowed));
            Assert.AreEqual('3', navigator.ReadChar());
        }
        public void TextNavigator_SkipChar_1()
        {
            TextNavigator navigator = new TextNavigator("111234");

            Assert.IsTrue(navigator.SkipChar('1'));
            Assert.IsTrue(navigator.SkipChar('1'));
            Assert.IsTrue(navigator.SkipChar('1'));
            Assert.AreEqual('2', navigator.ReadChar());
            Assert.IsFalse(navigator.SkipChar('1'));
        }
        public static Parameter[] ParseString
        (
            [NotNull] string text
        )
        {
            Sure.NotNull(text, nameof(text));

            List <Parameter> result    = new List <Parameter>();
            TextNavigator    navigator = new TextNavigator(text);

            navigator.SkipWhitespace();

            while (!navigator.IsEOF)
            {
                while (true)
                {
                    bool flag = false;
                    if (navigator.IsWhiteSpace())
                    {
                        flag = true;
                        navigator.SkipWhitespace();
                    }
                    if (navigator.PeekChar() == ValueSeparator)
                    {
                        flag = true;
                        navigator.SkipChar(ValueSeparator);
                    }
                    if (!flag)
                    {
                        break;
                    }
                }

                string name = navigator.ReadEscapedUntil
                              (
                    EscapeCharacter,
                    NameSeparator
                              );
                if (ReferenceEquals(name, null))
                {
                    break;
                }
                name = name.Trim();

                navigator.SkipWhitespace();

                string value = navigator.ReadEscapedUntil
                               (
                    EscapeCharacter,
                    ValueSeparator
                               );
                Parameter parameter = new Parameter(name, value);
                result.Add(parameter);
            }

            return(result.ToArray());
        }
        public void TextNavigator_Line_1()
        {
            const string  text      = "ABC\nDEF";
            TextNavigator navigator = new TextNavigator(text);

            Assert.AreEqual(1, navigator.Line);
            navigator.ReadChar();
            Assert.AreEqual(1, navigator.Line);
            navigator.SkipChar(3);
            Assert.AreEqual(2, navigator.Line);
        }
        public void TextNavigator_IsEOF_1()
        {
            const string  text      = "ABC";
            TextNavigator navigator = new TextNavigator(text);

            Assert.IsFalse(navigator.IsEOF);
            navigator.ReadChar();
            Assert.IsFalse(navigator.IsEOF);
            navigator.SkipChar(2);
            Assert.IsTrue(navigator.IsEOF);
        }