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_ReadEscapedUntil_1()
        {
            const string  text      = "AB[tC]D";
            TextNavigator navigator = new TextNavigator(text);
            string        expected  = "ABtC";
            string        actual    = navigator.ReadEscapedUntil('[', ']');

            Assert.AreEqual(expected, actual);
            Assert.AreEqual('D', navigator.ReadChar());
            Assert.IsNull(navigator.ReadEscapedUntil('[', ']'));
        }
        public void TextNavigator_ReadEscapedUntil_3()
        {
            const string  text      = "AB[";
            TextNavigator navigator = new TextNavigator(text);

            navigator.ReadEscapedUntil('[', ']');
        }