LibNbt.Queries.TagQuery.SetQuery C# (CSharp) Method

SetQuery() public method

public SetQuery ( string query ) : void
query string
return void
        public void SetQuery(string query)
        {
            Query = query;

            if (string.IsNullOrEmpty(Query)) { throw new ArgumentException("You must provide a query.", "query"); }
            if (!Query.StartsWith("/")) { throw new ArgumentException("The query must begin with a \"/\".", "query"); }

            Tokens.Clear();
            CurrentTokenIndex = -1;

            var escapingChar = false;
            TagQueryToken token = null;
            var sbToken = new StringBuilder();
            for (var idx = 0; idx < query.Length; idx++)
            {
                if (escapingChar)
                {
                    sbToken.Append(query[idx]);
                    escapingChar = false;
                    continue;
                }

                if (query[idx] == '/')
                {
                    if (token != null)
                    {
                        token.Name = sbToken.ToString();
                        Tokens.Add(token);
                    }

                    token = new TagQueryToken {Query = this};
                    sbToken.Length = 0;
                    continue;
                }

                if (query[idx] == '\\')
                {
                    escapingChar = true;
                    continue;
                }

                sbToken.Append(query[idx]);
            }
            if (token != null)
            {
                token.Name = sbToken.ToString();
                Tokens.Add(token);
            }
        }

Usage Example

Beispiel #1
0
        public void MovingBetweenTokens()
        {
            var query = new TagQuery();
            TagQueryToken token;

            query.SetQuery("/first/second/third/fourth/fifth/sixth");
            Assert.AreEqual(6, query.Count());
            Assert.AreEqual(6, query.TokensLeft());
            token = query.Previous();
            Assert.IsNull(token);
            Assert.AreEqual(6, query.TokensLeft());
            token = query.Next();
            Assert.AreEqual("first", token.Name);
            Assert.AreEqual(5, query.TokensLeft());
            token = query.Next();
            Assert.AreEqual("second", token.Name);
            Assert.AreEqual(4, query.TokensLeft());
            token = query.Next();
            Assert.AreEqual("third", token.Name);
            Assert.AreEqual(3, query.TokensLeft());
            token = query.Previous();
            Assert.AreEqual("second", token.Name);
            Assert.AreEqual(4, query.TokensLeft());
            token = query.Next();
            Assert.AreEqual("third", token.Name);
            Assert.AreEqual(3, query.TokensLeft());
            token = query.Peek();
            Assert.AreEqual("fourth", token.Name);
            Assert.AreEqual(3, query.TokensLeft());
            token = query.Next();
            Assert.AreEqual("fourth", token.Name);
            Assert.AreEqual(2, query.TokensLeft());
            token = query.Next();
            Assert.AreEqual("fifth", token.Name);
            Assert.AreEqual(1, query.TokensLeft());
            token = query.Next();
            Assert.AreEqual("sixth", token.Name);
            Assert.AreEqual(0, query.TokensLeft());
            token = query.Next();
            Assert.IsNull(token);
            Assert.AreEqual(0, query.TokensLeft());
            token = query.Previous();
            Assert.AreEqual("fifth", token.Name);
            Assert.AreEqual(1, query.TokensLeft());
            query.MoveFirst();
            Assert.AreEqual(6, query.TokensLeft());
            token = query.Next();
            Assert.AreEqual("first", token.Name);
            Assert.AreEqual(5, query.TokensLeft());
        }
All Usage Examples Of LibNbt.Queries.TagQuery::SetQuery