예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }