Exemplo n.º 1
0
        public FTSQueryParser(string condition, FTSQueryParserOptions options)
        {
            this.condition = condition;
            this.options   = options;

            // THERE IS A FLAW IN THE HANDLING OF HYPHENS WHEN IT IS PART OF A WORD
            // WE CAN PUT PLACEHOLDER TEXT IN FOR THE HYPHEN - MESSY BUT WORKS
            string          tempCondition = Regex.Replace(condition, "([A-Za-z0-9])-([A-Za-z0-9])", "${1}hyphenplaceholder${2}");
            ConditionParser parser        = new ConditionParser(tempCondition, options);

            string tempNormalForm = parser.RootExpression.ToString().Replace("hyphenplaceholder", "-");

            normalForm = tempNormalForm;

            searchTerms = new List <string>();

            foreach (ConditionExpression exp in parser.RootExpression)
            {
                if (exp.IsSubexpression)
                {
                    continue;
                }
                if (exp.Term.Length == 0)
                {
                    continue;
                }
                string tempTerm = exp.Term.Replace("hyphenplaceholder", "-");
                searchTerms.Add(tempTerm);
            }
        }
Exemplo n.º 2
0
            public ConditionParser(String condition, FTSQueryParserOptions options)
            {
                ConditionStream stream = new ConditionStream(condition, options);

                this.options = options;

                rootExpression    = new ConditionExpression(options);
                currentExpression = rootExpression;

                Reset();

                while (stream.Read())
                {
                    if (ConditionOperator.IsSymbol(stream.Current))
                    {
                        PutToken();
                        SetToken(stream.Current);
                        PutToken();
                        continue;
                    }
                    switch (stream.Current)
                    {
                    case ' ': PutToken(); continue;

                    case '(': PushExpression(); continue;

                    case ')': PopExpression(); continue;

                    case '"':
                        PutToken();
                        inQuotes = true;
                        SetToken(stream.ReadQuote());
                        PutToken();
                        inQuotes = false;
                        continue;
                    }
                    AddToken(stream.Current);
                }
                PutToken();

                if (!object.ReferenceEquals(rootExpression, currentExpression))
                {
                    if ((options & FTSQueryParserOptions.ThrowOnUnbalancedParens) != 0)
                    {
                        throw new InvalidOperationException("Unbalanced parentheses.");
                    }
                }
            }
Exemplo n.º 3
0
 public ConditionExpression(FTSQueryParserOptions options)
     : this()
 {
     this.options = options;
 }
Exemplo n.º 4
0
 public ConditionStream(string condition, FTSQueryParserOptions options)
 {
     this.options   = options;
     this.condition = Regex.Replace((condition ?? String.Empty), @"\x09|\x0D|\x0A|[\x01-\x08]|\x10|[\x0B-\x0C]|[\x0E-\x1F]", " ");
     index          = -1;
 }