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); } }
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."); } } }
public ConditionExpression(FTSQueryParserOptions options) : this() { this.options = options; }
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; }